{"version":3,"file":"murmur.umd.cjs","names":["getCurrentInstance$1","getCurrentInstance","isObject","inject","ref","computed","shallowRef","omit","computed","toValue","getCurrentScope","isClient","toString","isObject","noop","createFilterWrapper","isRef","toValue","toArray","effectScope","computed","watchImmediate","watch","defaultWindow","defaultDocument","unrefElement","useEventListener","unref","shallowRef","useMouse","computed","toValue","computed","openBlock","createBlock","resolveDynamicComponent","unref","normalizeClass","computed","omit","openBlock","createBlock","mergeProps","resolveDynamicComponent","normalizeClass","unref","withCtx","renderSlot","createTextVNode","toDisplayString","useSlots","createCommentVNode","normalizeProps","readonly","toRef","computed","getCurrentInstance","resolveDynamicComponent","toValue","useAttrs","inject","openBlock","createBlock","unref","mergeProps","withCtx","renderSlot","_hoisted_1","useSlots","computed","openBlock","createBlock","resolveDynamicComponent","unref","normalizeClass","withCtx","createElementBlock","renderSlot","createTextVNode","toDisplayString","createCommentVNode","useTemplateRef","useModel","computed","openBlock","createBlock","resolveDynamicComponent","mergeProps","unref","withCtx","renderSlot","createElementBlock","Fragment","createTextVNode","toDisplayString","createCommentVNode","createVNode","ResizeObserver","getCurrentInstance","getCurrentScope","hasInjectionContext","inject","isObject","watch","toValue","computed","unref","isObject","shallowRef","getCurrentInstance","hasInjectionContext","useId","computed","toValue","noop","ref","computed","inject","readonly","getCurrentInstance","noop","defineComponent","h","Teleport","min","max","round","floor","clamp","Vue","set","import_vue","toValue$1","_hoisted_1","_hoisted_2","useSlots","useAttrs","useModel","ref","useTemplateRef","computed","toRef","toValue","openBlock","createElementBlock","Fragment","createElementVNode","unref","renderSlot","normalizeProps","guardReactiveProps","createVNode","withCtx","createBlock","Transition","mergeProps","withDirectives","normalizeClass","normalizeStyle","createTextVNode","toDisplayString","createCommentVNode","vShow","resolveActiveStatus","resolveContent","resolveDirectiveProps","bind","h","unbind","resolveActiveStatus","resolveContent","resolveDirectiveProps","resolveDirectiveProps","useSlots","useModel","computed","useTemplateRef","openBlock","createBlock","mergeProps","createSlots","withCtx","renderSlot","normalizeProps","guardReactiveProps","defineComponent","h","computed","openBlock","createBlock","resolveDynamicComponent","mergeProps","unref","withCtx","createVNode","renderSlot","format","isObject","create","isArray","isFunction","isString","toDisplayString","errorMessages","format","EOF","linked","transform","isString","baseCompile","initFeatureFlags","isObject","format","plural","format$1","create","isString","errorMessages","isFunction","isArray","warnMessages","getWarnMessage","VERSION","number","toDisplayString","now","now","this","format","isObject","create","isArray","createVNode","Text","getCurrentInstance","Vue","ref","shallowRef","isString","isFunction","computed","number","Fragment","defineComponent","h","watch","getCurrentScope","effectScope","inject","isRef","exports","module","$t","Fragment","computed","toValue","useSlots","useAttrs","useModel","inject","ref","computed","useTemplateRef","openBlock","createBlock","resolveDynamicComponent","unref","mergeProps","withCtx","renderSlot","createCommentVNode","createElementBlock","normalizeClass","_hoisted_1","_hoisted_2","toRef","normalizeProps","createElementVNode","Fragment","renderList","withKeys","withModifiers","createTextVNode","toDisplayString","_hoisted_1","_hoisted_2","computed","openBlock","createBlock","resolveDynamicComponent","unref","normalizeClass","withCtx","renderSlot","createElementBlock","createElementVNode","toDisplayString","createCommentVNode","computed","toValue","noop","toValue","computed","toValue","inject","computed","_hoisted_1","useModel","useTemplateRef","inject","computed","openBlock","createElementBlock","unref","normalizeClass","u","f","Oe","A","K","ve","yn","In","pn","rt","gn","Sn","B","z","u","f","d","_","m","p","w","k","y","O","I","C","ue","c","B","te","a","D","ae","de","ne","le","r","f","I","i","u","d","m","h","z","T","ie","re","ce","F","se","oe","fe","$t","namespaces","namespace","selector","Selection","selectorAll","Selection","find","matcher","Selection","Selection","sparse","constant","Selection","Selection","sparse","Selection","ascending","Selection","attrRemove","attrRemoveNS","attrConstant","attrConstantNS","attrFunction","attrFunctionNS","namespace","styleRemove","styleConstant","styleFunction","defaultView","textConstant","textFunction","creator","creator","selector","parseTypenames","defaultView","Selection","selection_select","selection_selectAll","selection_selectChild","selection_selectChildren","selection_filter","selection_data","selection_enter","selection_exit","selection_join","selection_merge","selection_order","selection_sort","selection_call","selection_nodes","selection_node","selection_size","selection_empty","selection_each","selection_attr","selection_style","selection_property","selection_classed","selection_text","selection_html","selection_raise","selection_lower","selection_append","selection_insert","selection_remove","selection_clone","selection_datum","selection_on","selection_dispatch","selection_iterator","Selection","select","creator","sourceEvent","formatDecimalParts","formatDecimalParts","re","formatSpecifier","FormatSpecifier","prefixExponent","formatDecimalParts","formatDecimalParts","formatDecimal","formatRounded","formatPrefixAuto","map","prefixes","identity","formatGroup","formatNumerals","formatSpecifier","formatTypes","formatTrim","prefixExponent","exponent","locale","format","formatPrefix","defaultLocale","formatLocale","zero","number","number","max","linear","constant","rgb","colorRgb","basis","basisClosed","value","value","number","constant","number","rgb","string","date","numberArray","object","degrees","identity","identity","decompose","number","epsilon2","sequence","number","identity","constant","bisect","copy","transformer","interpolateValue","interpolateNumber","number","interpolateRound","formatDecimal","formatRounded","formatPrefixAuto","identity","formatGroup","formatNumerals","formatTypes","formatTrim","exponent","locale","defaultLocale","formatLocale","exponent","exponent","exponent","precisionPrefix","precisionRound","precisionFixed","copy","transformer","copy","transformer","copy","identity","transformer","copy","sqrt","number","formatYear","pad","locale","number","copy","timeWeek","timeSecond","utcWeek","utcSecond","transformer","identity","interpolate","interpolateRound","csv","dsv","tsv","dsv","text","epsilon","identity","colors","pi","tau","epsilon","append","appendRound","constant","curveLinear","x","pointX","y","pointY","array","noop","get","set","nopropagation","select","noevent","defaultFilter","defaultTouchable","pointer","constant","epsilon2","pi","halfPi","quarterPi","tau","degrees","radians","abs","sign","sqrt","sqrt","abs","pi","tau","compose","tau","abs","pointEqual","abs","pi","sign","tau","halfPi","quarterPi","clipBuffer","polygonContains","halfPi","clip","pi","halfPi","abs","radians","abs","pi","pointEqual","sqrt","clip","abs","clipBuffer","clipLine","lengthSum","lengthStream","lengthPointFirst","radians","lengthPoint","abs","sqrt","object","length","abs","x00","y00","x0","y0","abs","x0","y0","x00","y00","x0","y0","sqrt","tau","sqrt","pathArea","pathMeasure","pathBounds","pathCentroid","identity","radians","sqrt","abs","radians","clipAntimeridian","identity","degrees","clipCircle","resample","sqrt","compose","get","set","timeout","set","get","interpolateNumber","interpolateRgb","interpolateString","namespace","interpolateTransform","interpolate","namespace","get","get","get","matcher","set","get","selector","get","selectorAll","get","style","set","interpolateTransform","interpolate","get","set","transition_select","transition_selectAll","transition_filter","transition_merge","transition_selection","transition_transition","transition_on","transition_attr","transition_attrTween","transition_style","transition_styleTween","transition_text","transition_textTween","transition_remove","transition_tween","transition_delay","transition_duration","transition_ease","transition_easeVarying","transition_end","easeCubicInOut","selection_interrupt","selection_transition","interpolateZoom","select","pointer","constant","identity","transform"],"sources":["../../lib/composables/useAccordion.ts","../../lib/keys.ts","../../lib/components/Accordion/AccordionWrapper.vue","../../lib/components/Accordion/AccordionWrapper.vue","../../node_modules/bootstrap-vue-next/dist/dom-AhkaSoh8.mjs","../../node_modules/bootstrap-vue-next/dist/keys-DU7sQgl3.mjs","../../node_modules/bootstrap-vue-next/dist/useDefaults-DseelK6y.mjs","../../node_modules/bootstrap-vue-next/dist/object-CHQkkner.mjs","../../node_modules/bootstrap-vue-next/dist/useColorVariantClasses-CqeXHjRh.mjs","../../node_modules/bootstrap-vue-next/dist/dist-Dk9C_HFS.mjs","../../node_modules/bootstrap-vue-next/dist/useRadiusElementClasses-BW832F7F.mjs","../../node_modules/bootstrap-vue-next/dist/BImg-QBS2ECBc.mjs","../../node_modules/bootstrap-vue-next/dist/BCard-CHbKv2OR.mjs","../../node_modules/bootstrap-vue-next/dist/stringUtils-D4eEDlt1.mjs","../../node_modules/bootstrap-vue-next/dist/BLink-Dfgte6dQ.mjs","../../node_modules/bootstrap-vue-next/dist/BSpinner-CUfGqviV.mjs","../../node_modules/bootstrap-vue-next/dist/BButton-PY7AANXJ.mjs","../../lib/enums.ts","../../lib/composables/useSlideUpDown.ts","../../lib/components/SlideUpDown/SlideUpDown.vue","../../lib/components/SlideUpDown/SlideUpDown.vue","../../lib/components/Accordion/AccordionStep.vue","../../lib/components/Accordion/AccordionStep.vue","../../node_modules/lodash/isObject.js","../../node_modules/lodash/_freeGlobal.js","../../node_modules/lodash/_root.js","../../node_modules/lodash/now.js","../../node_modules/lodash/_trimmedEndIndex.js","../../node_modules/lodash/_baseTrim.js","../../node_modules/lodash/_Symbol.js","../../node_modules/lodash/_getRawTag.js","../../node_modules/lodash/_objectToString.js","../../node_modules/lodash/_baseGetTag.js","../../node_modules/lodash/isObjectLike.js","../../node_modules/lodash/isSymbol.js","../../node_modules/lodash/toNumber.js","../../node_modules/lodash/debounce.js","../../node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js","../../lib/composables/useResizeObserver.ts","../../lib/utils/animation.ts","../../lib/composables/useActiveTextTruncate.ts","../../lib/components/ActiveTextTruncate/ActiveTextTruncate.vue","../../lib/components/ActiveTextTruncate/ActiveTextTruncate.vue","../../node_modules/lodash/isArray.js","../../node_modules/lodash/isString.js","../../lib/components/Brand/Brand.vue","../../lib/components/Brand/Brand.vue","../../lib/components/Brand/BrandExpansionShort.vue","../../lib/components/Brand/BrandExpansionShort.vue","../../lib/components/Brand/BrandExpansionMedium.vue","../../lib/components/Brand/BrandExpansionMedium.vue","../../lib/components/Brand/BrandExpansionLong.vue","../../lib/components/Brand/BrandExpansionLong.vue","../../node_modules/@vueuse/shared/dist/index.js","../../node_modules/@vueuse/core/dist/index.js","../../lib/composables/useBrandExpansion.ts","../../lib/components/Brand/BrandExpansion.vue","../../lib/components/Brand/BrandExpansion.vue","../../node_modules/bootstrap-vue-next/dist/useId-D1sqXtwx.mjs","../../node_modules/bootstrap-vue-next/dist/classes-B0E5Y78Y.mjs","../../node_modules/bootstrap-vue-next/dist/functions-BcMenQqL.mjs","../../node_modules/bootstrap-vue-next/dist/useShowHide-CBFt1_EW.mjs","../../node_modules/bootstrap-vue-next/dist/ConditionalTeleport-B4KYZIM6.mjs","../../node_modules/bootstrap-vue-next/dist/chunk-D1SwGrFN.mjs","../../node_modules/bootstrap-vue-next/dist/floating-ui.vue-CH2o_mZU.mjs","../../node_modules/bootstrap-vue-next/dist/getElement-D2Jr1cbp.mjs","../../node_modules/bootstrap-vue-next/dist/floatingUi-62aeQtAb.mjs","../../node_modules/bootstrap-vue-next/dist/utils-CWvndqPg.mjs","../../node_modules/bootstrap-vue-next/dist/src/directives/BTooltip/index.mjs","../../node_modules/bootstrap-vue-next/dist/BTooltip-CVP8HdkU.mjs","../../node_modules/lodash/_arrayMap.js","../../node_modules/lodash/_baseToString.js","../../node_modules/lodash/toString.js","../../node_modules/lodash/uniqueId.js","../../lib/composables/useAppIcon.ts","../../lib/components/App/AppIcon.vue","../../lib/components/App/AppIcon.vue","../../node_modules/bootstrap-vue-next/dist/ConditionalWrapper-Dbc_O6qe.mjs","../../node_modules/bootstrap-vue-next/dist/BBadge-Cx_CdauK.mjs","../../lib/components/Button/ButtonIconCounter.vue","../../lib/components/Button/ButtonIconCounter.vue","../../lib/utils/size.ts","../../lib/components/Button/ButtonIcon.vue","../../lib/components/Button/ButtonIcon.vue","../../node_modules/lodash/noop.js","../../lib/composables/useConfirmButton.ts","../../lib/components/Button/ButtonConfirm.vue","../../lib/components/Button/ButtonConfirm.vue","../../node_modules/lodash/_isKey.js","../../node_modules/lodash/isFunction.js","../../node_modules/lodash/_coreJsData.js","../../node_modules/lodash/_isMasked.js","../../node_modules/lodash/_toSource.js","../../node_modules/lodash/_baseIsNative.js","../../node_modules/lodash/_getValue.js","../../node_modules/lodash/_getNative.js","../../node_modules/lodash/_nativeCreate.js","../../node_modules/lodash/_hashClear.js","../../node_modules/lodash/_hashDelete.js","../../node_modules/lodash/_hashGet.js","../../node_modules/lodash/_hashHas.js","../../node_modules/lodash/_hashSet.js","../../node_modules/lodash/_Hash.js","../../node_modules/lodash/_listCacheClear.js","../../node_modules/lodash/eq.js","../../node_modules/lodash/_assocIndexOf.js","../../node_modules/lodash/_listCacheDelete.js","../../node_modules/lodash/_listCacheGet.js","../../node_modules/lodash/_listCacheHas.js","../../node_modules/lodash/_listCacheSet.js","../../node_modules/lodash/_ListCache.js","../../node_modules/lodash/_Map.js","../../node_modules/lodash/_mapCacheClear.js","../../node_modules/lodash/_isKeyable.js","../../node_modules/lodash/_getMapData.js","../../node_modules/lodash/_mapCacheDelete.js","../../node_modules/lodash/_mapCacheGet.js","../../node_modules/lodash/_mapCacheHas.js","../../node_modules/lodash/_mapCacheSet.js","../../node_modules/lodash/_MapCache.js","../../node_modules/lodash/memoize.js","../../node_modules/lodash/_memoizeCapped.js","../../node_modules/lodash/_stringToPath.js","../../node_modules/lodash/_castPath.js","../../node_modules/lodash/_toKey.js","../../node_modules/lodash/_baseGet.js","../../node_modules/lodash/get.js","../../node_modules/lodash/_arrayEach.js","../../node_modules/lodash/_createBaseFor.js","../../node_modules/lodash/_baseFor.js","../../node_modules/lodash/_baseTimes.js","../../node_modules/lodash/_baseIsArguments.js","../../node_modules/lodash/isArguments.js","../../node_modules/lodash/stubFalse.js","../../node_modules/lodash/isBuffer.js","../../node_modules/lodash/_isIndex.js","../../node_modules/lodash/isLength.js","../../node_modules/lodash/_baseIsTypedArray.js","../../node_modules/lodash/_baseUnary.js","../../node_modules/lodash/_nodeUtil.js","../../node_modules/lodash/isTypedArray.js","../../node_modules/lodash/_arrayLikeKeys.js","../../node_modules/lodash/_isPrototype.js","../../node_modules/lodash/_overArg.js","../../node_modules/lodash/_nativeKeys.js","../../node_modules/lodash/_baseKeys.js","../../node_modules/lodash/isArrayLike.js","../../node_modules/lodash/keys.js","../../node_modules/lodash/_baseForOwn.js","../../node_modules/lodash/_createBaseEach.js","../../node_modules/lodash/_baseEach.js","../../node_modules/lodash/identity.js","../../node_modules/lodash/_castFunction.js","../../node_modules/lodash/forEach.js","../../node_modules/lodash/each.js","../../lib/config.default.ts","../../lib/config.ts","../../lib/utils/placeholder.ts","../../lib/composables/useContentPlaceholder.ts","../../lib/components/ContentPlaceholder/ContentPlaceholder.vue","../../lib/components/ContentPlaceholder/ContentPlaceholder.vue","../../node_modules/@intlify/shared/dist/shared.mjs","../../node_modules/@intlify/message-compiler/dist/message-compiler.mjs","../../node_modules/@intlify/core-base/dist/core-base.mjs","../../node_modules/@vue/devtools-api/lib/esm/env.js","../../node_modules/@vue/devtools-api/lib/esm/const.js","../../node_modules/@vue/devtools-api/lib/esm/time.js","../../node_modules/@vue/devtools-api/lib/esm/proxy.js","../../node_modules/@vue/devtools-api/lib/esm/index.js","../../node_modules/vue-i18n/dist/vue-i18n.runtime.mjs","../../lib/components/App/AppIconLayers.vue","../../lib/components/App/AppIconLayers.vue","../../lib/composables/useHapticCopy.ts","../../node_modules/clipboard/dist/clipboard.js","../../lib/utils/clipboard.ts","../../lib/components/HapticCopy/HapticCopy.vue","../../lib/components/HapticCopy/HapticCopy.vue","../../node_modules/lodash/_arrayEvery.js","../../node_modules/lodash/_baseEvery.js","../../node_modules/lodash/_stackClear.js","../../node_modules/lodash/_stackDelete.js","../../node_modules/lodash/_stackGet.js","../../node_modules/lodash/_stackHas.js","../../node_modules/lodash/_stackSet.js","../../node_modules/lodash/_Stack.js","../../node_modules/lodash/_setCacheAdd.js","../../node_modules/lodash/_setCacheHas.js","../../node_modules/lodash/_SetCache.js","../../node_modules/lodash/_arraySome.js","../../node_modules/lodash/_cacheHas.js","../../node_modules/lodash/_equalArrays.js","../../node_modules/lodash/_Uint8Array.js","../../node_modules/lodash/_mapToArray.js","../../node_modules/lodash/_setToArray.js","../../node_modules/lodash/_equalByTag.js","../../node_modules/lodash/_arrayPush.js","../../node_modules/lodash/_baseGetAllKeys.js","../../node_modules/lodash/_arrayFilter.js","../../node_modules/lodash/stubArray.js","../../node_modules/lodash/_getSymbols.js","../../node_modules/lodash/_getAllKeys.js","../../node_modules/lodash/_equalObjects.js","../../node_modules/lodash/_DataView.js","../../node_modules/lodash/_Promise.js","../../node_modules/lodash/_Set.js","../../node_modules/lodash/_WeakMap.js","../../node_modules/lodash/_getTag.js","../../node_modules/lodash/_baseIsEqualDeep.js","../../node_modules/lodash/_baseIsEqual.js","../../node_modules/lodash/_baseIsMatch.js","../../node_modules/lodash/_isStrictComparable.js","../../node_modules/lodash/_getMatchData.js","../../node_modules/lodash/_matchesStrictComparable.js","../../node_modules/lodash/_baseMatches.js","../../node_modules/lodash/_baseHasIn.js","../../node_modules/lodash/_hasPath.js","../../node_modules/lodash/hasIn.js","../../node_modules/lodash/_baseMatchesProperty.js","../../node_modules/lodash/_baseProperty.js","../../node_modules/lodash/_basePropertyDeep.js","../../node_modules/lodash/property.js","../../node_modules/lodash/_baseIteratee.js","../../node_modules/lodash/_isIterateeCall.js","../../node_modules/lodash/every.js","../../node_modules/lodash/_isFlattenable.js","../../node_modules/lodash/_baseFlatten.js","../../node_modules/lodash/flatten.js","../../lib/utils/assets.ts","../../lib/utils/iframe-resizer.ts","../../lib/composables/useEmbedForm.ts","../../lib/components/Form/FormEmbed.vue","../../lib/components/Form/FormEmbed.vue","../../node_modules/lodash/_arrayReduce.js","../../node_modules/lodash/_baseReduce.js","../../node_modules/lodash/reduce.js","../../lib/composables/useSharingOptionsLink.ts","../../lib/components/SharingOptions/SharingOptionsLink.vue","../../lib/components/SharingOptions/SharingOptionsLink.vue","../../lib/composables/useSharingOptions.ts","../../lib/components/SharingOptions/SharingOptions.vue","../../lib/components/SharingOptions/SharingOptions.vue","../../lib/composables/useEmbeddableFooter.ts","../../lib/components/EmbeddableFooter/EmbeddableFooter.vue","../../lib/components/EmbeddableFooter/EmbeddableFooter.vue","../../node_modules/lodash/last.js","../../node_modules/jsonp/node_modules/ms/index.js","../../node_modules/jsonp/node_modules/debug/src/debug.js","../../node_modules/jsonp/node_modules/debug/src/browser.js","../../node_modules/jsonp/index.js","../../node_modules/lodash/castArray.js","../../lib/composables/useSendEmail.ts","../../lib/composables/useSignUpForm.ts","../../lib/components/Form/FormSignUp.vue","../../lib/components/Form/FormSignUp.vue","../../lib/components/FollowUsPopover/FollowUsPopover.vue","../../lib/components/FollowUsPopover/FollowUsPopover.vue","../../node_modules/bootstrap-vue-next/dist/flattenFragments-ClbLQGqR.mjs","../../node_modules/bootstrap-vue-next/dist/useAlignment-DuR8ymKI.mjs","../../node_modules/bootstrap-vue-next/dist/BTabs-D_vWlBjT.mjs","../../node_modules/bootstrap-vue-next/dist/BInputGroup-X2Z53RJx.mjs","../../node_modules/bootstrap-vue-next/dist/useAriaInvalid-apOwgexm.mjs","../../node_modules/bootstrap-vue-next/dist/debounce-DHxNfjan.mjs","../../node_modules/bootstrap-vue-next/dist/useStateClass-DxlL_m2E.mjs","../../node_modules/bootstrap-vue-next/dist/useFormInput-CXl8rpD0.mjs","../../node_modules/bootstrap-vue-next/dist/BFormInput-sEfU3CuN.mjs","../../lib/components/Form/FormAdvancedLink/FormAdvancedLinkTab.vue","../../lib/components/Form/FormAdvancedLink/FormAdvancedLinkTab.vue","../../lib/composables/useFormAdvancedLink.ts","../../lib/components/Form/FormAdvancedLink/FormAdvancedLink.vue","../../lib/components/Form/FormAdvancedLink/FormAdvancedLink.vue","../../node_modules/lodash/_baseMap.js","../../node_modules/lodash/map.js","../../node_modules/lodash/_baseSortBy.js","../../node_modules/lodash/_compareAscending.js","../../node_modules/lodash/_compareMultiple.js","../../node_modules/lodash/_baseOrderBy.js","../../node_modules/lodash/_apply.js","../../node_modules/lodash/_overRest.js","../../node_modules/lodash/constant.js","../../node_modules/lodash/_defineProperty.js","../../node_modules/lodash/_baseSetToString.js","../../node_modules/lodash/_shortOut.js","../../node_modules/lodash/_setToString.js","../../node_modules/lodash/_baseRest.js","../../node_modules/lodash/sortBy.js","../../lib/composables/useDonateForm.ts","../../lib/components/Form/FormDonate.vue","../../lib/components/Form/FormDonate.vue","../../node_modules/lodash/_baseFilter.js","../../node_modules/lodash/filter.js","../../lib/composables/useDigitsModel.ts","../../lib/components/Form/FormControl/FormControlDigits.vue","../../lib/components/Form/FormControl/FormControlDigits.vue","../../node_modules/lodash/_baseClamp.js","../../node_modules/lodash/clamp.js","../../node_modules/lodash/toFinite.js","../../node_modules/lodash/toInteger.js","../../node_modules/lodash/_createRound.js","../../node_modules/lodash/round.js","../../lib/composables/useRangeControl.ts","../../lib/components/Form/FormControl/FormControlRange.vue","../../lib/components/Form/FormControl/FormControlRange.vue","../../lib/components/Form/FormControl/FormControlSecret.vue","../../lib/components/Form/FormControl/FormControlSecret.vue","../../node_modules/vue-virtual-scroller/dist/keyField-D6okV6nC.js","../../node_modules/vue-virtual-scroller/dist/useRecycleScroller-CXk06epd.js","../../node_modules/vue-virtual-scroller/dist/scroller.css_vue_type_style_index_0_src_true_lang--7gJ3zh_.js","../../node_modules/vue-virtual-scroller/dist/RecycleScroller.vue_vue_type_script_setup_true_lang-Dxq64Bue.js","../../node_modules/lodash/_baseFindIndex.js","../../node_modules/lodash/findIndex.js","../../node_modules/lodash/isEqual.js","../../node_modules/lodash/_baseAssignValue.js","../../node_modules/lodash/_assignValue.js","../../node_modules/lodash/_copyObject.js","../../node_modules/lodash/_baseAssign.js","../../node_modules/lodash/_nativeKeysIn.js","../../node_modules/lodash/_baseKeysIn.js","../../node_modules/lodash/keysIn.js","../../node_modules/lodash/_baseAssignIn.js","../../node_modules/lodash/_cloneBuffer.js","../../node_modules/lodash/_copyArray.js","../../node_modules/lodash/_copySymbols.js","../../node_modules/lodash/_getPrototype.js","../../node_modules/lodash/_getSymbolsIn.js","../../node_modules/lodash/_copySymbolsIn.js","../../node_modules/lodash/_getAllKeysIn.js","../../node_modules/lodash/_initCloneArray.js","../../node_modules/lodash/_cloneArrayBuffer.js","../../node_modules/lodash/_cloneDataView.js","../../node_modules/lodash/_cloneRegExp.js","../../node_modules/lodash/_cloneSymbol.js","../../node_modules/lodash/_cloneTypedArray.js","../../node_modules/lodash/_initCloneByTag.js","../../node_modules/lodash/_baseCreate.js","../../node_modules/lodash/_initCloneObject.js","../../node_modules/lodash/_baseIsMap.js","../../node_modules/lodash/isMap.js","../../node_modules/lodash/_baseIsSet.js","../../node_modules/lodash/isSet.js","../../node_modules/lodash/_baseClone.js","../../node_modules/lodash/_baseSlice.js","../../node_modules/lodash/_parent.js","../../node_modules/lodash/_baseUnset.js","../../node_modules/lodash/isPlainObject.js","../../node_modules/lodash/_customOmitClone.js","../../node_modules/lodash/_flatRest.js","../../node_modules/lodash/omit.js","../../lib/composables/useSelectableDropdown.ts","../../lib/components/Form/FormControl/FormControlSelectableDropdown.vue","../../lib/components/Form/FormControl/FormControlSelectableDropdown.vue","../../lib/components/App/AppFooter.vue","../../lib/components/App/AppFooter.vue","../../node_modules/vue-headroom/src/checkActions.js","../../node_modules/vue-headroom/src/support3d.js","../../node_modules/vue-headroom/src/headroom.vue","../../lib/composables/useAppHeader.ts","../../lib/components/App/AppHeader.vue","../../lib/components/App/AppHeader.vue","../../lib/composables/useColorMode.ts","../../node_modules/lodash/head.js","../../node_modules/lodash/first.js","../../lib/composables/useQueryObserver.ts","../../lib/composables/useImageMode.ts","../../lib/components/ImageMode/ImageMode.vue","../../lib/components/ImageMode/ImageMode.vue","../../lib/components/ImageMode/ImageModeSource.vue","../../lib/components/ImageMode/ImageModeSource.vue","../../node_modules/lodash/_basePropertyOf.js","../../node_modules/lodash/_deburrLetter.js","../../node_modules/lodash/deburr.js","../../node_modules/lodash/_asciiWords.js","../../node_modules/lodash/_hasUnicodeWord.js","../../node_modules/lodash/_unicodeWords.js","../../node_modules/lodash/words.js","../../node_modules/lodash/_createCompounder.js","../../node_modules/lodash/kebabCase.js","../../node_modules/d3-selection/src/namespaces.js","../../node_modules/d3-selection/src/namespace.js","../../node_modules/d3-selection/src/creator.js","../../node_modules/d3-selection/src/selector.js","../../node_modules/d3-selection/src/selection/select.js","../../node_modules/d3-selection/src/array.js","../../node_modules/d3-selection/src/selectorAll.js","../../node_modules/d3-selection/src/selection/selectAll.js","../../node_modules/d3-selection/src/matcher.js","../../node_modules/d3-selection/src/selection/selectChild.js","../../node_modules/d3-selection/src/selection/selectChildren.js","../../node_modules/d3-selection/src/selection/filter.js","../../node_modules/d3-selection/src/selection/sparse.js","../../node_modules/d3-selection/src/selection/enter.js","../../node_modules/d3-selection/src/constant.js","../../node_modules/d3-selection/src/selection/data.js","../../node_modules/d3-selection/src/selection/exit.js","../../node_modules/d3-selection/src/selection/join.js","../../node_modules/d3-selection/src/selection/merge.js","../../node_modules/d3-selection/src/selection/order.js","../../node_modules/d3-selection/src/selection/sort.js","../../node_modules/d3-selection/src/selection/call.js","../../node_modules/d3-selection/src/selection/nodes.js","../../node_modules/d3-selection/src/selection/node.js","../../node_modules/d3-selection/src/selection/size.js","../../node_modules/d3-selection/src/selection/empty.js","../../node_modules/d3-selection/src/selection/each.js","../../node_modules/d3-selection/src/selection/attr.js","../../node_modules/d3-selection/src/window.js","../../node_modules/d3-selection/src/selection/style.js","../../node_modules/d3-selection/src/selection/property.js","../../node_modules/d3-selection/src/selection/classed.js","../../node_modules/d3-selection/src/selection/text.js","../../node_modules/d3-selection/src/selection/html.js","../../node_modules/d3-selection/src/selection/raise.js","../../node_modules/d3-selection/src/selection/lower.js","../../node_modules/d3-selection/src/selection/append.js","../../node_modules/d3-selection/src/selection/insert.js","../../node_modules/d3-selection/src/selection/remove.js","../../node_modules/d3-selection/src/selection/clone.js","../../node_modules/d3-selection/src/selection/datum.js","../../node_modules/d3-selection/src/selection/on.js","../../node_modules/d3-selection/src/selection/dispatch.js","../../node_modules/d3-selection/src/selection/iterator.js","../../node_modules/d3-selection/src/selection/index.js","../../node_modules/d3-selection/src/select.js","../../node_modules/d3-selection/src/create.js","../../node_modules/d3-selection/src/sourceEvent.js","../../node_modules/d3-selection/src/pointer.js","../../lib/composables/useLegendMarker.ts","../../lib/components/Legend/LegendOrdinal.vue","../../lib/components/Legend/LegendOrdinal.vue","../../node_modules/d3-format/src/formatDecimal.js","../../node_modules/d3-format/src/exponent.js","../../node_modules/d3-format/src/formatGroup.js","../../node_modules/d3-format/src/formatNumerals.js","../../node_modules/d3-format/src/formatSpecifier.js","../../node_modules/d3-format/src/formatTrim.js","../../node_modules/d3-format/src/formatPrefixAuto.js","../../node_modules/d3-format/src/formatRounded.js","../../node_modules/d3-format/src/formatTypes.js","../../node_modules/d3-format/src/identity.js","../../node_modules/d3-format/src/locale.js","../../node_modules/d3-format/src/defaultLocale.js","../../node_modules/d3-array/src/ascending.js","../../node_modules/d3-array/src/descending.js","../../node_modules/d3-array/src/bisector.js","../../node_modules/d3-array/src/number.js","../../node_modules/d3-array/src/bisect.js","../../node_modules/d3-array/src/extent.js","../../node_modules/d3-array/src/fsum.js","../../node_modules/internmap/src/index.js","../../node_modules/d3-array/src/ticks.js","../../node_modules/d3-array/src/max.js","../../node_modules/d3-array/src/merge.js","../../node_modules/d3-array/src/range.js","../../node_modules/d3-array/src/sum.js","../../node_modules/d3-color/src/define.js","../../node_modules/d3-color/src/color.js","../../node_modules/d3-interpolate/src/basis.js","../../node_modules/d3-interpolate/src/basisClosed.js","../../node_modules/d3-interpolate/src/constant.js","../../node_modules/d3-interpolate/src/color.js","../../node_modules/d3-interpolate/src/rgb.js","../../node_modules/d3-interpolate/src/numberArray.js","../../node_modules/d3-interpolate/src/array.js","../../node_modules/d3-interpolate/src/date.js","../../node_modules/d3-interpolate/src/number.js","../../node_modules/d3-interpolate/src/object.js","../../node_modules/d3-interpolate/src/string.js","../../node_modules/d3-interpolate/src/value.js","../../node_modules/d3-interpolate/src/round.js","../../node_modules/d3-interpolate/src/transform/decompose.js","../../node_modules/d3-interpolate/src/transform/parse.js","../../node_modules/d3-interpolate/src/transform/index.js","../../node_modules/d3-interpolate/src/zoom.js","../../node_modules/d3-scale/src/init.js","../../node_modules/d3-scale/src/ordinal.js","../../node_modules/d3-scale/src/band.js","../../node_modules/d3-scale/src/constant.js","../../node_modules/d3-scale/src/number.js","../../node_modules/d3-scale/src/continuous.js","../../node_modules/d3-scale/node_modules/d3-format/src/formatDecimal.js","../../node_modules/d3-scale/node_modules/d3-format/src/exponent.js","../../node_modules/d3-scale/node_modules/d3-format/src/formatGroup.js","../../node_modules/d3-scale/node_modules/d3-format/src/formatNumerals.js","../../node_modules/d3-scale/node_modules/d3-format/src/formatSpecifier.js","../../node_modules/d3-scale/node_modules/d3-format/src/formatTrim.js","../../node_modules/d3-scale/node_modules/d3-format/src/formatPrefixAuto.js","../../node_modules/d3-scale/node_modules/d3-format/src/formatRounded.js","../../node_modules/d3-scale/node_modules/d3-format/src/formatTypes.js","../../node_modules/d3-scale/node_modules/d3-format/src/identity.js","../../node_modules/d3-scale/node_modules/d3-format/src/locale.js","../../node_modules/d3-scale/node_modules/d3-format/src/defaultLocale.js","../../node_modules/d3-scale/node_modules/d3-format/src/precisionFixed.js","../../node_modules/d3-scale/node_modules/d3-format/src/precisionPrefix.js","../../node_modules/d3-scale/node_modules/d3-format/src/precisionRound.js","../../node_modules/d3-scale/src/tickFormat.js","../../node_modules/d3-scale/src/linear.js","../../node_modules/d3-scale/src/nice.js","../../node_modules/d3-scale/src/log.js","../../node_modules/d3-scale/src/symlog.js","../../node_modules/d3-scale/src/pow.js","../../node_modules/d3-scale/src/radial.js","../../node_modules/d3-time/src/interval.js","../../node_modules/d3-time/src/millisecond.js","../../node_modules/d3-time/src/duration.js","../../node_modules/d3-time/src/second.js","../../node_modules/d3-time/src/minute.js","../../node_modules/d3-time/src/hour.js","../../node_modules/d3-time/src/day.js","../../node_modules/d3-time/src/week.js","../../node_modules/d3-time/src/month.js","../../node_modules/d3-time/src/year.js","../../node_modules/d3-time/src/ticks.js","../../node_modules/d3-time-format/src/locale.js","../../node_modules/d3-time-format/src/defaultLocale.js","../../node_modules/d3-scale/src/time.js","../../node_modules/d3-scale/src/utcTime.js","../../node_modules/d3-scale/src/sequential.js","../../lib/composables/useLegendScale.ts","../../lib/components/Legend/LegendScale.vue","../../lib/components/Legend/LegendScale.vue","../../lib/composables/usePagination.ts","../../lib/components/Pagination/Pagination.vue","../../lib/components/Pagination/Pagination.vue","../../node_modules/vue-input-autowidth/dist/vue-input-autowidth.es.js","../../lib/utils/floatingUi.ts","../../lib/directives/EllipsisTooltip.ts","../../lib/components/Pagination/PaginationTiny.vue","../../lib/components/Pagination/PaginationTiny.vue","../../lib/composables/useResponsiveIframe.ts","../../lib/components/ResponsiveIframe/ResponsiveIframe.vue","../../lib/components/ResponsiveIframe/ResponsiveIframe.vue","../../lib/composables/useTexturedDeck.ts","../../lib/components/TexturedDeck/TexturedDeck.vue","../../lib/components/TexturedDeck/TexturedDeck.vue","../../node_modules/lodash/_baseExtremum.js","../../node_modules/lodash/_baseGt.js","../../node_modules/lodash/max.js","../../node_modules/d3-dsv/src/dsv.js","../../node_modules/d3-dsv/src/csv.js","../../node_modules/d3-dsv/src/tsv.js","../../node_modules/d3-fetch/src/text.js","../../node_modules/d3-fetch/src/dsv.js","../../node_modules/d3-fetch/src/json.js","../../lib/composables/useChartData.ts","../../node_modules/lodash/_baseSome.js","../../node_modules/lodash/some.js","../../lib/composables/useChartFormat.ts","../../lib/composables/useChart.ts","../../lib/composables/useBarChart.ts","../../lib/datavisualisations/BarChart/BarChart.vue","../../lib/datavisualisations/BarChart/BarChart.vue","../../node_modules/d3-axis/src/identity.js","../../node_modules/d3-axis/src/axis.js","../../node_modules/lodash/iteratee.js","../../lib/composables/useColumnChart.ts","../../lib/datavisualisations/ColumnChart/ColumnChart.vue","../../lib/datavisualisations/ColumnChart/ColumnChart.vue","../../node_modules/d3-scale-chromatic/src/colors.js","../../node_modules/d3-scale-chromatic/src/categorical/category10.js","../../node_modules/d3-shape/src/constant.js","../../node_modules/d3-path/src/path.js","../../node_modules/d3-shape/src/path.js","../../node_modules/d3-shape/src/array.js","../../node_modules/d3-shape/src/curve/linear.js","../../node_modules/d3-shape/src/point.js","../../node_modules/d3-shape/src/line.js","../../lib/composables/useLineChart.ts","../../lib/datavisualisations/LineChart/LineChart.vue","../../lib/datavisualisations/LineChart/LineChart.vue","../../node_modules/lodash/_baseIsNaN.js","../../node_modules/lodash/_strictIndexOf.js","../../node_modules/lodash/_baseIndexOf.js","../../node_modules/lodash/_arrayIncludes.js","../../node_modules/lodash/_arrayIncludesWith.js","../../node_modules/lodash/_baseDifference.js","../../node_modules/lodash/isArrayLikeObject.js","../../node_modules/lodash/without.js","../../lib/composables/useStackedChart.ts","../../lib/datavisualisations/StackedBarChart/StackedBarChart.vue","../../lib/datavisualisations/StackedBarChart/StackedBarChart.vue","../../lib/datavisualisations/StackedColumnChart/StackedColumnChart.vue","../../lib/datavisualisations/StackedColumnChart/StackedColumnChart.vue","../../node_modules/lodash/_baseSet.js","../../node_modules/lodash/_basePickBy.js","../../node_modules/lodash/pickBy.js","../../node_modules/d3-dispatch/src/dispatch.js","../../node_modules/d3-drag/src/noevent.js","../../node_modules/d3-drag/src/nodrag.js","../../node_modules/d3-drag/src/constant.js","../../node_modules/d3-drag/src/event.js","../../node_modules/d3-drag/src/drag.js","../../node_modules/d3-geo/src/math.js","../../node_modules/d3-geo/src/noop.js","../../node_modules/d3-geo/src/stream.js","../../node_modules/d3-geo/src/cartesian.js","../../node_modules/d3-geo/src/compose.js","../../node_modules/d3-geo/src/rotation.js","../../node_modules/d3-geo/src/circle.js","../../node_modules/d3-geo/src/clip/buffer.js","../../node_modules/d3-geo/src/pointEqual.js","../../node_modules/d3-geo/src/clip/rejoin.js","../../node_modules/d3-geo/src/polygonContains.js","../../node_modules/d3-geo/src/clip/index.js","../../node_modules/d3-geo/src/clip/antimeridian.js","../../node_modules/d3-geo/src/clip/circle.js","../../node_modules/d3-geo/src/clip/line.js","../../node_modules/d3-geo/src/clip/rectangle.js","../../node_modules/d3-geo/src/length.js","../../node_modules/d3-geo/src/distance.js","../../node_modules/d3-geo/src/graticule.js","../../node_modules/d3-geo/src/identity.js","../../node_modules/d3-geo/src/path/area.js","../../node_modules/d3-geo/src/path/bounds.js","../../node_modules/d3-geo/src/path/centroid.js","../../node_modules/d3-geo/src/path/context.js","../../node_modules/d3-geo/src/path/measure.js","../../node_modules/d3-geo/src/path/string.js","../../node_modules/d3-geo/src/path/index.js","../../node_modules/d3-geo/src/transform.js","../../node_modules/d3-geo/src/projection/fit.js","../../node_modules/d3-geo/src/projection/resample.js","../../node_modules/d3-geo/src/projection/index.js","../../node_modules/d3-geo-projection/src/math.js","../../node_modules/d3-geo-projection/src/robinson.js","../../node_modules/d3-timer/src/timer.js","../../node_modules/d3-timer/src/timeout.js","../../node_modules/d3-transition/src/transition/schedule.js","../../node_modules/d3-transition/src/interrupt.js","../../node_modules/d3-transition/src/selection/interrupt.js","../../node_modules/d3-transition/src/transition/tween.js","../../node_modules/d3-transition/src/transition/interpolate.js","../../node_modules/d3-transition/src/transition/attr.js","../../node_modules/d3-transition/src/transition/attrTween.js","../../node_modules/d3-transition/src/transition/delay.js","../../node_modules/d3-transition/src/transition/duration.js","../../node_modules/d3-transition/src/transition/ease.js","../../node_modules/d3-transition/src/transition/easeVarying.js","../../node_modules/d3-transition/src/transition/filter.js","../../node_modules/d3-transition/src/transition/merge.js","../../node_modules/d3-transition/src/transition/on.js","../../node_modules/d3-transition/src/transition/remove.js","../../node_modules/d3-transition/src/transition/select.js","../../node_modules/d3-transition/src/transition/selectAll.js","../../node_modules/d3-transition/src/transition/selection.js","../../node_modules/d3-transition/src/transition/style.js","../../node_modules/d3-transition/src/transition/styleTween.js","../../node_modules/d3-transition/src/transition/text.js","../../node_modules/d3-transition/src/transition/textTween.js","../../node_modules/d3-transition/src/transition/transition.js","../../node_modules/d3-transition/src/transition/end.js","../../node_modules/d3-transition/src/transition/index.js","../../node_modules/d3-ease/src/cubic.js","../../node_modules/d3-transition/src/selection/transition.js","../../node_modules/d3-transition/src/selection/index.js","../../node_modules/d3-zoom/src/constant.js","../../node_modules/d3-zoom/src/event.js","../../node_modules/d3-zoom/src/transform.js","../../node_modules/d3-zoom/src/noevent.js","../../node_modules/d3-zoom/src/zoom.js","../../node_modules/topojson-client/src/identity.js","../../node_modules/topojson-client/src/transform.js","../../node_modules/topojson-client/src/reverse.js","../../node_modules/topojson-client/src/feature.js","../../node_modules/lodash/_baseLt.js","../../node_modules/lodash/min.js","../../node_modules/lodash/_baseValues.js","../../node_modules/lodash/values.js","../../lib/composables/useChoropleth.ts","../../lib/composables/useMapProjection.ts","../../lib/maps/ChoroplethMap/ChoroplethMap.vue","../../lib/maps/ChoroplethMap/ChoroplethMap.vue","../../lib/maps/ChoroplethMap/ChoroplethMapAnnotation.vue","../../lib/maps/ChoroplethMap/ChoroplethMapAnnotation.vue","../../node_modules/lodash/_createFind.js","../../node_modules/lodash/find.js","../../node_modules/lodash/_arrayAggregator.js","../../node_modules/lodash/_baseAggregator.js","../../node_modules/lodash/_createAggregator.js","../../node_modules/lodash/groupBy.js","../../node_modules/lodash/set.js","../../node_modules/lodash/_createSet.js","../../node_modules/lodash/_baseUniq.js","../../node_modules/lodash/uniq.js","../../lib/composables/useSymbolMap.ts","../../lib/maps/SymbolMap/SymbolMap.vue","../../lib/maps/SymbolMap/SymbolMap.vue","../../lib/locales/fr.json","../../lib/locales/en.json","../../lib/i18n.ts","../../lib/components/index.ts","../../lib/datavisualisations/index.ts","../../lib/maps/index.js","../../lib/plugin.ts"],"sourcesContent":["import { computed } from 'vue'\nimport type { ComputedRef, Ref } from 'vue'\n\nimport type { Accordion, Step } from '@/types'\n\n/**\n * Emit signature for the `step-change` event raised when navigation occurs.\n */\ntype StepChangeEmit = (event: 'step-change', step: Step) => void\n\n/**\n * Encapsulates an accordion's step-navigation logic: tracking the active step,\n * deriving per-step position predicates, and emitting the `step-change` event\n * when moving to the next or previous step.\n *\n * The returned object matches the {@link Accordion} contract so it can be\n * provided directly to descendant `AccordionStep` components.\n *\n * @param step - Ref to the currently active step.\n * @param steps - Ref to the ordered list of all available steps.\n * @param emit - The component's emit function, used to raise `step-change`.\n * @returns The {@link Accordion} navigation API plus the `activeStepIndex` computed.\n *   `activeStepIndex` and the predicate functions (`isActiveStep`,\n *   `isPreviousStep`, `isFirstStep`, `isLastStep`) read the `step`/`steps` refs\n *   live, so they stay reactive as the refs change. By contrast, the returned\n *   `step` and `steps` values are plain snapshots captured at call time (NOT\n *   reactive); they exist to satisfy the {@link Accordion} provide/inject\n *   contract and will not update when the source refs change.\n * @example\n * import { toRef } from 'vue'\n *\n * const accordion = useAccordion(toRef(props, 'step'), toRef(props, 'steps'), emit)\n */\nexport function useAccordion(\n  step: Ref<Step>,\n  steps: Ref<Step[]>,\n  emit: StepChangeEmit\n): Accordion & { activeStepIndex: ComputedRef<number> } {\n  const activeStepIndex = computed(() => steps.value?.indexOf(step.value))\n\n  // The active step at provide time; descendants navigate through the predicate\n  // helpers below rather than reading these snapshot values directly.\n  const initialStep = step.value\n  const initialSteps = steps.value\n\n  // Emit the neighbouring step, falling back to the current step at the bounds\n  // so navigation never overflows the list.\n  const emitAccordionNextStepEvent = (): void => {\n    emit('step-change', steps.value[activeStepIndex.value + 1] || step.value)\n  }\n\n  const emitAccordionPreviousStepEvent = (): void => {\n    emit('step-change', steps.value[activeStepIndex.value - 1] || step.value)\n  }\n\n  const isFirstStep = (candidate: Step): boolean =>\n    steps.value?.indexOf(candidate) === 0\n  const isLastStep = (candidate: Step): boolean =>\n    steps.value?.indexOf(candidate) === steps.value?.length - 1\n  const isActiveStep = (candidate: Step): boolean => step.value === candidate\n  const isPreviousStep = (candidate: Step): boolean =>\n    steps.value?.indexOf(candidate) < activeStepIndex.value\n\n  return {\n    activeStepIndex,\n    emitAccordionNextStepEvent,\n    emitAccordionPreviousStepEvent,\n    isActiveStep,\n    isPreviousStep,\n    isFirstStep,\n    isLastStep,\n    step: initialStep,\n    steps: initialSteps\n  }\n}\n\nexport default useAccordion\n","export const AccordionKey = Symbol('Accordion')\nexport const ParentKey = Symbol('Parent')\n","<script setup lang=\"ts\">\nimport { provide, toRef } from 'vue'\n\nimport { useAccordion } from '@/composables/useAccordion'\nimport { AccordionKey } from '@/keys'\nimport { Step } from '@/types'\n\nexport interface AccordionWrapperProps {\n  /**\n   * Current active step\n   */\n  step: Step\n  /**\n   * Array of all available steps\n   */\n  steps: Step[]\n}\n\nconst props = defineProps<AccordionWrapperProps>()\n\nconst emit = defineEmits(['step-change'])\n\nconst accordion = useAccordion(toRef(props, 'step'), toRef(props, 'steps'), emit)\n\nprovide(AccordionKey, accordion)\n\n// Expose the navigation helpers on the component instance so they remain\n// reachable from unit tests (which call them through `wrapper.vm`).\ndefineExpose(accordion)\n</script>\n\n<template>\n  <div class=\"accordion-wrapper\">\n    <div class=\"accordion-wrapper__content\">\n      <!-- @slot Content with all the steps declarations -->\n      <slot />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n\n.accordion-wrapper {\n  $step-bullet-size: 2rem;\n  $step-bullet-font-size: math.div($step-bullet-size, 2);\n\n  &__content {\n    counter-reset: step 0;\n    max-width: 550px;\n    &__step {\n      margin-bottom: $spacer;\n      position: relative;\n      opacity: $btn-disabled-opacity;\n      transition: $transition-base;\n\n      &--active,\n      &--previous {\n        opacity: 1;\n      }\n\n      &__heading + .collapse > .card-body {\n        padding-top: 0;\n      }\n\n      &:before {\n        counter-increment: step;\n        content: counter(step);\n        z-index: 10;\n        line-height: $step-bullet-size;\n        height: $step-bullet-size;\n        width: $step-bullet-size;\n        text-align: center;\n        font-size: $step-bullet-font-size;\n        border-radius: 50%;\n        display: block;\n        color: white;\n        font-weight: bolder;\n        position: absolute;\n        right: calc(100% + #{$spacer});\n        top: $spacer * 1.25;\n        background: $text-muted;\n        transition: background $transition-base;\n      }\n\n      &--active:before,\n      &--previous:before {\n        background: $info;\n      }\n\n      &:not(:last-of-type):after {\n        content: '';\n        z-index: 0;\n        position: absolute;\n        top: $spacer * 1.25;\n        right: calc(100% + #{$spacer} + #{math.div($step-bullet-size, 2)});\n        transform: translateX(50%);\n        bottom: -4rem;\n        width: 3px;\n        background: transparent;\n        transition: background 400ms;\n      }\n\n      &--previous:not(:last-of-type):after {\n        background: $info;\n      }\n    }\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { provide, toRef } from 'vue'\n\nimport { useAccordion } from '@/composables/useAccordion'\nimport { AccordionKey } from '@/keys'\nimport { Step } from '@/types'\n\nexport interface AccordionWrapperProps {\n  /**\n   * Current active step\n   */\n  step: Step\n  /**\n   * Array of all available steps\n   */\n  steps: Step[]\n}\n\nconst props = defineProps<AccordionWrapperProps>()\n\nconst emit = defineEmits(['step-change'])\n\nconst accordion = useAccordion(toRef(props, 'step'), toRef(props, 'steps'), emit)\n\nprovide(AccordionKey, accordion)\n\n// Expose the navigation helpers on the component instance so they remain\n// reachable from unit tests (which call them through `wrapper.vm`).\ndefineExpose(accordion)\n</script>\n\n<template>\n  <div class=\"accordion-wrapper\">\n    <div class=\"accordion-wrapper__content\">\n      <!-- @slot Content with all the steps declarations -->\n      <slot />\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n\n.accordion-wrapper {\n  $step-bullet-size: 2rem;\n  $step-bullet-font-size: math.div($step-bullet-size, 2);\n\n  &__content {\n    counter-reset: step 0;\n    max-width: 550px;\n    &__step {\n      margin-bottom: $spacer;\n      position: relative;\n      opacity: $btn-disabled-opacity;\n      transition: $transition-base;\n\n      &--active,\n      &--previous {\n        opacity: 1;\n      }\n\n      &__heading + .collapse > .card-body {\n        padding-top: 0;\n      }\n\n      &:before {\n        counter-increment: step;\n        content: counter(step);\n        z-index: 10;\n        line-height: $step-bullet-size;\n        height: $step-bullet-size;\n        width: $step-bullet-size;\n        text-align: center;\n        font-size: $step-bullet-font-size;\n        border-radius: 50%;\n        display: block;\n        color: white;\n        font-weight: bolder;\n        position: absolute;\n        right: calc(100% + #{$spacer});\n        top: $spacer * 1.25;\n        background: $text-muted;\n        transition: background $transition-base;\n      }\n\n      &--active:before,\n      &--previous:before {\n        background: $info;\n      }\n\n      &:not(:last-of-type):after {\n        content: '';\n        z-index: 0;\n        position: absolute;\n        top: $spacer * 1.25;\n        right: calc(100% + #{$spacer} + #{math.div($step-bullet-size, 2)});\n        transform: translateX(50%);\n        bottom: -4rem;\n        width: 3px;\n        background: transparent;\n        transition: background 400ms;\n      }\n\n      &--previous:not(:last-of-type):after {\n        background: $info;\n      }\n    }\n  }\n}\n</style>\n","//#region src/utils/dom.ts\nvar getSafeDocument = () => typeof document !== \"undefined\" ? document : null;\nvar getSafeWindow = () => typeof window !== \"undefined\" ? window : null;\nvar getActiveElement = (excludes = []) => {\n\tconst doc = getSafeDocument();\n\tif (doc === null) return null;\n\tconst { activeElement } = doc;\n\treturn activeElement && !excludes?.some((el) => el === activeElement) ? activeElement : null;\n};\n/**\n* @deprecated only used in BFormGroup, which is not an SFC... Function could probably be replaced with pure Vue\n*/\nvar attemptFocus = (el, options = {}) => {\n\tconst isActiveElement = (el) => el === getActiveElement();\n\ttry {\n\t\tel.focus(options);\n\t} catch (e) {\n\t\tconsole.error(e);\n\t}\n\treturn isActiveElement(el);\n};\nvar isEmptySlot = (el) => (el?.() ?? []).length === 0;\n/**\n* @deprecated only used in BFormGroup, which is not an SFC... Function could probably be replaced with pure Vue\n*/\nvar isVisible = (el) => {\n\tif (el.getAttribute(\"display\") === \"none\") return false;\n\tconst bcr = el.getBoundingClientRect();\n\treturn bcr && bcr.height > 0 && bcr.width > 0;\n};\nvar sortSlotElementsByPosition = (a, b) => {\n\tif (typeof Node === \"undefined\" || !Node || !a || !b) return 0;\n\tconst position = a.compareDocumentPosition(b);\n\tif (position & Node.DOCUMENT_POSITION_FOLLOWING) return -1;\n\tif (position & Node.DOCUMENT_POSITION_PRECEDING) return 1;\n\treturn 0;\n};\nvar defaultZModelIndex = 1055;\nvar getModalZIndex = (element) => {\n\tconst win = getSafeWindow();\n\tconst doc = getSafeDocument();\n\tif (win === null || doc === null) return defaultZModelIndex;\n\tconst target = element ?? doc.body;\n\tconst raw = win.getComputedStyle(target).getPropertyValue(\"--bs-modal-zindex\").trim();\n\tconst parsed = Number.parseInt(raw, 10);\n\treturn Number.isFinite(parsed) ? parsed : defaultZModelIndex;\n};\n//#endregion\nexport { getSafeWindow as a, sortSlotElementsByPosition as c, getSafeDocument as i, getActiveElement as n, isEmptySlot as o, getModalZIndex as r, isVisible as s, attemptFocus as t };\n\n//# sourceMappingURL=dom-AhkaSoh8.mjs.map","//#region src/utils/keys.ts\nvar genericBvnPrefix = \"BootstrapVueNext__\";\nvar withBvnPrefix = (value, suffix = \"\") => {\n\tconst suffixWithTrail = `${suffix}___`;\n\treturn `${genericBvnPrefix}ID__${value}__${suffix ? suffixWithTrail : \"\"}`;\n};\nvar createBvnInjectionKey = (name) => withBvnPrefix(name);\nvar createBvnRegistryInjectionKey = (name) => withBvnPrefix(`${name}__registry`);\nvar carouselInjectionKey = createBvnInjectionKey(\"carousel\");\nvar tabsInjectionKey = createBvnInjectionKey(\"tabs\");\nvar progressInjectionKey = createBvnInjectionKey(\"progress\");\nvar listGroupInjectionKey = createBvnInjectionKey(\"listGroup\");\nvar avatarGroupInjectionKey = createBvnInjectionKey(\"avatarGroup\");\nvar accordionInjectionKey = createBvnInjectionKey(\"accordion\");\nvar checkboxGroupKey = createBvnInjectionKey(\"checkboxGroup\");\nvar radioGroupKey = createBvnInjectionKey(\"radioGroup\");\nvar collapseInjectionKey = createBvnInjectionKey(\"collapse\");\nvar showHideRegistryKey = createBvnRegistryInjectionKey(\"showHide\");\nvar dropdownInjectionKey = createBvnInjectionKey(\"dropdown\");\nvar navbarInjectionKey = createBvnInjectionKey(\"navbar\");\nvar rtlRegistryKey = createBvnRegistryInjectionKey(\"rtl\");\nvar breadcrumbGlobalIndexKey = `${genericBvnPrefix}global_breadcrumb`;\nvar breadcrumbRegistryKey = createBvnRegistryInjectionKey(\"breadcrumb\");\nvar modalManagerKey = createBvnRegistryInjectionKey(\"modalManager\");\nvar defaultsKey = createBvnRegistryInjectionKey(\"defaults\");\nvar inputGroupKey = createBvnInjectionKey(\"inputGroup\");\nvar buttonGroupKey = createBvnInjectionKey(\"buttonGroup\");\nvar orchestratorRegistryKey = createBvnRegistryInjectionKey(\"orchestrator\");\n/**\n* Provided by an ancestor BFormGroup (or boundary like BFormFloatingLabel). Called once at\n* descendant setup to obtain state/disabled and a `track` callback. Call `track(idRef)` to\n* claim the group's `<label for=\"...\">` target — used by form controls without their own\n* label (BFormInput, BFormTextarea, BFormSelect, or a plain BFormCheckbox/BFormRadio with\n* no slot). Skip `track` entirely when the consumer only needs state/disabled and must not\n* claim label-for (BFormCheckbox/BFormRadio that render their own label, BFormFloatingLabel\n* acting as a boundary, ARIA-role custom widgets).\n*/\nvar formGroupKey = createBvnInjectionKey(\"formGroupPlugin\");\nvar formSelectKey = createBvnInjectionKey(\"formSelect\");\nvar tableKeyboardNavigationKey = createBvnInjectionKey(\"tableKeyboardNavigation\");\n//#endregion\nexport { tabsInjectionKey as C, tableKeyboardNavigationKey as S, orchestratorRegistryKey as _, buttonGroupKey as a, rtlRegistryKey as b, collapseInjectionKey as c, formGroupKey as d, formSelectKey as f, navbarInjectionKey as g, modalManagerKey as h, breadcrumbRegistryKey as i, defaultsKey as l, listGroupInjectionKey as m, avatarGroupInjectionKey as n, carouselInjectionKey as o, inputGroupKey as p, breadcrumbGlobalIndexKey as r, checkboxGroupKey as s, accordionInjectionKey as t, dropdownInjectionKey as u, progressInjectionKey as v, withBvnPrefix as w, showHideRegistryKey as x, radioGroupKey as y };\n\n//# sourceMappingURL=keys-DU7sQgl3.mjs.map","import { l as defaultsKey } from \"./keys-DU7sQgl3.mjs\";\nimport { computed, getCurrentInstance, inject, provide, ref, shallowRef, watchEffect } from \"vue\";\n//#region src/composables/useDefaults.ts\nfunction injectSelf(key, vm = getCurrentInstance$1(\"injectSelf\")) {\n\tconst { provides } = vm;\n\tif (provides && key in provides) return provides[key];\n}\nfunction getCurrentInstance$1(name, message) {\n\tconst vm = getCurrentInstance();\n\tif (!vm) throw new Error(`[Bvn] ${name} ${message || \"must be called from inside a setup function\"}`);\n\treturn vm;\n}\nvar toKebabCase = (str = \"\") => str.replace(/[^a-z]/gi, \"-\").replace(/\\B([A-Z])/g, \"-$1\").toLowerCase();\nvar isObject = (obj) => obj !== null && typeof obj === \"object\" && !Array.isArray(obj);\nfunction mergeDeep(source = {}, target = {}, arrayFn) {\n\tconst out = {};\n\tfor (const key in source) out[key] = source[key];\n\tfor (const key in target) {\n\t\tconst sourceProperty = source[key];\n\t\tconst targetProperty = target[key];\n\t\tif (isObject(sourceProperty) && isObject(targetProperty)) {\n\t\t\tout[key] = mergeDeep(sourceProperty, targetProperty, arrayFn);\n\t\t\tcontinue;\n\t\t}\n\t\tif (Array.isArray(sourceProperty) && Array.isArray(targetProperty) && arrayFn) {\n\t\t\tout[key] = arrayFn(sourceProperty, targetProperty);\n\t\t\tcontinue;\n\t\t}\n\t\tout[key] = targetProperty;\n\t}\n\treturn out;\n}\nvar propIsDefined = (vnode, prop) => typeof vnode.props?.[prop] !== \"undefined\" || typeof vnode.props?.[toKebabCase(prop)] !== \"undefined\";\nfunction internalUseDefaults(props = {}, name) {\n\tconst defaults = inject(defaultsKey, ref({}));\n\tconst vm = getCurrentInstance$1(\"useDefaults\");\n\tname = name ?? vm.type.name ?? vm.type.__name;\n\tif (!name) throw new Error(\"[Bvn] Could not determine component name\");\n\tconst componentDefaults = computed(() => defaults.value?.[props._as ?? name]);\n\tconst _props = new Proxy(props, { get(target, prop) {\n\t\tconst propValue = Reflect.get(target, prop);\n\t\tif (prop === \"class\" || prop === \"style\") return [componentDefaults.value?.[prop], propValue].filter((v) => v != null);\n\t\telse if (typeof prop === \"string\" && !propIsDefined(vm.vnode, prop)) return componentDefaults.value?.[prop] ?? defaults.value?.global?.[prop] ?? propValue;\n\t\treturn propValue;\n\t} });\n\tconst _subcomponentDefaults = shallowRef();\n\twatchEffect(() => {\n\t\tif (componentDefaults.value) {\n\t\t\tconst subComponents = Object.entries(componentDefaults.value).filter(([key]) => key[0] !== void 0 && key.startsWith(key[0].toUpperCase()));\n\t\t\t_subcomponentDefaults.value = subComponents.length ? Object.fromEntries(subComponents) : void 0;\n\t\t} else _subcomponentDefaults.value = void 0;\n\t});\n\tfunction provideSubDefaults() {\n\t\tconst injected = injectSelf(defaultsKey, vm);\n\t\tprovide(defaultsKey, computed(() => _subcomponentDefaults.value ? mergeDeep(injected?.value ?? {}, _subcomponentDefaults.value) : injected?.value));\n\t}\n\treturn {\n\t\tprops: _props,\n\t\tprovideSubDefaults\n\t};\n}\nfunction useDefaults(props, name) {\n\tconst { props: _props, provideSubDefaults } = internalUseDefaults(props, name);\n\tprovideSubDefaults();\n\treturn _props;\n}\n//#endregion\nexport { useDefaults as t };\n\n//# sourceMappingURL=useDefaults-DseelK6y.mjs.map","//#region src/utils/object.ts\n/**\n* You need this because fundamentally isArray can't make the assumption that a readonly array is of type array\n* Only that `readonly T[]` has array like properties. So it breaks a bit when making things \"readonly\"\n*/\nvar isReadOnlyArray = (arr) => Array.isArray(arr);\n/**\n* Removes properties from an object, based on the values in an array, and returns the new object.\n* Equivalent to an object version of TS Omit<>\n*/\nvar omit = (objToPluck, keysToPluck) => Object.keys(objToPluck).filter((key) => !keysToPluck.map((el) => el.toString()).includes(key)).reduce((result, key) => ({\n\t...result,\n\t[key]: objToPluck[key]\n}), {});\n/**\n* Picks properties from an object, base on the values in an array, and returns the new object.\n* Equivalent to an object version of TS Pick<>\n*/\nvar pick = (objToPluck, keysToPluck) => [...keysToPluck].reduce((memo, prop) => {\n\tmemo[prop] = objToPluck[prop];\n\treturn memo;\n}, {});\n/**\n* Dynamically get a nested value from an array or\n* object with a string.\n*\n* @example get(person, 'friends[0].name')\n*\n* Thanks to\n* @link https://github.com/rayepps/radash/blob/master/src/object.ts#L214\n*\n* @deprecated The purpose of this function is to allow one to use \"dot notation\" to pick nested properties from an object.\n* Usually for props, it would be better to use a function that picks the property you want instead of relying on weak string paths\n* Using a function allows for better type safety.\n*/\nvar get = (value, path, defaultValue) => {\n\tconst segments = path.split(/[.[\\]]/g);\n\tlet current = value;\n\tfor (const key of segments) {\n\t\tif (current === null) return defaultValue;\n\t\tif (current === void 0) return defaultValue;\n\t\tif (key.trim() === \"\") continue;\n\t\tcurrent = current[key];\n\t}\n\tif (current === void 0) return defaultValue;\n\treturn current;\n};\n/**\n* Opposite of get, dynamically set a nested value into\n* an object using a key path. Does not modify the given\n* initial object.\n*\n* @example\n* set({}, 'name', 'ra') // => { name: 'ra' }\n* set({}, 'cards[0].value', 2) // => { cards: [{ value: 2 }] }\n*\n* Thanks to\n* @link https://github.com/rayepps/radash/blob/master/src/object.ts#L214\n*/\nvar set = (initial, path, value) => {\n\tconst clone = (obj) => {\n\t\tconst isPrimitive = (value) => value === void 0 || value === null || typeof value !== \"object\" && typeof value !== \"function\";\n\t\tif (isPrimitive(obj)) return obj;\n\t\tif (typeof obj === \"function\") return obj.bind({});\n\t\tconst newObj = new obj.constructor();\n\t\tObject.getOwnPropertyNames(obj).forEach((prop) => {\n\t\t\tnewObj[prop] = obj[prop];\n\t\t});\n\t\treturn newObj;\n\t};\n\tconst toInt = (value, defaultValue) => {\n\t\tconst def = defaultValue === void 0 ? 0 : defaultValue;\n\t\tif (value === null || value === void 0) return def;\n\t\tconst result = Number.parseInt(value);\n\t\treturn Number.isNaN(result) ? def : result;\n\t};\n\tif (!initial) return {};\n\tif (!path || value === void 0) return initial;\n\tconst segments = path.split(/[.[\\]]/g).filter((x) => !!x.trim());\n\tconst _set = (node) => {\n\t\tif (segments.length > 1) {\n\t\t\tconst key = segments.shift();\n\t\t\tif (segments[0] !== void 0) {\n\t\t\t\tconst nextIsNum = toInt(segments[0], null) !== null;\n\t\t\t\tnode[key] = node[key] === void 0 ? nextIsNum ? [] : {} : node[key];\n\t\t\t\t_set(node[key]);\n\t\t\t}\n\t\t} else if (segments[0] !== void 0) node[segments[0]] = value;\n\t};\n\tconst cloned = clone(initial);\n\t_set(cloned);\n\treturn cloned;\n};\nvar deepEqual = (a, b) => {\n\tif (a === b) return true;\n\tif (typeof a !== \"object\" || a === null || typeof b !== \"object\" || b === null) return false;\n\tconst keysA = Object.keys(a), keysB = Object.keys(b);\n\tif (keysA.length !== keysB.length) return false;\n\tfor (const key of keysA) if (!keysB.includes(key) || !deepEqual(a[key], b[key])) return false;\n\treturn true;\n};\n//#endregion\nexport { pick as a, omit as i, get as n, set as o, isReadOnlyArray as r, deepEqual as t };\n\n//# sourceMappingURL=object-CHQkkner.mjs.map","import { computed, toValue } from \"vue\";\n//#region src/composables/useColorVariantClasses.ts\nvar useColorVariantClasses = (obj) => computed(() => {\n\tlet props = toValue(obj);\n\tprops = {\n\t\tvariant: props.variant ?? null,\n\t\tbgVariant: props.bgVariant ?? null,\n\t\ttextVariant: props.textVariant ?? null,\n\t\tborderVariant: props.borderVariant ?? null\n\t};\n\treturn {\n\t\t[`text-bg-${props.variant}`]: props.variant !== null,\n\t\t[`text-${props.textVariant}`]: props.textVariant !== null,\n\t\t[`bg-${props.bgVariant}`]: props.bgVariant !== null,\n\t\t[`border-${props.borderVariant}`]: props.borderVariant !== null\n\t};\n});\n//#endregion\nexport { useColorVariantClasses as t };\n\n//# sourceMappingURL=useColorVariantClasses-CqeXHjRh.mjs.map","import { computed, customRef, effectScope, getCurrentInstance, getCurrentScope, hasInjectionContext, inject, isRef, nextTick, onBeforeUnmount, onMounted, onScopeDispose, reactive, readonly, ref, shallowReadonly, shallowRef, toRef, toRefs, toValue, unref, watch, watchEffect } from \"vue\";\n//#region ../../node_modules/.pnpm/@vueuse+shared@14.2.1_vue@3.5.31_typescript@5.9.3_/node_modules/@vueuse/shared/dist/index.js\n/**\n*\n* @deprecated This function will be removed in future version.\n*\n* Note: If you are using Vue 3.4+, you can straight use computed instead.\n* Because in Vue 3.4+, if computed new value does not change,\n* computed, effect, watch, watchEffect, render dependencies will not be triggered.\n* refer: https://github.com/vuejs/core/pull/5912\n*\n* @param fn effect function\n* @param options WatchOptionsBase\n* @returns readonly shallowRef\n*/\nfunction computedEager(fn, options) {\n\tvar _options$flush;\n\tconst result = shallowRef();\n\twatchEffect(() => {\n\t\tresult.value = fn();\n\t}, {\n\t\t...options,\n\t\tflush: (_options$flush = options === null || options === void 0 ? void 0 : options.flush) !== null && _options$flush !== void 0 ? _options$flush : \"sync\"\n\t});\n\treturn readonly(result);\n}\n/**\n* Call onScopeDispose() if it's inside an effect scope lifecycle, if not, do nothing\n*\n* @param fn\n*/\nfunction tryOnScopeDispose(fn, failSilently) {\n\tif (getCurrentScope()) {\n\t\tonScopeDispose(fn, failSilently);\n\t\treturn true;\n\t}\n\treturn false;\n}\n/**\n* Utility for creating event hooks\n*\n* @see https://vueuse.org/createEventHook\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createEventHook() {\n\tconst fns = /* @__PURE__ */ new Set();\n\tconst off = (fn) => {\n\t\tfns.delete(fn);\n\t};\n\tconst clear = () => {\n\t\tfns.clear();\n\t};\n\tconst on = (fn) => {\n\t\tfns.add(fn);\n\t\tconst offFn = () => off(fn);\n\t\ttryOnScopeDispose(offFn);\n\t\treturn { off: offFn };\n\t};\n\tconst trigger = (...args) => {\n\t\treturn Promise.all(Array.from(fns).map((fn) => fn(...args)));\n\t};\n\treturn {\n\t\ton,\n\t\toff,\n\t\ttrigger,\n\t\tclear\n\t};\n}\n/**\n* Keep states in the global scope to be reusable across Vue instances.\n*\n* @see https://vueuse.org/createGlobalState\n* @param stateFactory A factory function to create the state\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createGlobalState(stateFactory) {\n\tlet initialized = false;\n\tlet state;\n\tconst scope = effectScope(true);\n\treturn ((...args) => {\n\t\tif (!initialized) {\n\t\t\tstate = scope.run(() => stateFactory(...args));\n\t\t\tinitialized = true;\n\t\t}\n\t\treturn state;\n\t});\n}\nvar localProvidedStateMap = /* @__PURE__ */ new WeakMap();\n/**\n* On the basis of `inject`, it is allowed to directly call inject to obtain the value after call provide in the same component.\n*\n* @example\n* ```ts\n* injectLocal('MyInjectionKey', 1)\n* const injectedValue = injectLocal('MyInjectionKey') // injectedValue === 1\n* ```\n*\n* @__NO_SIDE_EFFECTS__\n*/\nvar injectLocal = (...args) => {\n\tvar _getCurrentInstance;\n\tconst key = args[0];\n\tconst instance = (_getCurrentInstance = getCurrentInstance()) === null || _getCurrentInstance === void 0 ? void 0 : _getCurrentInstance.proxy;\n\tconst owner = instance !== null && instance !== void 0 ? instance : getCurrentScope();\n\tif (owner == null && !hasInjectionContext()) throw new Error(\"injectLocal must be called in setup\");\n\tif (owner && localProvidedStateMap.has(owner) && key in localProvidedStateMap.get(owner)) return localProvidedStateMap.get(owner)[key];\n\treturn inject(...args);\n};\nvar isClient = typeof window !== \"undefined\" && typeof document !== \"undefined\";\ntypeof WorkerGlobalScope !== \"undefined\" && globalThis instanceof WorkerGlobalScope;\nvar isDef = (val) => typeof val !== \"undefined\";\nvar notNullish = (val) => val != null;\nvar toString = Object.prototype.toString;\nvar isObject = (val) => toString.call(val) === \"[object Object]\";\nvar timestamp = () => +Date.now();\nvar noop = () => {};\nvar hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key);\nvar isIOS = /* @__PURE__ */ getIsIOS();\nfunction getIsIOS() {\n\tvar _window, _window2, _window3;\n\treturn isClient && !!((_window = window) === null || _window === void 0 || (_window = _window.navigator) === null || _window === void 0 ? void 0 : _window.userAgent) && (/iP(?:ad|hone|od)/.test(window.navigator.userAgent) || ((_window2 = window) === null || _window2 === void 0 || (_window2 = _window2.navigator) === null || _window2 === void 0 ? void 0 : _window2.maxTouchPoints) > 2 && /iPad|Macintosh/.test((_window3 = window) === null || _window3 === void 0 ? void 0 : _window3.navigator.userAgent));\n}\nfunction toRef$1(...args) {\n\tif (args.length !== 1) return toRef(...args);\n\tconst r = args[0];\n\treturn typeof r === \"function\" ? readonly(customRef(() => ({\n\t\tget: r,\n\t\tset: noop\n\t}))) : ref(r);\n}\n/**\n* @internal\n*/\nfunction createFilterWrapper(filter, fn) {\n\tfunction wrapper(...args) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tPromise.resolve(filter(() => fn.apply(this, args), {\n\t\t\t\tfn,\n\t\t\t\tthisArg: this,\n\t\t\t\targs\n\t\t\t})).then(resolve).catch(reject);\n\t\t});\n\t}\n\treturn wrapper;\n}\nvar bypassFilter = (invoke$1) => {\n\treturn invoke$1();\n};\nfunction throttleFilter(...args) {\n\tlet lastExec = 0;\n\tlet timer;\n\tlet isLeading = true;\n\tlet lastRejector = noop;\n\tlet lastValue;\n\tlet ms;\n\tlet trailing;\n\tlet leading;\n\tlet rejectOnCancel;\n\tif (!isRef(args[0]) && typeof args[0] === \"object\") ({delay: ms, trailing = true, leading = true, rejectOnCancel = false} = args[0]);\n\telse [ms, trailing = true, leading = true, rejectOnCancel = false] = args;\n\tconst clear = () => {\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = void 0;\n\t\t\tlastRejector();\n\t\t\tlastRejector = noop;\n\t\t}\n\t};\n\tconst filter = (_invoke) => {\n\t\tconst duration = toValue(ms);\n\t\tconst elapsed = Date.now() - lastExec;\n\t\tconst invoke$1 = () => {\n\t\t\treturn lastValue = _invoke();\n\t\t};\n\t\tclear();\n\t\tif (duration <= 0) {\n\t\t\tlastExec = Date.now();\n\t\t\treturn invoke$1();\n\t\t}\n\t\tif (elapsed > duration) {\n\t\t\tlastExec = Date.now();\n\t\t\tif (leading || !isLeading) invoke$1();\n\t\t} else if (trailing) lastValue = new Promise((resolve, reject) => {\n\t\t\tlastRejector = rejectOnCancel ? reject : resolve;\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\tlastExec = Date.now();\n\t\t\t\tisLeading = true;\n\t\t\t\tresolve(invoke$1());\n\t\t\t\tclear();\n\t\t\t}, Math.max(0, duration - elapsed));\n\t\t});\n\t\tif (!leading && !timer) timer = setTimeout(() => isLeading = true, duration);\n\t\tisLeading = false;\n\t\treturn lastValue;\n\t};\n\treturn filter;\n}\n/**\n* EventFilter that gives extra controls to pause and resume the filter\n*\n* @param extendFilter  Extra filter to apply when the PausableFilter is active, default to none\n* @param options Options to configure the filter\n*/\nfunction pausableFilter(extendFilter = bypassFilter, options = {}) {\n\tconst { initialState = \"active\" } = options;\n\tconst isActive = toRef$1(initialState === \"active\");\n\tfunction pause() {\n\t\tisActive.value = false;\n\t}\n\tfunction resume() {\n\t\tisActive.value = true;\n\t}\n\tconst eventFilter = (...args) => {\n\t\tif (isActive.value) extendFilter(...args);\n\t};\n\treturn {\n\t\tisActive: readonly(isActive),\n\t\tpause,\n\t\tresume,\n\t\teventFilter\n\t};\n}\nfunction increaseWithUnit(target, delta) {\n\tvar _target$match;\n\tif (typeof target === \"number\") return target + delta;\n\tconst value = ((_target$match = target.match(/^-?\\d+\\.?\\d*/)) === null || _target$match === void 0 ? void 0 : _target$match[0]) || \"\";\n\tconst unit = target.slice(value.length);\n\tconst result = Number.parseFloat(value) + delta;\n\tif (Number.isNaN(result)) return target;\n\treturn result + unit;\n}\n/**\n* Get a px value for SSR use, do not rely on this method outside of SSR as REM unit is assumed at 16px, which might not be the case on the client\n*/\nfunction pxValue(px) {\n\treturn px.endsWith(\"rem\") ? Number.parseFloat(px) * 16 : Number.parseFloat(px);\n}\nfunction toArray(value) {\n\treturn Array.isArray(value) ? value : [value];\n}\nfunction cacheStringFunction(fn) {\n\tconst cache = Object.create(null);\n\treturn ((str) => {\n\t\treturn cache[str] || (cache[str] = fn(str));\n\t});\n}\nvar hyphenateRE = /\\B([A-Z])/g;\ncacheStringFunction((str) => str.replace(hyphenateRE, \"-$1\").toLowerCase());\nvar camelizeRE = /-(\\w)/g;\ncacheStringFunction((str) => {\n\treturn str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n});\nfunction getLifeCycleTarget(target) {\n\treturn target || getCurrentInstance();\n}\n/**\n* Make a composable function usable with multiple Vue instances.\n*\n* @see https://vueuse.org/createSharedComposable\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createSharedComposable(composable) {\n\tif (!isClient) return composable;\n\tlet subscribers = 0;\n\tlet state;\n\tlet scope;\n\tconst dispose = () => {\n\t\tsubscribers -= 1;\n\t\tif (scope && subscribers <= 0) {\n\t\t\tscope.stop();\n\t\t\tstate = void 0;\n\t\t\tscope = void 0;\n\t\t}\n\t};\n\treturn ((...args) => {\n\t\tsubscribers += 1;\n\t\tif (!scope) {\n\t\t\tscope = effectScope(true);\n\t\t\tstate = scope.run(() => composable(...args));\n\t\t}\n\t\ttryOnScopeDispose(dispose);\n\t\treturn state;\n\t});\n}\n/**\n* Converts ref to reactive.\n*\n* @see https://vueuse.org/toReactive\n* @param objectRef A ref of object\n*/\nfunction toReactive(objectRef) {\n\tif (!isRef(objectRef)) return reactive(objectRef);\n\treturn reactive(new Proxy({}, {\n\t\tget(_, p, receiver) {\n\t\t\treturn unref(Reflect.get(objectRef.value, p, receiver));\n\t\t},\n\t\tset(_, p, value) {\n\t\t\tif (isRef(objectRef.value[p]) && !isRef(value)) objectRef.value[p].value = value;\n\t\t\telse objectRef.value[p] = value;\n\t\t\treturn true;\n\t\t},\n\t\tdeleteProperty(_, p) {\n\t\t\treturn Reflect.deleteProperty(objectRef.value, p);\n\t\t},\n\t\thas(_, p) {\n\t\t\treturn Reflect.has(objectRef.value, p);\n\t\t},\n\t\townKeys() {\n\t\t\treturn Object.keys(objectRef.value);\n\t\t},\n\t\tgetOwnPropertyDescriptor() {\n\t\t\treturn {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true\n\t\t\t};\n\t\t}\n\t}));\n}\n/**\n* Computed reactive object.\n*/\nfunction reactiveComputed(fn) {\n\treturn toReactive(computed(fn));\n}\n/**\n* Reactively omit fields from a reactive object\n*\n* @see https://vueuse.org/reactiveOmit\n*/\nfunction reactiveOmit(obj, ...keys) {\n\tconst flatKeys = keys.flat();\n\tconst predicate = flatKeys[0];\n\treturn reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs(obj)).filter(([k, v]) => !predicate(toValue(v), k))) : Object.fromEntries(Object.entries(toRefs(obj)).filter((e) => !flatKeys.includes(e[0]))));\n}\n/**\n* Create a ref which will be reset to the default value after some time.\n*\n* @see https://vueuse.org/refAutoReset\n* @param defaultValue The value which will be set.\n* @param afterMs      A zero-or-greater delay in milliseconds.\n*/\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n\treturn customRef((track, trigger) => {\n\t\tlet value = toValue(defaultValue);\n\t\tlet timer;\n\t\tconst resetAfter = () => setTimeout(() => {\n\t\t\tvalue = toValue(defaultValue);\n\t\t\ttrigger();\n\t\t}, toValue(afterMs));\n\t\ttryOnScopeDispose(() => {\n\t\t\tclearTimeout(timer);\n\t\t});\n\t\treturn {\n\t\t\tget() {\n\t\t\t\ttrack();\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\tset(newValue) {\n\t\t\t\tvalue = newValue;\n\t\t\t\ttrigger();\n\t\t\t\tclearTimeout(timer);\n\t\t\t\ttimer = resetAfter();\n\t\t\t}\n\t\t};\n\t});\n}\n/**\n* Throttle execution of a function. Especially useful for rate limiting\n* execution of handlers on events like resize and scroll.\n*\n* @param   fn             A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n*                                    to `callback` when the throttled-function is executed.\n* @param   ms             A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n*                                    (default value: 200)\n*\n* @param [trailing] if true, call fn again after the time is up (default value: false)\n*\n* @param [leading] if true, call fn on the leading edge of the ms timeout (default value: true)\n*\n* @param [rejectOnCancel] if true, reject the last call if it's been cancel (default value: false)\n*\n* @return  A new, throttled, function.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {\n\treturn createFilterWrapper(throttleFilter(ms, trailing, leading, rejectOnCancel), fn);\n}\nfunction watchWithFilter(source, cb, options = {}) {\n\tconst { eventFilter = bypassFilter, ...watchOptions } = options;\n\treturn watch(source, createFilterWrapper(eventFilter, cb), watchOptions);\n}\n/** @deprecated Use Vue's built-in `watch` instead. This function will be removed in future version. */\nfunction watchPausable(source, cb, options = {}) {\n\tconst { eventFilter: filter, initialState = \"active\", ...watchOptions } = options;\n\tconst { eventFilter, pause, resume, isActive } = pausableFilter(filter, { initialState });\n\treturn {\n\t\tstop: watchWithFilter(source, cb, {\n\t\t\t...watchOptions,\n\t\t\teventFilter\n\t\t}),\n\t\tpause,\n\t\tresume,\n\t\tisActive\n\t};\n}\n/**\n* Two-way refs synchronization.\n* From the set theory perspective to restrict the option's type\n* Check in the following order:\n* 1. L = R\n* 2. L ∩ R ≠ ∅\n* 3. L ⊆ R\n* 4. L ∩ R = ∅\n*/\nfunction syncRef(left, right, ...[options]) {\n\tconst { flush = \"sync\", deep = false, immediate = true, direction = \"both\", transform = {} } = options || {};\n\tconst watchers = [];\n\tconst transformLTR = \"ltr\" in transform && transform.ltr || ((v) => v);\n\tconst transformRTL = \"rtl\" in transform && transform.rtl || ((v) => v);\n\tif (direction === \"both\" || direction === \"ltr\") watchers.push(watchPausable(left, (newValue) => {\n\t\twatchers.forEach((w) => w.pause());\n\t\tright.value = transformLTR(newValue);\n\t\twatchers.forEach((w) => w.resume());\n\t}, {\n\t\tflush,\n\t\tdeep,\n\t\timmediate\n\t}));\n\tif (direction === \"both\" || direction === \"rtl\") watchers.push(watchPausable(right, (newValue) => {\n\t\twatchers.forEach((w) => w.pause());\n\t\tleft.value = transformRTL(newValue);\n\t\twatchers.forEach((w) => w.resume());\n\t}, {\n\t\tflush,\n\t\tdeep,\n\t\timmediate\n\t}));\n\tconst stop = () => {\n\t\twatchers.forEach((w) => w.stop());\n\t};\n\treturn stop;\n}\n/**\n* Call onBeforeUnmount() if it's inside a component lifecycle, if not, do nothing\n*\n* @param fn\n* @param target\n*/\nfunction tryOnBeforeUnmount(fn, target) {\n\tif (getLifeCycleTarget(target)) onBeforeUnmount(fn, target);\n}\n/**\n* Call onMounted() if it's inside a component lifecycle, if not, just call the function\n*\n* @param fn\n* @param sync if set to false, it will run in the nextTick() of Vue\n* @param target\n*/\nfunction tryOnMounted(fn, sync = true, target) {\n\tif (getLifeCycleTarget(target)) onMounted(fn, target);\n\telse if (sync) fn();\n\telse nextTick(fn);\n}\n/**\n* Wrapper for `setInterval` with controls\n*\n* @see https://vueuse.org/useIntervalFn\n* @param cb\n* @param interval\n* @param options\n*/\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n\tconst { immediate = true, immediateCallback = false } = options;\n\tlet timer = null;\n\tconst isActive = shallowRef(false);\n\tfunction clean() {\n\t\tif (timer) {\n\t\t\tclearInterval(timer);\n\t\t\ttimer = null;\n\t\t}\n\t}\n\tfunction pause() {\n\t\tisActive.value = false;\n\t\tclean();\n\t}\n\tfunction resume() {\n\t\tconst intervalValue = toValue(interval);\n\t\tif (intervalValue <= 0) return;\n\t\tisActive.value = true;\n\t\tif (immediateCallback) cb();\n\t\tclean();\n\t\tif (isActive.value) timer = setInterval(cb, intervalValue);\n\t}\n\tif (immediate && isClient) resume();\n\tif (isRef(interval) || typeof interval === \"function\") tryOnScopeDispose(watch(interval, () => {\n\t\tif (isActive.value && isClient) resume();\n\t}));\n\ttryOnScopeDispose(pause);\n\treturn {\n\t\tisActive: shallowReadonly(isActive),\n\t\tpause,\n\t\tresume\n\t};\n}\n/**\n* Reactively convert a string ref to number.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useToNumber(value, options = {}) {\n\tconst { method = \"parseFloat\", radix, nanToZero } = options;\n\treturn computed(() => {\n\t\tlet resolved = toValue(value);\n\t\tif (typeof method === \"function\") resolved = method(resolved);\n\t\telse if (typeof resolved === \"string\") resolved = Number[method](resolved, radix);\n\t\tif (nanToZero && Number.isNaN(resolved)) resolved = 0;\n\t\treturn resolved;\n\t});\n}\n/**\n* Shorthand for watching value with {immediate: true}\n*\n* @see https://vueuse.org/watchImmediate\n*/\nfunction watchImmediate(source, cb, options) {\n\treturn watch(source, cb, {\n\t\t...options,\n\t\timmediate: true\n\t});\n}\n//#endregion\n//#region ../../node_modules/.pnpm/@vueuse+core@14.2.1_vue@3.5.31_typescript@5.9.3_/node_modules/@vueuse/core/dist/index.js\nvar defaultWindow = isClient ? window : void 0;\nvar defaultDocument = isClient ? window.document : void 0;\nisClient && window.navigator;\nisClient && window.location;\n/**\n* Get the dom element of a ref of element or Vue component instance\n*\n* @param elRef\n*/\nfunction unrefElement(elRef) {\n\tvar _$el;\n\tconst plain = toValue(elRef);\n\treturn (_$el = plain === null || plain === void 0 ? void 0 : plain.$el) !== null && _$el !== void 0 ? _$el : plain;\n}\nfunction useEventListener(...args) {\n\tconst register = (el, event, listener, options) => {\n\t\tel.addEventListener(event, listener, options);\n\t\treturn () => el.removeEventListener(event, listener, options);\n\t};\n\tconst firstParamTargets = computed(() => {\n\t\tconst test = toArray(toValue(args[0])).filter((e) => e != null);\n\t\treturn test.every((e) => typeof e !== \"string\") ? test : void 0;\n\t});\n\treturn watchImmediate(() => {\n\t\tvar _firstParamTargets$va, _firstParamTargets$va2;\n\t\treturn [\n\t\t\t(_firstParamTargets$va = (_firstParamTargets$va2 = firstParamTargets.value) === null || _firstParamTargets$va2 === void 0 ? void 0 : _firstParamTargets$va2.map((e) => unrefElement(e))) !== null && _firstParamTargets$va !== void 0 ? _firstParamTargets$va : [defaultWindow].filter((e) => e != null),\n\t\t\ttoArray(toValue(firstParamTargets.value ? args[1] : args[0])),\n\t\t\ttoArray(unref(firstParamTargets.value ? args[2] : args[1])),\n\t\t\ttoValue(firstParamTargets.value ? args[3] : args[2])\n\t\t];\n\t}, ([raw_targets, raw_events, raw_listeners, raw_options], _, onCleanup) => {\n\t\tif (!(raw_targets === null || raw_targets === void 0 ? void 0 : raw_targets.length) || !(raw_events === null || raw_events === void 0 ? void 0 : raw_events.length) || !(raw_listeners === null || raw_listeners === void 0 ? void 0 : raw_listeners.length)) return;\n\t\tconst optionsClone = isObject(raw_options) ? { ...raw_options } : raw_options;\n\t\tconst cleanups = raw_targets.flatMap((el) => raw_events.flatMap((event) => raw_listeners.map((listener) => register(el, event, listener, optionsClone))));\n\t\tonCleanup(() => {\n\t\t\tcleanups.forEach((fn) => fn());\n\t\t});\n\t}, { flush: \"post\" });\n}\nvar _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n\tconst { window: window$1 = defaultWindow, ignore = [], capture = true, detectIframe = false, controls = false } = options;\n\tif (!window$1) return controls ? {\n\t\tstop: noop,\n\t\tcancel: noop,\n\t\ttrigger: noop\n\t} : noop;\n\tif (isIOS && !_iOSWorkaround) {\n\t\t_iOSWorkaround = true;\n\t\tconst listenerOptions = { passive: true };\n\t\tArray.from(window$1.document.body.children).forEach((el) => el.addEventListener(\"click\", noop, listenerOptions));\n\t\twindow$1.document.documentElement.addEventListener(\"click\", noop, listenerOptions);\n\t}\n\tlet shouldListen = true;\n\tconst shouldIgnore = (event) => {\n\t\treturn toValue(ignore).some((target$1) => {\n\t\t\tif (typeof target$1 === \"string\") return Array.from(window$1.document.querySelectorAll(target$1)).some((el) => el === event.target || event.composedPath().includes(el));\n\t\t\telse {\n\t\t\t\tconst el = unrefElement(target$1);\n\t\t\t\treturn el && (event.target === el || event.composedPath().includes(el));\n\t\t\t}\n\t\t});\n\t};\n\t/**\n\t* Determines if the given target has multiple root elements.\n\t* Referenced from: https://github.com/vuejs/test-utils/blob/ccb460be55f9f6be05ab708500a41ec8adf6f4bc/src/vue-wrapper.ts#L21\n\t*/\n\tfunction hasMultipleRoots(target$1) {\n\t\tconst vm = toValue(target$1);\n\t\treturn vm && vm.$.subTree.shapeFlag === 16;\n\t}\n\tfunction checkMultipleRoots(target$1, event) {\n\t\tconst vm = toValue(target$1);\n\t\tconst children = vm.$.subTree && vm.$.subTree.children;\n\t\tif (children == null || !Array.isArray(children)) return false;\n\t\treturn children.some((child) => child.el === event.target || event.composedPath().includes(child.el));\n\t}\n\tconst listener = (event) => {\n\t\tconst el = unrefElement(target);\n\t\tif (event.target == null) return;\n\t\tif (!(el instanceof Element) && hasMultipleRoots(target) && checkMultipleRoots(target, event)) return;\n\t\tif (!el || el === event.target || event.composedPath().includes(el)) return;\n\t\tif (\"detail\" in event && event.detail === 0) shouldListen = !shouldIgnore(event);\n\t\tif (!shouldListen) {\n\t\t\tshouldListen = true;\n\t\t\treturn;\n\t\t}\n\t\thandler(event);\n\t};\n\tlet isProcessingClick = false;\n\tconst cleanup = [\n\t\tuseEventListener(window$1, \"click\", (event) => {\n\t\t\tif (!isProcessingClick) {\n\t\t\t\tisProcessingClick = true;\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tisProcessingClick = false;\n\t\t\t\t}, 0);\n\t\t\t\tlistener(event);\n\t\t\t}\n\t\t}, {\n\t\t\tpassive: true,\n\t\t\tcapture\n\t\t}),\n\t\tuseEventListener(window$1, \"pointerdown\", (e) => {\n\t\t\tconst el = unrefElement(target);\n\t\t\tshouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));\n\t\t}, { passive: true }),\n\t\tdetectIframe && useEventListener(window$1, \"blur\", (event) => {\n\t\t\tsetTimeout(() => {\n\t\t\t\tvar _window$document$acti;\n\t\t\t\tconst el = unrefElement(target);\n\t\t\t\tif (((_window$document$acti = window$1.document.activeElement) === null || _window$document$acti === void 0 ? void 0 : _window$document$acti.tagName) === \"IFRAME\" && !(el === null || el === void 0 ? void 0 : el.contains(window$1.document.activeElement))) handler(event);\n\t\t\t}, 0);\n\t\t}, { passive: true })\n\t].filter(Boolean);\n\tconst stop = () => cleanup.forEach((fn) => fn());\n\tif (controls) return {\n\t\tstop,\n\t\tcancel: () => {\n\t\t\tshouldListen = false;\n\t\t},\n\t\ttrigger: (event) => {\n\t\t\tshouldListen = true;\n\t\t\tlistener(event);\n\t\t\tshouldListen = false;\n\t\t}\n\t};\n\treturn stop;\n}\n/**\n* Mounted state in ref.\n*\n* @see https://vueuse.org/useMounted\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useMounted() {\n\tconst isMounted = shallowRef(false);\n\tconst instance = getCurrentInstance();\n\tif (instance) onMounted(() => {\n\t\tisMounted.value = true;\n\t}, instance);\n\treturn isMounted;\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction useSupported(callback) {\n\tconst isMounted = useMounted();\n\treturn computed(() => {\n\t\tisMounted.value;\n\t\treturn Boolean(callback());\n\t});\n}\n/**\n* Watch for changes being made to the DOM tree.\n*\n* @see https://vueuse.org/useMutationObserver\n* @see https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver MutationObserver MDN\n* @param target\n* @param callback\n* @param options\n*/\nfunction useMutationObserver(target, callback, options = {}) {\n\tconst { window: window$1 = defaultWindow, ...mutationOptions } = options;\n\tlet observer;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"MutationObserver\" in window$1);\n\tconst cleanup = () => {\n\t\tif (observer) {\n\t\t\tobserver.disconnect();\n\t\t\tobserver = void 0;\n\t\t}\n\t};\n\tconst stopWatch = watch(computed(() => {\n\t\tconst items = toArray(toValue(target)).map(unrefElement).filter(notNullish);\n\t\treturn new Set(items);\n\t}), (newTargets) => {\n\t\tcleanup();\n\t\tif (isSupported.value && newTargets.size) {\n\t\t\tobserver = new MutationObserver(callback);\n\t\t\tnewTargets.forEach((el) => observer.observe(el, mutationOptions));\n\t\t}\n\t}, {\n\t\timmediate: true,\n\t\tflush: \"post\"\n\t});\n\tconst takeRecords = () => {\n\t\treturn observer === null || observer === void 0 ? void 0 : observer.takeRecords();\n\t};\n\tconst stop = () => {\n\t\tstopWatch();\n\t\tcleanup();\n\t};\n\ttryOnScopeDispose(stop);\n\treturn {\n\t\tisSupported,\n\t\tstop,\n\t\ttakeRecords\n\t};\n}\n/**\n* Fires when the element or any element containing it is removed.\n*\n* @param target\n* @param callback\n* @param options\n*/\nfunction onElementRemoval(target, callback, options = {}) {\n\tconst { window: window$1 = defaultWindow, document: document$1 = window$1 === null || window$1 === void 0 ? void 0 : window$1.document, flush = \"sync\" } = options;\n\tif (!window$1 || !document$1) return noop;\n\tlet stopFn;\n\tconst cleanupAndUpdate = (fn) => {\n\t\tstopFn === null || stopFn === void 0 || stopFn();\n\t\tstopFn = fn;\n\t};\n\tconst stopWatch = watchEffect(() => {\n\t\tconst el = unrefElement(target);\n\t\tif (el) {\n\t\t\tconst { stop } = useMutationObserver(document$1, (mutationsList) => {\n\t\t\t\tif (mutationsList.map((mutation) => [...mutation.removedNodes]).flat().some((node) => node === el || node.contains(el))) callback(mutationsList);\n\t\t\t}, {\n\t\t\t\twindow: window$1,\n\t\t\t\tchildList: true,\n\t\t\t\tsubtree: true\n\t\t\t});\n\t\t\tcleanupAndUpdate(stop);\n\t\t}\n\t}, { flush });\n\tconst stopHandle = () => {\n\t\tstopWatch();\n\t\tcleanupAndUpdate();\n\t};\n\ttryOnScopeDispose(stopHandle);\n\treturn stopHandle;\n}\nfunction createKeyPredicate(keyFilter) {\n\tif (typeof keyFilter === \"function\") return keyFilter;\n\telse if (typeof keyFilter === \"string\") return (event) => event.key === keyFilter;\n\telse if (Array.isArray(keyFilter)) return (event) => keyFilter.includes(event.key);\n\treturn () => true;\n}\nfunction onKeyStroke(...args) {\n\tlet key;\n\tlet handler;\n\tlet options = {};\n\tif (args.length === 3) {\n\t\tkey = args[0];\n\t\thandler = args[1];\n\t\toptions = args[2];\n\t} else if (args.length === 2) if (typeof args[1] === \"object\") {\n\t\tkey = true;\n\t\thandler = args[0];\n\t\toptions = args[1];\n\t} else {\n\t\tkey = args[0];\n\t\thandler = args[1];\n\t}\n\telse {\n\t\tkey = true;\n\t\thandler = args[0];\n\t}\n\tconst { target = defaultWindow, eventName = \"keydown\", passive = false, dedupe = false } = options;\n\tconst predicate = createKeyPredicate(key);\n\tconst listener = (e) => {\n\t\tif (e.repeat && toValue(dedupe)) return;\n\t\tif (predicate(e)) handler(e);\n\t};\n\treturn useEventListener(target, eventName, listener, passive);\n}\n/**\n* Call function on every `requestAnimationFrame`. With controls of pausing and resuming.\n*\n* @see https://vueuse.org/useRafFn\n* @param fn\n* @param options\n*/\nfunction useRafFn(fn, options = {}) {\n\tconst { immediate = true, fpsLimit = null, window: window$1 = defaultWindow, once = false } = options;\n\tconst isActive = shallowRef(false);\n\tconst intervalLimit = computed(() => {\n\t\tconst limit = toValue(fpsLimit);\n\t\treturn limit ? 1e3 / limit : null;\n\t});\n\tlet previousFrameTimestamp = 0;\n\tlet rafId = null;\n\tfunction loop(timestamp$1) {\n\t\tif (!isActive.value || !window$1) return;\n\t\tif (!previousFrameTimestamp) previousFrameTimestamp = timestamp$1;\n\t\tconst delta = timestamp$1 - previousFrameTimestamp;\n\t\tif (intervalLimit.value && delta < intervalLimit.value) {\n\t\t\trafId = window$1.requestAnimationFrame(loop);\n\t\t\treturn;\n\t\t}\n\t\tpreviousFrameTimestamp = timestamp$1;\n\t\tfn({\n\t\t\tdelta,\n\t\t\ttimestamp: timestamp$1\n\t\t});\n\t\tif (once) {\n\t\t\tisActive.value = false;\n\t\t\trafId = null;\n\t\t\treturn;\n\t\t}\n\t\trafId = window$1.requestAnimationFrame(loop);\n\t}\n\tfunction resume() {\n\t\tif (!isActive.value && window$1) {\n\t\t\tisActive.value = true;\n\t\t\tpreviousFrameTimestamp = 0;\n\t\t\trafId = window$1.requestAnimationFrame(loop);\n\t\t}\n\t}\n\tfunction pause() {\n\t\tisActive.value = false;\n\t\tif (rafId != null && window$1) {\n\t\t\twindow$1.cancelAnimationFrame(rafId);\n\t\t\trafId = null;\n\t\t}\n\t}\n\tif (immediate) resume();\n\ttryOnScopeDispose(pause);\n\treturn {\n\t\tisActive: readonly(isActive),\n\t\tpause,\n\t\tresume\n\t};\n}\nvar ssrWidthSymbol = Symbol(\"vueuse-ssr-width\");\n/* @__NO_SIDE_EFFECTS__ */\nfunction useSSRWidth() {\n\tconst ssrWidth = hasInjectionContext() ? injectLocal(ssrWidthSymbol, null) : null;\n\treturn typeof ssrWidth === \"number\" ? ssrWidth : void 0;\n}\n/**\n* Reactive Media Query.\n*\n* @see https://vueuse.org/useMediaQuery\n* @param query\n* @param options\n*/\nfunction useMediaQuery(query, options = {}) {\n\tconst { window: window$1 = defaultWindow, ssrWidth = /* @__PURE__ */ useSSRWidth() } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"matchMedia\" in window$1 && typeof window$1.matchMedia === \"function\");\n\tconst ssrSupport = shallowRef(typeof ssrWidth === \"number\");\n\tconst mediaQuery = shallowRef();\n\tconst matches = shallowRef(false);\n\tconst handler = (event) => {\n\t\tmatches.value = event.matches;\n\t};\n\twatchEffect(() => {\n\t\tif (ssrSupport.value) {\n\t\t\tssrSupport.value = !isSupported.value;\n\t\t\tmatches.value = toValue(query).split(\",\").some((queryString) => {\n\t\t\t\tconst not = queryString.includes(\"not all\");\n\t\t\t\tconst minWidth = queryString.match(/\\(\\s*min-width:\\s*(-?\\d+(?:\\.\\d*)?[a-z]+\\s*)\\)/);\n\t\t\t\tconst maxWidth = queryString.match(/\\(\\s*max-width:\\s*(-?\\d+(?:\\.\\d*)?[a-z]+\\s*)\\)/);\n\t\t\t\tlet res = Boolean(minWidth || maxWidth);\n\t\t\t\tif (minWidth && res) res = ssrWidth >= pxValue(minWidth[1]);\n\t\t\t\tif (maxWidth && res) res = ssrWidth <= pxValue(maxWidth[1]);\n\t\t\t\treturn not ? !res : res;\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tif (!isSupported.value) return;\n\t\tmediaQuery.value = window$1.matchMedia(toValue(query));\n\t\tmatches.value = mediaQuery.value.matches;\n\t});\n\tuseEventListener(mediaQuery, \"change\", handler, { passive: true });\n\treturn computed(() => matches.value);\n}\n/**\n* Breakpoints from Bootstrap V5\n*\n* @see https://getbootstrap.com/docs/5.0/layout/breakpoints\n*/\nvar breakpointsBootstrapV5 = {\n\txs: 0,\n\tsm: 576,\n\tmd: 768,\n\tlg: 992,\n\txl: 1200,\n\txxl: 1400\n};\n/**\n* Reactively viewport breakpoints\n*\n* @see https://vueuse.org/useBreakpoints\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useBreakpoints(breakpoints, options = {}) {\n\tfunction getValue$1(k, delta) {\n\t\tlet v = toValue(breakpoints[toValue(k)]);\n\t\tif (delta != null) v = increaseWithUnit(v, delta);\n\t\tif (typeof v === \"number\") v = `${v}px`;\n\t\treturn v;\n\t}\n\tconst { window: window$1 = defaultWindow, strategy = \"min-width\", ssrWidth = /* @__PURE__ */ useSSRWidth() } = options;\n\tconst ssrSupport = typeof ssrWidth === \"number\";\n\tconst mounted = ssrSupport ? shallowRef(false) : { value: true };\n\tif (ssrSupport) tryOnMounted(() => mounted.value = !!window$1);\n\tfunction match(query, size) {\n\t\tif (!mounted.value && ssrSupport) return query === \"min\" ? ssrWidth >= pxValue(size) : ssrWidth <= pxValue(size);\n\t\tif (!window$1) return false;\n\t\treturn window$1.matchMedia(`(${query}-width: ${size})`).matches;\n\t}\n\tconst greaterOrEqual = (k) => {\n\t\treturn useMediaQuery(() => `(min-width: ${getValue$1(k)})`, options);\n\t};\n\tconst smallerOrEqual = (k) => {\n\t\treturn useMediaQuery(() => `(max-width: ${getValue$1(k)})`, options);\n\t};\n\tconst shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\n\t\tObject.defineProperty(shortcuts, k, {\n\t\t\tget: () => strategy === \"min-width\" ? greaterOrEqual(k) : smallerOrEqual(k),\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true\n\t\t});\n\t\treturn shortcuts;\n\t}, {});\n\tfunction current() {\n\t\tconst points = Object.keys(breakpoints).map((k) => [\n\t\t\tk,\n\t\t\tshortcutMethods[k],\n\t\t\tpxValue(getValue$1(k))\n\t\t]).sort((a, b) => a[2] - b[2]);\n\t\treturn computed(() => points.filter(([, v]) => v.value).map(([k]) => k));\n\t}\n\treturn Object.assign(shortcutMethods, {\n\t\tgreaterOrEqual,\n\t\tsmallerOrEqual,\n\t\tgreater(k) {\n\t\t\treturn useMediaQuery(() => `(min-width: ${getValue$1(k, .1)})`, options);\n\t\t},\n\t\tsmaller(k) {\n\t\t\treturn useMediaQuery(() => `(max-width: ${getValue$1(k, -.1)})`, options);\n\t\t},\n\t\tbetween(a, b) {\n\t\t\treturn useMediaQuery(() => `(min-width: ${getValue$1(a)}) and (max-width: ${getValue$1(b, -.1)})`, options);\n\t\t},\n\t\tisGreater(k) {\n\t\t\treturn match(\"min\", getValue$1(k, .1));\n\t\t},\n\t\tisGreaterOrEqual(k) {\n\t\t\treturn match(\"min\", getValue$1(k));\n\t\t},\n\t\tisSmaller(k) {\n\t\t\treturn match(\"max\", getValue$1(k, -.1));\n\t\t},\n\t\tisSmallerOrEqual(k) {\n\t\t\treturn match(\"max\", getValue$1(k));\n\t\t},\n\t\tisInBetween(a, b) {\n\t\t\treturn match(\"min\", getValue$1(a)) && match(\"max\", getValue$1(b, -.1));\n\t\t},\n\t\tcurrent,\n\t\tactive() {\n\t\t\tconst bps = current();\n\t\t\treturn computed(() => bps.value.length === 0 ? \"\" : bps.value.at(strategy === \"min-width\" ? -1 : 0));\n\t\t}\n\t});\n}\nfunction cloneFnJSON(source) {\n\treturn JSON.parse(JSON.stringify(source));\n}\nvar _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nvar globalKey = \"__vueuse_ssr_handlers__\";\nvar handlers = /* @__PURE__ */ getHandlers();\nfunction getHandlers() {\n\tif (!(globalKey in _global)) _global[globalKey] = _global[globalKey] || {};\n\treturn _global[globalKey];\n}\nfunction getSSRHandler(key, fallback) {\n\treturn handlers[key] || fallback;\n}\n/**\n* Reactive dark theme preference.\n*\n* @see https://vueuse.org/usePreferredDark\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredDark(options) {\n\treturn useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\nfunction guessSerializerType(rawInit) {\n\treturn 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}\nvar StorageSerializers = {\n\tboolean: {\n\t\tread: (v) => v === \"true\",\n\t\twrite: (v) => String(v)\n\t},\n\tobject: {\n\t\tread: (v) => JSON.parse(v),\n\t\twrite: (v) => JSON.stringify(v)\n\t},\n\tnumber: {\n\t\tread: (v) => Number.parseFloat(v),\n\t\twrite: (v) => String(v)\n\t},\n\tany: {\n\t\tread: (v) => v,\n\t\twrite: (v) => String(v)\n\t},\n\tstring: {\n\t\tread: (v) => v,\n\t\twrite: (v) => String(v)\n\t},\n\tmap: {\n\t\tread: (v) => new Map(JSON.parse(v)),\n\t\twrite: (v) => JSON.stringify(Array.from(v.entries()))\n\t},\n\tset: {\n\t\tread: (v) => new Set(JSON.parse(v)),\n\t\twrite: (v) => JSON.stringify(Array.from(v))\n\t},\n\tdate: {\n\t\tread: (v) => new Date(v),\n\t\twrite: (v) => v.toISOString()\n\t}\n};\nvar customStorageEventName = \"vueuse-storage\";\n/**\n* Reactive LocalStorage/SessionStorage.\n*\n* @see https://vueuse.org/useStorage\n*/\nfunction useStorage(key, defaults$1, storage, options = {}) {\n\tvar _options$serializer;\n\tconst { flush = \"pre\", deep = true, listenToStorageChanges = true, writeDefaults = true, mergeDefaults = false, shallow, window: window$1 = defaultWindow, eventFilter, onError = (e) => {\n\t\tconsole.error(e);\n\t}, initOnMounted } = options;\n\tconst data = (shallow ? shallowRef : ref)(typeof defaults$1 === \"function\" ? defaults$1() : defaults$1);\n\tconst keyComputed = computed(() => toValue(key));\n\tif (!storage) try {\n\t\tstorage = getSSRHandler(\"getDefaultStorage\", () => defaultWindow === null || defaultWindow === void 0 ? void 0 : defaultWindow.localStorage)();\n\t} catch (e) {\n\t\tonError(e);\n\t}\n\tif (!storage) return data;\n\tconst rawInit = toValue(defaults$1);\n\tconst type = guessSerializerType(rawInit);\n\tconst serializer = (_options$serializer = options.serializer) !== null && _options$serializer !== void 0 ? _options$serializer : StorageSerializers[type];\n\tconst { pause: pauseWatch, resume: resumeWatch } = watchPausable(data, (newValue) => write(newValue), {\n\t\tflush,\n\t\tdeep,\n\t\teventFilter\n\t});\n\twatch(keyComputed, () => update(), { flush });\n\tlet firstMounted = false;\n\tconst onStorageEvent = (ev) => {\n\t\tif (initOnMounted && !firstMounted) return;\n\t\tupdate(ev);\n\t};\n\tconst onStorageCustomEvent = (ev) => {\n\t\tif (initOnMounted && !firstMounted) return;\n\t\tupdateFromCustomEvent(ev);\n\t};\n\t/**\n\t* The custom event is needed for same-document syncing when using custom\n\t* storage backends, but it doesn't work across different documents.\n\t*\n\t* TODO: Consider implementing a BroadcastChannel-based solution that fixes this.\n\t*/\n\tif (window$1 && listenToStorageChanges) if (storage instanceof Storage) useEventListener(window$1, \"storage\", onStorageEvent, { passive: true });\n\telse useEventListener(window$1, customStorageEventName, onStorageCustomEvent);\n\tif (initOnMounted) tryOnMounted(() => {\n\t\tfirstMounted = true;\n\t\tupdate();\n\t});\n\telse update();\n\tfunction dispatchWriteEvent(oldValue, newValue) {\n\t\tif (window$1) {\n\t\t\tconst payload = {\n\t\t\t\tkey: keyComputed.value,\n\t\t\t\toldValue,\n\t\t\t\tnewValue,\n\t\t\t\tstorageArea: storage\n\t\t\t};\n\t\t\twindow$1.dispatchEvent(storage instanceof Storage ? new StorageEvent(\"storage\", payload) : new CustomEvent(customStorageEventName, { detail: payload }));\n\t\t}\n\t}\n\tfunction write(v) {\n\t\ttry {\n\t\t\tconst oldValue = storage.getItem(keyComputed.value);\n\t\t\tif (v == null) {\n\t\t\t\tdispatchWriteEvent(oldValue, null);\n\t\t\t\tstorage.removeItem(keyComputed.value);\n\t\t\t} else {\n\t\t\t\tconst serialized = serializer.write(v);\n\t\t\t\tif (oldValue !== serialized) {\n\t\t\t\t\tstorage.setItem(keyComputed.value, serialized);\n\t\t\t\t\tdispatchWriteEvent(oldValue, serialized);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t}\n\tfunction read(event) {\n\t\tconst rawValue = event ? event.newValue : storage.getItem(keyComputed.value);\n\t\tif (rawValue == null) {\n\t\t\tif (writeDefaults && rawInit != null) storage.setItem(keyComputed.value, serializer.write(rawInit));\n\t\t\treturn rawInit;\n\t\t} else if (!event && mergeDefaults) {\n\t\t\tconst value = serializer.read(rawValue);\n\t\t\tif (typeof mergeDefaults === \"function\") return mergeDefaults(value, rawInit);\n\t\t\telse if (type === \"object\" && !Array.isArray(value)) return {\n\t\t\t\t...rawInit,\n\t\t\t\t...value\n\t\t\t};\n\t\t\treturn value;\n\t\t} else if (typeof rawValue !== \"string\") return rawValue;\n\t\telse return serializer.read(rawValue);\n\t}\n\tfunction update(event) {\n\t\tif (event && event.storageArea !== storage) return;\n\t\tif (event && event.key == null) {\n\t\t\tdata.value = rawInit;\n\t\t\treturn;\n\t\t}\n\t\tif (event && event.key !== keyComputed.value) return;\n\t\tpauseWatch();\n\t\ttry {\n\t\t\tconst serializedData = serializer.write(data.value);\n\t\t\tif (event === void 0 || (event === null || event === void 0 ? void 0 : event.newValue) !== serializedData) data.value = read(event);\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t} finally {\n\t\t\tif (event) nextTick(resumeWatch);\n\t\t\telse resumeWatch();\n\t\t}\n\t}\n\tfunction updateFromCustomEvent(event) {\n\t\tupdate(event.detail);\n\t}\n\treturn data;\n}\nvar CSS_DISABLE_TRANS = \"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\";\n/**\n* Reactive color mode with auto data persistence.\n*\n* @see https://vueuse.org/useColorMode\n* @param options\n*/\nfunction useColorMode(options = {}) {\n\tconst { selector = \"html\", attribute = \"class\", initialValue = \"auto\", window: window$1 = defaultWindow, storage, storageKey = \"vueuse-color-scheme\", listenToStorageChanges = true, storageRef, emitAuto, disableTransition = true } = options;\n\tconst modes = {\n\t\tauto: \"\",\n\t\tlight: \"light\",\n\t\tdark: \"dark\",\n\t\t...options.modes || {}\n\t};\n\tconst preferredDark = usePreferredDark({ window: window$1 });\n\tconst system = computed(() => preferredDark.value ? \"dark\" : \"light\");\n\tconst store = storageRef || (storageKey == null ? toRef$1(initialValue) : useStorage(storageKey, initialValue, storage, {\n\t\twindow: window$1,\n\t\tlistenToStorageChanges\n\t}));\n\tconst state = computed(() => store.value === \"auto\" ? system.value : store.value);\n\tconst updateHTMLAttrs = getSSRHandler(\"updateHTMLAttrs\", (selector$1, attribute$1, value) => {\n\t\tconst el = typeof selector$1 === \"string\" ? window$1 === null || window$1 === void 0 ? void 0 : window$1.document.querySelector(selector$1) : unrefElement(selector$1);\n\t\tif (!el) return;\n\t\tconst classesToAdd = /* @__PURE__ */ new Set();\n\t\tconst classesToRemove = /* @__PURE__ */ new Set();\n\t\tlet attributeToChange = null;\n\t\tif (attribute$1 === \"class\") {\n\t\t\tconst current = value.split(/\\s/g);\n\t\t\tObject.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n\t\t\t\tif (current.includes(v)) classesToAdd.add(v);\n\t\t\t\telse classesToRemove.add(v);\n\t\t\t});\n\t\t} else attributeToChange = {\n\t\t\tkey: attribute$1,\n\t\t\tvalue\n\t\t};\n\t\tif (classesToAdd.size === 0 && classesToRemove.size === 0 && attributeToChange === null) return;\n\t\tlet style;\n\t\tif (disableTransition) {\n\t\t\tstyle = window$1.document.createElement(\"style\");\n\t\t\tstyle.appendChild(document.createTextNode(CSS_DISABLE_TRANS));\n\t\t\twindow$1.document.head.appendChild(style);\n\t\t}\n\t\tfor (const c of classesToAdd) el.classList.add(c);\n\t\tfor (const c of classesToRemove) el.classList.remove(c);\n\t\tif (attributeToChange) el.setAttribute(attributeToChange.key, attributeToChange.value);\n\t\tif (disableTransition) {\n\t\t\twindow$1.getComputedStyle(style).opacity;\n\t\t\tdocument.head.removeChild(style);\n\t\t}\n\t});\n\tfunction defaultOnChanged(mode) {\n\t\tvar _modes$mode;\n\t\tupdateHTMLAttrs(selector, attribute, (_modes$mode = modes[mode]) !== null && _modes$mode !== void 0 ? _modes$mode : mode);\n\t}\n\tfunction onChanged(mode) {\n\t\tif (options.onChanged) options.onChanged(mode, defaultOnChanged);\n\t\telse defaultOnChanged(mode);\n\t}\n\twatch(state, onChanged, {\n\t\tflush: \"post\",\n\t\timmediate: true\n\t});\n\ttryOnMounted(() => onChanged(state.value));\n\tconst auto = computed({\n\t\tget() {\n\t\t\treturn emitAuto ? store.value : state.value;\n\t\t},\n\t\tset(v) {\n\t\t\tstore.value = v;\n\t\t}\n\t});\n\treturn Object.assign(auto, {\n\t\tstore,\n\t\tsystem,\n\t\tstate\n\t});\n}\n/**\n* Reactively track `document.visibilityState`.\n*\n* @see https://vueuse.org/useDocumentVisibility\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useDocumentVisibility(options = {}) {\n\tconst { document: document$1 = defaultDocument } = options;\n\tif (!document$1) return shallowRef(\"visible\");\n\tconst visibility = shallowRef(document$1.visibilityState);\n\tuseEventListener(document$1, \"visibilitychange\", () => {\n\t\tvisibility.value = document$1.visibilityState;\n\t}, { passive: true });\n\treturn visibility;\n}\nfunction useDropZone(target, options = {}) {\n\tconst isOverDropZone = shallowRef(false);\n\tconst files = shallowRef(null);\n\tlet counter = 0;\n\tlet isValid = true;\n\tif (isClient) {\n\t\tvar _options$multiple, _options$preventDefau;\n\t\tconst _options = typeof options === \"function\" ? { onDrop: options } : options;\n\t\tconst multiple = (_options$multiple = _options.multiple) !== null && _options$multiple !== void 0 ? _options$multiple : true;\n\t\tconst preventDefaultForUnhandled = (_options$preventDefau = _options.preventDefaultForUnhandled) !== null && _options$preventDefau !== void 0 ? _options$preventDefau : false;\n\t\tconst getFiles = (event) => {\n\t\t\tvar _event$dataTransfer$f, _event$dataTransfer;\n\t\t\tconst list = Array.from((_event$dataTransfer$f = (_event$dataTransfer = event.dataTransfer) === null || _event$dataTransfer === void 0 ? void 0 : _event$dataTransfer.files) !== null && _event$dataTransfer$f !== void 0 ? _event$dataTransfer$f : []);\n\t\t\treturn list.length === 0 ? null : multiple ? list : [list[0]];\n\t\t};\n\t\tconst checkDataTypes = (types) => {\n\t\t\tconst dataTypes = unref(_options.dataTypes);\n\t\t\tif (typeof dataTypes === \"function\") return dataTypes(types);\n\t\t\tif (!(dataTypes === null || dataTypes === void 0 ? void 0 : dataTypes.length)) return true;\n\t\t\tif (types.length === 0) return false;\n\t\t\treturn types.every((type) => dataTypes.some((allowedType) => type.includes(allowedType)));\n\t\t};\n\t\tconst checkValidity = (items) => {\n\t\t\tif (_options.checkValidity) return _options.checkValidity(items);\n\t\t\tconst dataTypesValid = checkDataTypes(Array.from(items !== null && items !== void 0 ? items : []).map((item) => item.type));\n\t\t\tconst multipleFilesValid = multiple || items.length <= 1;\n\t\t\treturn dataTypesValid && multipleFilesValid;\n\t\t};\n\t\tconst isSafari = () => /^(?:(?!chrome|android).)*safari/i.test(navigator.userAgent) && !(\"chrome\" in window);\n\t\tconst handleDragEvent = (event, eventType) => {\n\t\t\tvar _event$dataTransfer2, _ref;\n\t\t\tconst dataTransferItemList = (_event$dataTransfer2 = event.dataTransfer) === null || _event$dataTransfer2 === void 0 ? void 0 : _event$dataTransfer2.items;\n\t\t\tisValid = (_ref = dataTransferItemList && checkValidity(dataTransferItemList)) !== null && _ref !== void 0 ? _ref : false;\n\t\t\tif (preventDefaultForUnhandled) event.preventDefault();\n\t\t\tif (!isSafari() && !isValid) {\n\t\t\t\tif (event.dataTransfer) event.dataTransfer.dropEffect = \"none\";\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tif (event.dataTransfer) event.dataTransfer.dropEffect = \"copy\";\n\t\t\tconst currentFiles = getFiles(event);\n\t\t\tswitch (eventType) {\n\t\t\t\tcase \"enter\":\n\t\t\t\t\tvar _options$onEnter;\n\t\t\t\t\tcounter += 1;\n\t\t\t\t\tisOverDropZone.value = true;\n\t\t\t\t\t(_options$onEnter = _options.onEnter) === null || _options$onEnter === void 0 || _options$onEnter.call(_options, null, event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"over\":\n\t\t\t\t\tvar _options$onOver;\n\t\t\t\t\t(_options$onOver = _options.onOver) === null || _options$onOver === void 0 || _options$onOver.call(_options, null, event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"leave\":\n\t\t\t\t\tvar _options$onLeave;\n\t\t\t\t\tcounter -= 1;\n\t\t\t\t\tif (counter === 0) isOverDropZone.value = false;\n\t\t\t\t\t(_options$onLeave = _options.onLeave) === null || _options$onLeave === void 0 || _options$onLeave.call(_options, null, event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"drop\":\n\t\t\t\t\tcounter = 0;\n\t\t\t\t\tisOverDropZone.value = false;\n\t\t\t\t\tif (isValid) {\n\t\t\t\t\t\tvar _options$onDrop;\n\t\t\t\t\t\tfiles.value = currentFiles;\n\t\t\t\t\t\t(_options$onDrop = _options.onDrop) === null || _options$onDrop === void 0 || _options$onDrop.call(_options, currentFiles, event);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\t\tuseEventListener(target, \"dragenter\", (event) => handleDragEvent(event, \"enter\"));\n\t\tuseEventListener(target, \"dragover\", (event) => handleDragEvent(event, \"over\"));\n\t\tuseEventListener(target, \"dragleave\", (event) => handleDragEvent(event, \"leave\"));\n\t\tuseEventListener(target, \"drop\", (event) => handleDragEvent(event, \"drop\"));\n\t}\n\treturn {\n\t\tfiles,\n\t\tisOverDropZone\n\t};\n}\nfunction useElementHover(el, options = {}) {\n\tconst { delayEnter = 0, delayLeave = 0, triggerOnRemoval = false, window: window$1 = defaultWindow } = options;\n\tconst isHovered = shallowRef(false);\n\tlet timer;\n\tconst toggle = (entering) => {\n\t\tconst delay = entering ? delayEnter : delayLeave;\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = void 0;\n\t\t}\n\t\tif (delay) timer = setTimeout(() => isHovered.value = entering, delay);\n\t\telse isHovered.value = entering;\n\t};\n\tif (!window$1) return isHovered;\n\tuseEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n\tuseEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n\tif (triggerOnRemoval) onElementRemoval(computed(() => unrefElement(el)), () => toggle(false));\n\treturn isHovered;\n}\n/**\n* Detects that a target element's visibility.\n*\n* @see https://vueuse.org/useIntersectionObserver\n* @param target\n* @param callback\n* @param options\n*/\nfunction useIntersectionObserver(target, callback, options = {}) {\n\tconst { root, rootMargin, threshold = 0, window: window$1 = defaultWindow, immediate = true } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"IntersectionObserver\" in window$1);\n\tconst targets = computed(() => {\n\t\treturn toArray(toValue(target)).map(unrefElement).filter(notNullish);\n\t});\n\tlet cleanup = noop;\n\tconst isActive = shallowRef(immediate);\n\tconst stopWatch = isSupported.value ? watch(() => [\n\t\ttargets.value,\n\t\tunrefElement(root),\n\t\ttoValue(rootMargin),\n\t\tisActive.value\n\t], ([targets$1, root$1, rootMargin$1]) => {\n\t\tcleanup();\n\t\tif (!isActive.value) return;\n\t\tif (!targets$1.length) return;\n\t\tconst observer = new IntersectionObserver(callback, {\n\t\t\troot: unrefElement(root$1),\n\t\t\trootMargin: rootMargin$1,\n\t\t\tthreshold\n\t\t});\n\t\ttargets$1.forEach((el) => el && observer.observe(el));\n\t\tcleanup = () => {\n\t\t\tobserver.disconnect();\n\t\t\tcleanup = noop;\n\t\t};\n\t}, {\n\t\timmediate,\n\t\tflush: \"post\"\n\t}) : noop;\n\tconst stop = () => {\n\t\tcleanup();\n\t\tstopWatch();\n\t\tisActive.value = false;\n\t};\n\ttryOnScopeDispose(stop);\n\treturn {\n\t\tisSupported,\n\t\tisActive,\n\t\tpause() {\n\t\t\tcleanup();\n\t\t\tisActive.value = false;\n\t\t},\n\t\tresume() {\n\t\t\tisActive.value = true;\n\t\t},\n\t\tstop\n\t};\n}\nvar DEFAULT_OPTIONS = {\n\tmultiple: true,\n\taccept: \"*\",\n\treset: false,\n\tdirectory: false\n};\nfunction prepareInitialFiles(files) {\n\tif (!files) return null;\n\tif (files instanceof FileList) return files;\n\tconst dt = new DataTransfer();\n\tfor (const file of files) dt.items.add(file);\n\treturn dt.files;\n}\n/**\n* Open file dialog with ease.\n*\n* @see https://vueuse.org/useFileDialog\n* @param options\n*/\nfunction useFileDialog(options = {}) {\n\tconst { document: document$1 = defaultDocument } = options;\n\tconst files = ref(prepareInitialFiles(options.initialFiles));\n\tconst { on: onChange, trigger: changeTrigger } = createEventHook();\n\tconst { on: onCancel, trigger: cancelTrigger } = createEventHook();\n\tconst inputRef = computed(() => {\n\t\tvar _unrefElement;\n\t\tconst input = (_unrefElement = unrefElement(options.input)) !== null && _unrefElement !== void 0 ? _unrefElement : document$1 ? document$1.createElement(\"input\") : void 0;\n\t\tif (input) {\n\t\t\tinput.type = \"file\";\n\t\t\tinput.onchange = (event) => {\n\t\t\t\tfiles.value = event.target.files;\n\t\t\t\tchangeTrigger(files.value);\n\t\t\t};\n\t\t\tinput.oncancel = () => {\n\t\t\t\tcancelTrigger();\n\t\t\t};\n\t\t}\n\t\treturn input;\n\t});\n\tconst reset = () => {\n\t\tfiles.value = null;\n\t\tif (inputRef.value && inputRef.value.value) {\n\t\t\tinputRef.value.value = \"\";\n\t\t\tchangeTrigger(null);\n\t\t}\n\t};\n\tconst applyOptions = (options$1) => {\n\t\tconst el = inputRef.value;\n\t\tif (!el) return;\n\t\tel.multiple = toValue(options$1.multiple);\n\t\tel.accept = toValue(options$1.accept);\n\t\tel.webkitdirectory = toValue(options$1.directory);\n\t\tif (hasOwn(options$1, \"capture\")) el.capture = toValue(options$1.capture);\n\t};\n\tconst open = (localOptions) => {\n\t\tconst el = inputRef.value;\n\t\tif (!el) return;\n\t\tconst mergedOptions = {\n\t\t\t...DEFAULT_OPTIONS,\n\t\t\t...options,\n\t\t\t...localOptions\n\t\t};\n\t\tapplyOptions(mergedOptions);\n\t\tif (toValue(mergedOptions.reset)) reset();\n\t\tel.click();\n\t};\n\twatchEffect(() => {\n\t\tapplyOptions(options);\n\t});\n\treturn {\n\t\tfiles: readonly(files),\n\t\topen,\n\t\treset,\n\t\tonCancel,\n\t\tonChange\n\t};\n}\n/**\n* Track or set the focus state of a DOM element.\n*\n* @see https://vueuse.org/useFocus\n* @param target The target element for the focus and blur events.\n* @param options\n*/\nfunction useFocus(target, options = {}) {\n\tconst { initialValue = false, focusVisible = false, preventScroll = false } = options;\n\tconst innerFocused = shallowRef(false);\n\tconst targetElement = computed(() => unrefElement(target));\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(targetElement, \"focus\", (event) => {\n\t\tvar _matches, _ref;\n\t\tif (!focusVisible || ((_matches = (_ref = event.target).matches) === null || _matches === void 0 ? void 0 : _matches.call(_ref, \":focus-visible\"))) innerFocused.value = true;\n\t}, listenerOptions);\n\tuseEventListener(targetElement, \"blur\", () => innerFocused.value = false, listenerOptions);\n\tconst focused = computed({\n\t\tget: () => innerFocused.value,\n\t\tset(value) {\n\t\t\tvar _targetElement$value, _targetElement$value2;\n\t\t\tif (!value && innerFocused.value) (_targetElement$value = targetElement.value) === null || _targetElement$value === void 0 || _targetElement$value.blur();\n\t\t\telse if (value && !innerFocused.value) (_targetElement$value2 = targetElement.value) === null || _targetElement$value2 === void 0 || _targetElement$value2.focus({ preventScroll });\n\t\t}\n\t});\n\twatch(targetElement, () => {\n\t\tfocused.value = initialValue;\n\t}, {\n\t\timmediate: true,\n\t\tflush: \"post\"\n\t});\n\treturn { focused };\n}\n/**\n* Resolves an element from a given element, window, or document.\n*\n* @internal\n*/\nfunction resolveElement(el) {\n\tif (typeof Window !== \"undefined\" && el instanceof Window) return el.document.documentElement;\n\tif (typeof Document !== \"undefined\" && el instanceof Document) return el.documentElement;\n\treturn el;\n}\nvar UseMouseBuiltinExtractors = {\n\tpage: (event) => [event.pageX, event.pageY],\n\tclient: (event) => [event.clientX, event.clientY],\n\tscreen: (event) => [event.screenX, event.screenY],\n\tmovement: (event) => event instanceof MouseEvent ? [event.movementX, event.movementY] : null\n};\n/**\n* Reactive mouse position.\n*\n* @see https://vueuse.org/useMouse\n* @param options\n*/\nfunction useMouse(options = {}) {\n\tconst { type = \"page\", touch = true, resetOnTouchEnds = false, initialValue = {\n\t\tx: 0,\n\t\ty: 0\n\t}, window: window$1 = defaultWindow, target = window$1, scroll = true, eventFilter } = options;\n\tlet _prevMouseEvent = null;\n\tlet _prevScrollX = 0;\n\tlet _prevScrollY = 0;\n\tconst x = shallowRef(initialValue.x);\n\tconst y = shallowRef(initialValue.y);\n\tconst sourceType = shallowRef(null);\n\tconst extractor = typeof type === \"function\" ? type : UseMouseBuiltinExtractors[type];\n\tconst mouseHandler = (event) => {\n\t\tconst result = extractor(event);\n\t\t_prevMouseEvent = event;\n\t\tif (result) {\n\t\t\t[x.value, y.value] = result;\n\t\t\tsourceType.value = \"mouse\";\n\t\t}\n\t\tif (window$1) {\n\t\t\t_prevScrollX = window$1.scrollX;\n\t\t\t_prevScrollY = window$1.scrollY;\n\t\t}\n\t};\n\tconst touchHandler = (event) => {\n\t\tif (event.touches.length > 0) {\n\t\t\tconst result = extractor(event.touches[0]);\n\t\t\tif (result) {\n\t\t\t\t[x.value, y.value] = result;\n\t\t\t\tsourceType.value = \"touch\";\n\t\t\t}\n\t\t}\n\t};\n\tconst scrollHandler = () => {\n\t\tif (!_prevMouseEvent || !window$1) return;\n\t\tconst pos = extractor(_prevMouseEvent);\n\t\tif (_prevMouseEvent instanceof MouseEvent && pos) {\n\t\t\tx.value = pos[0] + window$1.scrollX - _prevScrollX;\n\t\t\ty.value = pos[1] + window$1.scrollY - _prevScrollY;\n\t\t}\n\t};\n\tconst reset = () => {\n\t\tx.value = initialValue.x;\n\t\ty.value = initialValue.y;\n\t};\n\tconst mouseHandlerWrapper = eventFilter ? (event) => eventFilter(() => mouseHandler(event), {}) : (event) => mouseHandler(event);\n\tconst touchHandlerWrapper = eventFilter ? (event) => eventFilter(() => touchHandler(event), {}) : (event) => touchHandler(event);\n\tconst scrollHandlerWrapper = eventFilter ? () => eventFilter(() => scrollHandler(), {}) : () => scrollHandler();\n\tif (target) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(target, [\"mousemove\", \"dragover\"], mouseHandlerWrapper, listenerOptions);\n\t\tif (touch && type !== \"movement\") {\n\t\t\tuseEventListener(target, [\"touchstart\", \"touchmove\"], touchHandlerWrapper, listenerOptions);\n\t\t\tif (resetOnTouchEnds) useEventListener(target, \"touchend\", reset, listenerOptions);\n\t\t}\n\t\tif (scroll && type === \"page\") useEventListener(window$1, \"scroll\", scrollHandlerWrapper, listenerOptions);\n\t}\n\treturn {\n\t\tx,\n\t\ty,\n\t\tsourceType\n\t};\n}\nfunction checkOverflowScroll(ele) {\n\tconst style = window.getComputedStyle(ele);\n\tif (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientWidth < ele.scrollWidth || style.overflowY === \"auto\" && ele.clientHeight < ele.scrollHeight) return true;\n\telse {\n\t\tconst parent = ele.parentNode;\n\t\tif (!parent || parent.tagName === \"BODY\") return false;\n\t\treturn checkOverflowScroll(parent);\n\t}\n}\nfunction preventDefault(rawEvent) {\n\tconst e = rawEvent || window.event;\n\tconst _target = e.target;\n\tif (checkOverflowScroll(_target)) return false;\n\tif (e.touches.length > 1) return true;\n\tif (e.preventDefault) e.preventDefault();\n\treturn false;\n}\nvar elInitialOverflow = /* @__PURE__ */ new WeakMap();\n/**\n* Lock scrolling of the element.\n*\n* @see https://vueuse.org/useScrollLock\n* @param element\n*/\nfunction useScrollLock(element, initialState = false) {\n\tconst isLocked = shallowRef(initialState);\n\tlet stopTouchMoveListener = null;\n\tlet initialOverflow = \"\";\n\twatch(toRef$1(element), (el) => {\n\t\tconst target = resolveElement(toValue(el));\n\t\tif (target) {\n\t\t\tconst ele = target;\n\t\t\tif (!elInitialOverflow.get(ele)) elInitialOverflow.set(ele, ele.style.overflow);\n\t\t\tif (ele.style.overflow !== \"hidden\") initialOverflow = ele.style.overflow;\n\t\t\tif (ele.style.overflow === \"hidden\") return isLocked.value = true;\n\t\t\tif (isLocked.value) return ele.style.overflow = \"hidden\";\n\t\t}\n\t}, { immediate: true });\n\tconst lock = () => {\n\t\tconst el = resolveElement(toValue(element));\n\t\tif (!el || isLocked.value) return;\n\t\tif (isIOS) stopTouchMoveListener = useEventListener(el, \"touchmove\", (e) => {\n\t\t\tpreventDefault(e);\n\t\t}, { passive: false });\n\t\tel.style.overflow = \"hidden\";\n\t\tisLocked.value = true;\n\t};\n\tconst unlock = () => {\n\t\tconst el = resolveElement(toValue(element));\n\t\tif (!el || !isLocked.value) return;\n\t\tif (isIOS) stopTouchMoveListener === null || stopTouchMoveListener === void 0 || stopTouchMoveListener();\n\t\tel.style.overflow = initialOverflow;\n\t\telInitialOverflow.delete(el);\n\t\tisLocked.value = false;\n\t};\n\ttryOnScopeDispose(unlock);\n\treturn computed({\n\t\tget() {\n\t\t\treturn isLocked.value;\n\t\t},\n\t\tset(v) {\n\t\t\tif (v) lock();\n\t\t\telse unlock();\n\t\t}\n\t});\n}\n/**\n* Reactive swipe detection.\n*\n* @see https://vueuse.org/useSwipe\n* @param target\n* @param options\n*/\nfunction useSwipe(target, options = {}) {\n\tconst { threshold = 50, onSwipe, onSwipeEnd, onSwipeStart, passive = true } = options;\n\tconst coordsStart = reactive({\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst coordsEnd = reactive({\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst diffX = computed(() => coordsStart.x - coordsEnd.x);\n\tconst diffY = computed(() => coordsStart.y - coordsEnd.y);\n\tconst { max, abs } = Math;\n\tconst isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold);\n\tconst isSwiping = shallowRef(false);\n\tconst direction = computed(() => {\n\t\tif (!isThresholdExceeded.value) return \"none\";\n\t\tif (abs(diffX.value) > abs(diffY.value)) return diffX.value > 0 ? \"left\" : \"right\";\n\t\telse return diffY.value > 0 ? \"up\" : \"down\";\n\t});\n\tconst getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY];\n\tconst updateCoordsStart = (x, y) => {\n\t\tcoordsStart.x = x;\n\t\tcoordsStart.y = y;\n\t};\n\tconst updateCoordsEnd = (x, y) => {\n\t\tcoordsEnd.x = x;\n\t\tcoordsEnd.y = y;\n\t};\n\tconst listenerOptions = {\n\t\tpassive,\n\t\tcapture: !passive\n\t};\n\tconst onTouchEnd = (e) => {\n\t\tif (isSwiping.value) onSwipeEnd === null || onSwipeEnd === void 0 || onSwipeEnd(e, direction.value);\n\t\tisSwiping.value = false;\n\t};\n\tconst stops = [\n\t\tuseEventListener(target, \"touchstart\", (e) => {\n\t\t\tif (e.touches.length !== 1) return;\n\t\t\tconst [x, y] = getTouchEventCoords(e);\n\t\t\tupdateCoordsStart(x, y);\n\t\t\tupdateCoordsEnd(x, y);\n\t\t\tonSwipeStart === null || onSwipeStart === void 0 || onSwipeStart(e);\n\t\t}, listenerOptions),\n\t\tuseEventListener(target, \"touchmove\", (e) => {\n\t\t\tif (e.touches.length !== 1) return;\n\t\t\tconst [x, y] = getTouchEventCoords(e);\n\t\t\tupdateCoordsEnd(x, y);\n\t\t\tif (listenerOptions.capture && !listenerOptions.passive && Math.abs(diffX.value) > Math.abs(diffY.value)) e.preventDefault();\n\t\t\tif (!isSwiping.value && isThresholdExceeded.value) isSwiping.value = true;\n\t\t\tif (isSwiping.value) onSwipe === null || onSwipe === void 0 || onSwipe(e);\n\t\t}, listenerOptions),\n\t\tuseEventListener(target, [\"touchend\", \"touchcancel\"], onTouchEnd, listenerOptions)\n\t];\n\tconst stop = () => stops.forEach((s) => s());\n\treturn {\n\t\tisSwiping,\n\t\tdirection,\n\t\tcoordsStart,\n\t\tcoordsEnd,\n\t\tlengthX: diffX,\n\t\tlengthY: diffY,\n\t\tstop\n\t};\n}\nNumber.POSITIVE_INFINITY;\nfunction getDefaultScheduler$2(options) {\n\tif (\"interval\" in options || \"immediate\" in options) {\n\t\tconst { interval = \"requestAnimationFrame\", immediate = true } = options;\n\t\treturn interval === \"requestAnimationFrame\" ? (cb) => useRafFn(cb, { immediate }) : (cb) => useIntervalFn(cb, interval, { immediate });\n\t}\n\treturn useRafFn;\n}\nfunction useTimestamp(options = {}) {\n\tconst { controls: exposeControls = false, offset = 0, scheduler = getDefaultScheduler$2(options), callback } = options;\n\tconst ts = shallowRef(timestamp() + offset);\n\tconst update = () => ts.value = timestamp() + offset;\n\tconst controls = scheduler(callback ? () => {\n\t\tupdate();\n\t\tcallback(ts.value);\n\t} : update);\n\tif (exposeControls) return {\n\t\ttimestamp: ts,\n\t\t...controls\n\t};\n\telse return ts;\n}\n/**\n* Shorthand for v-model binding, props + emit -> ref\n*\n* @see https://vueuse.org/useVModel\n* @param props\n* @param key (default 'modelValue')\n* @param emit\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useVModel(props, key, emit, options = {}) {\n\tvar _vm$$emit, _vm$proxy;\n\tconst { clone = false, passive = false, eventName, deep = false, defaultValue, shouldEmit } = options;\n\tconst vm = getCurrentInstance();\n\tconst _emit = emit || (vm === null || vm === void 0 ? void 0 : vm.emit) || (vm === null || vm === void 0 || (_vm$$emit = vm.$emit) === null || _vm$$emit === void 0 ? void 0 : _vm$$emit.bind(vm)) || (vm === null || vm === void 0 || (_vm$proxy = vm.proxy) === null || _vm$proxy === void 0 || (_vm$proxy = _vm$proxy.$emit) === null || _vm$proxy === void 0 ? void 0 : _vm$proxy.bind(vm === null || vm === void 0 ? void 0 : vm.proxy));\n\tlet event = eventName;\n\tif (!key) key = \"modelValue\";\n\tevent = event || `update:${key.toString()}`;\n\tconst cloneFn = (val) => !clone ? val : typeof clone === \"function\" ? clone(val) : cloneFnJSON(val);\n\tconst getValue$1 = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue;\n\tconst triggerEmit = (value) => {\n\t\tif (shouldEmit) {\n\t\t\tif (shouldEmit(value)) _emit(event, value);\n\t\t} else _emit(event, value);\n\t};\n\tif (passive) {\n\t\tconst proxy = ref(getValue$1());\n\t\tlet isUpdating = false;\n\t\twatch(() => props[key], (v) => {\n\t\t\tif (!isUpdating) {\n\t\t\t\tisUpdating = true;\n\t\t\t\tproxy.value = cloneFn(v);\n\t\t\t\tnextTick(() => isUpdating = false);\n\t\t\t}\n\t\t});\n\t\twatch(proxy, (v) => {\n\t\t\tif (!isUpdating && (v !== props[key] || deep)) triggerEmit(v);\n\t\t}, { deep });\n\t\treturn proxy;\n\t} else return computed({\n\t\tget() {\n\t\t\treturn getValue$1();\n\t\t},\n\t\tset(value) {\n\t\t\ttriggerEmit(value);\n\t\t}\n\t});\n}\n//#endregion\nexport { reactiveOmit as A, computedEager as C, isClient as D, createSharedComposable as E, tryOnScopeDispose as F, useIntervalFn as I, useThrottleFn as L, syncRef as M, toArray as N, isIOS as O, tryOnBeforeUnmount as P, useToNumber as R, useVModel as S, createGlobalState as T, useMouse as _, onKeyStroke as a, useSwipe as b, useColorMode as c, useElementHover as d, useEventListener as f, useMounted as g, useIntersectionObserver as h, onClickOutside as i, refAutoReset as j, notNullish as k, useDocumentVisibility as l, useFocus as m, defaultWindow as n, unrefElement as o, useFileDialog as p, getSSRHandler as r, useBreakpoints as s, breakpointsBootstrapV5 as t, useDropZone as u, useMutationObserver as v, createEventHook as w, useTimestamp as x, useScrollLock as y };\n\n//# sourceMappingURL=dist-Dk9C_HFS.mjs.map","import { computed, toValue } from \"vue\";\n//#region src/composables/useRadiusElementClasses.ts\nvar useRadiusElementClasses = (obj) => {\n\tconst resolveRadiusElement = (value, str) => {\n\t\tconst strValue = str === null ? \"\" : `-${str}`;\n\t\treturn value === \"circle\" ? `rounded${strValue}-circle` : value === \"pill\" ? `rounded${strValue}-pill` : typeof value === \"number\" || value === \"0\" || value === \"1\" || value === \"2\" || value === \"3\" || value === \"4\" || value === \"5\" ? `rounded${strValue}-${value}` : value === \"none\" ? `rounded${strValue}-0` : value === \"sm\" ? `rounded${strValue}-1` : value === \"lg\" ? `rounded${strValue}-5` : `rounded${strValue}`;\n\t};\n\treturn computed(() => {\n\t\tconst props = toValue(obj);\n\t\treturn {\n\t\t\t[`${resolveRadiusElement(props.rounded, null)}`]: !!props.rounded,\n\t\t\t[`${resolveRadiusElement(props.roundedTop, \"top\")}`]: !!props.roundedTop,\n\t\t\t[`${resolveRadiusElement(props.roundedBottom, \"bottom\")}`]: !!props.roundedBottom,\n\t\t\t[`${resolveRadiusElement(props.roundedStart, \"start\")}`]: !!props.roundedStart,\n\t\t\t[`${resolveRadiusElement(props.roundedEnd, \"end\")}`]: !!props.roundedEnd\n\t\t};\n\t});\n};\n//#endregion\nexport { useRadiusElementClasses as t };\n\n//# sourceMappingURL=useRadiusElementClasses-BW832F7F.mjs.map","import { R as useToNumber } from \"./dist-Dk9C_HFS.mjs\";\nimport { t as useDefaults } from \"./useDefaults-DseelK6y.mjs\";\nimport { r as isReadOnlyArray } from \"./object-CHQkkner.mjs\";\nimport { t as useRadiusElementClasses } from \"./useRadiusElementClasses-BW832F7F.mjs\";\nimport { computed, createBlock, defineComponent, normalizeClass, openBlock, resolveDynamicComponent, unref } from \"vue\";\n//#endregion\n//#region src/components/BImg/BImg.vue\nvar BImg_default = /* @__PURE__ */ defineComponent({\n\t__name: \"BImg\",\n\tprops: {\n\t\tblank: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tblankColor: { default: \"transparent\" },\n\t\tblock: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tfluid: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tfluidGrow: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\theight: { default: void 0 },\n\t\ttag: { default: \"img\" },\n\t\tlazy: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tsizes: { default: void 0 },\n\t\tsrc: { default: void 0 },\n\t\tsrcset: { default: void 0 },\n\t\tthumbnail: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\twidth: { default: void 0 },\n\t\tplacement: { default: void 0 },\n\t\trounded: {\n\t\t\ttype: [\n\t\t\t\tBoolean,\n\t\t\t\tString,\n\t\t\t\tNumber\n\t\t\t],\n\t\t\tdefault: false\n\t\t},\n\t\troundedTop: {\n\t\t\ttype: [\n\t\t\t\tBoolean,\n\t\t\t\tString,\n\t\t\t\tNumber\n\t\t\t],\n\t\t\tdefault: void 0\n\t\t},\n\t\troundedBottom: {\n\t\t\ttype: [\n\t\t\t\tBoolean,\n\t\t\t\tString,\n\t\t\t\tNumber\n\t\t\t],\n\t\t\tdefault: void 0\n\t\t},\n\t\troundedStart: {\n\t\t\ttype: [\n\t\t\t\tBoolean,\n\t\t\t\tString,\n\t\t\t\tNumber\n\t\t\t],\n\t\t\tdefault: void 0\n\t\t},\n\t\troundedEnd: {\n\t\t\ttype: [\n\t\t\t\tBoolean,\n\t\t\t\tString,\n\t\t\t\tNumber\n\t\t\t],\n\t\t\tdefault: void 0\n\t\t}\n\t},\n\tsetup(__props) {\n\t\tconst props = useDefaults(__props, \"BImg\");\n\t\tconst heightNumber = useToNumber(() => props.height ?? NaN);\n\t\tconst widthNumber = useToNumber(() => props.width ?? NaN);\n\t\tconst radiusElementClasses = useRadiusElementClasses(() => ({\n\t\t\trounded: props.rounded,\n\t\t\troundedTop: props.roundedTop,\n\t\t\troundedBottom: props.roundedBottom,\n\t\t\troundedStart: props.roundedStart,\n\t\t\troundedEnd: props.roundedEnd\n\t\t}));\n\t\tconst computedSrcset = computed(() => typeof props.srcset === \"string\" ? props.srcset.split(\",\").filter((x) => x).join(\",\") : isReadOnlyArray(props.srcset) ? props.srcset.filter((x) => x).join(\",\") : void 0);\n\t\tconst computedSizes = computed(() => typeof props.sizes === \"string\" ? props.sizes.split(\",\").filter((x) => x).join(\",\") : isReadOnlyArray(props.sizes) ? props.sizes.filter((x) => x).join(\",\") : void 0);\n\t\tconst computedDimensions = computed(() => {\n\t\t\tconst width = Number.isNaN(widthNumber.value) ? void 0 : widthNumber.value;\n\t\t\tconst height = Number.isNaN(heightNumber.value) ? void 0 : heightNumber.value;\n\t\t\tif (props.blank) {\n\t\t\t\tif (width !== void 0 && height === void 0) return {\n\t\t\t\t\theight: width,\n\t\t\t\t\twidth\n\t\t\t\t};\n\t\t\t\tif (width === void 0 && height !== void 0) return {\n\t\t\t\t\theight,\n\t\t\t\t\twidth: height\n\t\t\t\t};\n\t\t\t\tif (width === void 0 && height === void 0) return {\n\t\t\t\t\theight: 1,\n\t\t\t\t\twidth: 1\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\twidth,\n\t\t\t\theight\n\t\t\t};\n\t\t});\n\t\tconst computedBlankImgSrc = computed(() => makeBlankImgSrc(computedDimensions.value.width, computedDimensions.value.height, props.blankColor));\n\t\tconst computedAlignment = computed(() => ({\n\t\t\t\"float-start\": props.placement === \"start\",\n\t\t\t\"float-end\": props.placement === \"end\",\n\t\t\t\"mx-auto\": props.placement === \"center\"\n\t\t}));\n\t\tconst computedClasses = computed(() => [\n\t\t\tradiusElementClasses.value,\n\t\t\tcomputedAlignment.value,\n\t\t\t{\n\t\t\t\t\"img-thumbnail\": props.thumbnail,\n\t\t\t\t\"img-fluid\": props.fluid || props.fluidGrow,\n\t\t\t\t\"w-100\": props.fluidGrow,\n\t\t\t\t\"d-block\": props.block || props.placement === \"center\"\n\t\t\t}\n\t\t]);\n\t\tconst makeBlankImgSrc = (width, height, color) => `data:image/svg+xml;charset=UTF-8,${encodeURIComponent(`<svg width=\"${width}\" height=\"${height}\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\" preserveAspectRatio=\"none\">\n    <rect width=\"100%\" height=\"100%\" style=\"fill:${color};\"></rect>\n    </svg>`)}`;\n\t\treturn (_ctx, _cache) => {\n\t\t\treturn openBlock(), createBlock(resolveDynamicComponent(unref(props).tag), {\n\t\t\t\tclass: normalizeClass([computedClasses.value, \"b-img\"]),\n\t\t\t\tsrc: !unref(props).blank ? unref(props).src : computedBlankImgSrc.value,\n\t\t\t\twidth: computedDimensions.value.width || void 0,\n\t\t\t\theight: computedDimensions.value.height || void 0,\n\t\t\t\tsrcset: !unref(props).blank ? computedSrcset.value : void 0,\n\t\t\t\tsizes: !unref(props).blank ? computedSizes.value : void 0,\n\t\t\t\tloading: unref(props).lazy ? \"lazy\" : \"eager\"\n\t\t\t}, null, 8, [\n\t\t\t\t\"class\",\n\t\t\t\t\"src\",\n\t\t\t\t\"width\",\n\t\t\t\t\"height\",\n\t\t\t\t\"srcset\",\n\t\t\t\t\"sizes\",\n\t\t\t\t\"loading\"\n\t\t\t]);\n\t\t};\n\t}\n});\n//#endregion\nexport { BImg_default as t };\n\n//# sourceMappingURL=BImg-QBS2ECBc.mjs.map","import { o as isEmptySlot } from \"./dom-AhkaSoh8.mjs\";\nimport { t as useDefaults } from \"./useDefaults-DseelK6y.mjs\";\nimport { i as omit } from \"./object-CHQkkner.mjs\";\nimport { t as useColorVariantClasses } from \"./useColorVariantClasses-CqeXHjRh.mjs\";\nimport { t as BImg_default } from \"./BImg-QBS2ECBc.mjs\";\nimport { computed, createBlock, createCommentVNode, createTextVNode, defineComponent, mergeProps, normalizeClass, normalizeProps, openBlock, renderSlot, resolveDynamicComponent, toDisplayString, unref, useSlots, withCtx } from \"vue\";\n//#endregion\n//#region src/components/BCard/BCardImg.vue\nvar BCardImg_default = /* @__PURE__ */ defineComponent({\n\t__name: \"BCardImg\",\n\tprops: {\n\t\tplacement: { default: \"top\" },\n\t\tblank: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\tblankColor: { default: void 0 },\n\t\tblock: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\tfluid: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\tfluidGrow: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\theight: { default: void 0 },\n\t\ttag: {},\n\t\tlazy: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\tsizes: { default: void 0 },\n\t\tsrc: { default: void 0 },\n\t\tsrcset: { default: void 0 },\n\t\tthumbnail: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\twidth: { default: void 0 },\n\t\trounded: {\n\t\t\ttype: [\n\t\t\t\tBoolean,\n\t\t\t\tString,\n\t\t\t\tNumber\n\t\t\t],\n\t\t\tdefault: void 0\n\t\t},\n\t\troundedTop: {\n\t\t\ttype: [\n\t\t\t\tBoolean,\n\t\t\t\tString,\n\t\t\t\tNumber\n\t\t\t],\n\t\t\tdefault: void 0\n\t\t},\n\t\troundedBottom: {\n\t\t\ttype: [\n\t\t\t\tBoolean,\n\t\t\t\tString,\n\t\t\t\tNumber\n\t\t\t],\n\t\t\tdefault: void 0\n\t\t},\n\t\troundedStart: {\n\t\t\ttype: [\n\t\t\t\tBoolean,\n\t\t\t\tString,\n\t\t\t\tNumber\n\t\t\t],\n\t\t\tdefault: void 0\n\t\t},\n\t\troundedEnd: {\n\t\t\ttype: [\n\t\t\t\tBoolean,\n\t\t\t\tString,\n\t\t\t\tNumber\n\t\t\t],\n\t\t\tdefault: void 0\n\t\t}\n\t},\n\tsetup(__props) {\n\t\tconst props = useDefaults(__props, \"BCardImg\");\n\t\tconst baseAlignmentClasses = computed(() => ({\n\t\t\t\"card-img-top\": props.placement === \"top\",\n\t\t\t\"card-img-end\": props.placement === \"end\",\n\t\t\t\"card-img-bottom\": props.placement === \"bottom\",\n\t\t\t\"card-img-start\": props.placement === \"start\",\n\t\t\t\"card-img\": props.placement === \"overlay\"\n\t\t}));\n\t\tconst computedImgProps = computed(() => omit(props, [\"placement\"]));\n\t\treturn (_ctx, _cache) => {\n\t\t\treturn openBlock(), createBlock(BImg_default, mergeProps(computedImgProps.value, { class: baseAlignmentClasses.value }), null, 16, [\"class\"]);\n\t\t};\n\t}\n});\n//#endregion\n//#region src/components/BCardHeadFoot.vue\nvar BCardHeadFoot_default = /* @__PURE__ */ defineComponent({\n\t__name: \"BCardHeadFoot\",\n\tprops: {\n\t\tborderVariant: { default: null },\n\t\ttag: { default: \"div\" },\n\t\ttext: { default: void 0 },\n\t\tvariant: { default: null },\n\t\tbgVariant: { default: null },\n\t\ttextVariant: { default: null }\n\t},\n\tsetup(__props) {\n\t\tconst computedClasses = useColorVariantClasses(__props);\n\t\treturn (_ctx, _cache) => {\n\t\t\treturn openBlock(), createBlock(resolveDynamicComponent(__props.tag), { class: normalizeClass(unref(computedClasses)) }, {\n\t\t\t\tdefault: withCtx(() => [renderSlot(_ctx.$slots, \"default\", {}, () => [createTextVNode(toDisplayString(__props.text), 1)])]),\n\t\t\t\t_: 3\n\t\t\t}, 8, [\"class\"]);\n\t\t};\n\t}\n});\n//#endregion\n//#region src/components/BCard/BCardHeader.vue\nvar BCardHeader_default = /* @__PURE__ */ defineComponent({\n\t__name: \"BCardHeader\",\n\tprops: {\n\t\tborderVariant: { default: void 0 },\n\t\ttag: { default: \"div\" },\n\t\ttext: { default: void 0 },\n\t\tvariant: { default: void 0 },\n\t\tbgVariant: { default: void 0 },\n\t\ttextVariant: { default: void 0 }\n\t},\n\tsetup(__props) {\n\t\tconst props = useDefaults(__props, \"BCardHeader\");\n\t\treturn (_ctx, _cache) => {\n\t\t\treturn openBlock(), createBlock(BCardHeadFoot_default, mergeProps({ class: \"card-header\" }, unref(props)), {\n\t\t\t\tdefault: withCtx(() => [renderSlot(_ctx.$slots, \"default\")]),\n\t\t\t\t_: 3\n\t\t\t}, 16);\n\t\t};\n\t}\n});\n//#endregion\n//#region src/components/BCard/BCardTitle.vue\nvar BCardTitle_default = /* @__PURE__ */ defineComponent({\n\t__name: \"BCardTitle\",\n\tprops: {\n\t\ttag: { default: \"h4\" },\n\t\ttext: { default: void 0 }\n\t},\n\tsetup(__props) {\n\t\tconst props = useDefaults(__props, \"BCardTitle\");\n\t\treturn (_ctx, _cache) => {\n\t\t\treturn openBlock(), createBlock(resolveDynamicComponent(unref(props).tag), { class: \"card-title\" }, {\n\t\t\t\tdefault: withCtx(() => [renderSlot(_ctx.$slots, \"default\", {}, () => [createTextVNode(toDisplayString(unref(props).text), 1)])]),\n\t\t\t\t_: 3\n\t\t\t});\n\t\t};\n\t}\n});\n//#endregion\n//#region src/components/BCard/BCardSubtitle.vue\nvar BCardSubtitle_default = /* @__PURE__ */ defineComponent({\n\t__name: \"BCardSubtitle\",\n\tprops: {\n\t\ttext: { default: void 0 },\n\t\ttag: { default: \"h6\" },\n\t\ttextVariant: { default: \"body-secondary\" }\n\t},\n\tsetup(__props) {\n\t\tconst props = useDefaults(__props, \"BCardSubtitle\");\n\t\tconst computedClasses = useColorVariantClasses(props);\n\t\treturn (_ctx, _cache) => {\n\t\t\treturn openBlock(), createBlock(resolveDynamicComponent(unref(props).tag), { class: normalizeClass([\"card-subtitle mb-2\", unref(computedClasses)]) }, {\n\t\t\t\tdefault: withCtx(() => [renderSlot(_ctx.$slots, \"default\", {}, () => [createTextVNode(toDisplayString(unref(props).text), 1)])]),\n\t\t\t\t_: 3\n\t\t\t}, 8, [\"class\"]);\n\t\t};\n\t}\n});\n//#endregion\n//#region src/components/BCard/BCardBody.vue\nvar BCardBody_default = /* @__PURE__ */ defineComponent({\n\t__name: \"BCardBody\",\n\tprops: {\n\t\tborderVariant: { default: null },\n\t\toverlay: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tsubtitle: { default: void 0 },\n\t\tsubtitleTag: { default: \"h4\" },\n\t\tsubtitleTextVariant: { default: void 0 },\n\t\ttag: { default: \"div\" },\n\t\ttext: { default: void 0 },\n\t\ttitle: { default: void 0 },\n\t\ttitleTag: { default: \"h4\" },\n\t\tvariant: { default: null },\n\t\tbgVariant: { default: null },\n\t\ttextVariant: { default: null }\n\t},\n\tsetup(__props) {\n\t\tconst props = useDefaults(__props, \"BCardBody\");\n\t\tconst slots = useSlots();\n\t\tconst hasTitleSlot = computed(() => !isEmptySlot(slots.title));\n\t\tconst hasSubtitleSlot = computed(() => !isEmptySlot(slots.subtitle));\n\t\tconst colorClasses = useColorVariantClasses(props);\n\t\tconst computedClasses = computed(() => [colorClasses.value, props.overlay ? \"card-img-overlay\" : \"card-body\"]);\n\t\treturn (_ctx, _cache) => {\n\t\t\treturn openBlock(), createBlock(resolveDynamicComponent(unref(props).tag), { class: normalizeClass(computedClasses.value) }, {\n\t\t\t\tdefault: withCtx(() => [\n\t\t\t\t\t!!unref(props).title || hasTitleSlot.value ? (openBlock(), createBlock(BCardTitle_default, {\n\t\t\t\t\t\tkey: 0,\n\t\t\t\t\t\ttag: unref(props).titleTag\n\t\t\t\t\t}, {\n\t\t\t\t\t\tdefault: withCtx(() => [renderSlot(_ctx.$slots, \"title\", {}, () => [createTextVNode(toDisplayString(unref(props).title), 1)])]),\n\t\t\t\t\t\t_: 3\n\t\t\t\t\t}, 8, [\"tag\"])) : createCommentVNode(\"\", true),\n\t\t\t\t\t!!unref(props).subtitle || hasSubtitleSlot.value ? (openBlock(), createBlock(BCardSubtitle_default, {\n\t\t\t\t\t\tkey: 1,\n\t\t\t\t\t\ttag: unref(props).subtitleTag,\n\t\t\t\t\t\t\"text-variant\": unref(props).subtitleTextVariant\n\t\t\t\t\t}, {\n\t\t\t\t\t\tdefault: withCtx(() => [renderSlot(_ctx.$slots, \"subtitle\", {}, () => [createTextVNode(toDisplayString(unref(props).subtitle), 1)])]),\n\t\t\t\t\t\t_: 3\n\t\t\t\t\t}, 8, [\"tag\", \"text-variant\"])) : createCommentVNode(\"\", true),\n\t\t\t\t\trenderSlot(_ctx.$slots, \"default\", {}, () => [createTextVNode(toDisplayString(unref(props).text), 1)])\n\t\t\t\t]),\n\t\t\t\t_: 3\n\t\t\t}, 8, [\"class\"]);\n\t\t};\n\t}\n});\n//#endregion\n//#region src/components/BCard/BCardFooter.vue\nvar BCardFooter_default = /* @__PURE__ */ defineComponent({\n\t__name: \"BCardFooter\",\n\tprops: {\n\t\tborderVariant: { default: void 0 },\n\t\ttag: { default: \"div\" },\n\t\ttext: { default: void 0 },\n\t\tvariant: { default: void 0 },\n\t\tbgVariant: { default: void 0 },\n\t\ttextVariant: { default: void 0 }\n\t},\n\tsetup(__props) {\n\t\tconst props = useDefaults(__props, \"BCardFooter\");\n\t\treturn (_ctx, _cache) => {\n\t\t\treturn openBlock(), createBlock(BCardHeadFoot_default, mergeProps({ class: \"card-footer\" }, unref(props)), {\n\t\t\t\tdefault: withCtx(() => [renderSlot(_ctx.$slots, \"default\", {}, () => [createTextVNode(toDisplayString(unref(props).text), 1)])]),\n\t\t\t\t_: 3\n\t\t\t}, 16);\n\t\t};\n\t}\n});\n//#endregion\n//#region src/components/BCard/BCard.vue\nvar BCard_default = /* @__PURE__ */ defineComponent({\n\t__name: \"BCard\",\n\tprops: {\n\t\talign: { default: void 0 },\n\t\tbodyBgVariant: { default: void 0 },\n\t\tbodyBorderVariant: { default: void 0 },\n\t\tbodyClass: { default: void 0 },\n\t\tbodyTag: { default: \"div\" },\n\t\tbodyText: { default: \"\" },\n\t\tbodyTextVariant: { default: void 0 },\n\t\tborderVariant: { default: null },\n\t\tfooter: { default: void 0 },\n\t\tfooterBgVariant: { default: void 0 },\n\t\tfooterBorderVariant: { default: void 0 },\n\t\tfooterClass: { default: void 0 },\n\t\tfooterTag: { default: \"div\" },\n\t\tfooterTextVariant: { default: void 0 },\n\t\tfooterVariant: { default: null },\n\t\theader: { default: void 0 },\n\t\theaderBgVariant: { default: void 0 },\n\t\theaderBorderVariant: { default: void 0 },\n\t\theaderClass: { default: void 0 },\n\t\theaderTag: { default: \"div\" },\n\t\theaderTextVariant: { default: void 0 },\n\t\theaderVariant: { default: null },\n\t\timgAlt: { default: void 0 },\n\t\timgPlacement: { default: \"top\" },\n\t\timgHeight: { default: void 0 },\n\t\timgSrc: { default: void 0 },\n\t\timgWidth: { default: void 0 },\n\t\tnoBody: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tsubtitle: { default: void 0 },\n\t\tsubtitleTag: { default: \"h6\" },\n\t\tsubtitleTextVariant: { default: \"body-secondary\" },\n\t\ttag: { default: \"div\" },\n\t\ttitle: { default: void 0 },\n\t\ttitleTag: { default: \"h4\" },\n\t\tvariant: { default: null },\n\t\tbgVariant: { default: null },\n\t\ttextVariant: { default: null }\n\t},\n\tsetup(__props) {\n\t\tconst props = useDefaults(__props, \"BCard\");\n\t\tconst slots = useSlots();\n\t\tconst hasHeaderSlot = computed(() => !isEmptySlot(slots.header));\n\t\tconst hasFooterSlot = computed(() => !isEmptySlot(slots.footer));\n\t\tconst colorClasses = useColorVariantClasses(props);\n\t\tconst computedClasses = computed(() => [colorClasses.value, {\n\t\t\t[`text-${props.align}`]: props.align !== void 0,\n\t\t\t\"flex-row\": props.imgPlacement === \"start\",\n\t\t\t\"flex-row-reverse\": props.imgPlacement === \"end\"\n\t\t}]);\n\t\tconst imgAttr = computed(() => ({\n\t\t\tsrc: props.imgSrc,\n\t\t\talt: props.imgAlt,\n\t\t\theight: props.imgHeight,\n\t\t\twidth: props.imgWidth,\n\t\t\tplacement: props.imgPlacement\n\t\t}));\n\t\treturn (_ctx, _cache) => {\n\t\t\treturn openBlock(), createBlock(resolveDynamicComponent(unref(props).tag), { class: normalizeClass([\"card\", computedClasses.value]) }, {\n\t\t\t\tdefault: withCtx(() => [\n\t\t\t\t\tunref(props).imgPlacement !== \"bottom\" ? renderSlot(_ctx.$slots, \"img\", { key: 0 }, () => [unref(props).imgSrc ? (openBlock(), createBlock(BCardImg_default, normalizeProps(mergeProps({ key: 0 }, imgAttr.value)), null, 16)) : createCommentVNode(\"\", true)]) : createCommentVNode(\"\", true),\n\t\t\t\t\tunref(props).header || hasHeaderSlot.value ? (openBlock(), createBlock(BCardHeader_default, {\n\t\t\t\t\t\tkey: 1,\n\t\t\t\t\t\t\"bg-variant\": unref(props).headerBgVariant,\n\t\t\t\t\t\tvariant: unref(props).headerVariant,\n\t\t\t\t\t\t\"border-variant\": unref(props).headerBorderVariant,\n\t\t\t\t\t\ttag: unref(props).headerTag,\n\t\t\t\t\t\t\"text-variant\": unref(props).headerTextVariant,\n\t\t\t\t\t\tclass: normalizeClass(unref(props).headerClass)\n\t\t\t\t\t}, {\n\t\t\t\t\t\tdefault: withCtx(() => [renderSlot(_ctx.$slots, \"header\", {}, () => [createTextVNode(toDisplayString(unref(props).header), 1)])]),\n\t\t\t\t\t\t_: 3\n\t\t\t\t\t}, 8, [\n\t\t\t\t\t\t\"bg-variant\",\n\t\t\t\t\t\t\"variant\",\n\t\t\t\t\t\t\"border-variant\",\n\t\t\t\t\t\t\"tag\",\n\t\t\t\t\t\t\"text-variant\",\n\t\t\t\t\t\t\"class\"\n\t\t\t\t\t])) : createCommentVNode(\"\", true),\n\t\t\t\t\t!unref(props).noBody ? (openBlock(), createBlock(BCardBody_default, {\n\t\t\t\t\t\tkey: 2,\n\t\t\t\t\t\toverlay: unref(props).imgPlacement === \"overlay\",\n\t\t\t\t\t\t\"bg-variant\": unref(props).bodyBgVariant,\n\t\t\t\t\t\t\"border-variant\": unref(props).bodyBorderVariant,\n\t\t\t\t\t\ttag: unref(props).bodyTag,\n\t\t\t\t\t\t\"text-variant\": unref(props).bodyTextVariant,\n\t\t\t\t\t\tsubtitle: unref(props).subtitle,\n\t\t\t\t\t\t\"subtitle-tag\": unref(props).subtitleTag,\n\t\t\t\t\t\t\"subtitle-text-variant\": unref(props).subtitleTextVariant,\n\t\t\t\t\t\ttitle: unref(props).title,\n\t\t\t\t\t\t\"title-tag\": unref(props).titleTag,\n\t\t\t\t\t\tclass: normalizeClass(unref(props).bodyClass)\n\t\t\t\t\t}, {\n\t\t\t\t\t\tdefault: withCtx(() => [renderSlot(_ctx.$slots, \"default\", {}, () => [createTextVNode(toDisplayString(unref(props).bodyText), 1)])]),\n\t\t\t\t\t\t_: 3\n\t\t\t\t\t}, 8, [\n\t\t\t\t\t\t\"overlay\",\n\t\t\t\t\t\t\"bg-variant\",\n\t\t\t\t\t\t\"border-variant\",\n\t\t\t\t\t\t\"tag\",\n\t\t\t\t\t\t\"text-variant\",\n\t\t\t\t\t\t\"subtitle\",\n\t\t\t\t\t\t\"subtitle-tag\",\n\t\t\t\t\t\t\"subtitle-text-variant\",\n\t\t\t\t\t\t\"title\",\n\t\t\t\t\t\t\"title-tag\",\n\t\t\t\t\t\t\"class\"\n\t\t\t\t\t])) : renderSlot(_ctx.$slots, \"default\", { key: 3 }, () => [createTextVNode(toDisplayString(unref(props).bodyText), 1)]),\n\t\t\t\t\tunref(props).footer || hasFooterSlot.value ? (openBlock(), createBlock(BCardFooter_default, {\n\t\t\t\t\t\tkey: 4,\n\t\t\t\t\t\t\"bg-variant\": unref(props).footerBgVariant,\n\t\t\t\t\t\t\"border-variant\": unref(props).footerBorderVariant,\n\t\t\t\t\t\tvariant: unref(props).footerVariant,\n\t\t\t\t\t\ttag: unref(props).footerTag,\n\t\t\t\t\t\t\"text-variant\": unref(props).footerTextVariant,\n\t\t\t\t\t\tclass: normalizeClass(unref(props).footerClass)\n\t\t\t\t\t}, {\n\t\t\t\t\t\tdefault: withCtx(() => [renderSlot(_ctx.$slots, \"footer\", {}, () => [createTextVNode(toDisplayString(unref(props).footer), 1)])]),\n\t\t\t\t\t\t_: 3\n\t\t\t\t\t}, 8, [\n\t\t\t\t\t\t\"bg-variant\",\n\t\t\t\t\t\t\"border-variant\",\n\t\t\t\t\t\t\"variant\",\n\t\t\t\t\t\t\"tag\",\n\t\t\t\t\t\t\"text-variant\",\n\t\t\t\t\t\t\"class\"\n\t\t\t\t\t])) : createCommentVNode(\"\", true),\n\t\t\t\t\tunref(props).imgPlacement === \"bottom\" ? renderSlot(_ctx.$slots, \"img\", { key: 5 }, () => [unref(props).imgSrc ? (openBlock(), createBlock(BCardImg_default, normalizeProps(mergeProps({ key: 0 }, imgAttr.value)), null, 16)) : createCommentVNode(\"\", true)]) : createCommentVNode(\"\", true)\n\t\t\t\t]),\n\t\t\t\t_: 3\n\t\t\t}, 8, [\"class\"]);\n\t\t};\n\t}\n});\n//#endregion\nexport { BCardTitle_default as a, BCardSubtitle_default as i, BCardFooter_default as n, BCardHeader_default as o, BCardBody_default as r, BCardImg_default as s, BCard_default as t };\n\n//# sourceMappingURL=BCard-CHbKv2OR.mjs.map","import { _ as RX_UNDERSCORE, c as RX_FIRST_START_SPACE_WORD, d as RX_LOWER_UPPER, g as RX_START_SPACE_WORD, m as RX_SPACES, p as RX_REGEXP_REPLACE } from \"./constants-Ba9iJn2H.mjs\";\n//#region src/utils/stringUtils.ts\n/**\n* @param str\n* @returns\n*/\nvar startCase = (str) => str.replace(RX_UNDERSCORE, \" \").replace(RX_LOWER_UPPER, (_, $1, $2) => `${$1} ${$2}`).replace(RX_FIRST_START_SPACE_WORD, (_, $1, $2) => $1 + $2.toUpperCase());\n/**\n* @param str\n* @returns\n*/\nvar titleCase = (str) => str.replace(RX_UNDERSCORE, \" \").replace(RX_LOWER_UPPER, (_, $1, $2) => `${$1} ${$2}`).replace(RX_START_SPACE_WORD, (_, $1, $2) => $1 + $2.toUpperCase());\n/**\n* Uppercases the first letter of a string and returns a new string\n*\n* @param str\n* @returns\n*/\nvar upperFirst = (str) => {\n\tconst trim = str.trim();\n\treturn trim.charAt(0).toUpperCase() + trim.slice(1);\n};\n/**\n* Escapes a string for RegExp usage.\n*\n* @param str\n* @returns\n*/\nvar escapeRegExp = (str) => str.replace(RX_REGEXP_REPLACE, \"\\\\$&\");\n/**\n* Escapes special chars in string and replaces\n* contiguous spaces with a whitespace match\n*\n* @param str\n* @returns\n*/\nvar escapeRegExpChars = (str) => escapeRegExp(str).replace(RX_SPACES, \"\\\\s\");\nvar toPascalCase = (str) => str.replace(/-./g, (match) => match.charAt(1).toUpperCase()).replace(/\\b\\w/g, (match) => match.toUpperCase()).replace(/\\s+/g, \"\");\n//#endregion\nexport { upperFirst as a, toPascalCase as i, startCase as n, titleCase as r, escapeRegExpChars as t };\n\n//# sourceMappingURL=stringUtils-D4eEDlt1.mjs.map","import { c as collapseInjectionKey, g as navbarInjectionKey } from \"./keys-DU7sQgl3.mjs\";\nimport { t as useDefaults } from \"./useDefaults-DseelK6y.mjs\";\nimport { a as pick } from \"./object-CHQkkner.mjs\";\nimport { i as toPascalCase } from \"./stringUtils-D4eEDlt1.mjs\";\nimport { computed, createBlock, defineComponent, getCurrentInstance, inject, mergeProps, openBlock, readonly, renderSlot, resolveDynamicComponent, toRef, toValue, unref, useAttrs, withCtx } from \"vue\";\n//#region src/utils/isLink.ts\nvar isLink = (props) => !!(props.href || props.to);\n//#endregion\n//#region src/composables/useBLinkHelper.ts\nvar useBLinkHelper = (props, pickProps) => {\n\tconst pickPropsResolved = readonly(toRef(pickProps));\n\tconst resolvedProps = readonly(toRef(props));\n\tconst computedLink = computed(() => isLink(resolvedProps.value));\n\treturn {\n\t\tcomputedLink,\n\t\tcomputedLinkProps: computed(() => computedLink.value ? pick(resolvedProps.value, pickPropsResolved.value ?? [\n\t\t\t\"active\",\n\t\t\t\"activeClass\",\n\t\t\t\"disabled\",\n\t\t\t\"exactActiveClass\",\n\t\t\t\"href\",\n\t\t\t\"icon\",\n\t\t\t\"noRel\",\n\t\t\t\"opacity\",\n\t\t\t\"opacityHover\",\n\t\t\t\"noPrefetch\",\n\t\t\t\"prefetch\",\n\t\t\t\"prefetchOn\",\n\t\t\t\"prefetchedClass\",\n\t\t\t\"rel\",\n\t\t\t\"replace\",\n\t\t\t\"routerComponentName\",\n\t\t\t\"routerTag\",\n\t\t\t\"stretched\",\n\t\t\t\"target\",\n\t\t\t\"to\",\n\t\t\t\"underlineOffset\",\n\t\t\t\"underlineOffsetHover\",\n\t\t\t\"underlineOpacity\",\n\t\t\t\"underlineOpacityHover\",\n\t\t\t\"underlineVariant\",\n\t\t\t\"variant\"\n\t\t]) : {})\n\t};\n};\nvar useBLinkTagResolver = ({ to, disabled, href, replace, routerComponentName }) => {\n\tconst instance = getCurrentInstance();\n\tconst router = instance?.appContext?.app?.config?.globalProperties?.$router;\n\tconst route = instance?.appContext?.app?.config?.globalProperties?.$route;\n\tconst RouterLinkComponent = resolveDynamicComponent(\"RouterLink\");\n\tconst resolvedTo = computed(() => toValue(to) || \"\");\n\tconst resolvedReplace = readonly(toRef(replace));\n\tconst routerName = computed(() => {\n\t\tconst routerComponent = toValue(routerComponentName);\n\t\tif (typeof routerComponent === \"string\") return toPascalCase(routerComponent);\n\t\treturn routerComponent;\n\t});\n\tconst useLink = typeof routerName.value !== \"string\" && \"useLink\" in routerName.value ? routerName.value.useLink : typeof RouterLinkComponent !== \"string\" && \"useLink\" in RouterLinkComponent ? RouterLinkComponent.useLink : null;\n\tconst isNuxtLink = computed(() => typeof instance?.appContext?.app?.$nuxt !== \"undefined\");\n\tconst isRouterLink = computed(() => routerName.value === \"RouterLink\");\n\tconst tag = computed(() => {\n\t\tif (toValue(disabled) || !resolvedTo.value) return \"a\";\n\t\tif (typeof routerName.value !== \"string\") return routerName.value;\n\t\tif (isRouterLink.value && typeof RouterLinkComponent !== \"string\") return RouterLinkComponent;\n\t\treturn instance?.appContext?.app?.component(routerName.value) || \"a\";\n\t});\n\tconst isNonStandardTag = computed(() => tag.value !== \"a\" && !isRouterLink.value && !isNuxtLink.value);\n\tconst isOfRouterType = computed(() => isRouterLink.value || isNuxtLink.value);\n\tconst linkProps = computed(() => ({\n\t\tto: resolvedTo.value,\n\t\treplace: resolvedReplace.value\n\t}));\n\tconst _link = useLink?.({\n\t\tto: resolvedTo,\n\t\treplace: resolvedReplace\n\t});\n\tconst link = computed(() => isOfRouterType.value && toValue(to) ? _link : null);\n\treturn {\n\t\tisNonStandardTag,\n\t\ttag,\n\t\tisRouterLink,\n\t\tisNuxtLink,\n\t\tcomputedHref: computed(() => {\n\t\t\tif (link.value?.href.value && resolvedTo.value) return link.value.href.value;\n\t\t\tconst toFallback = \"#\";\n\t\t\tconst resolvedHref = toValue(href);\n\t\t\tif (resolvedHref) return resolvedHref;\n\t\t\tif (typeof resolvedTo.value === \"string\") return resolvedTo.value || toFallback;\n\t\t\tconst stableTo = resolvedTo.value;\n\t\t\tif (stableTo !== void 0 && \"path\" in stableTo) return `${stableTo.path || \"\"}${stableTo.query ? `?${Object.keys(stableTo.query).map((e) => `${e}=${stableTo.query?.[e]}`).join(\"=\")}` : \"\"}${!stableTo.hash || stableTo.hash.charAt(0) === \"#\" ? stableTo.hash || \"\" : `#${stableTo.hash}`}` || toFallback;\n\t\t\treturn toFallback;\n\t\t}),\n\t\trouterName,\n\t\trouter,\n\t\troute,\n\t\tlink,\n\t\tlinkProps\n\t};\n};\n//#endregion\n//#region src/composables/useLinkClasses.ts\nvar useLinkClasses = (linkProps) => computed(() => {\n\tconst props = toValue(linkProps);\n\treturn {\n\t\t[`link-${props.variant}`]: props.variant !== null,\n\t\t[`link-opacity-${props.opacity}`]: props.opacity !== void 0,\n\t\t[`link-opacity-${props.opacityHover}-hover`]: props.opacityHover !== void 0,\n\t\t[`link-underline-${props.underlineVariant}`]: props.underlineVariant !== null,\n\t\t[`link-offset-${props.underlineOffset}`]: props.underlineOffset !== void 0,\n\t\t[`link-offset-${props.underlineOffsetHover}-hover`]: props.underlineOffsetHover !== void 0,\n\t\t[\"link-underline\"]: props.underlineVariant === null && (props.underlineOpacity !== void 0 || props.underlineOpacityHover !== void 0),\n\t\t[`link-underline-opacity-${props.underlineOpacity}`]: props.underlineOpacity !== void 0,\n\t\t[`link-underline-opacity-${props.underlineOpacityHover}-hover`]: props.underlineOpacityHover !== void 0,\n\t\t\"icon-link\": props.icon === true\n\t};\n});\n//#endregion\n//#region src/components/BLink/BLink.vue?vue&type=script&setup=true&lang.ts\nvar defaultActiveClass = \"active\";\n//#endregion\n//#region src/components/BLink/BLink.vue\nvar BLink_default = /* @__PURE__ */ defineComponent({\n\t__name: \"BLink\",\n\tprops: {\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\tactiveClass: { default: \"router-link-active\" },\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\texactActiveClass: { default: \"router-link-exact-active\" },\n\t\thref: { default: void 0 },\n\t\ticon: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tnoRel: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\topacity: { default: void 0 },\n\t\topacityHover: { default: void 0 },\n\t\tprefetch: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\tprefetchOn: { default: void 0 },\n\t\tnoPrefetch: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\tprefetchedClass: { default: void 0 },\n\t\trel: { default: void 0 },\n\t\treplace: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\trouterComponentName: { default: \"router-link\" },\n\t\trouterTag: { default: \"a\" },\n\t\tstretched: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\ttarget: { default: void 0 },\n\t\tto: { default: void 0 },\n\t\tunderlineOffset: { default: void 0 },\n\t\tunderlineOffsetHover: { default: void 0 },\n\t\tunderlineOpacity: { default: void 0 },\n\t\tunderlineOpacityHover: { default: void 0 },\n\t\tunderlineVariant: { default: null },\n\t\tvariant: { default: null }\n\t},\n\temits: [\"click\"],\n\tsetup(__props, { emit: __emit }) {\n\t\tconst props = useDefaults(__props, \"BLink\");\n\t\tconst emit = __emit;\n\t\tconst attrs = useAttrs();\n\t\tconst { computedHref, tag, link, isNuxtLink, isRouterLink, linkProps, isNonStandardTag } = useBLinkTagResolver({\n\t\t\trouterComponentName: () => props.routerComponentName,\n\t\t\tdisabled: () => props.disabled,\n\t\t\tto: () => props.to,\n\t\t\treplace: () => props.replace,\n\t\t\thref: () => props.href\n\t\t});\n\t\tconst collapseData = inject(collapseInjectionKey, null);\n\t\tconst navbarData = inject(navbarInjectionKey, null);\n\t\t/**\n\t\t* Not to be confused with computedLinkClasses\n\t\t*/\n\t\tconst linkValueClasses = useLinkClasses(props);\n\t\tconst computedClasses = computed(() => [\n\t\t\tlinkValueClasses.value,\n\t\t\tattrs.class,\n\t\t\tcomputedLinkClasses.value,\n\t\t\t{\n\t\t\t\t[defaultActiveClass]: props.active,\n\t\t\t\t[props.activeClass]: link.value?.isActive.value || false,\n\t\t\t\t[props.exactActiveClass]: link.value?.isExactActive.value || false,\n\t\t\t\t\"stretched-link\": props.stretched\n\t\t\t}\n\t\t]);\n\t\tconst computedLinkClasses = computed(() => ({\n\t\t\t[defaultActiveClass]: props.active,\n\t\t\tdisabled: props.disabled\n\t\t}));\n\t\tconst clicked = (e) => {\n\t\t\tif (props.disabled) {\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (collapseData?.isNav?.value === true && navbarData === null || navbarData !== null && navbarData.noAutoClose?.value !== true) collapseData?.hide?.();\n\t\t\temit(\"click\", e);\n\t\t};\n\t\tconst computedRel = computed(() => props.target === \"_blank\" ? !props.rel && props.noRel ? \"noopener\" : props.rel : void 0);\n\t\tconst computedTabIndex = computed(() => props.disabled ? \"-1\" : typeof attrs.tabindex === \"undefined\" ? null : attrs.tabindex);\n\t\tconst nuxtSpecificProps = computed(() => ({\n\t\t\t...props.noPrefetch ? { noPrefetch: props.noPrefetch } : { prefetch: props.prefetch },\n\t\t\tprefetchOn: props.prefetchOn,\n\t\t\tprefetchedClass: props.prefetchedClass,\n\t\t\t...linkProps.value\n\t\t}));\n\t\tconst computedSpecificProps = computed(() => ({\n\t\t\t...isRouterLink.value ? linkProps.value : void 0,\n\t\t\t...isNuxtLink.value || isNonStandardTag.value ? nuxtSpecificProps.value : void 0\n\t\t}));\n\t\treturn (_ctx, _cache) => {\n\t\t\treturn openBlock(), createBlock(resolveDynamicComponent(unref(tag)), mergeProps({\n\t\t\t\tclass: computedClasses.value,\n\t\t\t\ttarget: unref(props).target,\n\t\t\t\thref: unref(computedHref),\n\t\t\t\trel: computedRel.value,\n\t\t\t\ttabindex: computedTabIndex.value,\n\t\t\t\t\"aria-disabled\": unref(props).disabled ? true : null\n\t\t\t}, computedSpecificProps.value, { onClick: _cache[0] || (_cache[0] = (e) => {\n\t\t\t\tclicked(e);\n\t\t\t\tunref(link)?.navigate(e);\n\t\t\t}) }), {\n\t\t\t\tdefault: withCtx(() => [renderSlot(_ctx.$slots, \"default\")]),\n\t\t\t\t_: 3\n\t\t\t}, 16, [\n\t\t\t\t\"class\",\n\t\t\t\t\"target\",\n\t\t\t\t\"href\",\n\t\t\t\t\"rel\",\n\t\t\t\t\"tabindex\",\n\t\t\t\t\"aria-disabled\"\n\t\t\t]);\n\t\t};\n\t}\n});\n//#endregion\nexport { useLinkClasses as n, useBLinkHelper as r, BLink_default as t };\n\n//# sourceMappingURL=BLink-Dfgte6dQ.mjs.map","import { o as isEmptySlot } from \"./dom-AhkaSoh8.mjs\";\nimport { t as useDefaults } from \"./useDefaults-DseelK6y.mjs\";\nimport { t as useColorVariantClasses } from \"./useColorVariantClasses-CqeXHjRh.mjs\";\nimport { computed, createBlock, createCommentVNode, createElementBlock, createTextVNode, defineComponent, normalizeClass, openBlock, renderSlot, resolveDynamicComponent, toDisplayString, unref, useSlots, withCtx } from \"vue\";\n//#region src/components/BSpinner/BSpinner.vue?vue&type=script&setup=true&lang.ts\nvar _hoisted_1 = {\n\tkey: 0,\n\tclass: \"visually-hidden\"\n};\n//#endregion\n//#region src/components/BSpinner/BSpinner.vue\nvar BSpinner_default = /* @__PURE__ */ defineComponent({\n\t__name: \"BSpinner\",\n\tprops: {\n\t\tlabel: { default: void 0 },\n\t\trole: { default: \"status\" },\n\t\tsmall: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\ttag: { default: \"span\" },\n\t\ttype: { default: \"border\" },\n\t\tvariant: { default: null }\n\t},\n\tsetup(__props) {\n\t\tconst props = useDefaults(__props, \"BSpinner\");\n\t\tconst slots = useSlots();\n\t\tconst colorClasses = useColorVariantClasses(computed(() => ({ textVariant: props.variant })));\n\t\tconst computedClasses = computed(() => [\n\t\t\t`spinner-${props.type}`,\n\t\t\tcolorClasses.value,\n\t\t\t{ [`spinner-${props.type}-sm`]: props.small }\n\t\t]);\n\t\tconst hasLabelSlot = computed(() => !isEmptySlot(slots.label));\n\t\treturn (_ctx, _cache) => {\n\t\t\treturn openBlock(), createBlock(resolveDynamicComponent(unref(props).tag), {\n\t\t\t\tclass: normalizeClass(computedClasses.value),\n\t\t\t\trole: unref(props).label || hasLabelSlot.value ? unref(props).role : null,\n\t\t\t\t\"aria-hidden\": unref(props).label || hasLabelSlot.value ? null : true\n\t\t\t}, {\n\t\t\t\tdefault: withCtx(() => [unref(props).label || hasLabelSlot.value ? (openBlock(), createElementBlock(\"span\", _hoisted_1, [renderSlot(_ctx.$slots, \"label\", {}, () => [createTextVNode(toDisplayString(unref(props).label), 1)])])) : createCommentVNode(\"\", true)]),\n\t\t\t\t_: 3\n\t\t\t}, 8, [\n\t\t\t\t\"class\",\n\t\t\t\t\"role\",\n\t\t\t\t\"aria-hidden\"\n\t\t\t]);\n\t\t};\n\t}\n});\n//#endregion\nexport { BSpinner_default as t };\n\n//# sourceMappingURL=BSpinner-CUfGqviV.mjs.map","import { a as onKeyStroke } from \"./dist-Dk9C_HFS.mjs\";\nimport { t as useDefaults } from \"./useDefaults-DseelK6y.mjs\";\nimport { n as useLinkClasses, r as useBLinkHelper, t as BLink_default } from \"./BLink-Dfgte6dQ.mjs\";\nimport { t as BSpinner_default } from \"./BSpinner-CUfGqviV.mjs\";\nimport { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createTextVNode, createVNode, defineComponent, mergeModels, mergeProps, openBlock, renderSlot, resolveDynamicComponent, toDisplayString, unref, useModel, useTemplateRef, withCtx } from \"vue\";\n//#endregion\n//#region src/components/BButton/BButton.vue\nvar BButton_default = /* @__PURE__ */ defineComponent({\n\t__name: \"BButton\",\n\tprops: /* @__PURE__ */ mergeModels({\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tloadingFill: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tloadingText: { default: \"Loading...\" },\n\t\tpill: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tsize: { default: void 0 },\n\t\tsquared: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\ttag: { default: \"button\" },\n\t\ttype: { default: \"button\" },\n\t\tvariant: { default: \"secondary\" },\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tactiveClass: { default: void 0 },\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\texactActiveClass: { default: void 0 },\n\t\thref: { default: void 0 },\n\t\ticon: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tnoRel: { type: Boolean },\n\t\topacity: { default: void 0 },\n\t\topacityHover: { default: void 0 },\n\t\tprefetch: { type: Boolean },\n\t\tprefetchOn: {},\n\t\tnoPrefetch: { type: Boolean },\n\t\tprefetchedClass: {},\n\t\trel: { default: void 0 },\n\t\treplace: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\trouterComponentName: { default: void 0 },\n\t\trouterTag: { default: void 0 },\n\t\tstretched: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\ttarget: { default: void 0 },\n\t\tto: { default: void 0 },\n\t\tunderlineOffset: { default: void 0 },\n\t\tunderlineOffsetHover: { default: void 0 },\n\t\tunderlineOpacity: { default: void 0 },\n\t\tunderlineOpacityHover: { default: void 0 },\n\t\tunderlineVariant: { default: null }\n\t}, {\n\t\t\"pressed\": {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\t\"pressedModifiers\": {}\n\t}),\n\temits: /* @__PURE__ */ mergeModels([\"click\"], [\"update:pressed\"]),\n\tsetup(__props, { emit: __emit }) {\n\t\tconst props = useDefaults(__props, \"BButton\");\n\t\tconst emit = __emit;\n\t\tconst element = useTemplateRef(\"_element\");\n\t\tconst pressedValue = useModel(__props, \"pressed\");\n\t\tconst { computedLink, computedLinkProps } = useBLinkHelper(props, [\n\t\t\t\"activeClass\",\n\t\t\t\"exactActiveClass\",\n\t\t\t\"replace\",\n\t\t\t\"routerComponentName\",\n\t\t\t\"routerTag\",\n\t\t\t\"noPrefetch\",\n\t\t\t\"prefetch\",\n\t\t\t\"prefetchOn\",\n\t\t\t\"prefetchedClass\"\n\t\t]);\n\t\tconst isToggle = computed(() => typeof pressedValue.value === \"boolean\");\n\t\tconst isButton = computed(() => props.tag === \"button\" && props.href === void 0 && props.to === void 0);\n\t\tconst isBLink = computed(() => props.to !== void 0);\n\t\tconst nonStandardTag = computed(() => props.href !== void 0 ? false : !isButton.value);\n\t\tconst linkProps = computed(() => isBLink.value ? computedLinkProps.value : []);\n\t\tconst computedAriaDisabled = computed(() => {\n\t\t\tif (props.href === \"#\" && props.disabled) return true;\n\t\t\treturn nonStandardTag.value ? props.disabled : null;\n\t\t});\n\t\tconst variantIsLinkType = computed(() => props.variant?.startsWith(\"link\") || false);\n\t\tconst variantIsLinkTypeSubset = computed(() => props.variant?.startsWith(\"link-\") || false);\n\t\tconst linkValueClasses = useLinkClasses(computed(() => ({ ...variantIsLinkType.value ? {\n\t\t\ticon: props.icon,\n\t\t\topacity: props.opacity,\n\t\t\topacityHover: props.opacityHover,\n\t\t\tunderlineOffset: props.underlineOffset,\n\t\t\tunderlineOffsetHover: props.underlineOffsetHover,\n\t\t\tunderlineOpacity: props.underlineOpacity,\n\t\t\tunderlineOpacityHover: props.underlineOpacityHover,\n\t\t\tunderlineVariant: props.underlineVariant,\n\t\t\tvariant: variantIsLinkTypeSubset.value === true ? props.variant?.slice(5) : null\n\t\t} : void 0 })));\n\t\tconst computedClasses = computed(() => [variantIsLinkType.value === true && computedLink.value === false ? linkValueClasses.value : void 0, {\n\t\t\t[`btn-${props.size}`]: props.size !== void 0,\n\t\t\t[`btn-${props.variant}`]: props.variant !== null && variantIsLinkTypeSubset.value === false,\n\t\t\t\"active\": props.active || pressedValue.value,\n\t\t\t\"rounded-pill\": props.pill,\n\t\t\t\"rounded-0\": props.squared,\n\t\t\t\"disabled\": props.disabled\n\t\t}]);\n\t\tconst computedTag = computed(() => isBLink.value ? BLink_default : props.href ? \"a\" : props.tag);\n\t\tconst clicked = (e) => {\n\t\t\tif (props.disabled) {\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\temit(\"click\", e);\n\t\t\tif (isToggle.value) pressedValue.value = !pressedValue.value;\n\t\t};\n\t\tonKeyStroke([\" \", \"enter\"], (e) => {\n\t\t\tif (props.href === \"#\") {\n\t\t\t\te.preventDefault();\n\t\t\t\telement.value?.click();\n\t\t\t}\n\t\t}, { target: element });\n\t\treturn (_ctx, _cache) => {\n\t\t\treturn openBlock(), createBlock(resolveDynamicComponent(computedTag.value), mergeProps({\n\t\t\t\tref: \"_element\",\n\t\t\t\tclass: \"btn\"\n\t\t\t}, linkProps.value, {\n\t\t\t\tclass: computedClasses.value,\n\t\t\t\t\"aria-disabled\": computedAriaDisabled.value,\n\t\t\t\t\"aria-pressed\": isToggle.value ? pressedValue.value : null,\n\t\t\t\tautocomplete: isToggle.value ? \"off\" : null,\n\t\t\t\tdisabled: isButton.value ? unref(props).disabled : null,\n\t\t\t\thref: unref(props).href,\n\t\t\t\trel: unref(computedLink) ? unref(props).rel : null,\n\t\t\t\trole: nonStandardTag.value || unref(computedLink) ? \"button\" : null,\n\t\t\t\ttarget: unref(computedLink) ? unref(props).target : null,\n\t\t\t\ttype: isButton.value ? unref(props).type : null,\n\t\t\t\tto: !isButton.value ? unref(props).to : null,\n\t\t\t\tonClick: clicked\n\t\t\t}), {\n\t\t\t\tdefault: withCtx(() => [unref(props).loading ? renderSlot(_ctx.$slots, \"loading\", { key: 0 }, () => [!unref(props).loadingFill ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createTextVNode(toDisplayString(unref(props).loadingText), 1)], 64)) : createCommentVNode(\"\", true), renderSlot(_ctx.$slots, \"loading-spinner\", {}, () => [createVNode(BSpinner_default, {\n\t\t\t\t\tsmall: unref(props).size !== \"lg\",\n\t\t\t\t\tlabel: unref(props).loadingFill ? unref(props).loadingText : void 0\n\t\t\t\t}, null, 8, [\"small\", \"label\"])])]) : renderSlot(_ctx.$slots, \"default\", { key: 1 })]),\n\t\t\t\t_: 3\n\t\t\t}, 16, [\n\t\t\t\t\"class\",\n\t\t\t\t\"aria-disabled\",\n\t\t\t\t\"aria-pressed\",\n\t\t\t\t\"autocomplete\",\n\t\t\t\t\"disabled\",\n\t\t\t\t\"href\",\n\t\t\t\t\"rel\",\n\t\t\t\t\"role\",\n\t\t\t\t\"target\",\n\t\t\t\t\"type\",\n\t\t\t\t\"to\"\n\t\t\t]);\n\t\t};\n\t}\n});\n//#endregion\nexport { BButton_default as t };\n\n//# sourceMappingURL=BButton-PY7AANXJ.mjs.map","export enum BrandMode {\n  Short = 'short',\n  Medium = 'medium',\n  Long = 'long'\n}\n\nexport enum DeckTexture {\n  Silk = 'silk',\n  Brick = 'brick',\n  Rock = 'rock',\n  Sand = 'sand',\n  Crack = 'crack',\n  Carbon = 'carbon'\n}\n\nexport enum ICON_WEIGHT {\n  thin = 'thin',\n  light = 'light',\n  regular = 'regular',\n  bold = 'bold',\n  fill = 'fill',\n  duotone = 'duotone'\n}\n\nexport enum SIZE {\n  xs = 'xs',\n  sm = 'sm',\n  md = 'md',\n  lg = 'lg',\n  xl = 'xl',\n  xxl = 'xxl'\n}\n\nexport enum VARIANT {\n  action = 'action',\n  primary = 'primary',\n  secondary = 'secondary',\n  tertiary = 'tertiary',\n  info = 'info',\n  success = 'success',\n  warning = 'warning',\n  danger = 'danger',\n  link = 'link',\n  light = 'light',\n  dark = 'dark',\n  outline_action = 'outline-action',\n  outline_primary = 'outline-primary',\n  outline_secondary = 'outline-secondary',\n  outline_tertiary = 'outline-tertiary',\n  outline_info = 'outline-info',\n  outline_success = 'outline-success',\n  outline_warning = 'outline-warning',\n  outline_danger = 'outline-danger',\n  outline_light = 'outline-light',\n  outline_dark = 'outline-dark',\n}\n\nexport enum PLACEMENTS {\n  TOP = 'top',\n  TOPLEFT = 'topleft',\n  TOPRIGHT = 'topright',\n  RIGHT = 'right',\n  RIGHTTOP = 'righttop',\n  RIGHTBOTTOM = 'rightbottom',\n  BOTTOM = 'bottom',\n  BOTTOMLEFT = 'bottomleft',\n  BOTTOMRIGHT = 'bottomright',\n  LEFT = 'left',\n  LEFTTOP = 'lefttop',\n  LEFTBOTTOM = 'leftbottom'\n}\n\nexport enum SlideUpDownState {\n  pre = 'pre',\n  active = 'active',\n  post = 'post'\n}\n\nexport enum SharingPlatform {\n  email = 'email',\n  facebook = 'facebook',\n  linkedin = 'linkedin',\n  bluesky = 'bluesky'\n}\n\nexport enum DonatePeriod {\n  onetime = 'onetime',\n  monthly = 'monthly',\n  yearly = 'yearly'\n}\n\nexport enum DonationCategory {\n  conversation = 'conversation',\n  rules = 'rules',\n  world = 'world'\n}\n\nexport enum AdvancedLinkTab {\n  raw = 'raw',\n  rich = 'rich',\n  markdown = 'markdown',\n  html = 'html'\n}\n\nexport enum LegendCategory {\n  id = 'id',\n  color = 'color',\n  path = 'path',\n  label = 'label'\n}\n","import { computed, nextTick, onMounted, onUnmounted, ref, shallowRef, watch } from 'vue'\nimport type { ComputedRef, CSSProperties, Ref } from 'vue'\n\nimport { SlideUpDownState } from '@/enums'\n\n/**\n * Subset of CSS properties used to animate the height transition.\n */\nexport type SlideUpDownStyle = Pick<\n  CSSProperties,\n  'overflow' | 'transition-property' | 'transition-duration' | 'height'\n>\n\n/**\n * Reactive options driving the slide animation. They mirror the `active` and\n * `duration` props of the `SlideUpDown` component.\n */\nexport interface UseSlideUpDownOptions {\n  /**\n   * Whether the content is expanded. Toggling it triggers the slide.\n   */\n  active: Ref<boolean>\n  /**\n   * Duration of the height transition, in milliseconds.\n   */\n  duration: Ref<number>\n}\n\n/**\n * Reactive API returned by {@link useSlideUpDown}.\n */\nexport interface UseSlideUpDown {\n  /**\n   * Template ref to attach to the animated container element.\n   */\n  container: Ref<HTMLElement | undefined>\n  /**\n   * Current phase of the slide animation.\n   */\n  state: Ref<SlideUpDownState>\n  /**\n   * Whether the host component has mounted, gating the measured height so the\n   * initial render can rely on `height: auto` instead of a pixel value.\n   */\n  mounted: Ref<boolean>\n  /**\n   * Inline style applied to the container for the current animation phase.\n   */\n  style: ComputedRef<SlideUpDownStyle>\n  /**\n   * Start the slide: snapshot the height, render once, then enter the active\n   * phase so the CSS transition can run.\n   */\n  triggerSlide: () => Promise<void>\n  /**\n   * Settle the animation back to its resting phase, unless the transition was\n   * bubbled up from an animated child element.\n   */\n  cleanLayout: (event: Event | null) => Promise<void> | undefined\n}\n\n/**\n * Owns the height-based open/close animation of the `SlideUpDown` component:\n * measures the container `scrollHeight`, derives the inline transition style for\n * each animation phase, and drives the phase lifecycle when `active` toggles.\n *\n * The animation runs in three phases (see {@link SlideUpDownState}): `pre`\n * locks the height to the measured value, `active` transitions it towards the\n * target height, and `post` releases the height once the transition ends.\n *\n * @param options - Reactive slide options (see {@link UseSlideUpDownOptions}).\n * @returns The {@link UseSlideUpDown} API: the `container` ref to attach to the\n *   host element, the `state`/`mounted` refs, the `style` computed for the\n *   template, and the `triggerSlide`/`cleanLayout` lifecycle handlers.\n * @example\n * // Internal building block of the `SlideUpDown` component; not exported from\n * // the package root. Inside a `<script setup>` block:\n * import { toRef } from 'vue'\n * import { useSlideUpDown } from '@/composables/useSlideUpDown'\n *\n * const props = defineProps<{ active?: boolean, duration?: number }>()\n * const { container, style } = useSlideUpDown({\n *   active: toRef(props, 'active'),\n *   duration: toRef(props, 'duration')\n * })\n */\nexport function useSlideUpDown(options: UseSlideUpDownOptions): UseSlideUpDown {\n  const { active, duration } = options\n\n  const state = ref(SlideUpDownState.post)\n  const mounted = ref(false)\n  // NOTE: preserved latent behaviour — this ref is written by `triggerSlide`\n  // but never read; the rendered height derives from `containerScrollHeight`.\n  const scrollHeight = ref(0)\n  // shallowRef: DOM elements shouldn't be made deeply reactive, and it\n  // sidesteps a Vue/TS UnwrapRef quirk where a deeply-reactive ref<HTMLElement>\n  // doesn't structurally match Ref<HTMLElement> (\"Type instantiation is\n  // excessively deep\").\n  const container = shallowRef<HTMLElement | undefined>(undefined)\n\n  const containerScrollHeight = computed((): number => {\n    return container.value?.scrollHeight ?? 0\n  })\n\n  const activeHeight = computed((): number => {\n    return active.value ? containerScrollHeight.value : 0\n  })\n\n  const stylePreTransition = computed((): SlideUpDownStyle => {\n    return {\n      'overflow': 'hidden',\n      'transition-property': 'height',\n      'transition-duration': `${duration.value}ms`,\n      'height': mounted.value ? `${containerScrollHeight.value}px` : 0\n    }\n  })\n\n  const styleActiveTransition = computed((): SlideUpDownStyle => {\n    return {\n      'overflow': 'hidden',\n      'transition-property': 'height',\n      'transition-duration': `${duration.value}ms`,\n      'height': mounted.value ? `${activeHeight.value}px` : 'auto'\n    }\n  })\n\n  const stylePostTransition = computed((): SlideUpDownStyle => {\n    // Reset style when the element is active\n    return active.value ? {} : styleActiveTransition.value\n  })\n\n  const style = computed((): SlideUpDownStyle => {\n    switch (state.value) {\n      case SlideUpDownState.pre:\n        return stylePreTransition.value\n      case SlideUpDownState.active:\n        return styleActiveTransition.value\n      default:\n        return stylePostTransition.value\n    }\n  })\n\n  async function triggerSlide(): Promise<void> {\n    state.value = SlideUpDownState.pre\n    scrollHeight.value = containerScrollHeight.value\n    // Deferred next tick to let the component render once\n    await deferredNextTick()\n    state.value = SlideUpDownState.active\n  }\n\n  function cleanLayout(event: Event | null): Promise<void> | undefined {\n    // This method can be triggered by animated child elements in\n    // which case, we should do anything\n    if (!event || event.target === container.value) {\n      state.value = SlideUpDownState.post\n      return deferredNextTick()\n    }\n  }\n\n  // The extra macrotask before `nextTick` lets the browser commit the\n  // intermediate render so the height transition actually animates.\n  async function deferredNextTick(): Promise<void> {\n    await new Promise(resolve => setTimeout(resolve, 0))\n    await nextTick()\n  }\n\n  function onTransitionEnd(event: TransitionEvent): void {\n    cleanLayout(event)\n  }\n\n  watch(active, (): Promise<void> => {\n    return triggerSlide()\n  })\n\n  onMounted(async () => {\n    await deferredNextTick()\n    mounted.value = true\n    await cleanLayout(null)\n    container.value?.addEventListener('transitionend', onTransitionEnd)\n  })\n\n  onUnmounted(() => {\n    container.value?.removeEventListener('transitionend', onTransitionEnd)\n  })\n\n  return { container, state, mounted, style, triggerSlide, cleanLayout }\n}\n\nexport default useSlideUpDown\n","<script setup lang=\"ts\">\nimport { computed, toRef } from 'vue'\n\nimport { useSlideUpDown } from '@/composables/useSlideUpDown'\n\ndefineOptions({\n  name: 'SlideUpDown'\n})\n\nexport interface SlideUpDownProps {\n  /**\n   * Toggler property. Set to <em>false</em> to hide the component.\n   */\n  active?: boolean\n  /**\n   * Duration of the animation.\n   */\n  duration?: number\n  /**\n   * HTML tag to render this component to.\n   */\n  tag?: string\n}\n\nconst props = withDefaults(defineProps<SlideUpDownProps>(), {\n  active: false,\n  duration: 200,\n  tag: 'div'\n})\n\nconst { container, state, mounted, style, triggerSlide, cleanLayout }\n  = useSlideUpDown({\n    active: toRef(props, 'active'),\n    duration: toRef(props, 'duration')\n  })\n\ndefineExpose({\n  state,\n  mounted,\n  duration: computed(() => props.duration),\n  triggerSlide,\n  cleanLayout\n})\n</script>\n\n<template>\n  <component\n    :is=\"tag\"\n    ref=\"container\"\n    :style=\"style\"\n  >\n    <slot />\n  </component>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, toRef } from 'vue'\n\nimport { useSlideUpDown } from '@/composables/useSlideUpDown'\n\ndefineOptions({\n  name: 'SlideUpDown'\n})\n\nexport interface SlideUpDownProps {\n  /**\n   * Toggler property. Set to <em>false</em> to hide the component.\n   */\n  active?: boolean\n  /**\n   * Duration of the animation.\n   */\n  duration?: number\n  /**\n   * HTML tag to render this component to.\n   */\n  tag?: string\n}\n\nconst props = withDefaults(defineProps<SlideUpDownProps>(), {\n  active: false,\n  duration: 200,\n  tag: 'div'\n})\n\nconst { container, state, mounted, style, triggerSlide, cleanLayout }\n  = useSlideUpDown({\n    active: toRef(props, 'active'),\n    duration: toRef(props, 'duration')\n  })\n\ndefineExpose({\n  state,\n  mounted,\n  duration: computed(() => props.duration),\n  triggerSlide,\n  cleanLayout\n})\n</script>\n\n<template>\n  <component\n    :is=\"tag\"\n    ref=\"container\"\n    :style=\"style\"\n  >\n    <slot />\n  </component>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject } from 'vue'\n\nimport SlideUpDown from '@/components/SlideUpDown/SlideUpDown.vue'\nimport { AccordionKey } from '@/keys'\nimport { Accordion, Step } from '@/types'\n\nexport interface AccordionStepProps {\n  /**\n   * Step name\n   */\n  step: Step\n  /**\n   * Title of the step card\n   */\n  title?: string\n  /**\n   * Content of the step card\n   */\n  content?: string\n  /**\n   * Force card expansion/collapse\n   */\n  active?: boolean\n}\n\nconst props = withDefaults(defineProps<AccordionStepProps>(), {\n  title: 'Step',\n  content: 'Step',\n  active: false\n})\n\nconst emit = defineEmits(['next-step', 'previous-step'])\n\nconst accordion = inject<Accordion | undefined>(AccordionKey)\n\n// A step is expanded when the parent accordion marks it active or when the\n// consumer forces it open through the `active` prop.\nconst isActive = computed(\n  () => props.active || !!accordion?.isActiveStep(props.step)\n)\n\nconst isPrevious = computed(() => !!accordion?.isPreviousStep(props.step))\nconst isFirst = computed(() => !!accordion?.isFirstStep(props.step))\nconst isLast = computed(() => !!accordion?.isLastStep(props.step))\n\nconst nextStep = () => {\n  accordion?.emitAccordionNextStepEvent()\n  /**\n   * Fired when the nextStep function is called\n   * either by clicking on the next button or in the next step slot\n   * with the new value as parameter\n   * @event next-step\n   * @param Mixed New step value.\n   */\n  emit('next-step')\n}\n\nconst previousStep = () => {\n  accordion?.emitAccordionPreviousStepEvent()\n  /**\n   * Fired when the previousStep function is called\n   * either by clicking on the previous button or in the previous step slot\n   * with the new value as parameter\n   * @event previous-step\n   * @param Mixed New step value.\n   */\n  emit('previous-step')\n}\n</script>\n\n<template>\n  <b-card\n    :class=\"{\n      'accordion-wrapper__content__step--active': isActive,\n      'accordion-wrapper__content__step--previous': isPrevious\n    }\"\n    class=\"accordion-wrapper__content__step\"\n    no-body\n  >\n    <h4 class=\"card-body accordion-wrapper__content__step__heading m-0\">\n      <!-- @slot Title of the step -->\n      <slot name=\"title\">\n        {{ title }}\n      </slot>\n    </h4>\n    <slide-up-down :active=\"isActive\">\n      <div class=\"accordion-wrapper__content__step__main card-body row g-0\">\n        <!-- @slot Content of the step with props {isFirst:boolean, isLast:boolean, step:Step, nextStep:Function}-->\n        <slot\n          name=\"content\"\n          v-bind=\"{ isFirst, isLast, step, previousStep, nextStep }\"\n        >\n          {{ content }}\n        </slot>\n      </div>\n      <div class=\"card-footer\">\n        <!-- @slot Previous step button with props {isFirst:boolean, isLast:boolean, step:Step, nextStep:Function} -->\n        <slot\n          name=\"previousStepButton\"\n          v-bind=\"{ isFirst, isLast, step, previousStep }\"\n        >\n          <b-button\n            v-if=\"!isFirst\"\n            class=\"accordion-wrapper__content__step__back-button\"\n            type=\"button\"\n            variant=\"link\"\n            @click=\"previousStep\"\n          >\n            Back\n          </b-button>\n        </slot>\n        <!-- @slot Next step button with props {isFirst:boolean, isLast:boolean, step:Step, nextStep:Function} }-->\n        <slot\n          name=\"nextStepButton\"\n          v-bind=\"{ isFirst, isLast, step, nextStep }\"\n        >\n          <b-button\n            v-if=\"!isLast\"\n            class=\"accordion-wrapper__content__step__continue-button\"\n            type=\"button\"\n            variant=\"primary\"\n            @click=\"nextStep\"\n          >\n            Continue\n          </b-button>\n        </slot>\n      </div>\n    </slide-up-down>\n  </b-card>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject } from 'vue'\n\nimport SlideUpDown from '@/components/SlideUpDown/SlideUpDown.vue'\nimport { AccordionKey } from '@/keys'\nimport { Accordion, Step } from '@/types'\n\nexport interface AccordionStepProps {\n  /**\n   * Step name\n   */\n  step: Step\n  /**\n   * Title of the step card\n   */\n  title?: string\n  /**\n   * Content of the step card\n   */\n  content?: string\n  /**\n   * Force card expansion/collapse\n   */\n  active?: boolean\n}\n\nconst props = withDefaults(defineProps<AccordionStepProps>(), {\n  title: 'Step',\n  content: 'Step',\n  active: false\n})\n\nconst emit = defineEmits(['next-step', 'previous-step'])\n\nconst accordion = inject<Accordion | undefined>(AccordionKey)\n\n// A step is expanded when the parent accordion marks it active or when the\n// consumer forces it open through the `active` prop.\nconst isActive = computed(\n  () => props.active || !!accordion?.isActiveStep(props.step)\n)\n\nconst isPrevious = computed(() => !!accordion?.isPreviousStep(props.step))\nconst isFirst = computed(() => !!accordion?.isFirstStep(props.step))\nconst isLast = computed(() => !!accordion?.isLastStep(props.step))\n\nconst nextStep = () => {\n  accordion?.emitAccordionNextStepEvent()\n  /**\n   * Fired when the nextStep function is called\n   * either by clicking on the next button or in the next step slot\n   * with the new value as parameter\n   * @event next-step\n   * @param Mixed New step value.\n   */\n  emit('next-step')\n}\n\nconst previousStep = () => {\n  accordion?.emitAccordionPreviousStepEvent()\n  /**\n   * Fired when the previousStep function is called\n   * either by clicking on the previous button or in the previous step slot\n   * with the new value as parameter\n   * @event previous-step\n   * @param Mixed New step value.\n   */\n  emit('previous-step')\n}\n</script>\n\n<template>\n  <b-card\n    :class=\"{\n      'accordion-wrapper__content__step--active': isActive,\n      'accordion-wrapper__content__step--previous': isPrevious\n    }\"\n    class=\"accordion-wrapper__content__step\"\n    no-body\n  >\n    <h4 class=\"card-body accordion-wrapper__content__step__heading m-0\">\n      <!-- @slot Title of the step -->\n      <slot name=\"title\">\n        {{ title }}\n      </slot>\n    </h4>\n    <slide-up-down :active=\"isActive\">\n      <div class=\"accordion-wrapper__content__step__main card-body row g-0\">\n        <!-- @slot Content of the step with props {isFirst:boolean, isLast:boolean, step:Step, nextStep:Function}-->\n        <slot\n          name=\"content\"\n          v-bind=\"{ isFirst, isLast, step, previousStep, nextStep }\"\n        >\n          {{ content }}\n        </slot>\n      </div>\n      <div class=\"card-footer\">\n        <!-- @slot Previous step button with props {isFirst:boolean, isLast:boolean, step:Step, nextStep:Function} -->\n        <slot\n          name=\"previousStepButton\"\n          v-bind=\"{ isFirst, isLast, step, previousStep }\"\n        >\n          <b-button\n            v-if=\"!isFirst\"\n            class=\"accordion-wrapper__content__step__back-button\"\n            type=\"button\"\n            variant=\"link\"\n            @click=\"previousStep\"\n          >\n            Back\n          </b-button>\n        </slot>\n        <!-- @slot Next step button with props {isFirst:boolean, isLast:boolean, step:Step, nextStep:Function} }-->\n        <slot\n          name=\"nextStepButton\"\n          v-bind=\"{ isFirst, isLast, step, nextStep }\"\n        >\n          <b-button\n            v-if=\"!isLast\"\n            class=\"accordion-wrapper__content__step__continue-button\"\n            type=\"button\"\n            variant=\"primary\"\n            @click=\"nextStep\"\n          >\n            Continue\n          </b-button>\n        </slot>\n      </div>\n    </slide-up-down>\n  </b-card>\n</template>\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\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\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\nmodule.exports = root;\n","var root = require('./_root');\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\nmodule.exports = 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\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\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\nmodule.exports = baseTrim;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\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\nmodule.exports = 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\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\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\nmodule.exports = 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\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\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\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n    isObject = require('./isObject'),\n    isSymbol = require('./isSymbol');\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\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n    now = require('./now'),\n    toNumber = require('./toNumber');\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\nmodule.exports = debounce;\n","/**\r\n * A collection of shims that provide minimal functionality of the ES6 collections.\r\n *\r\n * These implementations are not meant to be used outside of the ResizeObserver\r\n * modules as they cover only a limited range of use cases.\r\n */\r\n/* eslint-disable require-jsdoc, valid-jsdoc */\r\nvar MapShim = (function () {\r\n    if (typeof Map !== 'undefined') {\r\n        return Map;\r\n    }\r\n    /**\r\n     * Returns index in provided array that matches the specified key.\r\n     *\r\n     * @param {Array<Array>} arr\r\n     * @param {*} key\r\n     * @returns {number}\r\n     */\r\n    function getIndex(arr, key) {\r\n        var result = -1;\r\n        arr.some(function (entry, index) {\r\n            if (entry[0] === key) {\r\n                result = index;\r\n                return true;\r\n            }\r\n            return false;\r\n        });\r\n        return result;\r\n    }\r\n    return /** @class */ (function () {\r\n        function class_1() {\r\n            this.__entries__ = [];\r\n        }\r\n        Object.defineProperty(class_1.prototype, \"size\", {\r\n            /**\r\n             * @returns {boolean}\r\n             */\r\n            get: function () {\r\n                return this.__entries__.length;\r\n            },\r\n            enumerable: true,\r\n            configurable: true\r\n        });\r\n        /**\r\n         * @param {*} key\r\n         * @returns {*}\r\n         */\r\n        class_1.prototype.get = function (key) {\r\n            var index = getIndex(this.__entries__, key);\r\n            var entry = this.__entries__[index];\r\n            return entry && entry[1];\r\n        };\r\n        /**\r\n         * @param {*} key\r\n         * @param {*} value\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.set = function (key, value) {\r\n            var index = getIndex(this.__entries__, key);\r\n            if (~index) {\r\n                this.__entries__[index][1] = value;\r\n            }\r\n            else {\r\n                this.__entries__.push([key, value]);\r\n            }\r\n        };\r\n        /**\r\n         * @param {*} key\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.delete = function (key) {\r\n            var entries = this.__entries__;\r\n            var index = getIndex(entries, key);\r\n            if (~index) {\r\n                entries.splice(index, 1);\r\n            }\r\n        };\r\n        /**\r\n         * @param {*} key\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.has = function (key) {\r\n            return !!~getIndex(this.__entries__, key);\r\n        };\r\n        /**\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.clear = function () {\r\n            this.__entries__.splice(0);\r\n        };\r\n        /**\r\n         * @param {Function} callback\r\n         * @param {*} [ctx=null]\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.forEach = function (callback, ctx) {\r\n            if (ctx === void 0) { ctx = null; }\r\n            for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\r\n                var entry = _a[_i];\r\n                callback.call(ctx, entry[1], entry[0]);\r\n            }\r\n        };\r\n        return class_1;\r\n    }());\r\n})();\n\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\r\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document;\n\n// Returns global object of a current environment.\r\nvar global$1 = (function () {\r\n    if (typeof global !== 'undefined' && global.Math === Math) {\r\n        return global;\r\n    }\r\n    if (typeof self !== 'undefined' && self.Math === Math) {\r\n        return self;\r\n    }\r\n    if (typeof window !== 'undefined' && window.Math === Math) {\r\n        return window;\r\n    }\r\n    // eslint-disable-next-line no-new-func\r\n    return Function('return this')();\r\n})();\n\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests' identifier.\r\n */\r\nvar requestAnimationFrame$1 = (function () {\r\n    if (typeof requestAnimationFrame === 'function') {\r\n        // It's required to use a bounded function because IE sometimes throws\r\n        // an \"Invalid calling object\" error if rAF is invoked without the global\r\n        // object on the left hand side.\r\n        return requestAnimationFrame.bind(global$1);\r\n    }\r\n    return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); };\r\n})();\n\n// Defines minimum timeout before adding a trailing call.\r\nvar trailingTimeout = 2;\r\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\r\nfunction throttle (callback, delay) {\r\n    var leadingCall = false, trailingCall = false, lastCallTime = 0;\r\n    /**\r\n     * Invokes the original callback function and schedules new invocation if\r\n     * the \"proxy\" was called during current request.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    function resolvePending() {\r\n        if (leadingCall) {\r\n            leadingCall = false;\r\n            callback();\r\n        }\r\n        if (trailingCall) {\r\n            proxy();\r\n        }\r\n    }\r\n    /**\r\n     * Callback invoked after the specified delay. It will further postpone\r\n     * invocation of the original function delegating it to the\r\n     * requestAnimationFrame.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    function timeoutCallback() {\r\n        requestAnimationFrame$1(resolvePending);\r\n    }\r\n    /**\r\n     * Schedules invocation of the original function.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    function proxy() {\r\n        var timeStamp = Date.now();\r\n        if (leadingCall) {\r\n            // Reject immediately following calls.\r\n            if (timeStamp - lastCallTime < trailingTimeout) {\r\n                return;\r\n            }\r\n            // Schedule new call to be in invoked when the pending one is resolved.\r\n            // This is important for \"transitions\" which never actually start\r\n            // immediately so there is a chance that we might miss one if change\r\n            // happens amids the pending invocation.\r\n            trailingCall = true;\r\n        }\r\n        else {\r\n            leadingCall = true;\r\n            trailingCall = false;\r\n            setTimeout(timeoutCallback, delay);\r\n        }\r\n        lastCallTime = timeStamp;\r\n    }\r\n    return proxy;\r\n}\n\n// Minimum delay before invoking the update of observers.\r\nvar REFRESH_DELAY = 20;\r\n// A list of substrings of CSS properties used to find transition events that\r\n// might affect dimensions of observed elements.\r\nvar transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight'];\r\n// Check if MutationObserver is available.\r\nvar mutationObserverSupported = typeof MutationObserver !== 'undefined';\r\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\r\nvar ResizeObserverController = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of ResizeObserverController.\r\n     *\r\n     * @private\r\n     */\r\n    function ResizeObserverController() {\r\n        /**\r\n         * Indicates whether DOM listeners have been added.\r\n         *\r\n         * @private {boolean}\r\n         */\r\n        this.connected_ = false;\r\n        /**\r\n         * Tells that controller has subscribed for Mutation Events.\r\n         *\r\n         * @private {boolean}\r\n         */\r\n        this.mutationEventsAdded_ = false;\r\n        /**\r\n         * Keeps reference to the instance of MutationObserver.\r\n         *\r\n         * @private {MutationObserver}\r\n         */\r\n        this.mutationsObserver_ = null;\r\n        /**\r\n         * A list of connected observers.\r\n         *\r\n         * @private {Array<ResizeObserverSPI>}\r\n         */\r\n        this.observers_ = [];\r\n        this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\r\n        this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\r\n    }\r\n    /**\r\n     * Adds observer to observers list.\r\n     *\r\n     * @param {ResizeObserverSPI} observer - Observer to be added.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.addObserver = function (observer) {\r\n        if (!~this.observers_.indexOf(observer)) {\r\n            this.observers_.push(observer);\r\n        }\r\n        // Add listeners if they haven't been added yet.\r\n        if (!this.connected_) {\r\n            this.connect_();\r\n        }\r\n    };\r\n    /**\r\n     * Removes observer from observers list.\r\n     *\r\n     * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.removeObserver = function (observer) {\r\n        var observers = this.observers_;\r\n        var index = observers.indexOf(observer);\r\n        // Remove observer if it's present in registry.\r\n        if (~index) {\r\n            observers.splice(index, 1);\r\n        }\r\n        // Remove listeners if controller has no connected observers.\r\n        if (!observers.length && this.connected_) {\r\n            this.disconnect_();\r\n        }\r\n    };\r\n    /**\r\n     * Invokes the update of observers. It will continue running updates insofar\r\n     * it detects changes.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.refresh = function () {\r\n        var changesDetected = this.updateObservers_();\r\n        // Continue running updates if changes have been detected as there might\r\n        // be future ones caused by CSS transitions.\r\n        if (changesDetected) {\r\n            this.refresh();\r\n        }\r\n    };\r\n    /**\r\n     * Updates every observer from observers list and notifies them of queued\r\n     * entries.\r\n     *\r\n     * @private\r\n     * @returns {boolean} Returns \"true\" if any observer has detected changes in\r\n     *      dimensions of it's elements.\r\n     */\r\n    ResizeObserverController.prototype.updateObservers_ = function () {\r\n        // Collect observers that have active observations.\r\n        var activeObservers = this.observers_.filter(function (observer) {\r\n            return observer.gatherActive(), observer.hasActive();\r\n        });\r\n        // Deliver notifications in a separate cycle in order to avoid any\r\n        // collisions between observers, e.g. when multiple instances of\r\n        // ResizeObserver are tracking the same element and the callback of one\r\n        // of them changes content dimensions of the observed target. Sometimes\r\n        // this may result in notifications being blocked for the rest of observers.\r\n        activeObservers.forEach(function (observer) { return observer.broadcastActive(); });\r\n        return activeObservers.length > 0;\r\n    };\r\n    /**\r\n     * Initializes DOM listeners.\r\n     *\r\n     * @private\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.connect_ = function () {\r\n        // Do nothing if running in a non-browser environment or if listeners\r\n        // have been already added.\r\n        if (!isBrowser || this.connected_) {\r\n            return;\r\n        }\r\n        // Subscription to the \"Transitionend\" event is used as a workaround for\r\n        // delayed transitions. This way it's possible to capture at least the\r\n        // final state of an element.\r\n        document.addEventListener('transitionend', this.onTransitionEnd_);\r\n        window.addEventListener('resize', this.refresh);\r\n        if (mutationObserverSupported) {\r\n            this.mutationsObserver_ = new MutationObserver(this.refresh);\r\n            this.mutationsObserver_.observe(document, {\r\n                attributes: true,\r\n                childList: true,\r\n                characterData: true,\r\n                subtree: true\r\n            });\r\n        }\r\n        else {\r\n            document.addEventListener('DOMSubtreeModified', this.refresh);\r\n            this.mutationEventsAdded_ = true;\r\n        }\r\n        this.connected_ = true;\r\n    };\r\n    /**\r\n     * Removes DOM listeners.\r\n     *\r\n     * @private\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.disconnect_ = function () {\r\n        // Do nothing if running in a non-browser environment or if listeners\r\n        // have been already removed.\r\n        if (!isBrowser || !this.connected_) {\r\n            return;\r\n        }\r\n        document.removeEventListener('transitionend', this.onTransitionEnd_);\r\n        window.removeEventListener('resize', this.refresh);\r\n        if (this.mutationsObserver_) {\r\n            this.mutationsObserver_.disconnect();\r\n        }\r\n        if (this.mutationEventsAdded_) {\r\n            document.removeEventListener('DOMSubtreeModified', this.refresh);\r\n        }\r\n        this.mutationsObserver_ = null;\r\n        this.mutationEventsAdded_ = false;\r\n        this.connected_ = false;\r\n    };\r\n    /**\r\n     * \"Transitionend\" event handler.\r\n     *\r\n     * @private\r\n     * @param {TransitionEvent} event\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\r\n        var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b;\r\n        // Detect whether transition may affect dimensions of an element.\r\n        var isReflowProperty = transitionKeys.some(function (key) {\r\n            return !!~propertyName.indexOf(key);\r\n        });\r\n        if (isReflowProperty) {\r\n            this.refresh();\r\n        }\r\n    };\r\n    /**\r\n     * Returns instance of the ResizeObserverController.\r\n     *\r\n     * @returns {ResizeObserverController}\r\n     */\r\n    ResizeObserverController.getInstance = function () {\r\n        if (!this.instance_) {\r\n            this.instance_ = new ResizeObserverController();\r\n        }\r\n        return this.instance_;\r\n    };\r\n    /**\r\n     * Holds reference to the controller's instance.\r\n     *\r\n     * @private {ResizeObserverController}\r\n     */\r\n    ResizeObserverController.instance_ = null;\r\n    return ResizeObserverController;\r\n}());\n\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\r\nvar defineConfigurable = (function (target, props) {\r\n    for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\r\n        var key = _a[_i];\r\n        Object.defineProperty(target, key, {\r\n            value: props[key],\r\n            enumerable: false,\r\n            writable: false,\r\n            configurable: true\r\n        });\r\n    }\r\n    return target;\r\n});\n\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\r\nvar getWindowOf = (function (target) {\r\n    // Assume that the element is an instance of Node, which means that it\r\n    // has the \"ownerDocument\" property from which we can retrieve a\r\n    // corresponding global object.\r\n    var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;\r\n    // Return the local global object if it's not possible extract one from\r\n    // provided element.\r\n    return ownerGlobal || global$1;\r\n});\n\n// Placeholder of an empty content rectangle.\r\nvar emptyRect = createRectInit(0, 0, 0, 0);\r\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\r\nfunction toFloat(value) {\r\n    return parseFloat(value) || 0;\r\n}\r\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\r\nfunction getBordersSize(styles) {\r\n    var positions = [];\r\n    for (var _i = 1; _i < arguments.length; _i++) {\r\n        positions[_i - 1] = arguments[_i];\r\n    }\r\n    return positions.reduce(function (size, position) {\r\n        var value = styles['border-' + position + '-width'];\r\n        return size + toFloat(value);\r\n    }, 0);\r\n}\r\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\r\nfunction getPaddings(styles) {\r\n    var positions = ['top', 'right', 'bottom', 'left'];\r\n    var paddings = {};\r\n    for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\r\n        var position = positions_1[_i];\r\n        var value = styles['padding-' + position];\r\n        paddings[position] = toFloat(value);\r\n    }\r\n    return paddings;\r\n}\r\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n *      to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getSVGContentRect(target) {\r\n    var bbox = target.getBBox();\r\n    return createRectInit(0, 0, bbox.width, bbox.height);\r\n}\r\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getHTMLElementContentRect(target) {\r\n    // Client width & height properties can't be\r\n    // used exclusively as they provide rounded values.\r\n    var clientWidth = target.clientWidth, clientHeight = target.clientHeight;\r\n    // By this condition we can catch all non-replaced inline, hidden and\r\n    // detached elements. Though elements with width & height properties less\r\n    // than 0.5 will be discarded as well.\r\n    //\r\n    // Without it we would need to implement separate methods for each of\r\n    // those cases and it's not possible to perform a precise and performance\r\n    // effective test for hidden elements. E.g. even jQuery's ':visible' filter\r\n    // gives wrong results for elements with width & height less than 0.5.\r\n    if (!clientWidth && !clientHeight) {\r\n        return emptyRect;\r\n    }\r\n    var styles = getWindowOf(target).getComputedStyle(target);\r\n    var paddings = getPaddings(styles);\r\n    var horizPad = paddings.left + paddings.right;\r\n    var vertPad = paddings.top + paddings.bottom;\r\n    // Computed styles of width & height are being used because they are the\r\n    // only dimensions available to JS that contain non-rounded values. It could\r\n    // be possible to utilize the getBoundingClientRect if only it's data wasn't\r\n    // affected by CSS transformations let alone paddings, borders and scroll bars.\r\n    var width = toFloat(styles.width), height = toFloat(styles.height);\r\n    // Width & height include paddings and borders when the 'border-box' box\r\n    // model is applied (except for IE).\r\n    if (styles.boxSizing === 'border-box') {\r\n        // Following conditions are required to handle Internet Explorer which\r\n        // doesn't include paddings and borders to computed CSS dimensions.\r\n        //\r\n        // We can say that if CSS dimensions + paddings are equal to the \"client\"\r\n        // properties then it's either IE, and thus we don't need to subtract\r\n        // anything, or an element merely doesn't have paddings/borders styles.\r\n        if (Math.round(width + horizPad) !== clientWidth) {\r\n            width -= getBordersSize(styles, 'left', 'right') + horizPad;\r\n        }\r\n        if (Math.round(height + vertPad) !== clientHeight) {\r\n            height -= getBordersSize(styles, 'top', 'bottom') + vertPad;\r\n        }\r\n    }\r\n    // Following steps can't be applied to the document's root element as its\r\n    // client[Width/Height] properties represent viewport area of the window.\r\n    // Besides, it's as well not necessary as the <html> itself neither has\r\n    // rendered scroll bars nor it can be clipped.\r\n    if (!isDocumentElement(target)) {\r\n        // In some browsers (only in Firefox, actually) CSS width & height\r\n        // include scroll bars size which can be removed at this step as scroll\r\n        // bars are the only difference between rounded dimensions + paddings\r\n        // and \"client\" properties, though that is not always true in Chrome.\r\n        var vertScrollbar = Math.round(width + horizPad) - clientWidth;\r\n        var horizScrollbar = Math.round(height + vertPad) - clientHeight;\r\n        // Chrome has a rather weird rounding of \"client\" properties.\r\n        // E.g. for an element with content width of 314.2px it sometimes gives\r\n        // the client width of 315px and for the width of 314.7px it may give\r\n        // 314px. And it doesn't happen all the time. So just ignore this delta\r\n        // as a non-relevant.\r\n        if (Math.abs(vertScrollbar) !== 1) {\r\n            width -= vertScrollbar;\r\n        }\r\n        if (Math.abs(horizScrollbar) !== 1) {\r\n            height -= horizScrollbar;\r\n        }\r\n    }\r\n    return createRectInit(paddings.left, paddings.top, width, height);\r\n}\r\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nvar isSVGGraphicsElement = (function () {\r\n    // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement\r\n    // interface.\r\n    if (typeof SVGGraphicsElement !== 'undefined') {\r\n        return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; };\r\n    }\r\n    // If it's so, then check that element is at least an instance of the\r\n    // SVGElement and that it has the \"getBBox\" method.\r\n    // eslint-disable-next-line no-extra-parens\r\n    return function (target) { return (target instanceof getWindowOf(target).SVGElement &&\r\n        typeof target.getBBox === 'function'); };\r\n})();\r\n/**\r\n * Checks whether provided element is a document element (<html>).\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nfunction isDocumentElement(target) {\r\n    return target === getWindowOf(target).document.documentElement;\r\n}\r\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getContentRect(target) {\r\n    if (!isBrowser) {\r\n        return emptyRect;\r\n    }\r\n    if (isSVGGraphicsElement(target)) {\r\n        return getSVGContentRect(target);\r\n    }\r\n    return getHTMLElementContentRect(target);\r\n}\r\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\r\nfunction createReadOnlyRect(_a) {\r\n    var x = _a.x, y = _a.y, width = _a.width, height = _a.height;\r\n    // If DOMRectReadOnly is available use it as a prototype for the rectangle.\r\n    var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;\r\n    var rect = Object.create(Constr.prototype);\r\n    // Rectangle's properties are not writable and non-enumerable.\r\n    defineConfigurable(rect, {\r\n        x: x, y: y, width: width, height: height,\r\n        top: y,\r\n        right: x + width,\r\n        bottom: height + y,\r\n        left: x\r\n    });\r\n    return rect;\r\n}\r\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle's width.\r\n * @param {number} height - Rectangle's height.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction createRectInit(x, y, width, height) {\r\n    return { x: x, y: y, width: width, height: height };\r\n}\n\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it's changes.\r\n */\r\nvar ResizeObservation = /** @class */ (function () {\r\n    /**\r\n     * Creates an instance of ResizeObservation.\r\n     *\r\n     * @param {Element} target - Element to be observed.\r\n     */\r\n    function ResizeObservation(target) {\r\n        /**\r\n         * Broadcasted width of content rectangle.\r\n         *\r\n         * @type {number}\r\n         */\r\n        this.broadcastWidth = 0;\r\n        /**\r\n         * Broadcasted height of content rectangle.\r\n         *\r\n         * @type {number}\r\n         */\r\n        this.broadcastHeight = 0;\r\n        /**\r\n         * Reference to the last observed content rectangle.\r\n         *\r\n         * @private {DOMRectInit}\r\n         */\r\n        this.contentRect_ = createRectInit(0, 0, 0, 0);\r\n        this.target = target;\r\n    }\r\n    /**\r\n     * Updates content rectangle and tells whether it's width or height properties\r\n     * have changed since the last broadcast.\r\n     *\r\n     * @returns {boolean}\r\n     */\r\n    ResizeObservation.prototype.isActive = function () {\r\n        var rect = getContentRect(this.target);\r\n        this.contentRect_ = rect;\r\n        return (rect.width !== this.broadcastWidth ||\r\n            rect.height !== this.broadcastHeight);\r\n    };\r\n    /**\r\n     * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data\r\n     * from the corresponding properties of the last observed content rectangle.\r\n     *\r\n     * @returns {DOMRectInit} Last observed content rectangle.\r\n     */\r\n    ResizeObservation.prototype.broadcastRect = function () {\r\n        var rect = this.contentRect_;\r\n        this.broadcastWidth = rect.width;\r\n        this.broadcastHeight = rect.height;\r\n        return rect;\r\n    };\r\n    return ResizeObservation;\r\n}());\n\nvar ResizeObserverEntry = /** @class */ (function () {\r\n    /**\r\n     * Creates an instance of ResizeObserverEntry.\r\n     *\r\n     * @param {Element} target - Element that is being observed.\r\n     * @param {DOMRectInit} rectInit - Data of the element's content rectangle.\r\n     */\r\n    function ResizeObserverEntry(target, rectInit) {\r\n        var contentRect = createReadOnlyRect(rectInit);\r\n        // According to the specification following properties are not writable\r\n        // and are also not enumerable in the native implementation.\r\n        //\r\n        // Property accessors are not being used as they'd require to define a\r\n        // private WeakMap storage which may cause memory leaks in browsers that\r\n        // don't support this type of collections.\r\n        defineConfigurable(this, { target: target, contentRect: contentRect });\r\n    }\r\n    return ResizeObserverEntry;\r\n}());\n\nvar ResizeObserverSPI = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of ResizeObserver.\r\n     *\r\n     * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n     *      when one of the observed elements changes it's content dimensions.\r\n     * @param {ResizeObserverController} controller - Controller instance which\r\n     *      is responsible for the updates of observer.\r\n     * @param {ResizeObserver} callbackCtx - Reference to the public\r\n     *      ResizeObserver instance which will be passed to callback function.\r\n     */\r\n    function ResizeObserverSPI(callback, controller, callbackCtx) {\r\n        /**\r\n         * Collection of resize observations that have detected changes in dimensions\r\n         * of elements.\r\n         *\r\n         * @private {Array<ResizeObservation>}\r\n         */\r\n        this.activeObservations_ = [];\r\n        /**\r\n         * Registry of the ResizeObservation instances.\r\n         *\r\n         * @private {Map<Element, ResizeObservation>}\r\n         */\r\n        this.observations_ = new MapShim();\r\n        if (typeof callback !== 'function') {\r\n            throw new TypeError('The callback provided as parameter 1 is not a function.');\r\n        }\r\n        this.callback_ = callback;\r\n        this.controller_ = controller;\r\n        this.callbackCtx_ = callbackCtx;\r\n    }\r\n    /**\r\n     * Starts observing provided element.\r\n     *\r\n     * @param {Element} target - Element to be observed.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.observe = function (target) {\r\n        if (!arguments.length) {\r\n            throw new TypeError('1 argument required, but only 0 present.');\r\n        }\r\n        // Do nothing if current environment doesn't have the Element interface.\r\n        if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n            return;\r\n        }\r\n        if (!(target instanceof getWindowOf(target).Element)) {\r\n            throw new TypeError('parameter 1 is not of type \"Element\".');\r\n        }\r\n        var observations = this.observations_;\r\n        // Do nothing if element is already being observed.\r\n        if (observations.has(target)) {\r\n            return;\r\n        }\r\n        observations.set(target, new ResizeObservation(target));\r\n        this.controller_.addObserver(this);\r\n        // Force the update of observations.\r\n        this.controller_.refresh();\r\n    };\r\n    /**\r\n     * Stops observing provided element.\r\n     *\r\n     * @param {Element} target - Element to stop observing.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.unobserve = function (target) {\r\n        if (!arguments.length) {\r\n            throw new TypeError('1 argument required, but only 0 present.');\r\n        }\r\n        // Do nothing if current environment doesn't have the Element interface.\r\n        if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n            return;\r\n        }\r\n        if (!(target instanceof getWindowOf(target).Element)) {\r\n            throw new TypeError('parameter 1 is not of type \"Element\".');\r\n        }\r\n        var observations = this.observations_;\r\n        // Do nothing if element is not being observed.\r\n        if (!observations.has(target)) {\r\n            return;\r\n        }\r\n        observations.delete(target);\r\n        if (!observations.size) {\r\n            this.controller_.removeObserver(this);\r\n        }\r\n    };\r\n    /**\r\n     * Stops observing all elements.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.disconnect = function () {\r\n        this.clearActive();\r\n        this.observations_.clear();\r\n        this.controller_.removeObserver(this);\r\n    };\r\n    /**\r\n     * Collects observation instances the associated element of which has changed\r\n     * it's content rectangle.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.gatherActive = function () {\r\n        var _this = this;\r\n        this.clearActive();\r\n        this.observations_.forEach(function (observation) {\r\n            if (observation.isActive()) {\r\n                _this.activeObservations_.push(observation);\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * Invokes initial callback function with a list of ResizeObserverEntry\r\n     * instances collected from active resize observations.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.broadcastActive = function () {\r\n        // Do nothing if observer doesn't have active observations.\r\n        if (!this.hasActive()) {\r\n            return;\r\n        }\r\n        var ctx = this.callbackCtx_;\r\n        // Create ResizeObserverEntry instance for every active observation.\r\n        var entries = this.activeObservations_.map(function (observation) {\r\n            return new ResizeObserverEntry(observation.target, observation.broadcastRect());\r\n        });\r\n        this.callback_.call(ctx, entries, ctx);\r\n        this.clearActive();\r\n    };\r\n    /**\r\n     * Clears the collection of active observations.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.clearActive = function () {\r\n        this.activeObservations_.splice(0);\r\n    };\r\n    /**\r\n     * Tells whether observer has active observations.\r\n     *\r\n     * @returns {boolean}\r\n     */\r\n    ResizeObserverSPI.prototype.hasActive = function () {\r\n        return this.activeObservations_.length > 0;\r\n    };\r\n    return ResizeObserverSPI;\r\n}());\n\n// Registry of internal observers. If WeakMap is not available use current shim\r\n// for the Map collection as it has all required methods and because WeakMap\r\n// can't be fully polyfilled anyway.\r\nvar observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();\r\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\r\nvar ResizeObserver = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of ResizeObserver.\r\n     *\r\n     * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n     *      dimensions of the observed elements change.\r\n     */\r\n    function ResizeObserver(callback) {\r\n        if (!(this instanceof ResizeObserver)) {\r\n            throw new TypeError('Cannot call a class as a function.');\r\n        }\r\n        if (!arguments.length) {\r\n            throw new TypeError('1 argument required, but only 0 present.');\r\n        }\r\n        var controller = ResizeObserverController.getInstance();\r\n        var observer = new ResizeObserverSPI(callback, controller, this);\r\n        observers.set(this, observer);\r\n    }\r\n    return ResizeObserver;\r\n}());\r\n// Expose public methods of ResizeObserver.\r\n[\r\n    'observe',\r\n    'unobserve',\r\n    'disconnect'\r\n].forEach(function (method) {\r\n    ResizeObserver.prototype[method] = function () {\r\n        var _a;\r\n        return (_a = observers.get(this))[method].apply(_a, arguments);\r\n    };\r\n});\n\nvar index = (function () {\r\n    // Export existing implementation if available.\r\n    if (typeof global$1.ResizeObserver !== 'undefined') {\r\n        return global$1.ResizeObserver;\r\n    }\r\n    return ResizeObserver;\r\n})();\n\nexport default index;\n","import { ref, reactive, onMounted, onBeforeUnmount } from 'vue'\nimport { Ref } from 'vue'\nimport debounce from 'lodash/debounce'\nimport ResizeObserver from 'resize-observer-polyfill'\n\n// Coalesce resize bursts (e.g. a window/pane drag fires dozens per second) so\n// consumers only redraw once the dimensions settle, rather than every frame.\nconst RESIZE_DEBOUNCE_MS = 100\n\nconst NARROW_WIDTH_THRESHOLD = 540\n\n/**\n * Observes an element's size and exposes reactive, debounced dimensions.\n *\n * @param resizableRef - Optional ref to the observed element; when omitted, a fresh ref is created and returned as `resizeRef`.\n * @returns An object with `resizeRef` (attach to the element) and reactive `resizeState` holding `dimensions`, `offsetWidth`, and `narrowWidth`.\n * @example\n * <script setup>\n * import { useResizeObserver } from '@icij/murmur-next'\n *\n * const { resizeRef, resizeState } = useResizeObserver()\n * </script>\n *\n * <template>\n *   <div ref=\"resizeRef\">{{ resizeState.offsetWidth }}px</div>\n * </template>\n */\nexport function useResizeObserver(resizableRef?: Ref) {\n  const resizeRef: Ref<HTMLElement> = resizableRef ?? ref()\n  const resizeState = reactive({\n    dimensions: {} as DOMRect,\n    offsetWidth: NARROW_WIDTH_THRESHOLD,\n    narrowWidth: false\n  })\n\n  const onResize = debounce((entries: ResizeObserverEntry[]) => {\n    entries.forEach((entry) => {\n      resizeState.dimensions = entry.contentRect\n      resizeState.offsetWidth = (entry.target as HTMLElement).offsetWidth\n      resizeState.narrowWidth = (resizeState.offsetWidth ?? NARROW_WIDTH_THRESHOLD) < NARROW_WIDTH_THRESHOLD\n    })\n  }, RESIZE_DEBOUNCE_MS)\n\n  const observer = new ResizeObserver(onResize)\n\n  onMounted(async () => {\n    if (resizeRef.value) {\n      // set initial dimensions right before observing: Element.getBoundingClientRect()\n      resizeState.dimensions = resizeRef.value.getBoundingClientRect()\n      resizeState.offsetWidth = resizeRef.value.offsetWidth\n      resizeState.narrowWidth = false // TODO CD: old default is false but maybe this would work (resizeState.offsetWidth ?? 540) < 540 but would be often true\n\n      observer.observe(resizeRef.value)\n    }\n  })\n\n  onBeforeUnmount(() => {\n    // Drop any pending trailing call so it can't fire after teardown, then stop\n    // observing every element (disconnect covers unobserve).\n    onResize.cancel()\n    observer.disconnect()\n  })\n\n  return { resizeState, resizeRef }\n}\n","/**\n * Runs a callback on every animation frame until stopped, wrapping\n * `window.requestAnimationFrame` in a start/stop lifecycle.\n *\n * @example\n * const wrapper = new RequestAnimationFrameWrapper()\n * wrapper.start(() => updateScrollPosition())\n * // later\n * wrapper.stop()\n */\nexport class RequestAnimationFrameWrapper {\n  live: boolean\n  callback: () => void\n\n  constructor() {\n    this.live = false\n    this.callback = () => null\n  }\n\n  /**\n   * Begin invoking the callback on every animation frame.\n   *\n   * @param callback - The function to run on each frame.\n   */\n  start(callback: () => void) {\n    this.live = true\n    this.callback = callback\n    this.schedule()\n  }\n\n  /**\n   * Stop invoking the callback and reset it to a no-op.\n   */\n  stop() {\n    this.live = false\n    this.callback = () => null\n  }\n\n  /**\n   * Run the callback once, then queue the next frame while still live.\n   */\n  schedule() {\n    this.callback()\n    if (this.live) {\n      window.requestAnimationFrame(this.schedule.bind(this))\n    }\n  }\n}\n","import { computed, onUnmounted, ref, watch } from 'vue'\nimport type { ComputedRef, Ref } from 'vue'\n\nimport { useResizeObserver } from '@/composables/useResizeObserver'\nimport { RequestAnimationFrameWrapper } from '@/utils/animation'\n\n/**\n * Direction the truncated text scrolls towards on hover.\n */\nexport type ActiveTextTruncateDirection = 'ltr' | 'rtl'\n\n/**\n * Options driving the truncation animation. They mirror the\n * `ActiveTextTruncate` component props.\n */\nexport interface UseActiveTextTruncateOptions {\n  /**\n   * Number of pixels per millisecond for the text transition.\n   */\n  ppms: Ref<number>\n  /**\n   * Maximum width of the fading mask, in pixels.\n   */\n  fadingMaxWidth: Ref<number>\n  /**\n   * Minimum width of the fading mask, in pixels.\n   */\n  fadingMinWidth: Ref<number>\n  /**\n   * Delay before the text starts moving, in milliseconds.\n   */\n  delay: Ref<number>\n  /**\n   * Direction of the truncation animation.\n   */\n  direction: Ref<ActiveTextTruncateDirection>\n}\n\n/**\n * Emit signature for the animation lifecycle events.\n */\ntype ActiveTextTruncateEmit = (event: 'cancel' | 'end' | 'start') => void\n\n/**\n * Reactive API returned by {@link useActiveTextTruncate}.\n */\nexport interface UseActiveTextTruncate {\n  resizeRef: Ref<HTMLElement>\n  isFading: ComputedRef<boolean>\n  fadingLeftWidth: ComputedRef<string>\n  fadingRightWidth: ComputedRef<string>\n  textFinalOffset: ComputedRef<string>\n  textOffsetTransitionDelay: ComputedRef<string>\n  textOffsetTransitionDuration: ComputedRef<string>\n  resetTextLivePosition: () => void\n}\n\nconst WRAPPER_SELECTOR = '.active-text-truncate__wrapper'\nconst TEXT_SELECTOR = '.active-text-truncate__wrapper__text'\n\n/**\n * Drives the resize-aware text truncation animation for `ActiveTextTruncate`:\n * measures the wrapper and text elements, derives the CSS custom properties\n * that animate the text offset and fading mask, and tracks the text position\n * live (via `requestAnimationFrame`) while a transition is running so the\n * fading mask can follow it.\n *\n * Reuses {@link useResizeObserver} to re-measure whenever the host element is\n * resized.\n *\n * @param options - Reactive truncation options (see {@link UseActiveTextTruncateOptions}).\n * @param emit - The component's emit function, used to raise `start`, `end` and `cancel`.\n * @returns The {@link UseActiveTextTruncate} API: `resizeRef` to attach to the\n *   host element, the derived CSS-value computeds for the template, and the\n *   `resetTextLivePosition` handler.\n * @remarks Internal building block of `ActiveTextTruncate`; not exported from the package root.\n * @example\n * import { toRef } from 'vue'\n * import { useActiveTextTruncate } from '@/composables/useActiveTextTruncate'\n *\n * const { resizeRef, isFading, resetTextLivePosition } = useActiveTextTruncate(\n *   {\n *     ppms: toRef(props, 'ppms'),\n *     fadingMaxWidth: toRef(props, 'fadingMaxWidth'),\n *     fadingMinWidth: toRef(props, 'fadingMinWidth'),\n *     delay: toRef(props, 'delay'),\n *     direction: toRef(props, 'direction')\n *   },\n *   emit\n * )\n */\nexport function useActiveTextTruncate(\n  options: UseActiveTextTruncateOptions,\n  emit: ActiveTextTruncateEmit\n): UseActiveTextTruncate {\n  const { ppms, fadingMaxWidth, fadingMinWidth, delay, direction } = options\n\n  // Position of the text element (its CSS `left`) updated live during the\n  // transition; the fading mask widths are derived from it.\n  const textLivePosition = ref(0)\n  const animationFrame = new RequestAnimationFrameWrapper()\n\n  const { resizeRef, resizeState } = useResizeObserver()\n\n  const wrapperElement = computed((): HTMLElement | null => {\n    return resizeRef.value?.querySelector(WRAPPER_SELECTOR) ?? null\n  })\n  const wrapperElementWidth = computed((): number => {\n    return wrapperElement.value?.offsetWidth ?? 0\n  })\n  const textElement = computed((): HTMLElement | null => {\n    return resizeRef.value?.querySelector(TEXT_SELECTOR) ?? null\n  })\n  const textElementWidth = computed((): number => {\n    return textElement.value?.offsetWidth ?? 0\n  })\n\n  const textOffsetTransitionDelay = computed((): string => {\n    return `${delay.value}ms`\n  })\n  const textOffsetTransitionDuration = computed((): string => {\n    const offset = Math.abs(wrapperElementWidth.value - textElementWidth.value)\n    const duration = offset / ppms.value\n    return `${duration}ms`\n  })\n  const textInitialOffset = computed((): string => {\n    return '0'\n  })\n  const textFinalOffset = computed((): string => {\n    const offset = wrapperElementWidth.value - textElementWidth.value\n    return `${offset}px`\n  })\n  const textOffsetValues = computed((): string[] => {\n    if (direction.value === 'ltr') {\n      return [textInitialOffset.value, textFinalOffset.value]\n    }\n    return [textFinalOffset.value, textInitialOffset.value]\n  })\n\n  const isFading = computed((): boolean => {\n    return wrapperElementWidth.value < textElementWidth.value\n  })\n  const fadingLeftWidth = computed((): string => {\n    const offset = textLivePosition.value\n    const width = Math.min(\n      Math.max(fadingMinWidth.value, Math.abs(offset)),\n      fadingMaxWidth.value\n    )\n    return `${width}px`\n  })\n  const fadingRightWidth = computed((): string => {\n    const offset = parseInt(textFinalOffset.value) - textLivePosition.value\n    const width = Math.min(\n      Math.max(fadingMinWidth.value, Math.abs(offset)),\n      fadingMaxWidth.value\n    )\n    return `${width}px`\n  })\n\n  // Add a listener idempotently: remove it first so repeated resizes never\n  // stack duplicate listeners on the same text element.\n  function listenOnTextElement(name: string, func: () => void): void {\n    textElement.value?.removeEventListener(name, func)\n    textElement.value?.addEventListener(name, func)\n  }\n  function trackTextLivePosition(): void {\n    if (!textElement.value) {\n      return\n    }\n    const left = window\n      .getComputedStyle(textElement.value, null)\n      .getPropertyValue('left')\n    textLivePosition.value = parseInt(left)\n  }\n  function startTrackingTextLivePosition(): void {\n    animationFrame.start(trackTextLivePosition)\n    /**\n     * Emitted when the animation on the text starts.\n     * @event start\n     */\n    emit('start')\n  }\n  function endTrackingTextLivePosition(): void {\n    animationFrame.stop()\n    /**\n     * Emitted when the animation on the text reaches the end.\n     * @event end\n     */\n    emit('end')\n  }\n  function resetTextLivePosition(): void {\n    animationFrame.stop()\n    textLivePosition.value = parseInt(textOffsetValues.value[0])\n    /**\n     * Emitted when the animation on the text is cancelled.\n     * @event cancel\n     */\n    emit('cancel')\n  }\n\n  // Re-measure and re-bind transition listeners whenever the element resizes.\n  function onResized(): void {\n    textLivePosition.value = parseInt(textOffsetValues.value[0])\n    listenOnTextElement('transitionstart', startTrackingTextLivePosition)\n    listenOnTextElement('transitionend', endTrackingTextLivePosition)\n    listenOnTextElement('transitioncancel', resetTextLivePosition)\n  }\n\n  watch(resizeState, onResized)\n\n  onUnmounted(() => {\n    // Stop the Request Animation Frame loop so it doesn't reschedule forever.\n    animationFrame.stop()\n    // Remove the transition listeners added on the text element.\n    textElement.value?.removeEventListener(\n      'transitionstart',\n      startTrackingTextLivePosition\n    )\n    textElement.value?.removeEventListener(\n      'transitionend',\n      endTrackingTextLivePosition\n    )\n    textElement.value?.removeEventListener(\n      'transitioncancel',\n      resetTextLivePosition\n    )\n  })\n\n  return {\n    resizeRef,\n    isFading,\n    fadingLeftWidth,\n    fadingRightWidth,\n    textFinalOffset,\n    textOffsetTransitionDelay,\n    textOffsetTransitionDuration,\n    resetTextLivePosition\n  }\n}\n\nexport default useActiveTextTruncate\n","<script setup lang=\"ts\">\nimport { toRef } from 'vue'\n\nimport { useActiveTextTruncate } from '@/composables/useActiveTextTruncate'\nimport type { ActiveTextTruncateDirection } from '@/composables/useActiveTextTruncate'\n\nexport interface ActiveTextTruncateProps {\n  /**\n   * Number of Pixel Per Millisecond for the text transition.\n   */\n  ppms?: number\n  /**\n   * Maximum width of the fading mask (must be greater than 0).\n   */\n  fadingMaxWidth?: number\n  /**\n   * Minimum width of the fading mask (must be greater than 0).\n   */\n  fadingMinWidth?: number\n  /**\n   * Delay to start moving the text (in milliseconds).\n   */\n  delay?: number\n  /**\n   * Direction of the truncate ('ltr' or 'rtl').\n   */\n  direction?: ActiveTextTruncateDirection\n}\n\nconst props = withDefaults(defineProps<ActiveTextTruncateProps>(), {\n  ppms: 0.025,\n  fadingMaxWidth: 50,\n  fadingMinWidth: 0.001,\n  delay: 1000,\n  direction: 'ltr'\n})\n\nconst emit = defineEmits(['cancel', 'end', 'start'])\n\nconst {\n  resizeRef,\n  isFading,\n  fadingLeftWidth,\n  fadingRightWidth,\n  textFinalOffset,\n  textOffsetTransitionDelay,\n  textOffsetTransitionDuration,\n  resetTextLivePosition\n} = useActiveTextTruncate(\n  {\n    ppms: toRef(props, 'ppms'),\n    fadingMaxWidth: toRef(props, 'fadingMaxWidth'),\n    fadingMinWidth: toRef(props, 'fadingMinWidth'),\n    delay: toRef(props, 'delay'),\n    direction: toRef(props, 'direction')\n  },\n  emit\n)\n</script>\n\n<template>\n  <span\n    ref=\"resizeRef\"\n    class=\"active-text-truncate\"\n    :class=\"{\n      'active-text-truncate--fading': isFading,\n      [`active-text-truncate--${direction}`]: true\n    }\"\n    :style=\"{\n      '--fading-left-width': fadingLeftWidth,\n      '--fading-right-width': fadingRightWidth,\n      '--text-offset-transition-duration': textOffsetTransitionDuration,\n      '--text-offset-transition-delay': textOffsetTransitionDelay,\n      '--text-final-offset': textFinalOffset\n    }\"\n    @mouseleave=\"resetTextLivePosition\"\n  >\n    <span class=\"active-text-truncate__wrapper\">\n      <span class=\"active-text-truncate__wrapper__text\">\n        <slot />\n      </span>\n    </span>\n  </span>\n</template>\n\n<style lang=\"scss\" scoped>\n\n@import '../../styles/mixins';\n\n.active-text-truncate {\n  --fading-left-width: 0;\n  --fading-right-width: 0;\n  --fading-left-gradient: linear-gradient(\n    to left,\n    black calc(100% - var(--fading-left-width)),\n    transparent 100%\n  );\n  --fading-right-gradient: linear-gradient(\n    to right,\n    black calc(100% - var(--fading-right-width)),\n    transparent 100%\n  );\n  --text-offset-transition-duration: 0ms;\n  --text-offset-transition-delay: 0ms;\n  --text-final-offset: 0;\n\n  overflow: hidden;\n  max-width: 100%;\n  display: inline-block;\n  position: relative;\n\n  &:after {\n    content: attr(data-text-live-position);\n    position: absolute;\n    left: 0;\n    top: 0;\n  }\n\n  &__wrapper {\n    width: 100%;\n    display: inline-block;\n\n    .active-text-truncate--fading & {\n      mask: var(--fading-right-gradient), var(--fading-left-gradient);\n      mask-composite: intersect;\n    }\n\n    .active-text-truncate--rtl.active-text-truncate--fading &:hover &__text,\n    .active-text-truncate--ltr.active-text-truncate--fading &:hover &__text {\n      transition: linear left var(--text-offset-transition-duration);\n      transition-delay: var(--text-offset-transition-delay);\n    }\n\n    .active-text-truncate--ltr.active-text-truncate--fading &:hover &__text {\n      left: var(--text-final-offset);\n    }\n\n    .active-text-truncate--rtl.active-text-truncate--fading &:hover &__text {\n      left: 0;\n    }\n\n    &__text {\n      white-space: nowrap;\n      position: relative;\n      left: 0;\n\n      .active-text-truncate--rtl & {\n        left: var(--text-final-offset);\n      }\n    }\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { toRef } from 'vue'\n\nimport { useActiveTextTruncate } from '@/composables/useActiveTextTruncate'\nimport type { ActiveTextTruncateDirection } from '@/composables/useActiveTextTruncate'\n\nexport interface ActiveTextTruncateProps {\n  /**\n   * Number of Pixel Per Millisecond for the text transition.\n   */\n  ppms?: number\n  /**\n   * Maximum width of the fading mask (must be greater than 0).\n   */\n  fadingMaxWidth?: number\n  /**\n   * Minimum width of the fading mask (must be greater than 0).\n   */\n  fadingMinWidth?: number\n  /**\n   * Delay to start moving the text (in milliseconds).\n   */\n  delay?: number\n  /**\n   * Direction of the truncate ('ltr' or 'rtl').\n   */\n  direction?: ActiveTextTruncateDirection\n}\n\nconst props = withDefaults(defineProps<ActiveTextTruncateProps>(), {\n  ppms: 0.025,\n  fadingMaxWidth: 50,\n  fadingMinWidth: 0.001,\n  delay: 1000,\n  direction: 'ltr'\n})\n\nconst emit = defineEmits(['cancel', 'end', 'start'])\n\nconst {\n  resizeRef,\n  isFading,\n  fadingLeftWidth,\n  fadingRightWidth,\n  textFinalOffset,\n  textOffsetTransitionDelay,\n  textOffsetTransitionDuration,\n  resetTextLivePosition\n} = useActiveTextTruncate(\n  {\n    ppms: toRef(props, 'ppms'),\n    fadingMaxWidth: toRef(props, 'fadingMaxWidth'),\n    fadingMinWidth: toRef(props, 'fadingMinWidth'),\n    delay: toRef(props, 'delay'),\n    direction: toRef(props, 'direction')\n  },\n  emit\n)\n</script>\n\n<template>\n  <span\n    ref=\"resizeRef\"\n    class=\"active-text-truncate\"\n    :class=\"{\n      'active-text-truncate--fading': isFading,\n      [`active-text-truncate--${direction}`]: true\n    }\"\n    :style=\"{\n      '--fading-left-width': fadingLeftWidth,\n      '--fading-right-width': fadingRightWidth,\n      '--text-offset-transition-duration': textOffsetTransitionDuration,\n      '--text-offset-transition-delay': textOffsetTransitionDelay,\n      '--text-final-offset': textFinalOffset\n    }\"\n    @mouseleave=\"resetTextLivePosition\"\n  >\n    <span class=\"active-text-truncate__wrapper\">\n      <span class=\"active-text-truncate__wrapper__text\">\n        <slot />\n      </span>\n    </span>\n  </span>\n</template>\n\n<style lang=\"scss\" scoped>\n\n@import '../../styles/mixins';\n\n.active-text-truncate {\n  --fading-left-width: 0;\n  --fading-right-width: 0;\n  --fading-left-gradient: linear-gradient(\n    to left,\n    black calc(100% - var(--fading-left-width)),\n    transparent 100%\n  );\n  --fading-right-gradient: linear-gradient(\n    to right,\n    black calc(100% - var(--fading-right-width)),\n    transparent 100%\n  );\n  --text-offset-transition-duration: 0ms;\n  --text-offset-transition-delay: 0ms;\n  --text-final-offset: 0;\n\n  overflow: hidden;\n  max-width: 100%;\n  display: inline-block;\n  position: relative;\n\n  &:after {\n    content: attr(data-text-live-position);\n    position: absolute;\n    left: 0;\n    top: 0;\n  }\n\n  &__wrapper {\n    width: 100%;\n    display: inline-block;\n\n    .active-text-truncate--fading & {\n      mask: var(--fading-right-gradient), var(--fading-left-gradient);\n      mask-composite: intersect;\n    }\n\n    .active-text-truncate--rtl.active-text-truncate--fading &:hover &__text,\n    .active-text-truncate--ltr.active-text-truncate--fading &:hover &__text {\n      transition: linear left var(--text-offset-transition-duration);\n      transition-delay: var(--text-offset-transition-delay);\n    }\n\n    .active-text-truncate--ltr.active-text-truncate--fading &:hover &__text {\n      left: var(--text-final-offset);\n    }\n\n    .active-text-truncate--rtl.active-text-truncate--fading &:hover &__text {\n      left: 0;\n    }\n\n    &__text {\n      white-space: nowrap;\n      position: relative;\n      left: 0;\n\n      .active-text-truncate--rtl & {\n        left: var(--text-final-offset);\n      }\n    }\n  }\n}\n</style>\n","/**\n * Checks if `value` is classified as an `Array` object.\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 array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","var baseGetTag = require('./_baseGetTag'),\n    isArray = require('./isArray'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n  return typeof value == 'string' ||\n    (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n","<template>\n  <span\n    class=\"brand\"\n    :style=\"style\"\n    :class=\"{ 'brand--animated': animated }\"\n  >\n    <svg\n      :width=\"width\"\n      :height=\"height\"\n      viewBox=\"0 0 147.151 200\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        class=\"triangle\"\n        d=\"M101.997 200H45.155l28.42-46.427z\"\n      />\n      <path\n        class=\"globe\"\n        d=\"M119.771 19.138C107.432 6.793 91.028 0 73.576 0S39.719 6.793 27.38 19.138C15.035 31.477 8.242 47.882 8.242 65.334c0 17.451 6.793 33.856 19.138 46.195 12.339 12.339 28.744 19.138 46.196 19.138 17.452 0 33.856-6.793 46.195-19.138C132.11 99.19 138.91 82.785 138.91 65.334c0-17.452-6.793-33.857-19.138-46.196zm3.397 23.028a54.35 54.35 0 0 1 4.863 17.86H108.79c-.262-6.173-.968-12.175-2.094-17.86h16.478zM112.266 26.65a54.792 54.792 0 0 1 4.346 4.894H103.98c-1.254-3.939-2.733-7.634-4.431-11.024a61.475 61.475 0 0 0-2.6-4.681c5.619 2.654 10.793 6.288 15.316 10.81zm-14.11 33.376H78.89v-17.86h16.965c1.241 5.6 2.02 11.614 2.3 17.86zm-8.109-34.758a63.605 63.605 0 0 1 2.71 6.276H78.89v-19.48c4.03 2.174 7.92 6.721 11.157 13.204zm-32.943 0c3.238-6.477 7.134-11.03 11.158-13.203v19.473H54.395a62.794 62.794 0 0 1 2.709-6.276zm11.158 16.898v17.86H48.996c.286-6.246 1.065-12.26 2.3-17.86zM34.886 26.65A54.905 54.905 0 0 1 50.2 15.833a59.443 59.443 0 0 0-2.6 4.68c-1.698 3.391-3.177 7.086-4.43 11.025H30.538a55.764 55.764 0 0 1 4.347-4.894zm5.57 15.516c-1.127 5.685-1.833 11.687-2.095 17.86H19.12a54.201 54.201 0 0 1 4.863-17.86h16.478ZM23.976 88.507a54.35 54.35 0 0 1-4.863-17.86h19.241c.262 6.173.968 12.181 2.094 17.86H23.971Zm10.902 15.517a54.793 54.793 0 0 1-4.346-4.894h12.631c1.254 3.938 2.733 7.633 4.432 11.023a61.476 61.476 0 0 0 2.599 4.681 54.569 54.569 0 0 1-15.316-10.816zm14.11-33.376h19.266v17.86H51.29c-1.241-5.6-2.02-11.615-2.3-17.86Zm8.109 34.757a63.605 63.605 0 0 1-2.71-6.275h13.867v19.472c-4.03-2.173-7.919-6.72-11.157-13.203zm32.943 0c-3.238 6.477-7.134 11.03-11.157 13.203V99.136H92.75a62.793 62.793 0 0 1-2.709 6.275zM78.884 88.507v-17.86h19.265c-.286 6.246-1.065 12.26-2.3 17.86zm33.376 15.517a54.759 54.759 0 0 1-15.316 10.81 59.444 59.444 0 0 0 2.6-4.68c1.698-3.391 3.177-7.086 4.43-11.024h12.632a55.763 55.763 0 0 1-4.346 4.894zm-5.57-15.517c1.126-5.685 1.832-11.687 2.094-17.86h19.241a54.201 54.201 0 0 1-4.863 17.86h-16.478z\"\n        style=\"stroke-width: 0.608717\"\n      />\n      <path\n        class=\"plate\"\n        d=\"M 147.151 136.809 L 147.151 147.431 L 9.02755e-15 147.431 L 8.37714e-15 136.809 Z\"\n        style=\"stroke-width: 0.608717\"\n      />\n    </svg>\n  </span>\n</template>\n\n<script setup lang=\"ts\">\n/**\n * A component to create variations of ICIJ logo\n */\nimport { computed, ref } from 'vue'\nimport type { CSSProperties } from 'vue'\nimport isString from 'lodash/isString'\n\n// The SVG viewBox is authored at this height; the width scales proportionally.\nconst REFERENCE_HEIGHT = 200\nconst REFERENCE_WIDTH = 147.151\n\ninterface BrandProps {\n  /**\n   * Add a balancing effect to the globe\n   */\n  animated?: boolean\n  /**\n   * Monochromatic logo's color\n   */\n  color?: string\n  /**\n   * Logo's background color\n   */\n  background?: string\n  /**\n   * Logo's size\n   */\n  size?: number | string\n  /**\n   * Force the width of the logo to be the same as the height\n   */\n  square?: boolean\n}\n\ninterface BrandStyle extends CSSProperties {\n  '--monochrome-color': string | undefined\n  'width': string | number\n}\n\nconst props = withDefaults(defineProps<BrandProps>(), {\n  color: undefined,\n  background: undefined,\n  size: '70px'\n})\n// NOTE: `size` is read once at setup and is intentionally not reactive, to\n// preserve the original behavior. Making the brand react to `size` prop changes\n// (by using a computed, as the sibling `BrandExpansion` does) would change the\n// public rendering and belongs in a separate change.\nconst sizeAsNumber = ref(\n  isString(props.size) ? parseInt(props.size) : props.size\n)\n\nconst width = computed(\n  () => `${(REFERENCE_WIDTH / REFERENCE_HEIGHT) * sizeAsNumber.value}px`\n)\nconst height = computed(() => `${sizeAsNumber.value}px`)\n\nconst style = computed<BrandStyle>(() => {\n  const { square } = props\n  const widthValue = square ? height.value : 'auto'\n\n  return {\n    '--monochrome-color': props.color,\n    'color': props.color,\n    'background': props.background,\n    'width': widthValue\n  }\n})\n</script>\n\n<style scoped lang=\"scss\">\n@keyframes balancing-plate {\n  0% {\n    transform: rotate(0deg);\n  }\n  25% {\n    transform: rotate(7deg);\n  }\n  50% {\n    transform: rotate(-7deg);\n  }\n  75% {\n    transform: rotate(0deg);\n  }\n  100% {\n    transform: rotate(0deg);\n  }\n}\n\n@keyframes balancing-globe {\n  0% {\n    transform: rotate(0deg);\n  }\n  35% {\n    transform: rotate(7deg);\n  }\n  65% {\n    transform: rotate(-7deg);\n  }\n  85% {\n    transform: rotate(3deg);\n  }\n  100% {\n    transform: rotate(0deg);\n  }\n}\n\n.brand {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n\n  svg {\n    .triangle,\n    .globe {\n      fill: var(--monochrome-color, #ff0000);\n    }\n\n    .plate {\n      fill: var(--monochrome-color, #999999);\n    }\n  }\n\n  &--animated svg {\n    .plate {\n      animation: balancing-plate 5s infinite cubic-bezier(0.37, 0, 0.63, 1);\n    }\n    .globe {\n      animation: balancing-globe 5s infinite cubic-bezier(0.37, 0, 0.63, 1);\n    }\n\n    .plate,\n    .globe {\n      //noinspection CssInvalidPropertyValue\n      animation-direction: repeat;\n      transform: rotate(0deg);\n      transform-origin: bottom center;\n      transform-box: fill-box;\n    }\n  }\n}\n</style>\n","<template>\n  <span\n    class=\"brand\"\n    :style=\"style\"\n    :class=\"{ 'brand--animated': animated }\"\n  >\n    <svg\n      :width=\"width\"\n      :height=\"height\"\n      viewBox=\"0 0 147.151 200\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        class=\"triangle\"\n        d=\"M101.997 200H45.155l28.42-46.427z\"\n      />\n      <path\n        class=\"globe\"\n        d=\"M119.771 19.138C107.432 6.793 91.028 0 73.576 0S39.719 6.793 27.38 19.138C15.035 31.477 8.242 47.882 8.242 65.334c0 17.451 6.793 33.856 19.138 46.195 12.339 12.339 28.744 19.138 46.196 19.138 17.452 0 33.856-6.793 46.195-19.138C132.11 99.19 138.91 82.785 138.91 65.334c0-17.452-6.793-33.857-19.138-46.196zm3.397 23.028a54.35 54.35 0 0 1 4.863 17.86H108.79c-.262-6.173-.968-12.175-2.094-17.86h16.478zM112.266 26.65a54.792 54.792 0 0 1 4.346 4.894H103.98c-1.254-3.939-2.733-7.634-4.431-11.024a61.475 61.475 0 0 0-2.6-4.681c5.619 2.654 10.793 6.288 15.316 10.81zm-14.11 33.376H78.89v-17.86h16.965c1.241 5.6 2.02 11.614 2.3 17.86zm-8.109-34.758a63.605 63.605 0 0 1 2.71 6.276H78.89v-19.48c4.03 2.174 7.92 6.721 11.157 13.204zm-32.943 0c3.238-6.477 7.134-11.03 11.158-13.203v19.473H54.395a62.794 62.794 0 0 1 2.709-6.276zm11.158 16.898v17.86H48.996c.286-6.246 1.065-12.26 2.3-17.86zM34.886 26.65A54.905 54.905 0 0 1 50.2 15.833a59.443 59.443 0 0 0-2.6 4.68c-1.698 3.391-3.177 7.086-4.43 11.025H30.538a55.764 55.764 0 0 1 4.347-4.894zm5.57 15.516c-1.127 5.685-1.833 11.687-2.095 17.86H19.12a54.201 54.201 0 0 1 4.863-17.86h16.478ZM23.976 88.507a54.35 54.35 0 0 1-4.863-17.86h19.241c.262 6.173.968 12.181 2.094 17.86H23.971Zm10.902 15.517a54.793 54.793 0 0 1-4.346-4.894h12.631c1.254 3.938 2.733 7.633 4.432 11.023a61.476 61.476 0 0 0 2.599 4.681 54.569 54.569 0 0 1-15.316-10.816zm14.11-33.376h19.266v17.86H51.29c-1.241-5.6-2.02-11.615-2.3-17.86Zm8.109 34.757a63.605 63.605 0 0 1-2.71-6.275h13.867v19.472c-4.03-2.173-7.919-6.72-11.157-13.203zm32.943 0c-3.238 6.477-7.134 11.03-11.157 13.203V99.136H92.75a62.793 62.793 0 0 1-2.709 6.275zM78.884 88.507v-17.86h19.265c-.286 6.246-1.065 12.26-2.3 17.86zm33.376 15.517a54.759 54.759 0 0 1-15.316 10.81 59.444 59.444 0 0 0 2.6-4.68c1.698-3.391 3.177-7.086 4.43-11.024h12.632a55.763 55.763 0 0 1-4.346 4.894zm-5.57-15.517c1.126-5.685 1.832-11.687 2.094-17.86h19.241a54.201 54.201 0 0 1-4.863 17.86h-16.478z\"\n        style=\"stroke-width: 0.608717\"\n      />\n      <path\n        class=\"plate\"\n        d=\"M 147.151 136.809 L 147.151 147.431 L 9.02755e-15 147.431 L 8.37714e-15 136.809 Z\"\n        style=\"stroke-width: 0.608717\"\n      />\n    </svg>\n  </span>\n</template>\n\n<script setup lang=\"ts\">\n/**\n * A component to create variations of ICIJ logo\n */\nimport { computed, ref } from 'vue'\nimport type { CSSProperties } from 'vue'\nimport isString from 'lodash/isString'\n\n// The SVG viewBox is authored at this height; the width scales proportionally.\nconst REFERENCE_HEIGHT = 200\nconst REFERENCE_WIDTH = 147.151\n\ninterface BrandProps {\n  /**\n   * Add a balancing effect to the globe\n   */\n  animated?: boolean\n  /**\n   * Monochromatic logo's color\n   */\n  color?: string\n  /**\n   * Logo's background color\n   */\n  background?: string\n  /**\n   * Logo's size\n   */\n  size?: number | string\n  /**\n   * Force the width of the logo to be the same as the height\n   */\n  square?: boolean\n}\n\ninterface BrandStyle extends CSSProperties {\n  '--monochrome-color': string | undefined\n  'width': string | number\n}\n\nconst props = withDefaults(defineProps<BrandProps>(), {\n  color: undefined,\n  background: undefined,\n  size: '70px'\n})\n// NOTE: `size` is read once at setup and is intentionally not reactive, to\n// preserve the original behavior. Making the brand react to `size` prop changes\n// (by using a computed, as the sibling `BrandExpansion` does) would change the\n// public rendering and belongs in a separate change.\nconst sizeAsNumber = ref(\n  isString(props.size) ? parseInt(props.size) : props.size\n)\n\nconst width = computed(\n  () => `${(REFERENCE_WIDTH / REFERENCE_HEIGHT) * sizeAsNumber.value}px`\n)\nconst height = computed(() => `${sizeAsNumber.value}px`)\n\nconst style = computed<BrandStyle>(() => {\n  const { square } = props\n  const widthValue = square ? height.value : 'auto'\n\n  return {\n    '--monochrome-color': props.color,\n    'color': props.color,\n    'background': props.background,\n    'width': widthValue\n  }\n})\n</script>\n\n<style scoped lang=\"scss\">\n@keyframes balancing-plate {\n  0% {\n    transform: rotate(0deg);\n  }\n  25% {\n    transform: rotate(7deg);\n  }\n  50% {\n    transform: rotate(-7deg);\n  }\n  75% {\n    transform: rotate(0deg);\n  }\n  100% {\n    transform: rotate(0deg);\n  }\n}\n\n@keyframes balancing-globe {\n  0% {\n    transform: rotate(0deg);\n  }\n  35% {\n    transform: rotate(7deg);\n  }\n  65% {\n    transform: rotate(-7deg);\n  }\n  85% {\n    transform: rotate(3deg);\n  }\n  100% {\n    transform: rotate(0deg);\n  }\n}\n\n.brand {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n\n  svg {\n    .triangle,\n    .globe {\n      fill: var(--monochrome-color, #ff0000);\n    }\n\n    .plate {\n      fill: var(--monochrome-color, #999999);\n    }\n  }\n\n  &--animated svg {\n    .plate {\n      animation: balancing-plate 5s infinite cubic-bezier(0.37, 0, 0.63, 1);\n    }\n    .globe {\n      animation: balancing-globe 5s infinite cubic-bezier(0.37, 0, 0.63, 1);\n    }\n\n    .plate,\n    .globe {\n      //noinspection CssInvalidPropertyValue\n      animation-direction: repeat;\n      transform: rotate(0deg);\n      transform-origin: bottom center;\n      transform-box: fill-box;\n    }\n  }\n}\n</style>\n","<template>\n  <svg\n    :width=\"width\"\n    :height=\"height\"\n    viewBox=\"0 0 106.166 52.917\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      class=\"triangle\"\n      d=\"m11.947 52.917 7.52-12.283 7.52 12.283Z\"\n    />\n    <path\n      class=\"globe\"\n      d=\"M28.229 23.417c.298-1.504.485-3.092.554-4.726h5.091a14.367 14.367 0 0 1-1.286 4.726Zm1.474 4.105a14.488 14.488 0 0 1-4.053 2.861c.24-.388.47-.801.688-1.239.45-.897.841-1.875 1.173-2.917h3.342c-.355.45-.739.883-1.15 1.295m-8.83-4.105V18.69h5.097a27.764 27.764 0 0 1-.61 4.726Zm2.952 4.47c-.857 1.714-1.887 2.919-2.953 3.493v-5.153h3.67a16.722 16.722 0 0 1-.717 1.66m-8.716 0c-.26-.521-.5-1.076-.716-1.66h3.669v5.153c-1.066-.574-2.096-1.779-2.953-3.493m-2.145-9.196h5.098v4.726h-4.488a27.764 27.764 0 0 1-.61-4.726m-3.733 8.831a14.704 14.704 0 0 1-1.15-1.295h3.342c.332 1.042.724 2.02 1.172 2.917.22.438.449.851.689 1.24a14.48 14.48 0 0 1-4.053-2.862m-2.885-4.105a14.363 14.363 0 0 1-1.287-4.726h5.092c.069 1.634.256 3.222.554 4.726zm4.359-12.262a31.079 31.079 0 0 0-.554 4.726H5.06a14.363 14.363 0 0 1 1.287-4.726zM9.231 7.05a14.485 14.485 0 0 1 4.052-2.86c-.24.387-.469.8-.688 1.238-.448.898-.84 1.876-1.172 2.917H8.08c.355-.45.738-.883 1.15-1.295m8.83 4.105v4.726h-5.097c.075-1.652.281-3.244.61-4.726zm-2.952-4.47c.857-1.714 1.887-2.918 2.953-3.493v5.153h-3.67c.217-.583.456-1.138.717-1.66m8.716 0c.26.522.5 1.077.716 1.66h-3.669V3.192c1.066.575 2.096 1.78 2.953 3.493m2.145 9.196h-5.098v-4.726h4.488c.328 1.482.535 3.074.61 4.726m3.733-8.83c.411.411.795.844 1.15 1.294h-3.342a20.314 20.314 0 0 0-1.173-2.917 15.822 15.822 0 0 0-.688-1.239 14.49 14.49 0 0 1 4.053 2.861m2.885 4.105a14.367 14.367 0 0 1 1.286 4.726h-5.091a31.079 31.079 0 0 0-.554-4.726Zm-.898-6.092A17.173 17.173 0 0 0 19.467 0 17.173 17.173 0 0 0 7.244 5.063 17.174 17.174 0 0 0 2.18 17.286c0 4.618 1.798 8.959 5.063 12.223a17.173 17.173 0 0 0 12.223 5.064c4.617 0 8.958-1.799 12.223-5.064a17.173 17.173 0 0 0 5.063-12.223c0-4.617-1.798-8.958-5.063-12.223\"\n    />\n    <path\n      class=\"plate\"\n      d=\"M0 36.198h38.934v2.81H0Z\"\n    />\n    <g class=\"main-text\">\n      <path d=\"M48.51 7.923h7.164v37.07H48.51z\" />\n      <path\n        d=\"M60.788 42.793c-1.626-1.698-2.439-4.028-2.439-6.991v-17.09c0-3.683.734-6.459 2.201-8.33 1.468-1.87 3.769-2.804 6.905-2.804 2.733 0 4.934.748 6.603 2.244 1.668 1.496 2.503 3.654 2.503 6.473v6.387h-7.38v-5.48c0-1.065-.129-1.799-.388-2.202-.259-.402-.705-.604-1.338-.604-.662 0-1.115.23-1.36.69-.244.461-.366 1.137-.366 2.029v18.6c0 .979.144 1.69.431 2.136.288.447.72.67 1.295.67 1.15 0 1.726-.935 1.726-2.806v-6.689h7.466v6.991c0 6.215-3.122 9.322-9.365 9.322-2.704 0-4.87-.848-6.494-2.546\"\n      />\n      <path d=\"M78.762 7.923h7.164v37.07h-7.164z\" />\n      <path\n        d=\"M92.528 44.346a7.609 7.609 0 0 1-3.258-2.913c-.792-1.28-1.187-2.826-1.187-4.639V29.03h7.294v7.333c0 .662.136 1.186.41 1.575.273.388.697.582 1.273.582.546 0 .956-.18 1.23-.539.273-.36.41-.87.41-1.532V7.923h7.466v27.792c0 1.928-.382 3.619-1.144 5.071-.763 1.453-1.827 2.575-3.194 3.366-1.366.792-2.927 1.187-4.682 1.187-1.698 0-3.237-.331-4.618-.993\"\n      />\n    </g>\n  </svg>\n</template>\n\n<script setup lang=\"ts\">\ndefineOptions({\n  name: 'BrandExpansionShort'\n})\n\ndefineProps<{\n  width?: string\n  height?: string\n}>()\n</script>\n","<template>\n  <svg\n    :width=\"width\"\n    :height=\"height\"\n    viewBox=\"0 0 106.166 52.917\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      class=\"triangle\"\n      d=\"m11.947 52.917 7.52-12.283 7.52 12.283Z\"\n    />\n    <path\n      class=\"globe\"\n      d=\"M28.229 23.417c.298-1.504.485-3.092.554-4.726h5.091a14.367 14.367 0 0 1-1.286 4.726Zm1.474 4.105a14.488 14.488 0 0 1-4.053 2.861c.24-.388.47-.801.688-1.239.45-.897.841-1.875 1.173-2.917h3.342c-.355.45-.739.883-1.15 1.295m-8.83-4.105V18.69h5.097a27.764 27.764 0 0 1-.61 4.726Zm2.952 4.47c-.857 1.714-1.887 2.919-2.953 3.493v-5.153h3.67a16.722 16.722 0 0 1-.717 1.66m-8.716 0c-.26-.521-.5-1.076-.716-1.66h3.669v5.153c-1.066-.574-2.096-1.779-2.953-3.493m-2.145-9.196h5.098v4.726h-4.488a27.764 27.764 0 0 1-.61-4.726m-3.733 8.831a14.704 14.704 0 0 1-1.15-1.295h3.342c.332 1.042.724 2.02 1.172 2.917.22.438.449.851.689 1.24a14.48 14.48 0 0 1-4.053-2.862m-2.885-4.105a14.363 14.363 0 0 1-1.287-4.726h5.092c.069 1.634.256 3.222.554 4.726zm4.359-12.262a31.079 31.079 0 0 0-.554 4.726H5.06a14.363 14.363 0 0 1 1.287-4.726zM9.231 7.05a14.485 14.485 0 0 1 4.052-2.86c-.24.387-.469.8-.688 1.238-.448.898-.84 1.876-1.172 2.917H8.08c.355-.45.738-.883 1.15-1.295m8.83 4.105v4.726h-5.097c.075-1.652.281-3.244.61-4.726zm-2.952-4.47c.857-1.714 1.887-2.918 2.953-3.493v5.153h-3.67c.217-.583.456-1.138.717-1.66m8.716 0c.26.522.5 1.077.716 1.66h-3.669V3.192c1.066.575 2.096 1.78 2.953 3.493m2.145 9.196h-5.098v-4.726h4.488c.328 1.482.535 3.074.61 4.726m3.733-8.83c.411.411.795.844 1.15 1.294h-3.342a20.314 20.314 0 0 0-1.173-2.917 15.822 15.822 0 0 0-.688-1.239 14.49 14.49 0 0 1 4.053 2.861m2.885 4.105a14.367 14.367 0 0 1 1.286 4.726h-5.091a31.079 31.079 0 0 0-.554-4.726Zm-.898-6.092A17.173 17.173 0 0 0 19.467 0 17.173 17.173 0 0 0 7.244 5.063 17.174 17.174 0 0 0 2.18 17.286c0 4.618 1.798 8.959 5.063 12.223a17.173 17.173 0 0 0 12.223 5.064c4.617 0 8.958-1.799 12.223-5.064a17.173 17.173 0 0 0 5.063-12.223c0-4.617-1.798-8.958-5.063-12.223\"\n    />\n    <path\n      class=\"plate\"\n      d=\"M0 36.198h38.934v2.81H0Z\"\n    />\n    <g class=\"main-text\">\n      <path d=\"M48.51 7.923h7.164v37.07H48.51z\" />\n      <path\n        d=\"M60.788 42.793c-1.626-1.698-2.439-4.028-2.439-6.991v-17.09c0-3.683.734-6.459 2.201-8.33 1.468-1.87 3.769-2.804 6.905-2.804 2.733 0 4.934.748 6.603 2.244 1.668 1.496 2.503 3.654 2.503 6.473v6.387h-7.38v-5.48c0-1.065-.129-1.799-.388-2.202-.259-.402-.705-.604-1.338-.604-.662 0-1.115.23-1.36.69-.244.461-.366 1.137-.366 2.029v18.6c0 .979.144 1.69.431 2.136.288.447.72.67 1.295.67 1.15 0 1.726-.935 1.726-2.806v-6.689h7.466v6.991c0 6.215-3.122 9.322-9.365 9.322-2.704 0-4.87-.848-6.494-2.546\"\n      />\n      <path d=\"M78.762 7.923h7.164v37.07h-7.164z\" />\n      <path\n        d=\"M92.528 44.346a7.609 7.609 0 0 1-3.258-2.913c-.792-1.28-1.187-2.826-1.187-4.639V29.03h7.294v7.333c0 .662.136 1.186.41 1.575.273.388.697.582 1.273.582.546 0 .956-.18 1.23-.539.273-.36.41-.87.41-1.532V7.923h7.466v27.792c0 1.928-.382 3.619-1.144 5.071-.763 1.453-1.827 2.575-3.194 3.366-1.366.792-2.927 1.187-4.682 1.187-1.698 0-3.237-.331-4.618-.993\"\n      />\n    </g>\n  </svg>\n</template>\n\n<script setup lang=\"ts\">\ndefineOptions({\n  name: 'BrandExpansionShort'\n})\n\ndefineProps<{\n  width?: string\n  height?: string\n}>()\n</script>\n","<template>\n  <svg\n    :width=\"width\"\n    :height=\"height\"\n    viewBox=\"0 0 901.24 200\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      class=\"triangle\"\n      d=\"m45.153 200 28.423-46.424L101.999 200Z\"\n    />\n    <path\n      class=\"globe\"\n      d=\"M 106.692 88.5051 C 107.819 82.8227 108.526 76.8189 108.786 70.6453 L 128.03 70.6453 C 127.431 76.8914 125.785 82.9146 123.168 88.5051 Z M 112.263 104.021 C 107.739 108.545 102.563 112.178 96.9466 114.835 C 97.8831 113.313 98.751 111.751 99.5476 110.152 C 101.244 106.76 102.725 103.064 103.979 99.1273 L 116.611 99.1273 C 115.259 100.842 113.807 102.476 112.263 104.021 M 78.8877 88.5051 L 78.8877 70.6453 L 98.1543 70.6453 C 97.8706 76.8889 97.0908 82.9061 95.8503 88.5051 Z M 90.0467 105.401 C 86.8083 111.879 82.915 116.431 78.8877 118.601 L 78.8877 99.1273 L 92.7543 99.1273 C 91.9656 101.266 91.0617 103.36 90.0467 105.401 M 57.1059 105.401 C 56.0908 103.36 55.187 101.266 54.3983 99.1273 L 68.2649 99.1273 L 68.2649 118.601 C 64.237 116.431 60.3442 111.879 57.1059 105.401 M 48.9983 70.6453 L 68.2649 70.6453 L 68.2649 88.5051 L 51.3023 88.5051 C 50.0617 82.9061 49.282 76.8889 48.9983 70.6453 M 34.8894 104.021 C 33.3454 102.476 31.8937 100.842 30.5419 99.1273 L 43.1735 99.1273 C 44.4274 103.064 45.9091 106.76 47.6043 110.152 C 48.4014 111.751 49.2695 113.313 50.206 114.835 C 44.5894 112.179 39.4128 108.545 34.8894 104.021 M 23.9842 88.5051 C 21.3679 82.9146 19.7213 76.8914 19.1229 70.6453 L 38.367 70.6453 C 38.6263 76.8189 39.3337 82.8227 40.4604 88.5051 Z M 40.4604 42.1627 C 39.3337 47.8451 38.6263 53.8489 38.367 60.0225 L 19.1229 60.0225 C 19.7213 53.7764 21.3679 47.7532 23.9842 42.1627 Z M 34.8894 26.647 C 39.4128 22.123 44.5894 18.4895 50.206 15.8331 C 49.2695 17.3545 48.4014 18.9171 47.6043 20.516 C 45.9091 23.9078 44.4274 27.6045 43.1735 31.5405 L 30.5419 31.5405 C 31.8938 29.8255 33.3455 28.1915 34.8894 26.647 M 68.2649 42.1627 L 68.2649 60.0225 L 48.9983 60.0225 C 49.282 53.7795 50.0617 47.7617 51.3023 42.1627 Z M 57.1059 25.267 C 60.3442 18.789 64.237 14.237 68.2649 12.0663 L 68.2649 31.5405 L 54.3983 31.5405 C 55.1869 29.402 56.0907 27.3078 57.1059 25.267 M 90.0467 25.267 C 91.0619 27.3078 91.9657 29.402 92.7543 31.5405 L 78.8877 31.5405 L 78.8877 12.0663 C 82.915 14.237 86.8083 18.789 90.0467 25.267 M 98.1543 60.0225 L 78.8877 60.0225 L 78.8877 42.1627 L 95.8503 42.1627 C 97.0908 47.7617 97.8706 53.7795 98.1543 60.0225 M 112.263 26.647 C 113.807 28.1916 115.259 29.8256 116.611 31.5405 L 103.979 31.5405 C 102.725 27.6045 101.244 23.9078 99.5476 20.516 C 98.751 18.9169 97.8831 17.3544 96.9466 15.8331 C 102.563 18.4895 107.739 22.1236 112.263 26.647 M 123.168 42.1627 C 125.785 47.7532 127.431 53.7764 128.03 60.0225 L 108.786 60.0225 C 108.526 53.8489 107.819 47.8451 106.692 42.1627 Z M 119.774 19.136 C 107.434 6.79604 91.0274 0.00028712 73.576 0.00028712 C 56.1246 0.00028712 39.7178 6.79604 27.3778 19.136 C 15.0384 31.476 8.24207 47.8828 8.24207 65.3336 C 8.24207 82.7856 15.0384 99.1924 27.3778 111.532 C 39.7178 123.872 56.1246 130.668 73.576 130.668 C 91.0274 130.668 107.434 123.872 119.774 111.532 C 132.114 99.1924 138.91 82.7856 138.91 65.3336 C 138.91 47.8828 132.114 31.476 119.774 19.136\"\n    />\n    <path\n      class=\"plate\"\n      d=\"M 2e-06 136.811 L 147.151 136.811 L 147.151 147.433 L 2e-06 147.433 Z\"\n    />\n    <path\n      class=\"main-text\"\n      d=\"M187.413 29.944h27.076v140.112h-27.076zM233.817 161.737c-6.145-6.416-9.216-15.223-9.216-26.424V70.72c0-13.918 2.773-24.41 8.318-31.48 5.546-7.067 14.244-10.602 26.098-10.602 10.33 0 18.648 2.83 24.956 8.482 6.305 5.655 9.46 13.81 9.46 24.466v24.14h-27.892V65.013c0-4.021-.488-6.794-1.467-8.318-.98-1.522-2.666-2.284-5.057-2.284-2.502 0-4.215.872-5.138 2.61-.925 1.74-1.386 4.297-1.386 7.667v70.3c0 3.697.543 6.39 1.63 8.073 1.087 1.688 2.717 2.528 4.894 2.528 4.348 0 6.524-3.532 6.524-10.602v-25.282h28.218v26.424c0 23.488-11.8 35.232-35.394 35.232-10.223 0-18.406-3.206-24.548-9.623M301.752 29.944h27.076v140.112h-27.076zM353.782 167.609c-5.22-2.5-9.326-6.17-12.315-11.01-2.992-4.837-4.485-10.684-4.485-17.534l-.001-29.344h27.566v27.712c0 2.503.515 4.486 1.55 5.954 1.032 1.469 2.635 2.202 4.811 2.202 2.065 0 3.614-.678 4.65-2.039 1.03-1.358 1.548-3.287 1.548-5.79V29.944h28.219v105.043c0 7.286-1.443 13.676-4.323 19.166-2.882 5.491-6.906 9.732-12.07 12.722-5.166 2.992-11.066 4.485-17.697 4.485-6.418 0-12.233-1.251-17.453-3.751\"\n    />\n    <path\n      class=\"secondary-text\"\n      d=\"M442.17 92.461c-2.644-2.948-3.965-7.703-3.965-14.262v-6.407h12.89v8.16c0 3.255 1.04 4.883 3.126 4.883 1.17 0 1.984-.344 2.441-1.03.458-.687.686-1.843.686-3.47 0-2.136-.254-3.903-.762-5.301-.509-1.399-1.158-2.567-1.945-3.51-.79-.939-2.2-2.402-4.233-4.385l-5.644-5.644c-4.374-4.27-6.56-9-6.56-14.186 0-5.593 1.284-9.851 3.852-12.776 2.567-2.923 6.318-4.385 11.25-4.385 5.898 0 10.145 1.563 12.737 4.69 2.594 3.128 3.89 8.022 3.89 14.682h-13.347l-.076-4.5c0-.863-.242-1.55-.725-2.059-.484-.507-1.157-.762-2.02-.762-1.019 0-1.782.28-2.289.839-.51.56-.763 1.322-.763 2.288 0 2.135 1.22 4.347 3.661 6.635l7.627 7.323c1.78 1.728 3.254 3.368 4.424 4.92 1.17 1.55 2.11 3.381 2.822 5.49.712 2.11 1.068 4.615 1.068 7.513 0 6.458-1.182 11.352-3.547 14.682-2.364 3.33-6.267 4.996-11.708 4.996-5.949 0-10.246-1.474-12.89-4.424M480.1 96.275V43.343h-7.779V30.758H501v12.585h-7.78v52.932ZM522.248 83.308c.406-1.016.61-2.44.61-4.27V47.003c0-1.422-.19-2.58-.572-3.47-.382-.889-1.158-1.334-2.327-1.334-2.187 0-3.279 1.652-3.279 4.957v31.958c0 1.881.229 3.306.686 4.271.457.966 1.297 1.45 2.517 1.45 1.17 0 1.957-.509 2.365-1.527m-14.415 8.734c-2.746-3.228-4.12-7.767-4.12-13.615V47.233c0-5.644 1.374-9.902 4.12-12.776 2.745-2.872 6.761-4.31 12.05-4.31 5.288 0 9.305 1.438 12.051 4.31 2.746 2.874 4.118 7.132 4.118 12.776v31.194c0 5.9-1.372 10.45-4.118 13.653-2.746 3.203-6.763 4.805-12.05 4.805-5.29 0-9.306-1.613-12.051-4.843M556.34 55.012c1.83 0 2.745-1.983 2.745-5.949 0-1.728-.076-3.025-.228-3.89-.153-.864-.433-1.46-.84-1.792-.407-.33-.99-.496-1.754-.496h-3.05v12.127Zm-16.475-24.254H560c3.204 0 5.683.725 7.437 2.174 1.754 1.449 2.937 3.483 3.547 6.101.61 2.62.915 5.963.915 10.03 0 3.713-.484 6.61-1.45 8.695-.966 2.086-2.644 3.534-5.033 4.348 1.983.407 3.419 1.399 4.309 2.974.89 1.577 1.335 3.712 1.335 6.407l-.152 24.788h-12.815V70.648c0-1.83-.356-3-1.067-3.508-.713-.509-2.01-.764-3.89-.764v29.899h-13.271zM574.965 30.758h12.66v65.517h-12.66zM591.583 96.275V30.758h26.237v12.661h-12.89v12.737h12.357v12.356H604.93v15.025h13.73v12.738ZM625.256 92.461c-2.644-2.948-3.966-7.703-3.966-14.262v-6.407h12.89v8.16c0 3.255 1.041 4.883 3.127 4.883 1.17 0 1.983-.344 2.44-1.03.458-.687.687-1.843.687-3.47 0-2.136-.255-3.903-.763-5.301-.508-1.399-1.157-2.567-1.945-3.51-.789-.939-2.2-2.402-4.232-4.385l-5.645-5.644c-4.374-4.27-6.559-9-6.559-14.186 0-5.593 1.283-9.851 3.851-12.776 2.567-2.923 6.318-4.385 11.25-4.385 5.898 0 10.145 1.563 12.738 4.69 2.593 3.128 3.89 8.022 3.89 14.682H639.67l-.076-4.5c0-.863-.242-1.55-.724-2.059-.484-.507-1.158-.762-2.021-.762-1.018 0-1.782.28-2.289.839-.51.56-.763 1.322-.763 2.288 0 2.135 1.221 4.347 3.661 6.635l7.628 7.323c1.779 1.728 3.253 3.368 4.423 4.92 1.17 1.55 2.11 3.381 2.822 5.49.712 2.11 1.068 4.615 1.068 7.513 0 6.458-1.182 11.352-3.546 14.682-2.365 3.33-6.268 4.996-11.708 4.996-5.95 0-10.246-1.474-12.89-4.424M681.239 96.275V43.343h-7.78V30.758h28.678v12.585h-7.78v52.932ZM705.126 96.275V30.758h13.042v23.415h6.178V30.758h13.043v65.517h-13.043V66.529h-6.178v29.746ZM755.12 75.224h5.95l-2.898-33.33h-.61Zm-14.49 21.05 6.33-65.516h22.195l6.254 65.517h-12.432l-.916-10.602h-7.931l-.763 10.602zM782.677 96.275V43.343h-7.78V30.758h28.679v12.585h-7.78v52.932ZM455.976 130.224c1.83 0 2.745-1.983 2.745-5.95 0-1.727-.076-3.024-.228-3.889-.153-.864-.433-1.46-.84-1.793-.407-.33-.99-.495-1.754-.495h-3.05v12.127ZM439.5 105.97h20.136c3.203 0 5.682.724 7.436 2.174 1.754 1.448 2.937 3.483 3.547 6.101.61 2.62.915 5.962.915 10.03 0 3.713-.484 6.61-1.45 8.695s-2.643 3.535-5.033 4.348c1.983.408 3.419 1.399 4.309 2.974.89 1.577 1.335 3.712 1.335 6.407l-.152 24.788h-12.815V145.86c0-1.83-.356-3-1.067-3.508-.712-.508-2.01-.763-3.89-.763v29.898h-13.271zM493.173 158.52c.406-1.016.61-2.44.61-4.27v-32.035c0-1.422-.19-2.58-.572-3.47-.382-.89-1.158-1.334-2.326-1.334-2.188 0-3.28 1.652-3.28 4.957v31.958c0 1.882.229 3.306.686 4.271.458.966 1.297 1.45 2.518 1.45 1.168 0 1.956-.509 2.364-1.526m-14.415 8.733c-2.746-3.229-4.119-7.767-4.119-13.615v-31.194c0-5.644 1.373-9.902 4.119-12.777 2.745-2.871 6.761-4.309 12.05-4.309 5.288 0 9.305 1.438 12.051 4.31 2.746 2.874 4.118 7.132 4.118 12.776v31.194c0 5.9-1.372 10.45-4.118 13.653-2.746 3.203-6.763 4.806-12.05 4.806-5.29 0-9.306-1.614-12.051-4.844M514.756 167.597c-2.873-3-4.309-7.118-4.309-12.355v-30.205c0-6.508 1.297-11.413 3.89-14.72 2.593-3.305 6.66-4.958 12.203-4.958 4.83 0 8.72 1.323 11.67 3.966 2.948 2.646 4.424 6.459 4.424 11.442v11.287H529.59v-9.686c0-1.88-.229-3.177-.686-3.89-.458-.711-1.246-1.067-2.365-1.067-1.17 0-1.97.408-2.403 1.22-.432.814-.648 2.01-.648 3.584v32.873c0 1.73.254 2.988.763 3.776.508.788 1.27 1.183 2.288 1.183 2.033 0 3.051-1.652 3.051-4.959v-11.822h13.195v12.356c0 10.983-5.518 16.476-16.55 16.476-4.78 0-8.607-1.5-11.48-4.5M546.088 171.487V105.97h12.967v26.239l6.1-26.239h13.196l-7.322 29.976 8.847 35.542H566.3l-7.17-31.729v31.73ZM605.578 171.487v-52.932H597.8V105.97h28.678v12.586h-7.78v52.932ZM629.466 171.487V105.97h13.043v23.416h6.178v-23.416h13.042v65.518h-13.042v-29.746h-6.178v29.746ZM665.93 171.487V105.97h26.238v12.662h-12.89v12.737h12.356v12.357h-12.356v15.025h13.729v12.737ZM720.31 171.487l-7.016-65.518h12.813l3.66 41.34 3.662-41.34h12.203l3.509 41.34 3.508-41.34h12.967l-7.17 65.518h-15.712l-3.28-31.577-3.126 31.577ZM786.254 158.52c.407-1.016.611-2.44.611-4.27v-32.035c0-1.422-.191-2.58-.572-3.47-.382-.89-1.158-1.334-2.327-1.334-2.187 0-3.279 1.652-3.279 4.957v31.958c0 1.882.228 3.306.686 4.271.457.966 1.297 1.45 2.517 1.45 1.169 0 1.957-.509 2.364-1.526m-14.415 8.733c-2.746-3.229-4.119-7.767-4.119-13.615v-31.194c0-5.644 1.373-9.902 4.12-12.777 2.745-2.871 6.761-4.309 12.05-4.309 5.288 0 9.305 1.438 12.051 4.31 2.745 2.874 4.118 7.132 4.118 12.776v31.194c0 5.9-1.373 10.45-4.118 13.653-2.746 3.203-6.763 4.806-12.05 4.806-5.29 0-9.306-1.614-12.052-4.844M820.347 130.224c1.83 0 2.745-1.983 2.745-5.95 0-1.727-.076-3.024-.228-3.889-.153-.864-.433-1.46-.84-1.793-.407-.33-.99-.495-1.754-.495h-3.05v12.127Zm-16.475-24.254h20.136c3.204 0 5.682.724 7.437 2.174 1.753 1.448 2.936 3.483 3.546 6.101.61 2.62.915 5.962.915 10.03 0 3.713-.484 6.61-1.449 8.695-.967 2.085-2.644 3.535-5.034 4.348 1.983.408 3.42 1.399 4.31 2.974.888 1.577 1.334 3.712 1.334 6.407l-.152 24.788H822.1V145.86c0-1.83-.356-3-1.067-3.508-.713-.508-2.01-.763-3.89-.763v29.898h-13.272zM839.246 171.487V105.97h13.12v54.382h13.499v11.136ZM884.383 159.893c2.389 0 3.584-1.168 3.584-3.508v-33.789c0-1.473-.114-2.58-.343-3.317-.229-.737-.648-1.232-1.258-1.488-.61-.253-1.552-.38-2.822-.38h-1.45v42.482Zm-15.484-53.924h18.077c4.678 0 8.186 1.297 10.525 3.891 2.338 2.593 3.534 6.433 3.585 11.516l.153 30.661c.05 6.459-1.069 11.315-3.356 14.568-2.288 3.255-6.077 4.882-11.364 4.882h-17.62z\"\n    />\n  </svg>\n</template>\n\n<script setup lang=\"ts\">\ndefineOptions({\n  name: 'BrandExpansionMedium'\n})\n\ndefineProps<{\n  width?: string\n  height?: string\n}>()\n</script>\n","<template>\n  <svg\n    :width=\"width\"\n    :height=\"height\"\n    viewBox=\"0 0 901.24 200\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      class=\"triangle\"\n      d=\"m45.153 200 28.423-46.424L101.999 200Z\"\n    />\n    <path\n      class=\"globe\"\n      d=\"M 106.692 88.5051 C 107.819 82.8227 108.526 76.8189 108.786 70.6453 L 128.03 70.6453 C 127.431 76.8914 125.785 82.9146 123.168 88.5051 Z M 112.263 104.021 C 107.739 108.545 102.563 112.178 96.9466 114.835 C 97.8831 113.313 98.751 111.751 99.5476 110.152 C 101.244 106.76 102.725 103.064 103.979 99.1273 L 116.611 99.1273 C 115.259 100.842 113.807 102.476 112.263 104.021 M 78.8877 88.5051 L 78.8877 70.6453 L 98.1543 70.6453 C 97.8706 76.8889 97.0908 82.9061 95.8503 88.5051 Z M 90.0467 105.401 C 86.8083 111.879 82.915 116.431 78.8877 118.601 L 78.8877 99.1273 L 92.7543 99.1273 C 91.9656 101.266 91.0617 103.36 90.0467 105.401 M 57.1059 105.401 C 56.0908 103.36 55.187 101.266 54.3983 99.1273 L 68.2649 99.1273 L 68.2649 118.601 C 64.237 116.431 60.3442 111.879 57.1059 105.401 M 48.9983 70.6453 L 68.2649 70.6453 L 68.2649 88.5051 L 51.3023 88.5051 C 50.0617 82.9061 49.282 76.8889 48.9983 70.6453 M 34.8894 104.021 C 33.3454 102.476 31.8937 100.842 30.5419 99.1273 L 43.1735 99.1273 C 44.4274 103.064 45.9091 106.76 47.6043 110.152 C 48.4014 111.751 49.2695 113.313 50.206 114.835 C 44.5894 112.179 39.4128 108.545 34.8894 104.021 M 23.9842 88.5051 C 21.3679 82.9146 19.7213 76.8914 19.1229 70.6453 L 38.367 70.6453 C 38.6263 76.8189 39.3337 82.8227 40.4604 88.5051 Z M 40.4604 42.1627 C 39.3337 47.8451 38.6263 53.8489 38.367 60.0225 L 19.1229 60.0225 C 19.7213 53.7764 21.3679 47.7532 23.9842 42.1627 Z M 34.8894 26.647 C 39.4128 22.123 44.5894 18.4895 50.206 15.8331 C 49.2695 17.3545 48.4014 18.9171 47.6043 20.516 C 45.9091 23.9078 44.4274 27.6045 43.1735 31.5405 L 30.5419 31.5405 C 31.8938 29.8255 33.3455 28.1915 34.8894 26.647 M 68.2649 42.1627 L 68.2649 60.0225 L 48.9983 60.0225 C 49.282 53.7795 50.0617 47.7617 51.3023 42.1627 Z M 57.1059 25.267 C 60.3442 18.789 64.237 14.237 68.2649 12.0663 L 68.2649 31.5405 L 54.3983 31.5405 C 55.1869 29.402 56.0907 27.3078 57.1059 25.267 M 90.0467 25.267 C 91.0619 27.3078 91.9657 29.402 92.7543 31.5405 L 78.8877 31.5405 L 78.8877 12.0663 C 82.915 14.237 86.8083 18.789 90.0467 25.267 M 98.1543 60.0225 L 78.8877 60.0225 L 78.8877 42.1627 L 95.8503 42.1627 C 97.0908 47.7617 97.8706 53.7795 98.1543 60.0225 M 112.263 26.647 C 113.807 28.1916 115.259 29.8256 116.611 31.5405 L 103.979 31.5405 C 102.725 27.6045 101.244 23.9078 99.5476 20.516 C 98.751 18.9169 97.8831 17.3544 96.9466 15.8331 C 102.563 18.4895 107.739 22.1236 112.263 26.647 M 123.168 42.1627 C 125.785 47.7532 127.431 53.7764 128.03 60.0225 L 108.786 60.0225 C 108.526 53.8489 107.819 47.8451 106.692 42.1627 Z M 119.774 19.136 C 107.434 6.79604 91.0274 0.00028712 73.576 0.00028712 C 56.1246 0.00028712 39.7178 6.79604 27.3778 19.136 C 15.0384 31.476 8.24207 47.8828 8.24207 65.3336 C 8.24207 82.7856 15.0384 99.1924 27.3778 111.532 C 39.7178 123.872 56.1246 130.668 73.576 130.668 C 91.0274 130.668 107.434 123.872 119.774 111.532 C 132.114 99.1924 138.91 82.7856 138.91 65.3336 C 138.91 47.8828 132.114 31.476 119.774 19.136\"\n    />\n    <path\n      class=\"plate\"\n      d=\"M 2e-06 136.811 L 147.151 136.811 L 147.151 147.433 L 2e-06 147.433 Z\"\n    />\n    <path\n      class=\"main-text\"\n      d=\"M187.413 29.944h27.076v140.112h-27.076zM233.817 161.737c-6.145-6.416-9.216-15.223-9.216-26.424V70.72c0-13.918 2.773-24.41 8.318-31.48 5.546-7.067 14.244-10.602 26.098-10.602 10.33 0 18.648 2.83 24.956 8.482 6.305 5.655 9.46 13.81 9.46 24.466v24.14h-27.892V65.013c0-4.021-.488-6.794-1.467-8.318-.98-1.522-2.666-2.284-5.057-2.284-2.502 0-4.215.872-5.138 2.61-.925 1.74-1.386 4.297-1.386 7.667v70.3c0 3.697.543 6.39 1.63 8.073 1.087 1.688 2.717 2.528 4.894 2.528 4.348 0 6.524-3.532 6.524-10.602v-25.282h28.218v26.424c0 23.488-11.8 35.232-35.394 35.232-10.223 0-18.406-3.206-24.548-9.623M301.752 29.944h27.076v140.112h-27.076zM353.782 167.609c-5.22-2.5-9.326-6.17-12.315-11.01-2.992-4.837-4.485-10.684-4.485-17.534l-.001-29.344h27.566v27.712c0 2.503.515 4.486 1.55 5.954 1.032 1.469 2.635 2.202 4.811 2.202 2.065 0 3.614-.678 4.65-2.039 1.03-1.358 1.548-3.287 1.548-5.79V29.944h28.219v105.043c0 7.286-1.443 13.676-4.323 19.166-2.882 5.491-6.906 9.732-12.07 12.722-5.166 2.992-11.066 4.485-17.697 4.485-6.418 0-12.233-1.251-17.453-3.751\"\n    />\n    <path\n      class=\"secondary-text\"\n      d=\"M442.17 92.461c-2.644-2.948-3.965-7.703-3.965-14.262v-6.407h12.89v8.16c0 3.255 1.04 4.883 3.126 4.883 1.17 0 1.984-.344 2.441-1.03.458-.687.686-1.843.686-3.47 0-2.136-.254-3.903-.762-5.301-.509-1.399-1.158-2.567-1.945-3.51-.79-.939-2.2-2.402-4.233-4.385l-5.644-5.644c-4.374-4.27-6.56-9-6.56-14.186 0-5.593 1.284-9.851 3.852-12.776 2.567-2.923 6.318-4.385 11.25-4.385 5.898 0 10.145 1.563 12.737 4.69 2.594 3.128 3.89 8.022 3.89 14.682h-13.347l-.076-4.5c0-.863-.242-1.55-.725-2.059-.484-.507-1.157-.762-2.02-.762-1.019 0-1.782.28-2.289.839-.51.56-.763 1.322-.763 2.288 0 2.135 1.22 4.347 3.661 6.635l7.627 7.323c1.78 1.728 3.254 3.368 4.424 4.92 1.17 1.55 2.11 3.381 2.822 5.49.712 2.11 1.068 4.615 1.068 7.513 0 6.458-1.182 11.352-3.547 14.682-2.364 3.33-6.267 4.996-11.708 4.996-5.949 0-10.246-1.474-12.89-4.424M480.1 96.275V43.343h-7.779V30.758H501v12.585h-7.78v52.932ZM522.248 83.308c.406-1.016.61-2.44.61-4.27V47.003c0-1.422-.19-2.58-.572-3.47-.382-.889-1.158-1.334-2.327-1.334-2.187 0-3.279 1.652-3.279 4.957v31.958c0 1.881.229 3.306.686 4.271.457.966 1.297 1.45 2.517 1.45 1.17 0 1.957-.509 2.365-1.527m-14.415 8.734c-2.746-3.228-4.12-7.767-4.12-13.615V47.233c0-5.644 1.374-9.902 4.12-12.776 2.745-2.872 6.761-4.31 12.05-4.31 5.288 0 9.305 1.438 12.051 4.31 2.746 2.874 4.118 7.132 4.118 12.776v31.194c0 5.9-1.372 10.45-4.118 13.653-2.746 3.203-6.763 4.805-12.05 4.805-5.29 0-9.306-1.613-12.051-4.843M556.34 55.012c1.83 0 2.745-1.983 2.745-5.949 0-1.728-.076-3.025-.228-3.89-.153-.864-.433-1.46-.84-1.792-.407-.33-.99-.496-1.754-.496h-3.05v12.127Zm-16.475-24.254H560c3.204 0 5.683.725 7.437 2.174 1.754 1.449 2.937 3.483 3.547 6.101.61 2.62.915 5.963.915 10.03 0 3.713-.484 6.61-1.45 8.695-.966 2.086-2.644 3.534-5.033 4.348 1.983.407 3.419 1.399 4.309 2.974.89 1.577 1.335 3.712 1.335 6.407l-.152 24.788h-12.815V70.648c0-1.83-.356-3-1.067-3.508-.713-.509-2.01-.764-3.89-.764v29.899h-13.271zM574.965 30.758h12.66v65.517h-12.66zM591.583 96.275V30.758h26.237v12.661h-12.89v12.737h12.357v12.356H604.93v15.025h13.73v12.738ZM625.256 92.461c-2.644-2.948-3.966-7.703-3.966-14.262v-6.407h12.89v8.16c0 3.255 1.041 4.883 3.127 4.883 1.17 0 1.983-.344 2.44-1.03.458-.687.687-1.843.687-3.47 0-2.136-.255-3.903-.763-5.301-.508-1.399-1.157-2.567-1.945-3.51-.789-.939-2.2-2.402-4.232-4.385l-5.645-5.644c-4.374-4.27-6.559-9-6.559-14.186 0-5.593 1.283-9.851 3.851-12.776 2.567-2.923 6.318-4.385 11.25-4.385 5.898 0 10.145 1.563 12.738 4.69 2.593 3.128 3.89 8.022 3.89 14.682H639.67l-.076-4.5c0-.863-.242-1.55-.724-2.059-.484-.507-1.158-.762-2.021-.762-1.018 0-1.782.28-2.289.839-.51.56-.763 1.322-.763 2.288 0 2.135 1.221 4.347 3.661 6.635l7.628 7.323c1.779 1.728 3.253 3.368 4.423 4.92 1.17 1.55 2.11 3.381 2.822 5.49.712 2.11 1.068 4.615 1.068 7.513 0 6.458-1.182 11.352-3.546 14.682-2.365 3.33-6.268 4.996-11.708 4.996-5.95 0-10.246-1.474-12.89-4.424M681.239 96.275V43.343h-7.78V30.758h28.678v12.585h-7.78v52.932ZM705.126 96.275V30.758h13.042v23.415h6.178V30.758h13.043v65.517h-13.043V66.529h-6.178v29.746ZM755.12 75.224h5.95l-2.898-33.33h-.61Zm-14.49 21.05 6.33-65.516h22.195l6.254 65.517h-12.432l-.916-10.602h-7.931l-.763 10.602zM782.677 96.275V43.343h-7.78V30.758h28.679v12.585h-7.78v52.932ZM455.976 130.224c1.83 0 2.745-1.983 2.745-5.95 0-1.727-.076-3.024-.228-3.889-.153-.864-.433-1.46-.84-1.793-.407-.33-.99-.495-1.754-.495h-3.05v12.127ZM439.5 105.97h20.136c3.203 0 5.682.724 7.436 2.174 1.754 1.448 2.937 3.483 3.547 6.101.61 2.62.915 5.962.915 10.03 0 3.713-.484 6.61-1.45 8.695s-2.643 3.535-5.033 4.348c1.983.408 3.419 1.399 4.309 2.974.89 1.577 1.335 3.712 1.335 6.407l-.152 24.788h-12.815V145.86c0-1.83-.356-3-1.067-3.508-.712-.508-2.01-.763-3.89-.763v29.898h-13.271zM493.173 158.52c.406-1.016.61-2.44.61-4.27v-32.035c0-1.422-.19-2.58-.572-3.47-.382-.89-1.158-1.334-2.326-1.334-2.188 0-3.28 1.652-3.28 4.957v31.958c0 1.882.229 3.306.686 4.271.458.966 1.297 1.45 2.518 1.45 1.168 0 1.956-.509 2.364-1.526m-14.415 8.733c-2.746-3.229-4.119-7.767-4.119-13.615v-31.194c0-5.644 1.373-9.902 4.119-12.777 2.745-2.871 6.761-4.309 12.05-4.309 5.288 0 9.305 1.438 12.051 4.31 2.746 2.874 4.118 7.132 4.118 12.776v31.194c0 5.9-1.372 10.45-4.118 13.653-2.746 3.203-6.763 4.806-12.05 4.806-5.29 0-9.306-1.614-12.051-4.844M514.756 167.597c-2.873-3-4.309-7.118-4.309-12.355v-30.205c0-6.508 1.297-11.413 3.89-14.72 2.593-3.305 6.66-4.958 12.203-4.958 4.83 0 8.72 1.323 11.67 3.966 2.948 2.646 4.424 6.459 4.424 11.442v11.287H529.59v-9.686c0-1.88-.229-3.177-.686-3.89-.458-.711-1.246-1.067-2.365-1.067-1.17 0-1.97.408-2.403 1.22-.432.814-.648 2.01-.648 3.584v32.873c0 1.73.254 2.988.763 3.776.508.788 1.27 1.183 2.288 1.183 2.033 0 3.051-1.652 3.051-4.959v-11.822h13.195v12.356c0 10.983-5.518 16.476-16.55 16.476-4.78 0-8.607-1.5-11.48-4.5M546.088 171.487V105.97h12.967v26.239l6.1-26.239h13.196l-7.322 29.976 8.847 35.542H566.3l-7.17-31.729v31.73ZM605.578 171.487v-52.932H597.8V105.97h28.678v12.586h-7.78v52.932ZM629.466 171.487V105.97h13.043v23.416h6.178v-23.416h13.042v65.518h-13.042v-29.746h-6.178v29.746ZM665.93 171.487V105.97h26.238v12.662h-12.89v12.737h12.356v12.357h-12.356v15.025h13.729v12.737ZM720.31 171.487l-7.016-65.518h12.813l3.66 41.34 3.662-41.34h12.203l3.509 41.34 3.508-41.34h12.967l-7.17 65.518h-15.712l-3.28-31.577-3.126 31.577ZM786.254 158.52c.407-1.016.611-2.44.611-4.27v-32.035c0-1.422-.191-2.58-.572-3.47-.382-.89-1.158-1.334-2.327-1.334-2.187 0-3.279 1.652-3.279 4.957v31.958c0 1.882.228 3.306.686 4.271.457.966 1.297 1.45 2.517 1.45 1.169 0 1.957-.509 2.364-1.526m-14.415 8.733c-2.746-3.229-4.119-7.767-4.119-13.615v-31.194c0-5.644 1.373-9.902 4.12-12.777 2.745-2.871 6.761-4.309 12.05-4.309 5.288 0 9.305 1.438 12.051 4.31 2.745 2.874 4.118 7.132 4.118 12.776v31.194c0 5.9-1.373 10.45-4.118 13.653-2.746 3.203-6.763 4.806-12.05 4.806-5.29 0-9.306-1.614-12.052-4.844M820.347 130.224c1.83 0 2.745-1.983 2.745-5.95 0-1.727-.076-3.024-.228-3.889-.153-.864-.433-1.46-.84-1.793-.407-.33-.99-.495-1.754-.495h-3.05v12.127Zm-16.475-24.254h20.136c3.204 0 5.682.724 7.437 2.174 1.753 1.448 2.936 3.483 3.546 6.101.61 2.62.915 5.962.915 10.03 0 3.713-.484 6.61-1.449 8.695-.967 2.085-2.644 3.535-5.034 4.348 1.983.408 3.42 1.399 4.31 2.974.888 1.577 1.334 3.712 1.334 6.407l-.152 24.788H822.1V145.86c0-1.83-.356-3-1.067-3.508-.713-.508-2.01-.763-3.89-.763v29.898h-13.272zM839.246 171.487V105.97h13.12v54.382h13.499v11.136ZM884.383 159.893c2.389 0 3.584-1.168 3.584-3.508v-33.789c0-1.473-.114-2.58-.343-3.317-.229-.737-.648-1.232-1.258-1.488-.61-.253-1.552-.38-2.822-.38h-1.45v42.482Zm-15.484-53.924h18.077c4.678 0 8.186 1.297 10.525 3.891 2.338 2.593 3.534 6.433 3.585 11.516l.153 30.661c.05 6.459-1.069 11.315-3.356 14.568-2.288 3.255-6.077 4.882-11.364 4.882h-17.62z\"\n    />\n  </svg>\n</template>\n\n<script setup lang=\"ts\">\ndefineOptions({\n  name: 'BrandExpansionMedium'\n})\n\ndefineProps<{\n  width?: string\n  height?: string\n}>()\n</script>\n","<template>\n  <svg\n    :width=\"width\"\n    :height=\"height\"\n    viewBox=\"0 0 1047.01 200\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      class=\"triangle\"\n      d=\"m45.153 200 28.423-46.424L101.999 200Z\"\n    />\n    <path\n      class=\"globe\"\n      d=\"M 106.691 88.5051 C 107.818 82.8227 108.526 76.8189 108.785 70.6453 L 128.029 70.6453 C 127.431 76.8914 125.784 82.9146 123.168 88.5051 Z M 112.262 104.021 C 107.739 108.545 102.563 112.178 96.9465 114.835 C 97.883 113.313 98.7509 111.751 99.5475 110.152 C 101.243 106.76 102.725 103.064 103.978 99.1273 L 116.611 99.1273 C 115.259 100.842 113.807 102.476 112.263 104.021 M 78.887 88.5051 L 78.887 70.6453 L 98.1536 70.6453 C 97.8699 76.8889 97.0901 82.9061 95.8502 88.5051 Z M 90.046 105.401 C 86.8076 111.879 82.9143 116.431 78.887 118.601 L 78.887 99.1273 L 92.7536 99.1273 C 91.9649 101.266 91.061 103.36 90.046 105.401 M 57.1052 105.401 C 56.0901 103.36 55.1863 101.266 54.3976 99.1273 L 68.2642 99.1273 L 68.2642 118.601 C 64.2363 116.431 60.3435 111.879 57.1052 105.401 M 48.9976 70.6453 L 68.2642 70.6453 L 68.2642 88.5051 L 51.3028 88.5051 C 50.0623 82.9061 49.2819 76.8889 48.9988 70.6453 M 34.8899 104.021 C 33.3459 102.476 31.8942 100.842 30.5424 99.1273 L 43.1734 99.1273 C 44.4273 103.064 45.9096 106.76 47.6049 110.152 C 48.4019 111.751 49.27 113.313 50.2065 114.835 C 44.5899 112.179 39.4133 108.545 34.8899 104.021 M 23.9841 88.5051 C 21.3678 82.9146 19.7212 76.8914 19.1229 70.6453 L 38.3669 70.6453 C 38.6262 76.8189 39.3336 82.8227 40.4609 88.5051 Z M 40.4603 42.1627 C 39.3342 47.8451 38.6262 53.8489 38.3669 60.0225 L 19.1229 60.0225 C 19.7212 53.7764 21.3678 47.7532 23.9841 42.1627 Z M 34.8893 26.647 C 39.4127 22.123 44.5893 18.4895 50.2059 15.8331 C 49.2694 17.3545 48.4013 18.9171 47.6043 20.516 C 45.909 23.9078 44.4273 27.6045 43.1734 31.5405 L 30.5424 31.5405 C 31.8943 29.8255 33.346 28.1915 34.8899 26.647 M 68.2648 42.1627 L 68.2648 60.0225 L 48.9988 60.0225 C 49.2819 53.7795 50.0617 47.7617 51.3022 42.1627 Z M 57.1064 25.267 C 60.3448 18.789 64.2375 14.237 68.2654 12.0663 L 68.2654 31.5405 L 54.3988 31.5405 C 55.1872 29.402 56.0908 27.3078 57.1058 25.267 M 90.0466 25.267 C 91.0618 27.3078 91.9656 29.402 92.7542 31.5405 L 78.8876 31.5405 L 78.8876 12.0663 C 82.9149 14.237 86.8083 18.789 90.0466 25.267 M 98.1548 60.0225 L 78.8876 60.0225 L 78.8876 42.1627 L 95.8502 42.1627 C 97.0908 47.7617 97.8711 53.7795 98.1542 60.0225 M 112.263 26.647 C 113.807 28.1916 115.258 29.8256 116.611 31.5405 L 103.978 31.5405 C 102.725 27.6045 101.243 23.9078 99.5475 20.516 C 98.7509 18.9169 97.883 17.3544 96.9465 15.8331 C 102.563 18.4895 107.739 22.1236 112.263 26.647 M 123.169 42.1627 C 125.785 47.7532 127.431 53.7764 128.03 60.0225 L 108.786 60.0225 C 108.526 53.8489 107.819 47.8451 106.692 42.1627 Z M 119.775 19.136 C 107.434 6.79604 91.0273 0.00028712 73.5759 0.00028712 C 56.1245 0.00028712 39.7177 6.79604 27.3777 19.136 C 15.0389 31.476 8.24198 47.8828 8.24198 65.3336 C 8.24198 82.7856 15.0383 99.1924 27.3777 111.532 C 39.7177 123.872 56.1245 130.668 73.5759 130.668 C 91.0279 130.668 107.434 123.872 119.774 111.532 C 132.114 99.1924 138.91 82.7856 138.91 65.3336 C 138.91 47.8828 132.114 31.476 119.774 19.136\"\n    />\n    <path\n      class=\"plate\"\n      d=\"M -8.72e-05 136.811 L 147.151 136.811 L 147.151 147.433 L -8.72e-05 147.433 Z\"\n    />\n    <path\n      class=\"main-text\"\n      d=\"M203.5 25.928h12.66v65.517H203.5zM220.118 91.445V25.928h13.5l6.026 31.348V25.928h12.661v65.517h-12.814l-6.559-32.796v32.796ZM263.073 91.445V38.513h-7.78V25.928h28.678v12.585h-7.78v52.932ZM286.96 91.445V25.928h26.237V38.59h-12.89v12.737h12.357v12.357h-12.357v15.024h13.73v12.738ZM333.813 50.183c1.83 0 2.745-1.984 2.745-5.95 0-1.728-.075-3.025-.228-3.89-.152-.864-.433-1.46-.839-1.792-.408-.33-.992-.495-1.755-.495h-3.05v12.127Zm-16.475-24.255h20.136c3.204 0 5.682.724 7.437 2.174 1.753 1.45 2.936 3.484 3.546 6.102.61 2.619.916 5.962.916 10.03 0 3.712-.485 6.61-1.45 8.694-.966 2.086-2.644 3.535-5.034 4.348 1.984.408 3.42 1.4 4.309 2.974.89 1.577 1.336 3.713 1.336 6.408l-.153 24.787h-12.814V65.818c0-1.83-.357-2.999-1.068-3.508-.712-.508-2.01-.763-3.89-.763v29.898h-13.271zM352.712 91.445V25.928h13.5l6.026 31.348V25.928H384.9v65.517h-12.815l-6.56-32.796v32.796ZM402.592 70.394h5.95l-2.898-33.33h-.61Zm-14.491 21.051 6.33-65.517h22.195l6.255 65.517h-12.433l-.915-10.601H401.6l-.762 10.601zM430.148 91.445V38.513h-7.78V25.928h28.678v12.585h-7.78v52.932ZM453.761 25.928h12.661v65.517h-12.66zM488.616 78.479c.407-1.017.611-2.441.611-4.27V42.173c0-1.423-.19-2.58-.572-3.47-.382-.89-1.158-1.335-2.327-1.335-2.187 0-3.279 1.653-3.279 4.957v31.958c0 1.881.228 3.306.687 4.272.457.966 1.296 1.448 2.517 1.448 1.168 0 1.956-.507 2.363-1.525m-14.414 8.733c-2.747-3.228-4.12-7.767-4.12-13.614V42.403c0-5.644 1.373-9.902 4.12-12.776 2.745-2.872 6.761-4.31 12.05-4.31 5.288 0 9.305 1.438 12.052 4.31 2.745 2.873 4.118 7.132 4.118 12.776v31.195c0 5.898-1.373 10.449-4.118 13.653-2.747 3.203-6.764 4.805-12.051 4.805-5.29 0-9.306-1.614-12.051-4.844M506.234 91.445V25.928h13.5l6.026 31.348V25.928h12.661v65.517h-12.814l-6.559-32.796v32.796ZM556.114 70.394h5.95l-2.898-33.33h-.61Zm-14.491 21.051 6.33-65.517h22.195l6.254 65.517H563.97l-.915-10.601h-7.932l-.763 10.601zM579.574 91.445V25.928h13.118V80.31h13.501v11.136ZM631.475 87.556c-2.873-3-4.308-7.119-4.308-12.356V44.996c0-6.508 1.296-11.414 3.89-14.72 2.592-3.305 6.659-4.958 12.202-4.958 4.83 0 8.72 1.323 11.67 3.966 2.949 2.645 4.424 6.458 4.424 11.44v11.289H646.31v-9.687c0-1.88-.23-3.176-.687-3.89-.458-.71-1.246-1.067-2.365-1.067-1.17 0-1.97.408-2.402 1.22-.433.814-.649 2.01-.649 3.585v32.873c0 1.73.255 2.988.764 3.775.507.79 1.27 1.183 2.287 1.183 2.033 0 3.052-1.652 3.052-4.958V63.225h13.194v12.356c0 10.983-5.517 16.475-16.55 16.475-4.78 0-8.607-1.5-11.48-4.5M681.097 78.479c.407-1.017.61-2.441.61-4.27V42.173c0-1.423-.19-2.58-.571-3.47-.382-.89-1.158-1.335-2.327-1.335-2.187 0-3.279 1.653-3.279 4.957v31.958c0 1.881.228 3.306.687 4.272.457.966 1.296 1.448 2.517 1.448 1.168 0 1.955-.507 2.363-1.525m-14.414 8.733c-2.747-3.228-4.12-7.767-4.12-13.614V42.403c0-5.644 1.373-9.902 4.12-12.776 2.745-2.872 6.76-4.31 12.05-4.31 5.288 0 9.305 1.438 12.051 4.31 2.746 2.873 4.118 7.132 4.118 12.776v31.195c0 5.898-1.372 10.449-4.118 13.653-2.746 3.203-6.762 4.805-12.05 4.805-5.29 0-9.306-1.614-12.051-4.844M698.716 91.445V25.928h13.5l6.025 31.348V25.928h12.661v65.517H718.09l-6.56-32.796v32.796ZM738.24 87.631c-2.645-2.947-3.967-7.703-3.967-14.262v-6.406h12.89v8.16c0 3.255 1.04 4.882 3.127 4.882 1.169 0 1.983-.343 2.44-1.03.459-.687.687-1.843.687-3.47 0-2.136-.256-3.902-.763-5.301-.508-1.398-1.157-2.567-1.945-3.509-.789-.94-2.2-2.402-4.232-4.385l-5.645-5.645c-4.373-4.27-6.56-9-6.56-14.186 0-5.592 1.284-9.85 3.851-12.776 2.568-2.922 6.319-4.385 11.25-4.385 5.9 0 10.145 1.563 12.738 4.691 2.594 3.127 3.89 8.021 3.89 14.682h-13.347l-.076-4.5c0-.864-.242-1.55-.725-2.06-.483-.507-1.156-.762-2.02-.762-1.018 0-1.782.28-2.288.84-.51.56-.764 1.322-.764 2.287 0 2.135 1.22 4.347 3.66 6.635l7.628 7.323c1.78 1.729 3.254 3.369 4.424 4.92 1.17 1.551 2.11 3.382 2.822 5.49.712 2.111 1.068 4.616 1.068 7.514 0 6.458-1.182 11.352-3.547 14.681-2.363 3.331-6.267 4.997-11.708 4.997-5.948 0-10.246-1.475-12.889-4.424M788.02 78.479c.407-1.017.611-2.441.611-4.27V42.173c0-1.423-.191-2.58-.572-3.47-.381-.89-1.158-1.335-2.326-1.335-2.187 0-3.28 1.653-3.28 4.957v31.958c0 1.881.229 3.306.686 4.272.456.966 1.296 1.448 2.517 1.448 1.169 0 1.957-.507 2.365-1.525m-14.416 8.733c-2.745-3.228-4.118-7.767-4.118-13.614V42.403c0-5.644 1.373-9.902 4.118-12.776 2.745-2.872 6.762-4.31 12.05-4.31s9.306 1.438 12.052 4.31c2.745 2.873 4.118 7.132 4.118 12.776v31.195c0 5.898-1.373 10.449-4.118 13.653-2.746 3.203-6.763 4.805-12.051 4.805-5.289 0-9.306-1.614-12.05-4.844M822.113 50.183c1.83 0 2.746-1.984 2.746-5.95 0-1.728-.076-3.025-.229-3.89-.153-.864-.432-1.46-.838-1.792-.408-.33-.993-.495-1.755-.495h-3.05v12.127Zm-16.475-24.255h20.136c3.203 0 5.682.724 7.436 2.174 1.755 1.45 2.937 3.484 3.547 6.102.61 2.619.915 5.962.915 10.03 0 3.712-.484 6.61-1.45 8.694-.965 2.086-2.643 3.535-5.033 4.348 1.983.408 3.419 1.4 4.31 2.974.888 1.577 1.334 3.713 1.334 6.408l-.152 24.787h-12.814V65.818c0-1.83-.356-2.999-1.068-3.508-.712-.508-2.009-.763-3.89-.763v29.898h-13.271zM847.709 91.445V38.513h-7.78V25.928h28.678v12.585h-7.78v52.932ZM871.322 25.928h12.66v65.517h-12.66zM891.472 87.479c-2.62-3.051-3.928-7.576-3.928-13.576V25.928h12.738v47.44c0 2.086.203 3.714.61 4.883.406 1.17 1.27 1.753 2.593 1.753s2.185-.571 2.593-1.716c.406-1.144.61-2.783.61-4.92v-47.44h12.737v47.975c0 6-1.31 10.525-3.928 13.576-2.62 3.051-6.623 4.576-12.012 4.576-5.39 0-9.395-1.525-12.013-4.576M923.17 91.445V25.928h19.983l5.493 39.966 5.49-39.966h20.136v65.517h-11.974V44.234l-7.551 47.211h-11.745l-8.01-47.212v47.212ZM222.11 153.69c.406-1.016.61-2.44.61-4.27v-32.035c0-1.422-.19-2.58-.573-3.47-.381-.89-1.157-1.334-2.326-1.334-2.187 0-3.28 1.652-3.28 4.957v31.958c0 1.881.229 3.306.687 4.271.457.966 1.296 1.45 2.517 1.45 1.17 0 1.956-.509 2.364-1.526m-14.414 8.733c-2.747-3.229-4.12-7.767-4.12-13.615v-31.194c0-5.644 1.373-9.902 4.12-12.777 2.745-2.871 6.76-4.308 12.05-4.308 5.288 0 9.305 1.437 12.051 4.308 2.746 2.875 4.118 7.133 4.118 12.777v31.194c0 5.9-1.372 10.449-4.118 13.653-2.746 3.203-6.763 4.805-12.05 4.805-5.29 0-9.306-1.613-12.051-4.843M239.728 166.657v-65.518h26.236v12.738h-13.04v10.45h12.355v12.584h-12.356v29.746ZM287.396 101.14h12.66v65.517h-12.66zM304.014 166.657v-65.518h13.5l6.026 31.35v-31.35h12.661v65.518h-12.814l-6.559-32.797v32.797ZM347.275 166.657l-8.085-65.593h12.508l4.805 44.619 4.272-44.62h12.508l-8.085 65.594ZM376.264 166.657v-65.518h26.238V113.8h-12.89v12.738h12.356v12.357h-12.356v15.024h13.73v12.738ZM409.937 162.843c-2.644-2.948-3.965-7.703-3.965-14.263v-6.406h12.89v8.161c0 3.254 1.04 4.882 3.126 4.882 1.17 0 1.983-.344 2.441-1.03.457-.686.686-1.843.686-3.47 0-2.136-.255-3.902-.762-5.3-.51-1.4-1.158-2.568-1.945-3.51-.79-.94-2.2-2.402-4.233-4.385l-5.644-5.644c-4.375-4.272-6.56-9-6.56-14.187 0-5.592 1.283-9.85 3.852-12.775 2.566-2.923 6.318-4.386 11.25-4.386 5.898 0 10.145 1.564 12.737 4.691 2.593 3.127 3.89 8.021 3.89 14.681h-13.347l-.077-4.498c0-.865-.242-1.551-.724-2.06-.484-.508-1.158-.763-2.021-.763-1.018 0-1.78.28-2.289.839-.508.56-.762 1.322-.762 2.288 0 2.136 1.22 4.348 3.661 6.636l7.627 7.323c1.78 1.727 3.253 3.367 4.424 4.918 1.169 1.552 2.11 3.383 2.822 5.492.712 2.11 1.067 4.614 1.067 7.512 0 6.458-1.182 11.353-3.546 14.683-2.365 3.33-6.268 4.996-11.708 4.996-5.949 0-10.246-1.474-12.89-4.425M447.867 166.657v-52.932h-7.78v-12.586h28.678v12.586h-7.779v52.932ZM471.48 101.14h12.661v65.517H471.48zM491.272 162.271c-2.314-3.33-3.47-8.377-3.47-15.14v-28.22c0-6.051 1.346-10.626 4.042-13.729 2.695-3.101 6.712-4.652 12.051-4.652 4.321 0 7.676.865 10.068 2.593 2.39 1.729 4.042 4.246 4.957 7.55.916 3.307 1.373 7.551 1.373 12.739h-12.814v-5.873c0-1.577-.216-2.797-.648-3.662-.433-.864-1.208-1.296-2.325-1.296-2.492 0-3.738 1.627-3.738 4.88v31.73c0 1.983.254 3.483.762 4.5.508 1.018 1.399 1.526 2.67 1.526 1.27 0 2.16-.508 2.67-1.526.507-1.017.763-2.517.763-4.5v-9.382h-3.51v-11.287h16.018v38.135h-5.263l-2.212-5.492c-2.34 4.069-5.949 6.102-10.831 6.102-4.728 0-8.25-1.665-10.563-4.996M537.56 145.606h5.949l-2.899-33.33H540Zm-14.492 21.05 6.33-65.516h22.195l6.255 65.517h-12.433l-.915-10.602h-7.932l-.763 10.602zM565.115 166.657v-52.932h-7.78v-12.586h28.679v12.586h-7.78v52.932ZM588.728 101.14h12.662v65.517h-12.662zM612.257 166.657l-8.084-65.593h12.509l4.805 44.619 4.27-44.62h12.51l-8.085 65.594ZM641.247 166.657v-65.518h26.238V113.8h-12.89v12.738h12.356v12.357h-12.357v15.024h13.73v12.738ZM696.924 165.513c-2.44-1.169-4.36-2.885-5.758-5.148-1.4-2.262-2.098-4.996-2.098-8.2v-16.398h12.89v15.635c0 1.17.241 2.099.725 2.785.482.686 1.232 1.03 2.25 1.03.965 0 1.69-.318 2.174-.954.482-.635.724-1.537.724-2.707V101.14h13.195v49.119c0 3.407-.675 6.395-2.021 8.961-1.349 2.569-3.23 4.552-5.645 5.95-2.415 1.4-5.174 2.097-8.275 2.097-3 0-5.72-.585-8.161-1.754M742.968 153.69c.407-1.016.61-2.44.61-4.27v-32.035c0-1.422-.191-2.58-.571-3.47-.382-.89-1.158-1.334-2.327-1.334-2.187 0-3.28 1.652-3.28 4.957v31.958c0 1.881.23 3.306.686 4.271.457.966 1.297 1.45 2.517 1.45 1.17 0 1.957-.509 2.365-1.526m-14.415 8.733c-2.746-3.229-4.12-7.767-4.12-13.615v-31.194c0-5.644 1.374-9.902 4.12-12.777 2.745-2.871 6.762-4.308 12.05-4.308 5.289 0 9.306 1.437 12.051 4.308 2.746 2.875 4.119 7.133 4.119 12.777v31.194c0 5.9-1.373 10.449-4.119 13.653-2.745 3.203-6.762 4.805-12.05 4.805s-9.306-1.613-12.051-4.843M764.126 162.691c-2.62-3.05-3.928-7.575-3.928-13.577V101.14h12.737v47.44c0 2.086.203 3.714.61 4.882.406 1.17 1.27 1.755 2.594 1.755 1.32 0 2.185-.573 2.593-1.717.406-1.144.61-2.783.61-4.92v-47.44h12.737v47.974c0 6.002-1.31 10.526-3.928 13.577-2.62 3.051-6.623 4.576-12.012 4.576-5.391 0-9.395-1.525-12.013-4.576M812.298 125.394c1.831 0 2.746-1.983 2.746-5.95 0-1.727-.076-3.024-.229-3.89-.152-.863-.432-1.46-.84-1.792-.406-.33-.99-.495-1.753-.495h-3.05v12.127Zm-16.474-24.255h20.135c3.205 0 5.683.726 7.438 2.175 1.753 1.448 2.935 3.483 3.545 6.101.61 2.62.917 5.962.917 10.03 0 3.713-.485 6.61-1.45 8.694-.967 2.086-2.644 3.535-5.034 4.349 1.983.407 3.42 1.398 4.309 2.974.89 1.576 1.335 3.712 1.335 6.407l-.153 24.788h-12.813V141.03c0-1.83-.357-3-1.068-3.508-.712-.509-2.01-.764-3.89-.764v29.899h-13.271zM831.197 166.657v-65.518h13.5l6.026 31.35v-31.35h12.662v65.518H850.57l-6.559-32.797v32.797ZM881.078 145.606h5.95l-2.899-33.33h-.61Zm-14.492 21.05 6.331-65.516h22.194l6.255 65.517h-12.432l-.915-10.602h-7.932l-.763 10.602zM904.538 166.657v-65.518h13.118v54.381h13.5v11.137ZM933.91 101.14h12.66v65.517h-12.66zM953.7 162.843c-2.644-2.948-3.965-7.703-3.965-14.263v-6.406h12.89v8.161c0 3.254 1.04 4.882 3.126 4.882 1.17 0 1.983-.344 2.441-1.03.457-.686.686-1.843.686-3.47 0-2.136-.255-3.902-.762-5.3-.51-1.4-1.158-2.568-1.945-3.51-.79-.94-2.2-2.402-4.233-4.385l-5.644-5.644c-4.375-4.272-6.56-9-6.56-14.187 0-5.592 1.283-9.85 3.852-12.775 2.566-2.923 6.318-4.386 11.25-4.386 5.898 0 10.145 1.564 12.737 4.691 2.593 3.127 3.89 8.021 3.89 14.681h-13.347l-.077-4.498c0-.865-.242-1.551-.724-2.06-.485-.508-1.158-.763-2.02-.763-1.02 0-1.782.28-2.29.839-.509.56-.762 1.322-.762 2.288 0 2.136 1.22 4.348 3.661 6.636l7.627 7.323c1.78 1.727 3.253 3.367 4.423 4.918 1.17 1.552 2.11 3.383 2.823 5.492.712 2.11 1.067 4.614 1.067 7.512 0 6.458-1.182 11.353-3.546 14.683-2.365 3.33-6.268 4.996-11.709 4.996-5.948 0-10.244-1.474-12.89-4.425M991.63 166.657v-52.932h-7.78v-12.586h28.678v12.586h-7.78v52.932ZM1018.866 162.843c-2.645-2.948-3.967-7.703-3.967-14.263v-6.406h12.89v8.161c0 3.254 1.042 4.882 3.128 4.882 1.168 0 1.983-.344 2.44-1.03.458-.686.687-1.843.687-3.47 0-2.136-.256-3.902-.764-5.3-.507-1.4-1.156-2.568-1.945-3.51-.788-.94-2.199-2.402-4.231-4.385l-5.645-5.644c-4.374-4.272-6.56-9-6.56-14.187 0-5.592 1.285-9.85 3.852-12.775 2.567-2.923 6.318-4.386 11.25-4.386 5.899 0 10.144 1.564 12.737 4.691 2.594 3.127 3.89 8.021 3.89 14.681h-13.348l-.075-4.498c0-.865-.242-1.551-.725-2.06-.484-.508-1.156-.763-2.02-.763-1.018 0-1.782.28-2.289.839-.509.56-.764 1.322-.764 2.288 0 2.136 1.221 4.348 3.662 6.636l7.627 7.323c1.78 1.727 3.254 3.367 4.424 4.918 1.17 1.552 2.109 3.383 2.822 5.492.712 2.11 1.068 4.614 1.068 7.512 0 6.458-1.182 11.353-3.547 14.683-2.364 3.33-6.267 4.996-11.708 4.996-5.949 0-10.246-1.474-12.89-4.425\"\n    />\n  </svg>\n</template>\n\n<script setup lang=\"ts\">\ndefineOptions({\n  name: 'BrandExpansionLong'\n})\n\ndefineProps<{\n  width?: string\n  height?: string\n}>()\n</script>\n","<template>\n  <svg\n    :width=\"width\"\n    :height=\"height\"\n    viewBox=\"0 0 1047.01 200\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      class=\"triangle\"\n      d=\"m45.153 200 28.423-46.424L101.999 200Z\"\n    />\n    <path\n      class=\"globe\"\n      d=\"M 106.691 88.5051 C 107.818 82.8227 108.526 76.8189 108.785 70.6453 L 128.029 70.6453 C 127.431 76.8914 125.784 82.9146 123.168 88.5051 Z M 112.262 104.021 C 107.739 108.545 102.563 112.178 96.9465 114.835 C 97.883 113.313 98.7509 111.751 99.5475 110.152 C 101.243 106.76 102.725 103.064 103.978 99.1273 L 116.611 99.1273 C 115.259 100.842 113.807 102.476 112.263 104.021 M 78.887 88.5051 L 78.887 70.6453 L 98.1536 70.6453 C 97.8699 76.8889 97.0901 82.9061 95.8502 88.5051 Z M 90.046 105.401 C 86.8076 111.879 82.9143 116.431 78.887 118.601 L 78.887 99.1273 L 92.7536 99.1273 C 91.9649 101.266 91.061 103.36 90.046 105.401 M 57.1052 105.401 C 56.0901 103.36 55.1863 101.266 54.3976 99.1273 L 68.2642 99.1273 L 68.2642 118.601 C 64.2363 116.431 60.3435 111.879 57.1052 105.401 M 48.9976 70.6453 L 68.2642 70.6453 L 68.2642 88.5051 L 51.3028 88.5051 C 50.0623 82.9061 49.2819 76.8889 48.9988 70.6453 M 34.8899 104.021 C 33.3459 102.476 31.8942 100.842 30.5424 99.1273 L 43.1734 99.1273 C 44.4273 103.064 45.9096 106.76 47.6049 110.152 C 48.4019 111.751 49.27 113.313 50.2065 114.835 C 44.5899 112.179 39.4133 108.545 34.8899 104.021 M 23.9841 88.5051 C 21.3678 82.9146 19.7212 76.8914 19.1229 70.6453 L 38.3669 70.6453 C 38.6262 76.8189 39.3336 82.8227 40.4609 88.5051 Z M 40.4603 42.1627 C 39.3342 47.8451 38.6262 53.8489 38.3669 60.0225 L 19.1229 60.0225 C 19.7212 53.7764 21.3678 47.7532 23.9841 42.1627 Z M 34.8893 26.647 C 39.4127 22.123 44.5893 18.4895 50.2059 15.8331 C 49.2694 17.3545 48.4013 18.9171 47.6043 20.516 C 45.909 23.9078 44.4273 27.6045 43.1734 31.5405 L 30.5424 31.5405 C 31.8943 29.8255 33.346 28.1915 34.8899 26.647 M 68.2648 42.1627 L 68.2648 60.0225 L 48.9988 60.0225 C 49.2819 53.7795 50.0617 47.7617 51.3022 42.1627 Z M 57.1064 25.267 C 60.3448 18.789 64.2375 14.237 68.2654 12.0663 L 68.2654 31.5405 L 54.3988 31.5405 C 55.1872 29.402 56.0908 27.3078 57.1058 25.267 M 90.0466 25.267 C 91.0618 27.3078 91.9656 29.402 92.7542 31.5405 L 78.8876 31.5405 L 78.8876 12.0663 C 82.9149 14.237 86.8083 18.789 90.0466 25.267 M 98.1548 60.0225 L 78.8876 60.0225 L 78.8876 42.1627 L 95.8502 42.1627 C 97.0908 47.7617 97.8711 53.7795 98.1542 60.0225 M 112.263 26.647 C 113.807 28.1916 115.258 29.8256 116.611 31.5405 L 103.978 31.5405 C 102.725 27.6045 101.243 23.9078 99.5475 20.516 C 98.7509 18.9169 97.883 17.3544 96.9465 15.8331 C 102.563 18.4895 107.739 22.1236 112.263 26.647 M 123.169 42.1627 C 125.785 47.7532 127.431 53.7764 128.03 60.0225 L 108.786 60.0225 C 108.526 53.8489 107.819 47.8451 106.692 42.1627 Z M 119.775 19.136 C 107.434 6.79604 91.0273 0.00028712 73.5759 0.00028712 C 56.1245 0.00028712 39.7177 6.79604 27.3777 19.136 C 15.0389 31.476 8.24198 47.8828 8.24198 65.3336 C 8.24198 82.7856 15.0383 99.1924 27.3777 111.532 C 39.7177 123.872 56.1245 130.668 73.5759 130.668 C 91.0279 130.668 107.434 123.872 119.774 111.532 C 132.114 99.1924 138.91 82.7856 138.91 65.3336 C 138.91 47.8828 132.114 31.476 119.774 19.136\"\n    />\n    <path\n      class=\"plate\"\n      d=\"M -8.72e-05 136.811 L 147.151 136.811 L 147.151 147.433 L -8.72e-05 147.433 Z\"\n    />\n    <path\n      class=\"main-text\"\n      d=\"M203.5 25.928h12.66v65.517H203.5zM220.118 91.445V25.928h13.5l6.026 31.348V25.928h12.661v65.517h-12.814l-6.559-32.796v32.796ZM263.073 91.445V38.513h-7.78V25.928h28.678v12.585h-7.78v52.932ZM286.96 91.445V25.928h26.237V38.59h-12.89v12.737h12.357v12.357h-12.357v15.024h13.73v12.738ZM333.813 50.183c1.83 0 2.745-1.984 2.745-5.95 0-1.728-.075-3.025-.228-3.89-.152-.864-.433-1.46-.839-1.792-.408-.33-.992-.495-1.755-.495h-3.05v12.127Zm-16.475-24.255h20.136c3.204 0 5.682.724 7.437 2.174 1.753 1.45 2.936 3.484 3.546 6.102.61 2.619.916 5.962.916 10.03 0 3.712-.485 6.61-1.45 8.694-.966 2.086-2.644 3.535-5.034 4.348 1.984.408 3.42 1.4 4.309 2.974.89 1.577 1.336 3.713 1.336 6.408l-.153 24.787h-12.814V65.818c0-1.83-.357-2.999-1.068-3.508-.712-.508-2.01-.763-3.89-.763v29.898h-13.271zM352.712 91.445V25.928h13.5l6.026 31.348V25.928H384.9v65.517h-12.815l-6.56-32.796v32.796ZM402.592 70.394h5.95l-2.898-33.33h-.61Zm-14.491 21.051 6.33-65.517h22.195l6.255 65.517h-12.433l-.915-10.601H401.6l-.762 10.601zM430.148 91.445V38.513h-7.78V25.928h28.678v12.585h-7.78v52.932ZM453.761 25.928h12.661v65.517h-12.66zM488.616 78.479c.407-1.017.611-2.441.611-4.27V42.173c0-1.423-.19-2.58-.572-3.47-.382-.89-1.158-1.335-2.327-1.335-2.187 0-3.279 1.653-3.279 4.957v31.958c0 1.881.228 3.306.687 4.272.457.966 1.296 1.448 2.517 1.448 1.168 0 1.956-.507 2.363-1.525m-14.414 8.733c-2.747-3.228-4.12-7.767-4.12-13.614V42.403c0-5.644 1.373-9.902 4.12-12.776 2.745-2.872 6.761-4.31 12.05-4.31 5.288 0 9.305 1.438 12.052 4.31 2.745 2.873 4.118 7.132 4.118 12.776v31.195c0 5.898-1.373 10.449-4.118 13.653-2.747 3.203-6.764 4.805-12.051 4.805-5.29 0-9.306-1.614-12.051-4.844M506.234 91.445V25.928h13.5l6.026 31.348V25.928h12.661v65.517h-12.814l-6.559-32.796v32.796ZM556.114 70.394h5.95l-2.898-33.33h-.61Zm-14.491 21.051 6.33-65.517h22.195l6.254 65.517H563.97l-.915-10.601h-7.932l-.763 10.601zM579.574 91.445V25.928h13.118V80.31h13.501v11.136ZM631.475 87.556c-2.873-3-4.308-7.119-4.308-12.356V44.996c0-6.508 1.296-11.414 3.89-14.72 2.592-3.305 6.659-4.958 12.202-4.958 4.83 0 8.72 1.323 11.67 3.966 2.949 2.645 4.424 6.458 4.424 11.44v11.289H646.31v-9.687c0-1.88-.23-3.176-.687-3.89-.458-.71-1.246-1.067-2.365-1.067-1.17 0-1.97.408-2.402 1.22-.433.814-.649 2.01-.649 3.585v32.873c0 1.73.255 2.988.764 3.775.507.79 1.27 1.183 2.287 1.183 2.033 0 3.052-1.652 3.052-4.958V63.225h13.194v12.356c0 10.983-5.517 16.475-16.55 16.475-4.78 0-8.607-1.5-11.48-4.5M681.097 78.479c.407-1.017.61-2.441.61-4.27V42.173c0-1.423-.19-2.58-.571-3.47-.382-.89-1.158-1.335-2.327-1.335-2.187 0-3.279 1.653-3.279 4.957v31.958c0 1.881.228 3.306.687 4.272.457.966 1.296 1.448 2.517 1.448 1.168 0 1.955-.507 2.363-1.525m-14.414 8.733c-2.747-3.228-4.12-7.767-4.12-13.614V42.403c0-5.644 1.373-9.902 4.12-12.776 2.745-2.872 6.76-4.31 12.05-4.31 5.288 0 9.305 1.438 12.051 4.31 2.746 2.873 4.118 7.132 4.118 12.776v31.195c0 5.898-1.372 10.449-4.118 13.653-2.746 3.203-6.762 4.805-12.05 4.805-5.29 0-9.306-1.614-12.051-4.844M698.716 91.445V25.928h13.5l6.025 31.348V25.928h12.661v65.517H718.09l-6.56-32.796v32.796ZM738.24 87.631c-2.645-2.947-3.967-7.703-3.967-14.262v-6.406h12.89v8.16c0 3.255 1.04 4.882 3.127 4.882 1.169 0 1.983-.343 2.44-1.03.459-.687.687-1.843.687-3.47 0-2.136-.256-3.902-.763-5.301-.508-1.398-1.157-2.567-1.945-3.509-.789-.94-2.2-2.402-4.232-4.385l-5.645-5.645c-4.373-4.27-6.56-9-6.56-14.186 0-5.592 1.284-9.85 3.851-12.776 2.568-2.922 6.319-4.385 11.25-4.385 5.9 0 10.145 1.563 12.738 4.691 2.594 3.127 3.89 8.021 3.89 14.682h-13.347l-.076-4.5c0-.864-.242-1.55-.725-2.06-.483-.507-1.156-.762-2.02-.762-1.018 0-1.782.28-2.288.84-.51.56-.764 1.322-.764 2.287 0 2.135 1.22 4.347 3.66 6.635l7.628 7.323c1.78 1.729 3.254 3.369 4.424 4.92 1.17 1.551 2.11 3.382 2.822 5.49.712 2.111 1.068 4.616 1.068 7.514 0 6.458-1.182 11.352-3.547 14.681-2.363 3.331-6.267 4.997-11.708 4.997-5.948 0-10.246-1.475-12.889-4.424M788.02 78.479c.407-1.017.611-2.441.611-4.27V42.173c0-1.423-.191-2.58-.572-3.47-.381-.89-1.158-1.335-2.326-1.335-2.187 0-3.28 1.653-3.28 4.957v31.958c0 1.881.229 3.306.686 4.272.456.966 1.296 1.448 2.517 1.448 1.169 0 1.957-.507 2.365-1.525m-14.416 8.733c-2.745-3.228-4.118-7.767-4.118-13.614V42.403c0-5.644 1.373-9.902 4.118-12.776 2.745-2.872 6.762-4.31 12.05-4.31s9.306 1.438 12.052 4.31c2.745 2.873 4.118 7.132 4.118 12.776v31.195c0 5.898-1.373 10.449-4.118 13.653-2.746 3.203-6.763 4.805-12.051 4.805-5.289 0-9.306-1.614-12.05-4.844M822.113 50.183c1.83 0 2.746-1.984 2.746-5.95 0-1.728-.076-3.025-.229-3.89-.153-.864-.432-1.46-.838-1.792-.408-.33-.993-.495-1.755-.495h-3.05v12.127Zm-16.475-24.255h20.136c3.203 0 5.682.724 7.436 2.174 1.755 1.45 2.937 3.484 3.547 6.102.61 2.619.915 5.962.915 10.03 0 3.712-.484 6.61-1.45 8.694-.965 2.086-2.643 3.535-5.033 4.348 1.983.408 3.419 1.4 4.31 2.974.888 1.577 1.334 3.713 1.334 6.408l-.152 24.787h-12.814V65.818c0-1.83-.356-2.999-1.068-3.508-.712-.508-2.009-.763-3.89-.763v29.898h-13.271zM847.709 91.445V38.513h-7.78V25.928h28.678v12.585h-7.78v52.932ZM871.322 25.928h12.66v65.517h-12.66zM891.472 87.479c-2.62-3.051-3.928-7.576-3.928-13.576V25.928h12.738v47.44c0 2.086.203 3.714.61 4.883.406 1.17 1.27 1.753 2.593 1.753s2.185-.571 2.593-1.716c.406-1.144.61-2.783.61-4.92v-47.44h12.737v47.975c0 6-1.31 10.525-3.928 13.576-2.62 3.051-6.623 4.576-12.012 4.576-5.39 0-9.395-1.525-12.013-4.576M923.17 91.445V25.928h19.983l5.493 39.966 5.49-39.966h20.136v65.517h-11.974V44.234l-7.551 47.211h-11.745l-8.01-47.212v47.212ZM222.11 153.69c.406-1.016.61-2.44.61-4.27v-32.035c0-1.422-.19-2.58-.573-3.47-.381-.89-1.157-1.334-2.326-1.334-2.187 0-3.28 1.652-3.28 4.957v31.958c0 1.881.229 3.306.687 4.271.457.966 1.296 1.45 2.517 1.45 1.17 0 1.956-.509 2.364-1.526m-14.414 8.733c-2.747-3.229-4.12-7.767-4.12-13.615v-31.194c0-5.644 1.373-9.902 4.12-12.777 2.745-2.871 6.76-4.308 12.05-4.308 5.288 0 9.305 1.437 12.051 4.308 2.746 2.875 4.118 7.133 4.118 12.777v31.194c0 5.9-1.372 10.449-4.118 13.653-2.746 3.203-6.763 4.805-12.05 4.805-5.29 0-9.306-1.613-12.051-4.843M239.728 166.657v-65.518h26.236v12.738h-13.04v10.45h12.355v12.584h-12.356v29.746ZM287.396 101.14h12.66v65.517h-12.66zM304.014 166.657v-65.518h13.5l6.026 31.35v-31.35h12.661v65.518h-12.814l-6.559-32.797v32.797ZM347.275 166.657l-8.085-65.593h12.508l4.805 44.619 4.272-44.62h12.508l-8.085 65.594ZM376.264 166.657v-65.518h26.238V113.8h-12.89v12.738h12.356v12.357h-12.356v15.024h13.73v12.738ZM409.937 162.843c-2.644-2.948-3.965-7.703-3.965-14.263v-6.406h12.89v8.161c0 3.254 1.04 4.882 3.126 4.882 1.17 0 1.983-.344 2.441-1.03.457-.686.686-1.843.686-3.47 0-2.136-.255-3.902-.762-5.3-.51-1.4-1.158-2.568-1.945-3.51-.79-.94-2.2-2.402-4.233-4.385l-5.644-5.644c-4.375-4.272-6.56-9-6.56-14.187 0-5.592 1.283-9.85 3.852-12.775 2.566-2.923 6.318-4.386 11.25-4.386 5.898 0 10.145 1.564 12.737 4.691 2.593 3.127 3.89 8.021 3.89 14.681h-13.347l-.077-4.498c0-.865-.242-1.551-.724-2.06-.484-.508-1.158-.763-2.021-.763-1.018 0-1.78.28-2.289.839-.508.56-.762 1.322-.762 2.288 0 2.136 1.22 4.348 3.661 6.636l7.627 7.323c1.78 1.727 3.253 3.367 4.424 4.918 1.169 1.552 2.11 3.383 2.822 5.492.712 2.11 1.067 4.614 1.067 7.512 0 6.458-1.182 11.353-3.546 14.683-2.365 3.33-6.268 4.996-11.708 4.996-5.949 0-10.246-1.474-12.89-4.425M447.867 166.657v-52.932h-7.78v-12.586h28.678v12.586h-7.779v52.932ZM471.48 101.14h12.661v65.517H471.48zM491.272 162.271c-2.314-3.33-3.47-8.377-3.47-15.14v-28.22c0-6.051 1.346-10.626 4.042-13.729 2.695-3.101 6.712-4.652 12.051-4.652 4.321 0 7.676.865 10.068 2.593 2.39 1.729 4.042 4.246 4.957 7.55.916 3.307 1.373 7.551 1.373 12.739h-12.814v-5.873c0-1.577-.216-2.797-.648-3.662-.433-.864-1.208-1.296-2.325-1.296-2.492 0-3.738 1.627-3.738 4.88v31.73c0 1.983.254 3.483.762 4.5.508 1.018 1.399 1.526 2.67 1.526 1.27 0 2.16-.508 2.67-1.526.507-1.017.763-2.517.763-4.5v-9.382h-3.51v-11.287h16.018v38.135h-5.263l-2.212-5.492c-2.34 4.069-5.949 6.102-10.831 6.102-4.728 0-8.25-1.665-10.563-4.996M537.56 145.606h5.949l-2.899-33.33H540Zm-14.492 21.05 6.33-65.516h22.195l6.255 65.517h-12.433l-.915-10.602h-7.932l-.763 10.602zM565.115 166.657v-52.932h-7.78v-12.586h28.679v12.586h-7.78v52.932ZM588.728 101.14h12.662v65.517h-12.662zM612.257 166.657l-8.084-65.593h12.509l4.805 44.619 4.27-44.62h12.51l-8.085 65.594ZM641.247 166.657v-65.518h26.238V113.8h-12.89v12.738h12.356v12.357h-12.357v15.024h13.73v12.738ZM696.924 165.513c-2.44-1.169-4.36-2.885-5.758-5.148-1.4-2.262-2.098-4.996-2.098-8.2v-16.398h12.89v15.635c0 1.17.241 2.099.725 2.785.482.686 1.232 1.03 2.25 1.03.965 0 1.69-.318 2.174-.954.482-.635.724-1.537.724-2.707V101.14h13.195v49.119c0 3.407-.675 6.395-2.021 8.961-1.349 2.569-3.23 4.552-5.645 5.95-2.415 1.4-5.174 2.097-8.275 2.097-3 0-5.72-.585-8.161-1.754M742.968 153.69c.407-1.016.61-2.44.61-4.27v-32.035c0-1.422-.191-2.58-.571-3.47-.382-.89-1.158-1.334-2.327-1.334-2.187 0-3.28 1.652-3.28 4.957v31.958c0 1.881.23 3.306.686 4.271.457.966 1.297 1.45 2.517 1.45 1.17 0 1.957-.509 2.365-1.526m-14.415 8.733c-2.746-3.229-4.12-7.767-4.12-13.615v-31.194c0-5.644 1.374-9.902 4.12-12.777 2.745-2.871 6.762-4.308 12.05-4.308 5.289 0 9.306 1.437 12.051 4.308 2.746 2.875 4.119 7.133 4.119 12.777v31.194c0 5.9-1.373 10.449-4.119 13.653-2.745 3.203-6.762 4.805-12.05 4.805s-9.306-1.613-12.051-4.843M764.126 162.691c-2.62-3.05-3.928-7.575-3.928-13.577V101.14h12.737v47.44c0 2.086.203 3.714.61 4.882.406 1.17 1.27 1.755 2.594 1.755 1.32 0 2.185-.573 2.593-1.717.406-1.144.61-2.783.61-4.92v-47.44h12.737v47.974c0 6.002-1.31 10.526-3.928 13.577-2.62 3.051-6.623 4.576-12.012 4.576-5.391 0-9.395-1.525-12.013-4.576M812.298 125.394c1.831 0 2.746-1.983 2.746-5.95 0-1.727-.076-3.024-.229-3.89-.152-.863-.432-1.46-.84-1.792-.406-.33-.99-.495-1.753-.495h-3.05v12.127Zm-16.474-24.255h20.135c3.205 0 5.683.726 7.438 2.175 1.753 1.448 2.935 3.483 3.545 6.101.61 2.62.917 5.962.917 10.03 0 3.713-.485 6.61-1.45 8.694-.967 2.086-2.644 3.535-5.034 4.349 1.983.407 3.42 1.398 4.309 2.974.89 1.576 1.335 3.712 1.335 6.407l-.153 24.788h-12.813V141.03c0-1.83-.357-3-1.068-3.508-.712-.509-2.01-.764-3.89-.764v29.899h-13.271zM831.197 166.657v-65.518h13.5l6.026 31.35v-31.35h12.662v65.518H850.57l-6.559-32.797v32.797ZM881.078 145.606h5.95l-2.899-33.33h-.61Zm-14.492 21.05 6.331-65.516h22.194l6.255 65.517h-12.432l-.915-10.602h-7.932l-.763 10.602zM904.538 166.657v-65.518h13.118v54.381h13.5v11.137ZM933.91 101.14h12.66v65.517h-12.66zM953.7 162.843c-2.644-2.948-3.965-7.703-3.965-14.263v-6.406h12.89v8.161c0 3.254 1.04 4.882 3.126 4.882 1.17 0 1.983-.344 2.441-1.03.457-.686.686-1.843.686-3.47 0-2.136-.255-3.902-.762-5.3-.51-1.4-1.158-2.568-1.945-3.51-.79-.94-2.2-2.402-4.233-4.385l-5.644-5.644c-4.375-4.272-6.56-9-6.56-14.187 0-5.592 1.283-9.85 3.852-12.775 2.566-2.923 6.318-4.386 11.25-4.386 5.898 0 10.145 1.564 12.737 4.691 2.593 3.127 3.89 8.021 3.89 14.681h-13.347l-.077-4.498c0-.865-.242-1.551-.724-2.06-.485-.508-1.158-.763-2.02-.763-1.02 0-1.782.28-2.29.839-.509.56-.762 1.322-.762 2.288 0 2.136 1.22 4.348 3.661 6.636l7.627 7.323c1.78 1.727 3.253 3.367 4.423 4.918 1.17 1.552 2.11 3.383 2.823 5.492.712 2.11 1.067 4.614 1.067 7.512 0 6.458-1.182 11.353-3.546 14.683-2.365 3.33-6.268 4.996-11.709 4.996-5.948 0-10.244-1.474-12.89-4.425M991.63 166.657v-52.932h-7.78v-12.586h28.678v12.586h-7.78v52.932ZM1018.866 162.843c-2.645-2.948-3.967-7.703-3.967-14.263v-6.406h12.89v8.161c0 3.254 1.042 4.882 3.128 4.882 1.168 0 1.983-.344 2.44-1.03.458-.686.687-1.843.687-3.47 0-2.136-.256-3.902-.764-5.3-.507-1.4-1.156-2.568-1.945-3.51-.788-.94-2.199-2.402-4.231-4.385l-5.645-5.644c-4.374-4.272-6.56-9-6.56-14.187 0-5.592 1.285-9.85 3.852-12.775 2.567-2.923 6.318-4.386 11.25-4.386 5.899 0 10.144 1.564 12.737 4.691 2.594 3.127 3.89 8.021 3.89 14.681h-13.348l-.075-4.498c0-.865-.242-1.551-.725-2.06-.484-.508-1.156-.763-2.02-.763-1.018 0-1.782.28-2.289.839-.509.56-.764 1.322-.764 2.288 0 2.136 1.221 4.348 3.662 6.636l7.627 7.323c1.78 1.727 3.254 3.367 4.424 4.918 1.17 1.552 2.109 3.383 2.822 5.492.712 2.11 1.068 4.614 1.068 7.512 0 6.458-1.182 11.353-3.547 14.683-2.364 3.33-6.267 4.996-11.708 4.996-5.949 0-10.246-1.474-12.89-4.425\"\n    />\n  </svg>\n</template>\n\n<script setup lang=\"ts\">\ndefineOptions({\n  name: 'BrandExpansionLong'\n})\n\ndefineProps<{\n  width?: string\n  height?: string\n}>()\n</script>\n","import { computed, customRef, effectScope, getCurrentInstance, getCurrentScope, hasInjectionContext, inject, isReactive, isRef, nextTick, onBeforeMount, onBeforeUnmount, onMounted, onScopeDispose, onUnmounted, provide, reactive, readonly, ref, shallowReadonly, shallowRef, toRef as toRef$1, toRefs as toRefs$1, toValue, unref, watch, watchEffect } from \"vue\";\n//#region computedEager/index.ts\n/**\n*\n* @deprecated This function will be removed in future version.\n*\n* Note: If you are using Vue 3.4+, you can straight use computed instead.\n* Because in Vue 3.4+, if computed new value does not change,\n* computed, effect, watch, watchEffect, render dependencies will not be triggered.\n* refer: https://github.com/vuejs/core/pull/5912\n*\n* @param fn effect function\n* @param options WatchOptionsBase\n* @returns readonly shallowRef\n*/\nfunction computedEager(fn, options) {\n\tvar _options$flush;\n\tconst result = shallowRef();\n\twatchEffect(() => {\n\t\tresult.value = fn();\n\t}, {\n\t\t...options,\n\t\tflush: (_options$flush = options === null || options === void 0 ? void 0 : options.flush) !== null && _options$flush !== void 0 ? _options$flush : \"sync\"\n\t});\n\treturn readonly(result);\n}\n/** @deprecated use `computedEager` instead */\nconst eagerComputed = computedEager;\n//#endregion\n//#region computedWithControl/index.ts\n/**\n* Explicitly define the deps of computed.\n*\n* @param source\n* @param fn\n*/\nfunction computedWithControl(source, fn, options = {}) {\n\tlet v = void 0;\n\tlet track;\n\tlet trigger;\n\tlet dirty = true;\n\tconst update = () => {\n\t\tdirty = true;\n\t\ttrigger();\n\t};\n\twatch(source, update, {\n\t\tflush: \"sync\",\n\t\t...options\n\t});\n\tconst get = typeof fn === \"function\" ? fn : fn.get;\n\tconst set = typeof fn === \"function\" ? void 0 : fn.set;\n\tconst result = customRef((_track, _trigger) => {\n\t\ttrack = _track;\n\t\ttrigger = _trigger;\n\t\treturn {\n\t\t\tget() {\n\t\t\t\tif (dirty) {\n\t\t\t\t\tv = get(v);\n\t\t\t\t\tdirty = false;\n\t\t\t\t}\n\t\t\t\ttrack();\n\t\t\t\treturn v;\n\t\t\t},\n\t\t\tset(v) {\n\t\t\t\tset === null || set === void 0 || set(v);\n\t\t\t}\n\t\t};\n\t});\n\tresult.trigger = update;\n\treturn result;\n}\n/** @deprecated use `computedWithControl` instead */\nconst controlledComputed = computedWithControl;\n//#endregion\n//#region createDisposableDirective/index.ts\n/**\n* Utility for authoring disposable directives. Reactive effects created within `mounted` directive hook will be tracked and automatically disposed when directive is unmounted.\n*\n* @see https://vueuse.org/createDisposableDirective\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createDisposableDirective(origin = {}) {\n\tfunction isFunc(fn) {\n\t\treturn typeof fn === \"function\";\n\t}\n\tconst normalisedOrigin = isFunc(origin) ? {\n\t\tmounted: origin,\n\t\tupdated: origin\n\t} : origin;\n\tconst { mounted, unmounted } = normalisedOrigin;\n\tif (!isFunc(mounted)) return origin;\n\tconst scopeWeakMap = /* @__PURE__ */ new WeakMap();\n\treturn {\n\t\t...normalisedOrigin,\n\t\tmounted(el, binding, vNode, prevNode) {\n\t\t\tvar _scopeWeakMap$get;\n\t\t\tconst scope = (_scopeWeakMap$get = scopeWeakMap.get(el)) !== null && _scopeWeakMap$get !== void 0 ? _scopeWeakMap$get : effectScope();\n\t\t\tscopeWeakMap.set(el, scope);\n\t\t\tscope.run(() => {\n\t\t\t\tmounted === null || mounted === void 0 || mounted(el, binding, vNode, prevNode);\n\t\t\t});\n\t\t},\n\t\tunmounted(el, binding, vNode, prevNode) {\n\t\t\tvar _scopeWeakMap$get2;\n\t\t\t(_scopeWeakMap$get2 = scopeWeakMap.get(el)) === null || _scopeWeakMap$get2 === void 0 || _scopeWeakMap$get2.stop();\n\t\t\tscopeWeakMap.delete(el);\n\t\t\tif (isFunc(unmounted)) unmounted(el, binding, vNode, prevNode);\n\t\t}\n\t};\n}\n//#endregion\n//#region tryOnScopeDispose/index.ts\n/**\n* Call onScopeDispose() if it's inside an effect scope lifecycle, if not, do nothing\n*\n* @param fn\n*/\nfunction tryOnScopeDispose(fn, failSilently) {\n\tif (getCurrentScope()) {\n\t\tonScopeDispose(fn, failSilently);\n\t\treturn true;\n\t}\n\treturn false;\n}\n//#endregion\n//#region createEventHook/index.ts\n/**\n* Utility for creating event hooks\n*\n* @see https://vueuse.org/createEventHook\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createEventHook() {\n\tconst fns = /* @__PURE__ */ new Set();\n\tconst off = (fn) => {\n\t\tfns.delete(fn);\n\t};\n\tconst clear = () => {\n\t\tfns.clear();\n\t};\n\tconst on = (fn) => {\n\t\tfns.add(fn);\n\t\tconst offFn = () => off(fn);\n\t\ttryOnScopeDispose(offFn);\n\t\treturn { off: offFn };\n\t};\n\tconst trigger = (...args) => {\n\t\treturn Promise.all(Array.from(fns).map((fn) => fn(...args)));\n\t};\n\treturn {\n\t\ton,\n\t\toff,\n\t\ttrigger,\n\t\tclear\n\t};\n}\n//#endregion\n//#region createGlobalState/index.ts\n/**\n* Keep states in the global scope to be reusable across Vue instances.\n*\n* @see https://vueuse.org/createGlobalState\n* @param stateFactory A factory function to create the state\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createGlobalState(stateFactory) {\n\tlet initialized = false;\n\tlet state;\n\tconst scope = effectScope(true);\n\treturn ((...args) => {\n\t\tif (!initialized) {\n\t\t\tstate = scope.run(() => stateFactory(...args));\n\t\t\tinitialized = true;\n\t\t}\n\t\treturn state;\n\t});\n}\n//#endregion\n//#region provideLocal/map.ts\nconst localProvidedStateMap = /* @__PURE__ */ new WeakMap();\n//#endregion\n//#region injectLocal/index.ts\n/**\n* On the basis of `inject`, it is allowed to directly call inject to obtain the value after call provide in the same component.\n*\n* @example\n* ```ts\n* injectLocal('MyInjectionKey', 1)\n* const injectedValue = injectLocal('MyInjectionKey') // injectedValue === 1\n* ```\n*\n* @__NO_SIDE_EFFECTS__\n*/\nconst injectLocal = (...args) => {\n\tvar _getCurrentInstance;\n\tconst key = args[0];\n\tconst instance = (_getCurrentInstance = getCurrentInstance()) === null || _getCurrentInstance === void 0 ? void 0 : _getCurrentInstance.proxy;\n\tconst owner = instance !== null && instance !== void 0 ? instance : getCurrentScope();\n\tif (owner == null && !hasInjectionContext()) throw new Error(\"injectLocal must be called in setup\");\n\tif (owner && localProvidedStateMap.has(owner) && key in localProvidedStateMap.get(owner)) return localProvidedStateMap.get(owner)[key];\n\treturn inject(...args);\n};\n//#endregion\n//#region provideLocal/index.ts\n/**\n* On the basis of `provide`, it is allowed to directly call inject to obtain the value after call provide in the same component.\n*\n* @example\n* ```ts\n* provideLocal('MyInjectionKey', 1)\n* const injectedValue = injectLocal('MyInjectionKey') // injectedValue === 1\n* ```\n*/\nfunction provideLocal(key, value) {\n\tvar _getCurrentInstance;\n\tconst instance = (_getCurrentInstance = getCurrentInstance()) === null || _getCurrentInstance === void 0 ? void 0 : _getCurrentInstance.proxy;\n\tconst owner = instance !== null && instance !== void 0 ? instance : getCurrentScope();\n\tif (owner == null) throw new Error(\"provideLocal must be called in setup\");\n\tif (!localProvidedStateMap.has(owner)) localProvidedStateMap.set(owner, Object.create(null));\n\tconst localProvidedState = localProvidedStateMap.get(owner);\n\tlocalProvidedState[key] = value;\n\treturn provide(key, value);\n}\n//#endregion\n//#region createInjectionState/index.ts\nfunction createInjectionState(composable, options) {\n\tconst key = (options === null || options === void 0 ? void 0 : options.injectionKey) || Symbol(composable.name || \"InjectionState\");\n\tconst defaultValue = options === null || options === void 0 ? void 0 : options.defaultValue;\n\tconst useProvidingState = (...args) => {\n\t\tconst state = composable(...args);\n\t\tprovideLocal(key, state);\n\t\treturn state;\n\t};\n\tconst useInjectedState = () => injectLocal(key, defaultValue);\n\treturn [useProvidingState, useInjectedState];\n}\n//#endregion\n//#region createRef/index.ts\n/**\n* Returns a `deepRef` or `shallowRef` depending on the `deep` param.\n*\n* @example createRef(1) // ShallowRef<number>\n* @example createRef(1, false) // ShallowRef<number>\n* @example createRef(1, true) // Ref<number>\n* @example createRef(\"string\") // ShallowRef<string>\n* @example createRef<\"A\"|\"B\">(\"A\", true) // Ref<\"A\"|\"B\">\n*\n* @param value\n* @param deep\n* @returns the `deepRef` or `shallowRef`\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createRef(value, deep) {\n\tif (deep === true) return ref(value);\n\telse return shallowRef(value);\n}\n//#endregion\n//#region utils/is.ts\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\tif (!condition) 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 = () => {};\nconst rand = (min, max) => {\n\tmin = Math.ceil(min);\n\tmax = Math.floor(max);\n\treturn Math.floor(Math.random() * (max - min + 1)) + min;\n};\nconst hasOwn = (val, key) => Object.hasOwn(val, key);\nconst isIOS = /* #__PURE__ */ getIsIOS();\nfunction getIsIOS() {\n\tvar _window, _window2, _window3;\n\treturn isClient && !!((_window = window) === null || _window === void 0 || (_window = _window.navigator) === null || _window === void 0 ? void 0 : _window.userAgent) && (/iP(?:ad|hone|od)/.test(window.navigator.userAgent) || ((_window2 = window) === null || _window2 === void 0 || (_window2 = _window2.navigator) === null || _window2 === void 0 ? void 0 : _window2.maxTouchPoints) > 2 && /iPad|Macintosh/.test((_window3 = window) === null || _window3 === void 0 ? void 0 : _window3.navigator.userAgent));\n}\n//#endregion\n//#region toRef/index.ts\nfunction toRef(...args) {\n\tif (args.length !== 1) return toRef$1(...args);\n\tconst r = args[0];\n\treturn typeof r === \"function\" ? readonly(customRef(() => ({\n\t\tget: r,\n\t\tset: noop\n\t}))) : ref(r);\n}\n//#endregion\n//#region utils/filters.ts\nfunction createFilterWrapper(filter, fn) {\n\tfunction wrapper(...args) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tPromise.resolve(filter(() => fn.apply(this, args), {\n\t\t\t\tfn,\n\t\t\t\tthisArg: this,\n\t\t\t\targs\n\t\t\t})).then(resolve).catch(reject);\n\t\t});\n\t}\n\tif (\"cancel\" in filter) Object.assign(wrapper, {\n\t\tcancel: filter.cancel,\n\t\tflush: filter.flush,\n\t\tisPending: filter.isPending\n\t});\n\treturn wrapper;\n}\nconst bypassFilter = (invoke) => {\n\treturn invoke();\n};\n/**\n* Create an EventFilter that debounce the events\n*/\nfunction debounceFilter(ms, options = {}) {\n\tlet timer;\n\tlet maxTimer;\n\tlet lastRejector = noop;\n\tlet lastResolve = noop;\n\tconst _pending = shallowRef(false);\n\tconst _clearTimeout = (timer) => {\n\t\tclearTimeout(timer);\n\t\tlastRejector();\n\t\tlastRejector = noop;\n\t};\n\tlet lastInvoker;\n\tconst handler = (invoke) => {\n\t\tconst duration = toValue(ms);\n\t\tconst maxDuration = toValue(options.maxWait);\n\t\tif (timer) _clearTimeout(timer);\n\t\tif (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n\t\t\tif (maxTimer) {\n\t\t\t\t_clearTimeout(maxTimer);\n\t\t\t\tmaxTimer = void 0;\n\t\t\t}\n\t\t\t_pending.value = false;\n\t\t\treturn Promise.resolve(invoke());\n\t\t}\n\t\t_pending.value = true;\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlastRejector = options.rejectOnCancel ? reject : resolve;\n\t\t\tlastResolve = resolve;\n\t\t\tlastInvoker = invoke;\n\t\t\tif (maxDuration && !maxTimer) maxTimer = setTimeout(() => {\n\t\t\t\tif (timer) _clearTimeout(timer);\n\t\t\t\tmaxTimer = void 0;\n\t\t\t\t_pending.value = false;\n\t\t\t\tresolve(lastInvoker());\n\t\t\t}, maxDuration);\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\tif (maxTimer) _clearTimeout(maxTimer);\n\t\t\t\tmaxTimer = void 0;\n\t\t\t\t_pending.value = false;\n\t\t\t\tresolve(invoke());\n\t\t\t}, duration);\n\t\t});\n\t};\n\treturn Object.assign(handler, {\n\t\tcancel: () => {\n\t\t\tif (timer) {\n\t\t\t\t_clearTimeout(timer);\n\t\t\t\ttimer = void 0;\n\t\t\t}\n\t\t\tif (maxTimer) {\n\t\t\t\t_clearTimeout(maxTimer);\n\t\t\t\tmaxTimer = void 0;\n\t\t\t}\n\t\t\t_pending.value = false;\n\t\t\tlastResolve = noop;\n\t\t},\n\t\tflush: () => {\n\t\t\tif (_pending.value) {\n\t\t\t\tif (timer) {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\ttimer = void 0;\n\t\t\t\t}\n\t\t\t\tif (maxTimer) {\n\t\t\t\t\tclearTimeout(maxTimer);\n\t\t\t\t\tmaxTimer = void 0;\n\t\t\t\t}\n\t\t\t\t_pending.value = false;\n\t\t\t\tconst resolve = lastResolve;\n\t\t\t\tlastRejector = noop;\n\t\t\t\tlastResolve = noop;\n\t\t\t\tresolve(lastInvoker());\n\t\t\t}\n\t\t},\n\t\tisPending: shallowReadonly(_pending)\n\t});\n}\nfunction throttleFilter(...args) {\n\tlet lastExec = 0;\n\tlet timer;\n\tlet isLeading = true;\n\tlet lastRejector = noop;\n\tlet lastValue;\n\tlet ms;\n\tlet trailing;\n\tlet leading;\n\tlet rejectOnCancel;\n\tif (!isRef(args[0]) && typeof args[0] === \"object\") ({delay: ms, trailing = true, leading = true, rejectOnCancel = false} = args[0]);\n\telse [ms, trailing = true, leading = true, rejectOnCancel = false] = args;\n\tconst clear = () => {\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = void 0;\n\t\t\tlastRejector();\n\t\t\tlastRejector = noop;\n\t\t}\n\t};\n\tconst filter = (_invoke) => {\n\t\tconst duration = toValue(ms);\n\t\tconst elapsed = Date.now() - lastExec;\n\t\tconst invoke = () => {\n\t\t\treturn lastValue = _invoke();\n\t\t};\n\t\tclear();\n\t\tif (duration <= 0) {\n\t\t\tlastExec = Date.now();\n\t\t\treturn invoke();\n\t\t}\n\t\tif (elapsed > duration) {\n\t\t\tlastExec = Date.now();\n\t\t\tif (leading || !isLeading) invoke();\n\t\t} else if (trailing) lastValue = new Promise((resolve, reject) => {\n\t\t\tlastRejector = rejectOnCancel ? reject : resolve;\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\tlastExec = Date.now();\n\t\t\t\tisLeading = true;\n\t\t\t\tresolve(invoke());\n\t\t\t\tclear();\n\t\t\t}, Math.max(0, duration - elapsed));\n\t\t});\n\t\tif (!leading && !timer) timer = setTimeout(() => isLeading = true, duration);\n\t\tisLeading = false;\n\t\treturn lastValue;\n\t};\n\treturn filter;\n}\n/**\n* EventFilter that gives extra controls to pause and resume the filter\n*\n* @param extendFilter  Extra filter to apply when the PausableFilter is active, default to none\n* @param options Options to configure the filter\n*/\nfunction pausableFilter(extendFilter = bypassFilter, options = {}) {\n\tconst { initialState = \"active\" } = options;\n\tconst isActive = toRef(initialState === \"active\");\n\tfunction pause() {\n\t\tisActive.value = false;\n\t}\n\tfunction resume() {\n\t\tisActive.value = true;\n\t}\n\tconst eventFilter = (...args) => {\n\t\tif (isActive.value) extendFilter(...args);\n\t};\n\treturn {\n\t\tisActive: shallowReadonly(isActive),\n\t\tpause,\n\t\tresume,\n\t\teventFilter\n\t};\n}\n//#endregion\n//#region utils/general.ts\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n\treturn new Promise((resolve, reject) => {\n\t\tif (throwOnTimeout) setTimeout(reject, ms, reason);\n\t\telse setTimeout(resolve, ms);\n\t});\n}\nfunction identity(arg) {\n\treturn arg;\n}\n/**\n* Create singleton promise function\n*\n* @example\n* ```\n* const promise = createSingletonPromise(async () => { ... })\n*\n* await promise()\n* await promise() // all of them will be bind to a single promise instance\n* await promise() // and be resolved together\n* ```\n*/\nfunction createSingletonPromise(fn) {\n\tlet _promise;\n\tfunction wrapper() {\n\t\tif (!_promise) _promise = fn();\n\t\treturn _promise;\n\t}\n\twrapper.reset = async () => {\n\t\tconst _prev = _promise;\n\t\t_promise = void 0;\n\t\tif (_prev) await _prev;\n\t};\n\treturn wrapper;\n}\nfunction invoke(fn) {\n\treturn fn();\n}\nfunction containsProp(obj, ...props) {\n\treturn props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n\tvar _target$match;\n\tif (typeof target === \"number\") return target + delta;\n\tconst value = ((_target$match = target.match(/^-?\\d+\\.?\\d*/)) === null || _target$match === void 0 ? void 0 : _target$match[0]) || \"\";\n\tconst unit = target.slice(value.length);\n\tconst result = Number.parseFloat(value) + delta;\n\tif (Number.isNaN(result)) return target;\n\treturn result + unit;\n}\n/**\n* Get a px value for SSR use, do not rely on this method outside of SSR as REM unit is assumed at 16px, which might not be the case on the client\n*/\nfunction pxValue(px) {\n\treturn px.endsWith(\"rem\") ? Number.parseFloat(px) * 16 : Number.parseFloat(px);\n}\n/**\n* Create a new subset object by giving keys\n*/\nfunction objectPick(obj, keys, omitUndefined = false) {\n\treturn keys.reduce((n, k) => {\n\t\tif (k in obj) {\n\t\t\tif (!omitUndefined || obj[k] !== void 0) n[k] = obj[k];\n\t\t}\n\t\treturn n;\n\t}, {});\n}\n/**\n* Create a new subset object by omit giving keys\n*/\nfunction objectOmit(obj, keys, omitUndefined = false) {\n\treturn Object.fromEntries(Object.entries(obj).filter(([key, value]) => {\n\t\treturn (!omitUndefined || value !== void 0) && !keys.includes(key);\n\t}));\n}\nfunction objectEntries(obj) {\n\treturn Object.entries(obj);\n}\nfunction toArray(value) {\n\treturn Array.isArray(value) ? value : [value];\n}\n//#endregion\n//#region utils/port.ts\nfunction cacheStringFunction(fn) {\n\tconst cache = Object.create(null);\n\treturn ((str) => {\n\t\treturn cache[str] || (cache[str] = fn(str));\n\t});\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\treturn str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n});\n//#endregion\n//#region utils/vue.ts\nfunction getLifeCycleTarget(target) {\n\treturn target || getCurrentInstance();\n}\n//#endregion\n//#region createSharedComposable/index.ts\n/**\n* Make a composable function usable with multiple Vue instances.\n*\n* @see https://vueuse.org/createSharedComposable\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createSharedComposable(composable) {\n\tif (!isClient) return composable;\n\tlet subscribers = 0;\n\tlet state;\n\tlet scope;\n\tconst dispose = () => {\n\t\tsubscribers -= 1;\n\t\tif (scope && subscribers <= 0) {\n\t\t\tscope.stop();\n\t\t\tstate = void 0;\n\t\t\tscope = void 0;\n\t\t}\n\t};\n\treturn ((...args) => {\n\t\tsubscribers += 1;\n\t\tif (!scope) {\n\t\t\tscope = effectScope(true);\n\t\t\tstate = scope.run(() => composable(...args));\n\t\t}\n\t\ttryOnScopeDispose(dispose);\n\t\treturn state;\n\t});\n}\n//#endregion\n//#region extendRef/index.ts\nfunction extendRef(ref, extend, { enumerable = false, unwrap = true } = {}) {\n\tfor (const [key, value] of Object.entries(extend)) {\n\t\tif (key === \"value\") continue;\n\t\tif (isRef(value) && unwrap) Object.defineProperty(ref, key, {\n\t\t\tget() {\n\t\t\t\treturn value.value;\n\t\t\t},\n\t\t\tset(v) {\n\t\t\t\tvalue.value = v;\n\t\t\t},\n\t\t\tenumerable\n\t\t});\n\t\telse Object.defineProperty(ref, key, {\n\t\t\tvalue,\n\t\t\tenumerable\n\t\t});\n\t}\n\treturn ref;\n}\n//#endregion\n//#region get/index.ts\nfunction get(obj, key) {\n\tif (key == null) return unref(obj);\n\treturn unref(obj)[key];\n}\n//#endregion\n//#region isDefined/index.ts\nfunction isDefined(v) {\n\treturn unref(v) != null;\n}\n//#endregion\n//#region makeDestructurable/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction makeDestructurable(obj, arr) {\n\tif (typeof Symbol !== \"undefined\") {\n\t\tconst clone = { ...obj };\n\t\tObject.defineProperty(clone, Symbol.iterator, {\n\t\t\tenumerable: false,\n\t\t\tvalue() {\n\t\t\t\tlet index = 0;\n\t\t\t\treturn { next: () => ({\n\t\t\t\t\tvalue: arr[index++],\n\t\t\t\t\tdone: index > arr.length\n\t\t\t\t}) };\n\t\t\t}\n\t\t});\n\t\treturn clone;\n\t} else return Object.assign([...arr], obj);\n}\n//#endregion\n//#region reactify/index.ts\n/**\n* Converts plain function into a reactive function.\n* The converted function accepts refs as it's arguments\n* and returns a ComputedRef, with proper typing.\n*\n* @param fn - Source function\n* @param options - Options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction reactify(fn, options) {\n\tconst unrefFn = (options === null || options === void 0 ? void 0 : options.computedGetter) === false ? unref : toValue;\n\treturn function(...args) {\n\t\treturn computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n\t};\n}\n/** @deprecated use `reactify` instead */\nconst createReactiveFn = reactify;\n//#endregion\n//#region reactifyObject/index.ts\n/**\n* Apply `reactify` to an object\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n\tlet keys = [];\n\tlet options;\n\tif (Array.isArray(optionsOrKeys)) keys = optionsOrKeys;\n\telse {\n\t\toptions = optionsOrKeys;\n\t\tconst { includeOwnProperties = true } = optionsOrKeys;\n\t\tkeys.push(...Object.keys(obj));\n\t\tif (includeOwnProperties) keys.push(...Object.getOwnPropertyNames(obj));\n\t}\n\treturn Object.fromEntries(keys.map((key) => {\n\t\tconst value = obj[key];\n\t\treturn [key, typeof value === \"function\" ? reactify(value.bind(obj), options) : value];\n\t}));\n}\n//#endregion\n//#region toReactive/index.ts\n/**\n* Converts ref to reactive.\n*\n* @see https://vueuse.org/toReactive\n* @param objectRef A ref of object\n*/\nfunction toReactive(objectRef) {\n\tif (!isRef(objectRef)) return reactive(objectRef);\n\treturn reactive(new Proxy({}, {\n\t\tget(_, p, receiver) {\n\t\t\treturn unref(Reflect.get(objectRef.value, p, receiver));\n\t\t},\n\t\tset(_, p, value) {\n\t\t\tif (isRef(objectRef.value[p]) && !isRef(value)) objectRef.value[p].value = value;\n\t\t\telse objectRef.value[p] = value;\n\t\t\treturn true;\n\t\t},\n\t\tdeleteProperty(_, p) {\n\t\t\treturn Reflect.deleteProperty(objectRef.value, p);\n\t\t},\n\t\thas(_, p) {\n\t\t\treturn Reflect.has(objectRef.value, p);\n\t\t},\n\t\townKeys() {\n\t\t\treturn Object.keys(objectRef.value);\n\t\t},\n\t\tgetOwnPropertyDescriptor() {\n\t\t\treturn {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true\n\t\t\t};\n\t\t}\n\t}));\n}\n//#endregion\n//#region reactiveComputed/index.ts\n/**\n* Computed reactive object.\n*/\nfunction reactiveComputed(fn) {\n\treturn toReactive(computed(fn));\n}\n//#endregion\n//#region reactiveOmit/index.ts\n/**\n* Reactively omit fields from a reactive object\n*\n* @see https://vueuse.org/reactiveOmit\n*/\nfunction reactiveOmit(obj, ...keys) {\n\tconst flatKeys = keys.flat();\n\tconst predicate = flatKeys[0];\n\treturn reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => !predicate(toValue(v), k))) : Object.fromEntries(Object.entries(toRefs$1(obj)).filter((e) => !flatKeys.includes(e[0]))));\n}\n//#endregion\n//#region reactivePick/index.ts\n/**\n* Reactively pick fields from a reactive object\n*\n* @see https://vueuse.org/reactivePick\n*/\nfunction reactivePick(obj, ...keys) {\n\tconst flatKeys = keys.flat();\n\tconst predicate = flatKeys[0];\n\treturn reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => predicate(toValue(v), k))) : Object.fromEntries(flatKeys.map((k) => [k, toRef(obj, k)])));\n}\n//#endregion\n//#region refAutoReset/index.ts\n/**\n* Create a ref which will be reset to the default value after some time.\n*\n* @see https://vueuse.org/refAutoReset\n* @param defaultValue The value which will be set.\n* @param afterMs      A zero-or-greater delay in milliseconds.\n*/\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n\treturn customRef((track, trigger) => {\n\t\tlet value = toValue(defaultValue);\n\t\tlet timer;\n\t\tconst resetAfter = () => setTimeout(() => {\n\t\t\tvalue = toValue(defaultValue);\n\t\t\ttrigger();\n\t\t}, toValue(afterMs));\n\t\ttryOnScopeDispose(() => {\n\t\t\tclearTimeout(timer);\n\t\t});\n\t\treturn {\n\t\t\tget() {\n\t\t\t\ttrack();\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\tset(newValue) {\n\t\t\t\tvalue = newValue;\n\t\t\t\ttrigger();\n\t\t\t\tclearTimeout(timer);\n\t\t\t\ttimer = resetAfter();\n\t\t\t}\n\t\t};\n\t});\n}\n/** @deprecated use `refAutoReset` instead */\nconst autoResetRef = refAutoReset;\n//#endregion\n//#region useDebounceFn/index.ts\n/**\n* Debounce execution of a function.\n*\n* @see https://vueuse.org/useDebounceFn\n* @param  fn          A function to be executed after delay milliseconds debounced.\n* @param  ms          A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n* @param  options     Options\n*\n* @return A new, debounced, function with isPending, cancel, and flush properties.\n*/\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n\treturn createFilterWrapper(debounceFilter(ms, options), fn);\n}\n//#endregion\n//#region refDebounced/index.ts\n/**\n* Debounce updates of a ref.\n*\n* @return A new debounced ref.\n*/\nfunction refDebounced(value, ms = 200, options = {}) {\n\tconst debounced = ref(toValue(value));\n\tconst updater = useDebounceFn(() => {\n\t\tdebounced.value = value.value;\n\t}, ms, options);\n\twatch(value, () => updater());\n\treturn shallowReadonly(debounced);\n}\n/** @deprecated use `refDebounced` instead */\nconst debouncedRef = refDebounced;\n/** @deprecated use `refDebounced` instead */\nconst useDebounce = refDebounced;\n//#endregion\n//#region refDefault/index.ts\n/**\n* Apply default value to a ref.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction refDefault(source, defaultValue) {\n\treturn computed({\n\t\tget() {\n\t\t\tvar _source$value;\n\t\t\treturn (_source$value = source.value) !== null && _source$value !== void 0 ? _source$value : defaultValue;\n\t\t},\n\t\tset(value) {\n\t\t\tsource.value = value;\n\t\t}\n\t});\n}\n//#endregion\n//#region refManualReset/index.ts\n/**\n* Create a ref with manual reset functionality.\n*\n* @see https://vueuse.org/refManualReset\n* @param defaultValue The value which will be set.\n*/\nfunction refManualReset(defaultValue) {\n\tlet value = toValue(defaultValue);\n\tlet trigger;\n\tconst reset = () => {\n\t\tvalue = toValue(defaultValue);\n\t\ttrigger();\n\t};\n\tconst refValue = customRef((track, _trigger) => {\n\t\ttrigger = _trigger;\n\t\treturn {\n\t\t\tget() {\n\t\t\t\ttrack();\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\tset(newValue) {\n\t\t\t\tvalue = newValue;\n\t\t\t\ttrigger();\n\t\t\t}\n\t\t};\n\t});\n\trefValue.reset = reset;\n\treturn refValue;\n}\n//#endregion\n//#region useThrottleFn/index.ts\n/**\n* Throttle execution of a function. Especially useful for rate limiting\n* execution of handlers on events like resize and scroll.\n*\n* @param   fn             A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n*                                    to `callback` when the throttled-function is executed.\n* @param   ms             A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n*                                    (default value: 200)\n*\n* @param [trailing] if true, call fn again after the time is up (default value: false)\n*\n* @param [leading] if true, call fn on the leading edge of the ms timeout (default value: true)\n*\n* @param [rejectOnCancel] if true, reject the last call if it's been cancel (default value: false)\n*\n* @return  A new, throttled, function.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {\n\treturn createFilterWrapper(throttleFilter(ms, trailing, leading, rejectOnCancel), fn);\n}\n//#endregion\n//#region refThrottled/index.ts\n/**\n* Throttle execution of a function. Especially useful for rate limiting\n* execution of handlers on events like resize and scroll.\n*\n* @param value Ref value to be watched with throttle effect\n* @param  delay  A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n* @param trailing if true, update the value again after the delay time is up\n* @param leading if true, update the value on the leading edge of the ms timeout\n*/\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n\tif (delay <= 0) return value;\n\tconst throttled = ref(toValue(value));\n\tconst updater = useThrottleFn(() => {\n\t\tthrottled.value = value.value;\n\t}, delay, trailing, leading);\n\twatch(value, () => updater());\n\treturn throttled;\n}\n/** @deprecated use `refThrottled` instead */\nconst throttledRef = refThrottled;\n/** @deprecated use `refThrottled` instead */\nconst useThrottle = refThrottled;\n//#endregion\n//#region refWithControl/index.ts\n/**\n* Fine-grained controls over ref and its reactivity.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction refWithControl(initial, options = {}) {\n\tlet source = initial;\n\tlet track;\n\tlet trigger;\n\tconst ref = customRef((_track, _trigger) => {\n\t\ttrack = _track;\n\t\ttrigger = _trigger;\n\t\treturn {\n\t\t\tget() {\n\t\t\t\treturn get();\n\t\t\t},\n\t\t\tset(v) {\n\t\t\t\tset(v);\n\t\t\t}\n\t\t};\n\t});\n\tfunction get(tracking = true) {\n\t\tif (tracking) track();\n\t\treturn source;\n\t}\n\tfunction set(value, triggering = true) {\n\t\tvar _options$onBeforeChan, _options$onChanged;\n\t\tif (value === source) return;\n\t\tconst old = source;\n\t\tif (((_options$onBeforeChan = options.onBeforeChange) === null || _options$onBeforeChan === void 0 ? void 0 : _options$onBeforeChan.call(options, value, old)) === false) return;\n\t\tsource = value;\n\t\t(_options$onChanged = options.onChanged) === null || _options$onChanged === void 0 || _options$onChanged.call(options, value, old);\n\t\tif (triggering) trigger();\n\t}\n\t/**\n\t* Get the value without tracked in the reactivity system\n\t*/\n\tconst untrackedGet = () => get(false);\n\t/**\n\t* Set the value without triggering the reactivity system\n\t*/\n\tconst silentSet = (v) => set(v, false);\n\t/**\n\t* Get the value without tracked in the reactivity system.\n\t*\n\t* Alias for `untrackedGet()`\n\t*/\n\tconst peek = () => get(false);\n\t/**\n\t* Set the value without triggering the reactivity system\n\t*\n\t* Alias for `silentSet(v)`\n\t*/\n\tconst lay = (v) => set(v, false);\n\treturn extendRef(ref, {\n\t\tget,\n\t\tset,\n\t\tuntrackedGet,\n\t\tsilentSet,\n\t\tpeek,\n\t\tlay\n\t}, { enumerable: true });\n}\n/** @deprecated use `refWithControl` instead */\nconst controlledRef = refWithControl;\n//#endregion\n//#region set/index.ts\n/**\n*  Shorthand for `ref.value = x`\n*/\nfunction set(...args) {\n\tif (args.length === 2) {\n\t\tconst [ref, value] = args;\n\t\tref.value = value;\n\t}\n\tif (args.length === 3) {\n\t\tconst [target, key, value] = args;\n\t\ttarget[key] = value;\n\t}\n}\n//#endregion\n//#region watchWithFilter/index.ts\nfunction watchWithFilter(source, cb, options = {}) {\n\tconst { eventFilter = bypassFilter, ...watchOptions } = options;\n\treturn watch(source, createFilterWrapper(eventFilter, cb), watchOptions);\n}\n//#endregion\n//#region watchPausable/index.ts\n/** @deprecated Use Vue's built-in `watch` instead. This function will be removed in future version. */\nfunction watchPausable(source, cb, options = {}) {\n\tconst { eventFilter: filter, initialState = \"active\", ...watchOptions } = options;\n\tconst { eventFilter, pause, resume, isActive } = pausableFilter(filter, { initialState });\n\treturn {\n\t\tstop: watchWithFilter(source, cb, {\n\t\t\t...watchOptions,\n\t\t\teventFilter\n\t\t}),\n\t\tpause,\n\t\tresume,\n\t\tisActive\n\t};\n}\n/** @deprecated Use Vue's built-in `watch` instead. This function will be removed in future version. */\nconst pausableWatch = watchPausable;\n//#endregion\n//#region syncRef/index.ts\n/**\n* Two-way refs synchronization.\n* From the set theory perspective to restrict the option's type\n* Check in the following order:\n* 1. L = R\n* 2. L ∩ R ≠ ∅\n* 3. L ⊆ R\n* 4. L ∩ R = ∅\n*/\nfunction syncRef(left, right, ...[options]) {\n\tconst { flush = \"sync\", deep = false, immediate = true, direction = \"both\", transform = {} } = options || {};\n\tconst watchers = [];\n\tconst transformLTR = \"ltr\" in transform && transform.ltr || ((v) => v);\n\tconst transformRTL = \"rtl\" in transform && transform.rtl || ((v) => v);\n\tif (direction === \"both\" || direction === \"ltr\") watchers.push(watchPausable(left, (newValue) => {\n\t\twatchers.forEach((w) => w.pause());\n\t\tright.value = transformLTR(newValue);\n\t\twatchers.forEach((w) => w.resume());\n\t}, {\n\t\tflush,\n\t\tdeep,\n\t\timmediate\n\t}));\n\tif (direction === \"both\" || direction === \"rtl\") watchers.push(watchPausable(right, (newValue) => {\n\t\twatchers.forEach((w) => w.pause());\n\t\tleft.value = transformRTL(newValue);\n\t\twatchers.forEach((w) => w.resume());\n\t}, {\n\t\tflush,\n\t\tdeep,\n\t\timmediate\n\t}));\n\tconst stop = () => {\n\t\twatchers.forEach((w) => w.stop());\n\t};\n\treturn stop;\n}\n//#endregion\n//#region syncRefs/index.ts\n/**\n* Keep target ref(s) in sync with the source ref\n*\n* @param source source ref\n* @param targets\n*/\nfunction syncRefs(source, targets, options = {}) {\n\tconst { flush = \"sync\", deep = false, immediate = true } = options;\n\tconst targetsArray = toArray(targets);\n\treturn watch(source, (newValue) => targetsArray.forEach((target) => target.value = newValue), {\n\t\tflush,\n\t\tdeep,\n\t\timmediate\n\t});\n}\n//#endregion\n//#region toRefs/index.ts\n/**\n* Extended `toRefs` that also accepts refs of an object.\n*\n* @see https://vueuse.org/toRefs\n* @param objectRef A ref or normal object or array.\n* @param options Options\n*/\nfunction toRefs(objectRef, options = {}) {\n\tif (!isRef(objectRef)) return toRefs$1(objectRef);\n\tconst result = Array.isArray(objectRef.value) ? Array.from({ length: objectRef.value.length }) : {};\n\tfor (const key in objectRef.value) result[key] = customRef(() => ({\n\t\tget() {\n\t\t\treturn objectRef.value[key];\n\t\t},\n\t\tset(v) {\n\t\t\tvar _toValue;\n\t\t\tif ((_toValue = toValue(options.replaceRef)) !== null && _toValue !== void 0 ? _toValue : true) if (Array.isArray(objectRef.value)) {\n\t\t\t\tconst copy = [...objectRef.value];\n\t\t\t\tcopy[key] = v;\n\t\t\t\tobjectRef.value = copy;\n\t\t\t} else {\n\t\t\t\tconst newObject = {\n\t\t\t\t\t...objectRef.value,\n\t\t\t\t\t[key]: v\n\t\t\t\t};\n\t\t\t\tObject.setPrototypeOf(newObject, Object.getPrototypeOf(objectRef.value));\n\t\t\t\tobjectRef.value = newObject;\n\t\t\t}\n\t\t\telse objectRef.value[key] = v;\n\t\t}\n\t}));\n\treturn result;\n}\n//#endregion\n//#region tryOnBeforeMount/index.ts\n/**\n* Call onBeforeMount() if it's inside a component lifecycle, if not, just call the function\n*\n* @param fn\n* @param sync if set to false, it will run in the nextTick() of Vue\n* @param target\n*/\nfunction tryOnBeforeMount(fn, sync = true, target) {\n\tif (getLifeCycleTarget(target)) onBeforeMount(fn, target);\n\telse if (sync) fn();\n\telse nextTick(fn);\n}\n//#endregion\n//#region tryOnBeforeUnmount/index.ts\n/**\n* Call onBeforeUnmount() if it's inside a component lifecycle, if not, do nothing\n*\n* @param fn\n* @param target\n*/\nfunction tryOnBeforeUnmount(fn, target) {\n\tif (getLifeCycleTarget(target)) onBeforeUnmount(fn, target);\n}\n//#endregion\n//#region tryOnMounted/index.ts\n/**\n* Call onMounted() if it's inside a component lifecycle, if not, just call the function\n*\n* @param fn\n* @param sync if set to false, it will run in the nextTick() of Vue\n* @param target\n*/\nfunction tryOnMounted(fn, sync = true, target) {\n\tif (getLifeCycleTarget(target)) onMounted(fn, target);\n\telse if (sync) fn();\n\telse nextTick(fn);\n}\n//#endregion\n//#region tryOnUnmounted/index.ts\n/**\n* Call onUnmounted() if it's inside a component lifecycle, if not, do nothing\n*\n* @param fn\n* @param target\n*/\nfunction tryOnUnmounted(fn, target) {\n\tif (getLifeCycleTarget(target)) onUnmounted(fn, target);\n}\n//#endregion\n//#region until/index.ts\nfunction createUntil(r, isNot = false) {\n\tfunction toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n\t\tlet stop = null;\n\t\tconst promises = [new Promise((resolve) => {\n\t\t\tstop = watch(r, (v) => {\n\t\t\t\tif (condition(v) !== isNot) {\n\t\t\t\t\tif (stop) stop();\n\t\t\t\t\telse nextTick(() => stop === null || stop === void 0 ? void 0 : stop());\n\t\t\t\t\tresolve(v);\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\tflush,\n\t\t\t\tdeep,\n\t\t\t\timmediate: true\n\t\t\t});\n\t\t})];\n\t\tif (timeout != null) promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => stop === null || stop === void 0 ? void 0 : stop()));\n\t\treturn Promise.race(promises);\n\t}\n\tfunction toBe(value, options) {\n\t\tif (!isRef(value)) return toMatch((v) => v === value, options);\n\t\tconst { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options !== null && options !== void 0 ? options : {};\n\t\tlet stop = null;\n\t\tconst promises = [new Promise((resolve) => {\n\t\t\tstop = watch([r, value], ([v1, v2]) => {\n\t\t\t\tif (isNot !== (v1 === v2)) {\n\t\t\t\t\tif (stop) stop();\n\t\t\t\t\telse nextTick(() => stop === null || stop === void 0 ? void 0 : stop());\n\t\t\t\t\tresolve(v1);\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\tflush,\n\t\t\t\tdeep,\n\t\t\t\timmediate: true\n\t\t\t});\n\t\t})];\n\t\tif (timeout != null) promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => {\n\t\t\tstop === null || stop === void 0 || stop();\n\t\t\treturn toValue(r);\n\t\t}));\n\t\treturn Promise.race(promises);\n\t}\n\tfunction toBeTruthy(options) {\n\t\treturn toMatch((v) => Boolean(v), options);\n\t}\n\tfunction toBeNull(options) {\n\t\treturn toBe(null, options);\n\t}\n\tfunction toBeUndefined(options) {\n\t\treturn toBe(void 0, options);\n\t}\n\tfunction toBeNaN(options) {\n\t\treturn toMatch(Number.isNaN, options);\n\t}\n\tfunction toContains(value, options) {\n\t\treturn toMatch((v) => {\n\t\t\tconst array = Array.from(v);\n\t\t\treturn array.includes(value) || array.includes(toValue(value));\n\t\t}, options);\n\t}\n\tfunction changed(options) {\n\t\treturn changedTimes(1, options);\n\t}\n\tfunction changedTimes(n = 1, options) {\n\t\tlet count = -1;\n\t\treturn toMatch(() => {\n\t\t\tcount += 1;\n\t\t\treturn count >= n;\n\t\t}, options);\n\t}\n\tif (Array.isArray(toValue(r))) return {\n\t\ttoMatch,\n\t\ttoContains,\n\t\tchanged,\n\t\tchangedTimes,\n\t\tget not() {\n\t\t\treturn createUntil(r, !isNot);\n\t\t}\n\t};\n\telse return {\n\t\ttoMatch,\n\t\ttoBe,\n\t\ttoBeTruthy,\n\t\ttoBeNull,\n\t\ttoBeNaN,\n\t\ttoBeUndefined,\n\t\tchanged,\n\t\tchangedTimes,\n\t\tget not() {\n\t\t\treturn createUntil(r, !isNot);\n\t\t}\n\t};\n}\nfunction until(r) {\n\treturn createUntil(r);\n}\n//#endregion\n//#region useArrayDifference/index.ts\nfunction defaultComparator(value, othVal) {\n\treturn value === othVal;\n}\n/**\n* Reactive get array difference of two array\n* @see https://vueuse.org/useArrayDifference\n* @returns - the difference of two array\n* @param args\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayDifference(...args) {\n\tvar _args$, _args$2;\n\tconst list = args[0];\n\tconst values = args[1];\n\tlet compareFn = (_args$ = args[2]) !== null && _args$ !== void 0 ? _args$ : defaultComparator;\n\tconst { symmetric = false } = (_args$2 = args[3]) !== null && _args$2 !== void 0 ? _args$2 : {};\n\tif (typeof compareFn === \"string\") {\n\t\tconst key = compareFn;\n\t\tcompareFn = (value, othVal) => value[key] === othVal[key];\n\t}\n\tconst diff1 = computed(() => toValue(list).filter((x) => toValue(values).findIndex((y) => compareFn(x, y)) === -1));\n\tif (symmetric) {\n\t\tconst diff2 = computed(() => toValue(values).filter((x) => toValue(list).findIndex((y) => compareFn(x, y)) === -1));\n\t\treturn computed(() => symmetric ? [...toValue(diff1), ...toValue(diff2)] : toValue(diff1));\n\t} else return diff1;\n}\n//#endregion\n//#region useArrayEvery/index.ts\n/**\n* Reactive `Array.every`\n*\n* @see https://vueuse.org/useArrayEvery\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns **true** if the `fn` function returns a **truthy** value for every element from the array. Otherwise, **false**.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayEvery(list, fn) {\n\treturn computed(() => toValue(list).every((element, index, array) => fn(toValue(element), index, array)));\n}\n//#endregion\n//#region useArrayFilter/index.ts\n/**\n* Reactive `Array.filter`\n*\n* @see https://vueuse.org/useArrayFilter\n* @param list - the array was called upon.\n* @param fn - a function that is called for every element of the given `list`. Each time `fn` executes, the returned value is added to the new array.\n*\n* @returns a shallow copy of a portion of the given array, filtered down to just the elements from the given array that pass the test implemented by the provided function. If no elements pass the test, an empty array will be returned.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayFilter(list, fn) {\n\treturn computed(() => toValue(list).map((i) => toValue(i)).filter(fn));\n}\n//#endregion\n//#region useArrayFind/index.ts\n/**\n* Reactive `Array.find`\n*\n* @see https://vueuse.org/useArrayFind\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns the first element in the array that satisfies the provided testing function. Otherwise, undefined is returned.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayFind(list, fn) {\n\treturn computed(() => toValue(toValue(list).find((element, index, array) => fn(toValue(element), index, array))));\n}\n//#endregion\n//#region useArrayFindIndex/index.ts\n/**\n* Reactive `Array.findIndex`\n*\n* @see https://vueuse.org/useArrayFindIndex\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns the index of the first element in the array that passes the test. Otherwise, \"-1\".\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayFindIndex(list, fn) {\n\treturn computed(() => toValue(list).findIndex((element, index, array) => fn(toValue(element), index, array)));\n}\n//#endregion\n//#region useArrayFindLast/index.ts\nfunction findLast(arr, cb) {\n\tlet index = arr.length;\n\twhile (index-- > 0) if (cb(arr[index], index, arr)) return arr[index];\n}\n/**\n* Reactive `Array.findLast`\n*\n* @see https://vueuse.org/useArrayFindLast\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns the last element in the array that satisfies the provided testing function. Otherwise, undefined is returned.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayFindLast(list, fn) {\n\treturn computed(() => toValue(!Array.prototype.findLast ? findLast(toValue(list), (element, index, array) => fn(toValue(element), index, array)) : toValue(list).findLast((element, index, array) => fn(toValue(element), index, array))));\n}\n//#endregion\n//#region useArrayIncludes/index.ts\nfunction isArrayIncludesOptions(obj) {\n\treturn isObject(obj) && containsProp(obj, \"formIndex\", \"comparator\");\n}\n/**\n* Reactive `Array.includes`\n*\n* @see https://vueuse.org/useArrayIncludes\n*\n* @returns true if the `value` is found in the array. Otherwise, false.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayIncludes(...args) {\n\tvar _comparator;\n\tconst list = args[0];\n\tconst value = args[1];\n\tlet comparator = args[2];\n\tlet formIndex = 0;\n\tif (isArrayIncludesOptions(comparator)) {\n\t\tvar _comparator$fromIndex;\n\t\tformIndex = (_comparator$fromIndex = comparator.fromIndex) !== null && _comparator$fromIndex !== void 0 ? _comparator$fromIndex : 0;\n\t\tcomparator = comparator.comparator;\n\t}\n\tif (typeof comparator === \"string\") {\n\t\tconst key = comparator;\n\t\tcomparator = (element, value) => element[key] === toValue(value);\n\t}\n\tcomparator = (_comparator = comparator) !== null && _comparator !== void 0 ? _comparator : ((element, value) => element === toValue(value));\n\treturn computed(() => toValue(list).slice(formIndex).some((element, index, array) => comparator(toValue(element), toValue(value), index, toValue(array))));\n}\n//#endregion\n//#region useArrayJoin/index.ts\n/**\n* Reactive `Array.join`\n*\n* @see https://vueuse.org/useArrayJoin\n* @param list - the array was called upon.\n* @param separator - a string to separate each pair of adjacent elements of the array. If omitted, the array elements are separated with a comma (\",\").\n*\n* @returns a string with all array elements joined. If arr.length is 0, the empty string is returned.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayJoin(list, separator) {\n\treturn computed(() => toValue(list).map((i) => toValue(i)).join(toValue(separator)));\n}\n//#endregion\n//#region useArrayMap/index.ts\n/**\n* Reactive `Array.map`\n*\n* @see https://vueuse.org/useArrayMap\n* @param list - the array was called upon.\n* @param fn - a function that is called for every element of the given `list`. Each time `fn` executes, the returned value is added to the new array.\n*\n* @returns a new array with each element being the result of the callback function.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayMap(list, fn) {\n\treturn computed(() => toValue(list).map((i) => toValue(i)).map(fn));\n}\n//#endregion\n//#region useArrayReduce/index.ts\n/**\n* Reactive `Array.reduce`\n*\n* @see https://vueuse.org/useArrayReduce\n* @param list - the array was called upon.\n* @param reducer - a \"reducer\" function.\n* @param args\n*\n* @returns the value that results from running the \"reducer\" callback function to completion over the entire array.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayReduce(list, reducer, ...args) {\n\tconst reduceCallback = (sum, value, index) => reducer(toValue(sum), toValue(value), index);\n\treturn computed(() => {\n\t\tconst resolved = toValue(list);\n\t\treturn args.length ? resolved.reduce(reduceCallback, typeof args[0] === \"function\" ? toValue(args[0]()) : toValue(args[0])) : resolved.reduce(reduceCallback);\n\t});\n}\n//#endregion\n//#region useArraySome/index.ts\n/**\n* Reactive `Array.some`\n*\n* @see https://vueuse.org/useArraySome\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns **true** if the `fn` function returns a **truthy** value for any element from the array. Otherwise, **false**.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArraySome(list, fn) {\n\treturn computed(() => toValue(list).some((element, index, array) => fn(toValue(element), index, array)));\n}\n//#endregion\n//#region useArrayUnique/index.ts\nfunction uniq(array) {\n\treturn Array.from(new Set(array));\n}\nfunction uniqueElementsBy(array, fn) {\n\treturn array.reduce((acc, v) => {\n\t\tif (!acc.some((x) => fn(v, x, array))) acc.push(v);\n\t\treturn acc;\n\t}, []);\n}\n/**\n* reactive unique array\n* @see https://vueuse.org/useArrayUnique\n* @param list - the array was called upon.\n* @param compareFn\n* @returns A computed ref that returns a unique array of items.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayUnique(list, compareFn) {\n\treturn computed(() => {\n\t\tconst resolvedList = toValue(list).map((element) => toValue(element));\n\t\treturn compareFn ? uniqueElementsBy(resolvedList, compareFn) : uniq(resolvedList);\n\t});\n}\n//#endregion\n//#region useCounter/index.ts\n/**\n* Basic counter with utility functions.\n*\n* @see https://vueuse.org/useCounter\n* @param [initialValue]\n* @param options\n*/\nfunction useCounter(initialValue = 0, options = {}) {\n\tlet _initialValue = unref(initialValue);\n\tconst count = shallowRef(initialValue);\n\tconst { max = Number.POSITIVE_INFINITY, min = Number.NEGATIVE_INFINITY } = options;\n\tconst inc = (delta = 1) => count.value = Math.max(Math.min(max, count.value + delta), min);\n\tconst dec = (delta = 1) => count.value = Math.min(Math.max(min, count.value - delta), max);\n\tconst get = () => count.value;\n\tconst set = (val) => count.value = Math.max(min, Math.min(max, val));\n\tconst reset = (val = _initialValue) => {\n\t\t_initialValue = val;\n\t\treturn set(val);\n\t};\n\treturn {\n\t\tcount: shallowReadonly(count),\n\t\tinc,\n\t\tdec,\n\t\tget,\n\t\tset,\n\t\treset\n\t};\n}\n//#endregion\n//#region useDateFormat/index.ts\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\tlet m = hours < 12 ? \"AM\" : \"PM\";\n\tif (hasPeriod) m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n\treturn isLowercase ? m.toLowerCase() : m;\n}\nfunction formatOrdinal(num) {\n\tconst suffixes = [\n\t\t\"th\",\n\t\t\"st\",\n\t\t\"nd\",\n\t\t\"rd\"\n\t];\n\tconst v = num % 100;\n\treturn num + (suffixes[(v - 20) % 10] || suffixes[v] || suffixes[0]);\n}\nfunction formatDate(date, formatStr, options = {}) {\n\tvar _options$customMeridi;\n\tconst years = date.getFullYear();\n\tconst month = date.getMonth();\n\tconst days = date.getDate();\n\tconst hours = date.getHours();\n\tconst minutes = date.getMinutes();\n\tconst seconds = date.getSeconds();\n\tconst milliseconds = date.getMilliseconds();\n\tconst day = date.getDay();\n\tconst meridiem = (_options$customMeridi = options.customMeridiem) !== null && _options$customMeridi !== void 0 ? _options$customMeridi : defaultMeridiem;\n\tconst stripTimeZone = (dateString) => {\n\t\tvar _dateString$split$;\n\t\treturn (_dateString$split$ = dateString.split(\" \")[1]) !== null && _dateString$split$ !== void 0 ? _dateString$split$ : \"\";\n\t};\n\tconst matches = {\n\t\tYo: () => formatOrdinal(years),\n\t\tYY: () => String(years).slice(-2),\n\t\tYYYY: () => years,\n\t\tM: () => month + 1,\n\t\tMo: () => formatOrdinal(month + 1),\n\t\tMM: () => `${month + 1}`.padStart(2, \"0\"),\n\t\tMMM: () => date.toLocaleDateString(toValue(options.locales), { month: \"short\" }),\n\t\tMMMM: () => date.toLocaleDateString(toValue(options.locales), { month: \"long\" }),\n\t\tD: () => String(days),\n\t\tDo: () => formatOrdinal(days),\n\t\tDD: () => `${days}`.padStart(2, \"0\"),\n\t\tH: () => String(hours),\n\t\tHo: () => formatOrdinal(hours),\n\t\tHH: () => `${hours}`.padStart(2, \"0\"),\n\t\th: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n\t\tho: () => formatOrdinal(hours % 12 || 12),\n\t\thh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n\t\tm: () => String(minutes),\n\t\tmo: () => formatOrdinal(minutes),\n\t\tmm: () => `${minutes}`.padStart(2, \"0\"),\n\t\ts: () => String(seconds),\n\t\tso: () => formatOrdinal(seconds),\n\t\tss: () => `${seconds}`.padStart(2, \"0\"),\n\t\tSSS: () => `${milliseconds}`.padStart(3, \"0\"),\n\t\td: () => day,\n\t\tdd: () => date.toLocaleDateString(toValue(options.locales), { weekday: \"narrow\" }),\n\t\tddd: () => date.toLocaleDateString(toValue(options.locales), { weekday: \"short\" }),\n\t\tdddd: () => date.toLocaleDateString(toValue(options.locales), { weekday: \"long\" }),\n\t\tA: () => meridiem(hours, minutes),\n\t\tAA: () => meridiem(hours, minutes, false, true),\n\t\ta: () => meridiem(hours, minutes, true),\n\t\taa: () => meridiem(hours, minutes, true, true),\n\t\tz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: \"shortOffset\" })),\n\t\tzz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: \"shortOffset\" })),\n\t\tzzz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: \"shortOffset\" })),\n\t\tzzzz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: \"longOffset\" }))\n\t};\n\treturn formatStr.replace(REGEX_FORMAT, (match, $1) => {\n\t\tvar _ref, _matches$match;\n\t\treturn (_ref = $1 !== null && $1 !== void 0 ? $1 : (_matches$match = matches[match]) === null || _matches$match === void 0 ? void 0 : _matches$match.call(matches)) !== null && _ref !== void 0 ? _ref : match;\n\t});\n}\nfunction normalizeDate(date) {\n\tif (date === null) return /* @__PURE__ */ new Date(NaN);\n\tif (date === void 0) return /* @__PURE__ */ new Date();\n\tif (date instanceof Date) return new Date(date);\n\tif (typeof date === \"string\" && !/Z$/i.test(date)) {\n\t\tconst d = date.match(REGEX_PARSE);\n\t\tif (d) {\n\t\t\tconst m = d[2] - 1 || 0;\n\t\t\tconst ms = (d[7] || \"0\").substring(0, 3);\n\t\t\treturn new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n\t\t}\n\t}\n\treturn new Date(date);\n}\n/**\n* Get the formatted date according to the string of tokens passed in.\n*\n* @see https://vueuse.org/useDateFormat\n* @param date - The date to format, can either be a `Date` object, a timestamp, or a string\n* @param formatStr - The combination of tokens to format the date\n* @param options - UseDateFormatOptions\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n\treturn computed(() => formatDate(normalizeDate(toValue(date)), toValue(formatStr), options));\n}\n//#endregion\n//#region useIntervalFn/index.ts\n/**\n* Wrapper for `setInterval` with controls\n*\n* @see https://vueuse.org/useIntervalFn\n* @param cb\n* @param interval\n* @param options\n*/\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n\tconst { immediate = true, immediateCallback = false } = options;\n\tlet timer = null;\n\tconst isActive = shallowRef(false);\n\tfunction clean() {\n\t\tif (timer) {\n\t\t\tclearInterval(timer);\n\t\t\ttimer = null;\n\t\t}\n\t}\n\tfunction pause() {\n\t\tisActive.value = false;\n\t\tclean();\n\t}\n\tfunction resume() {\n\t\tconst intervalValue = toValue(interval);\n\t\tif (intervalValue <= 0) return;\n\t\tisActive.value = true;\n\t\tif (immediateCallback) cb();\n\t\tclean();\n\t\tif (isActive.value) timer = setInterval(cb, intervalValue);\n\t}\n\tif (immediate && isClient) resume();\n\tif (isRef(interval) || typeof interval === \"function\") tryOnScopeDispose(watch(interval, () => {\n\t\tif (isActive.value && isClient) resume();\n\t}));\n\ttryOnScopeDispose(pause);\n\treturn {\n\t\tisActive: shallowReadonly(isActive),\n\t\tpause,\n\t\tresume\n\t};\n}\n//#endregion\n//#region useInterval/index.ts\nfunction useInterval(interval = 1e3, options = {}) {\n\tconst { controls: exposeControls = false, immediate = true, callback } = options;\n\tconst counter = shallowRef(0);\n\tconst update = () => counter.value += 1;\n\tconst reset = () => {\n\t\tcounter.value = 0;\n\t};\n\tconst controls = useIntervalFn(callback ? () => {\n\t\tupdate();\n\t\tcallback(counter.value);\n\t} : update, interval, { immediate });\n\tif (exposeControls) return {\n\t\tcounter: shallowReadonly(counter),\n\t\treset,\n\t\t...controls\n\t};\n\telse return shallowReadonly(counter);\n}\n//#endregion\n//#region useLastChanged/index.ts\nfunction useLastChanged(source, options = {}) {\n\tvar _options$initialValue;\n\tconst ms = shallowRef((_options$initialValue = options.initialValue) !== null && _options$initialValue !== void 0 ? _options$initialValue : null);\n\twatch(source, () => ms.value = timestamp(), options);\n\treturn shallowReadonly(ms);\n}\n//#endregion\n//#region useTimeoutFn/index.ts\n/**\n* Wrapper for `setTimeout` with controls.\n*\n* @param cb\n* @param interval\n* @param options\n*/\nfunction useTimeoutFn(cb, interval, options = {}) {\n\tconst { immediate = true, immediateCallback = false } = options;\n\tconst isPending = shallowRef(false);\n\tlet timer;\n\tfunction clear() {\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = void 0;\n\t\t}\n\t}\n\tfunction stop() {\n\t\tisPending.value = false;\n\t\tclear();\n\t}\n\tfunction start(...args) {\n\t\tif (immediateCallback) cb();\n\t\tclear();\n\t\tisPending.value = true;\n\t\ttimer = setTimeout(() => {\n\t\t\tisPending.value = false;\n\t\t\ttimer = void 0;\n\t\t\tcb(...args);\n\t\t}, toValue(interval));\n\t}\n\tif (immediate) {\n\t\tisPending.value = true;\n\t\tif (isClient) start();\n\t}\n\ttryOnScopeDispose(stop);\n\treturn {\n\t\tisPending: shallowReadonly(isPending),\n\t\tstart,\n\t\tstop\n\t};\n}\n//#endregion\n//#region useTimeout/index.ts\nfunction useTimeout(interval = 1e3, options = {}) {\n\tconst { controls: exposeControls = false, callback } = options;\n\tconst controls = useTimeoutFn(callback !== null && callback !== void 0 ? callback : noop, interval, options);\n\tconst ready = computed(() => !controls.isPending.value);\n\tif (exposeControls) return {\n\t\tready,\n\t\t...controls\n\t};\n\telse return ready;\n}\n//#endregion\n//#region useToNumber/index.ts\n/**\n* Reactively convert a string ref to number.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useToNumber(value, options = {}) {\n\tconst { method = \"parseFloat\", radix, nanToZero } = options;\n\treturn computed(() => {\n\t\tlet resolved = toValue(value);\n\t\tif (typeof method === \"function\") resolved = method(resolved);\n\t\telse if (typeof resolved === \"string\") resolved = Number[method](resolved, radix);\n\t\tif (nanToZero && Number.isNaN(resolved)) resolved = 0;\n\t\treturn resolved;\n\t});\n}\n//#endregion\n//#region useToString/index.ts\n/**\n* Reactively convert a ref to string.\n*\n* @see https://vueuse.org/useToString\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useToString(value) {\n\treturn computed(() => `${toValue(value)}`);\n}\n//#endregion\n//#region useToggle/index.ts\n/**\n* A boolean ref with a toggler\n*\n* @see https://vueuse.org/useToggle\n* @param [initialValue]\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useToggle(initialValue = false, options = {}) {\n\tconst { truthyValue = true, falsyValue = false } = options;\n\tconst valueIsRef = isRef(initialValue);\n\tconst _value = shallowRef(initialValue);\n\tfunction toggle(value) {\n\t\tif (arguments.length) {\n\t\t\t_value.value = value;\n\t\t\treturn _value.value;\n\t\t} else {\n\t\t\tconst truthy = toValue(truthyValue);\n\t\t\t_value.value = _value.value === truthy ? toValue(falsyValue) : truthy;\n\t\t\treturn _value.value;\n\t\t}\n\t}\n\tif (valueIsRef) return toggle;\n\telse return [_value, toggle];\n}\n//#endregion\n//#region watchArray/index.ts\n/**\n* Watch for an array with additions and removals.\n*\n* @see https://vueuse.org/watchArray\n*/\nfunction watchArray(source, cb, options) {\n\tlet oldList = (options === null || options === void 0 ? void 0 : options.immediate) ? [] : [...typeof source === \"function\" ? source() : Array.isArray(source) ? source : toValue(source)];\n\treturn watch(source, (newList, _, onCleanup) => {\n\t\tconst oldListRemains = Array.from({ length: oldList.length });\n\t\tconst added = [];\n\t\tfor (const obj of newList) {\n\t\t\tlet found = false;\n\t\t\tfor (let i = 0; i < oldList.length; i++) if (!oldListRemains[i] && obj === oldList[i]) {\n\t\t\t\toldListRemains[i] = true;\n\t\t\t\tfound = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (!found) added.push(obj);\n\t\t}\n\t\tconst removed = oldList.filter((_, i) => !oldListRemains[i]);\n\t\tcb(newList, oldList, added, removed, onCleanup);\n\t\toldList = [...newList];\n\t}, options);\n}\n//#endregion\n//#region watchAtMost/index.ts\nfunction watchAtMost(source, cb, options) {\n\tconst { count, ...watchOptions } = options;\n\tconst current = shallowRef(0);\n\tconst { stop, resume, pause } = watchWithFilter(source, (...args) => {\n\t\tcurrent.value += 1;\n\t\tif (current.value >= toValue(count)) nextTick(() => stop());\n\t\tcb(...args);\n\t}, watchOptions);\n\treturn {\n\t\tcount: current,\n\t\tstop,\n\t\tresume,\n\t\tpause\n\t};\n}\n//#endregion\n//#region watchDebounced/index.ts\nfunction watchDebounced(source, cb, options = {}) {\n\tconst { debounce = 0, maxWait = void 0, ...watchOptions } = options;\n\treturn watchWithFilter(source, cb, {\n\t\t...watchOptions,\n\t\teventFilter: debounceFilter(debounce, { maxWait })\n\t});\n}\n/** @deprecated use `watchDebounced` instead */\nconst debouncedWatch = watchDebounced;\n//#endregion\n//#region watchDeep/index.ts\n/**\n* Shorthand for watching value with {deep: true}\n*\n* @see https://vueuse.org/watchDeep\n*/\nfunction watchDeep(source, cb, options) {\n\treturn watch(source, cb, {\n\t\t...options,\n\t\tdeep: true\n\t});\n}\n//#endregion\n//#region watchIgnorable/index.ts\nfunction watchIgnorable(source, cb, options = {}) {\n\tconst { eventFilter = bypassFilter, ...watchOptions } = options;\n\tconst filteredCb = createFilterWrapper(eventFilter, cb);\n\tlet ignoreUpdates;\n\tlet ignorePrevAsyncUpdates;\n\tlet stop;\n\tif (watchOptions.flush === \"sync\") {\n\t\tlet ignore = false;\n\t\tignorePrevAsyncUpdates = () => {};\n\t\tignoreUpdates = (updater) => {\n\t\t\tignore = true;\n\t\t\tupdater();\n\t\t\tignore = false;\n\t\t};\n\t\tstop = watch(source, (...args) => {\n\t\t\tif (!ignore) filteredCb(...args);\n\t\t}, watchOptions);\n\t} else {\n\t\tconst disposables = [];\n\t\tlet ignoreCounter = 0;\n\t\tlet syncCounter = 0;\n\t\tignorePrevAsyncUpdates = () => {\n\t\t\tignoreCounter = syncCounter;\n\t\t};\n\t\tdisposables.push(watch(source, () => {\n\t\t\tsyncCounter++;\n\t\t}, {\n\t\t\t...watchOptions,\n\t\t\tflush: \"sync\"\n\t\t}));\n\t\tignoreUpdates = (updater) => {\n\t\t\tconst syncCounterPrev = syncCounter;\n\t\t\tupdater();\n\t\t\tignoreCounter += syncCounter - syncCounterPrev;\n\t\t};\n\t\tdisposables.push(watch(source, (...args) => {\n\t\t\tconst ignore = ignoreCounter > 0 && ignoreCounter === syncCounter;\n\t\t\tignoreCounter = 0;\n\t\t\tsyncCounter = 0;\n\t\t\tif (ignore) return;\n\t\t\tfilteredCb(...args);\n\t\t}, watchOptions));\n\t\tstop = () => {\n\t\t\tdisposables.forEach((fn) => fn());\n\t\t};\n\t}\n\treturn {\n\t\tstop,\n\t\tignoreUpdates,\n\t\tignorePrevAsyncUpdates\n\t};\n}\n/** @deprecated use `watchIgnorable` instead */\nconst ignorableWatch = watchIgnorable;\n//#endregion\n//#region watchImmediate/index.ts\n/**\n* Shorthand for watching value with {immediate: true}\n*\n* @see https://vueuse.org/watchImmediate\n*/\nfunction watchImmediate(source, cb, options) {\n\treturn watch(source, cb, {\n\t\t...options,\n\t\timmediate: true\n\t});\n}\n//#endregion\n//#region watchOnce/index.ts\n/**\n* Shorthand for watching value with { once: true }\n*\n* @see https://vueuse.org/watchOnce\n*/\nfunction watchOnce(source, cb, options) {\n\treturn watch(source, cb, {\n\t\t...options,\n\t\tonce: true\n\t});\n}\n//#endregion\n//#region watchThrottled/index.ts\nfunction watchThrottled(source, cb, options = {}) {\n\tconst { throttle = 0, trailing = true, leading = true, ...watchOptions } = options;\n\treturn watchWithFilter(source, cb, {\n\t\t...watchOptions,\n\t\teventFilter: throttleFilter(throttle, trailing, leading)\n\t});\n}\n/** @deprecated use `watchThrottled` instead */\nconst throttledWatch = watchThrottled;\n//#endregion\n//#region watchTriggerable/index.ts\nfunction watchTriggerable(source, cb, options = {}) {\n\tlet cleanupFn;\n\tfunction onEffect() {\n\t\tif (!cleanupFn) return;\n\t\tconst fn = cleanupFn;\n\t\tcleanupFn = void 0;\n\t\tfn();\n\t}\n\t/** Register the function `cleanupFn` */\n\tfunction onCleanup(callback) {\n\t\tcleanupFn = callback;\n\t}\n\tconst _cb = (value, oldValue) => {\n\t\tonEffect();\n\t\treturn cb(value, oldValue, onCleanup);\n\t};\n\tconst res = watchIgnorable(source, _cb, options);\n\tconst { ignoreUpdates } = res;\n\tconst trigger = () => {\n\t\tlet res;\n\t\tignoreUpdates(() => {\n\t\t\tres = _cb(getWatchSources(source), getOldValue(source));\n\t\t});\n\t\treturn res;\n\t};\n\treturn {\n\t\t...res,\n\t\ttrigger\n\t};\n}\nfunction getWatchSources(sources) {\n\tif (isReactive(sources)) return sources;\n\tif (Array.isArray(sources)) return sources.map((item) => toValue(item));\n\treturn toValue(sources);\n}\nfunction getOldValue(source) {\n\treturn Array.isArray(source) ? source.map(() => void 0) : void 0;\n}\n//#endregion\n//#region whenever/index.ts\nfunction whenever(source, cb, options) {\n\tconst stop = watch(source, (v, ov, onInvalidate) => {\n\t\tif (v) {\n\t\t\tif (options === null || options === void 0 ? void 0 : options.once) nextTick(() => stop());\n\t\t\tcb(v, ov, onInvalidate);\n\t\t}\n\t}, {\n\t\t...options,\n\t\tonce: false\n\t});\n\treturn stop;\n}\n//#endregion\nexport { assert, autoResetRef, bypassFilter, camelize, clamp, computedEager, computedWithControl, containsProp, controlledComputed, controlledRef, createDisposableDirective, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, createReactiveFn, createRef, createSharedComposable, createSingletonPromise, debounceFilter, debouncedRef, debouncedWatch, eagerComputed, extendRef, formatDate, get, getLifeCycleTarget, hasOwn, hyphenate, identity, ignorableWatch, increaseWithUnit, injectLocal, invoke, isClient, isDef, isDefined, isIOS, isObject, isWorker, makeDestructurable, noop, normalizeDate, notNullish, now, objectEntries, objectOmit, objectPick, pausableFilter, pausableWatch, promiseTimeout, provideLocal, pxValue, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refManualReset, refThrottled, refWithControl, set, syncRef, syncRefs, throttleFilter, throttledRef, throttledWatch, timestamp, toArray, toReactive, toRef, toRefs, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useArrayDifference, useArrayEvery, useArrayFilter, useArrayFind, useArrayFindIndex, useArrayFindLast, useArrayIncludes, useArrayJoin, useArrayMap, useArrayReduce, useArraySome, useArrayUnique, useCounter, useDateFormat, useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToNumber, useToString, useToggle, watchArray, watchAtMost, watchDebounced, watchDeep, watchIgnorable, watchImmediate, watchOnce, watchPausable, watchThrottled, watchTriggerable, watchWithFilter, whenever };\n","import { bypassFilter, camelize, clamp, computedWithControl, containsProp, createEventHook, createFilterWrapper, createRef, createSingletonPromise, debounceFilter, hasOwn, identity, increaseWithUnit, injectLocal, isClient, isDef, isIOS, isObject, isWorker, makeDestructurable, noop, notNullish, objectEntries, objectOmit, objectPick, pausableFilter, promiseTimeout, provideLocal, pxValue, syncRef, throttleFilter, timestamp, toArray, toRef, toRefs, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useDebounceFn, useIntervalFn, useThrottleFn, useTimeoutFn, watchIgnorable, watchImmediate, watchOnce, watchPausable, watchWithFilter, whenever } from \"@vueuse/shared\";\nimport { Fragment, TransitionGroup, computed, customRef, defineComponent, getCurrentInstance, h, hasInjectionContext, inject, isReadonly, isRef, markRaw, nextTick, onBeforeUpdate, onMounted, onUpdated, reactive, readonly, ref, shallowReactive, shallowReadonly, shallowRef, toRaw, toValue, unref, watch, watchEffect } from \"vue\";\nexport * from \"@vueuse/shared\";\n//#region computedAsync/index.ts\nfunction computedAsync(evaluationCallback, initialState, optionsOrRef) {\n\tvar _globalThis$reportErr;\n\tlet options;\n\tif (isRef(optionsOrRef)) options = { evaluating: optionsOrRef };\n\telse options = optionsOrRef || {};\n\tconst { lazy = false, flush = \"sync\", evaluating = void 0, shallow = true, onError = (_globalThis$reportErr = globalThis.reportError) !== null && _globalThis$reportErr !== void 0 ? _globalThis$reportErr : noop } = options;\n\tconst started = shallowRef(!lazy);\n\tconst current = shallow ? shallowRef(initialState) : ref(initialState);\n\tlet counter = 0;\n\twatchEffect(async (onInvalidate) => {\n\t\tif (!started.value) return;\n\t\tcounter++;\n\t\tconst counterAtBeginning = counter;\n\t\tlet hasFinished = false;\n\t\tif (evaluating) Promise.resolve().then(() => {\n\t\t\tevaluating.value = true;\n\t\t});\n\t\ttry {\n\t\t\tconst result = await evaluationCallback((cancelCallback) => {\n\t\t\t\tonInvalidate(() => {\n\t\t\t\t\tif (evaluating) evaluating.value = false;\n\t\t\t\t\tif (!hasFinished) cancelCallback();\n\t\t\t\t});\n\t\t\t});\n\t\t\tif (counterAtBeginning === counter) current.value = result;\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t} finally {\n\t\t\tif (evaluating && counterAtBeginning === counter) evaluating.value = false;\n\t\t\thasFinished = true;\n\t\t}\n\t}, { flush });\n\tif (lazy) return computed(() => {\n\t\tstarted.value = true;\n\t\treturn current.value;\n\t});\n\telse return current;\n}\n/** @deprecated use `computedAsync` instead */\nconst asyncComputed = computedAsync;\n//#endregion\n//#region computedInject/index.ts\nfunction computedInject(key, options, defaultSource, treatDefaultAsFactory) {\n\tlet source = inject(key);\n\tif (defaultSource) source = inject(key, defaultSource);\n\tif (treatDefaultAsFactory) source = inject(key, defaultSource, treatDefaultAsFactory);\n\tif (typeof options === \"function\") return computed((oldValue) => options(source, oldValue));\n\telse return computed({\n\t\tget: (oldValue) => options.get(source, oldValue),\n\t\tset: options.set\n\t});\n}\n//#endregion\n//#region createReusableTemplate/index.ts\n/**\n* This function creates `define` and `reuse` components in pair,\n* It also allow to pass a generic to bind with type.\n*\n* @see https://vueuse.org/createReusableTemplate\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createReusableTemplate(options = {}) {\n\tconst { inheritAttrs = true, name = \"ReusableTemplate\" } = options;\n\tconst render = shallowRef();\n\tconst define = defineComponent({\n\t\tname: `${name}.define`,\n\t\tsetup(_, { slots }) {\n\t\t\treturn () => {\n\t\t\t\trender.value = slots.default;\n\t\t\t};\n\t\t}\n\t});\n\tconst reuse = defineComponent({\n\t\tinheritAttrs,\n\t\tname: `${name}.reuse`,\n\t\tprops: options.props,\n\t\tsetup(props, { attrs, slots }) {\n\t\t\treturn () => {\n\t\t\t\tvar _render$value;\n\t\t\t\tif (!render.value && true) throw new Error(\"[VueUse] Failed to find the definition of reusable template\");\n\t\t\t\tconst vnode = (_render$value = render.value) === null || _render$value === void 0 ? void 0 : _render$value.call(render, {\n\t\t\t\t\t...options.props == null ? keysToCamelKebabCase(attrs) : props,\n\t\t\t\t\t$slots: slots\n\t\t\t\t});\n\t\t\t\treturn inheritAttrs && (vnode === null || vnode === void 0 ? void 0 : vnode.length) === 1 ? vnode[0] : vnode;\n\t\t\t};\n\t\t}\n\t});\n\treturn makeDestructurable({\n\t\tdefine,\n\t\treuse\n\t}, [define, reuse]);\n}\nfunction keysToCamelKebabCase(obj) {\n\tconst newObj = {};\n\tfor (const key in obj) newObj[camelize(key)] = obj[key];\n\treturn newObj;\n}\n//#endregion\n//#region createTemplatePromise/index.ts\n/**\n* Creates a template promise component.\n*\n* @see https://vueuse.org/createTemplatePromise\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createTemplatePromise(options = {}) {\n\tlet index = 0;\n\tconst instances = ref([]);\n\tfunction create(...args) {\n\t\tconst props = shallowReactive({\n\t\t\tkey: index++,\n\t\t\targs,\n\t\t\tpromise: void 0,\n\t\t\tresolve: () => {},\n\t\t\treject: () => {},\n\t\t\tisResolving: false,\n\t\t\toptions\n\t\t});\n\t\tinstances.value.push(props);\n\t\tprops.promise = new Promise((_resolve, _reject) => {\n\t\t\tprops.resolve = (v) => {\n\t\t\t\tprops.isResolving = true;\n\t\t\t\treturn _resolve(v);\n\t\t\t};\n\t\t\tprops.reject = _reject;\n\t\t}).finally(() => {\n\t\t\tprops.promise = void 0;\n\t\t\tconst index = instances.value.indexOf(props);\n\t\t\tif (index !== -1) instances.value.splice(index, 1);\n\t\t});\n\t\treturn props.promise;\n\t}\n\tfunction start(...args) {\n\t\tif (options.singleton && instances.value.length > 0) return instances.value[0].promise;\n\t\treturn create(...args);\n\t}\n\tconst component = defineComponent((_, { slots }) => {\n\t\tconst renderList = () => instances.value.map((props) => {\n\t\t\tvar _slots$default;\n\t\t\treturn h(Fragment, { key: props.key }, (_slots$default = slots.default) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots, props));\n\t\t});\n\t\tif (options.transition) return () => h(TransitionGroup, options.transition, renderList);\n\t\treturn renderList;\n\t});\n\tcomponent.start = start;\n\treturn component;\n}\n//#endregion\n//#region createUnrefFn/index.ts\n/**\n* Make a plain function accepting ref and raw values as arguments.\n* Returns the same value the unconverted function returns, with proper typing.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createUnrefFn(fn) {\n\treturn function(...args) {\n\t\treturn fn.apply(this, args.map((i) => toValue(i)));\n\t};\n}\n//#endregion\n//#region _configurable.ts\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//#endregion\n//#region unrefElement/index.ts\n/**\n* Get the dom element of a ref of element or Vue component instance\n*\n* @param elRef\n*/\nfunction unrefElement(elRef) {\n\tvar _$el;\n\tconst plain = toValue(elRef);\n\treturn (_$el = plain === null || plain === void 0 ? void 0 : plain.$el) !== null && _$el !== void 0 ? _$el : plain;\n}\n//#endregion\n//#region useEventListener/index.ts\nfunction useEventListener(...args) {\n\tconst register = (el, event, listener, options) => {\n\t\tel.addEventListener(event, listener, options);\n\t\treturn () => el.removeEventListener(event, listener, options);\n\t};\n\tconst firstParamTargets = computed(() => {\n\t\tconst test = toArray(toValue(args[0])).filter((e) => e != null);\n\t\treturn test.every((e) => typeof e !== \"string\") ? test : void 0;\n\t});\n\treturn watchImmediate(() => {\n\t\tvar _firstParamTargets$va, _firstParamTargets$va2;\n\t\treturn [\n\t\t\t(_firstParamTargets$va = (_firstParamTargets$va2 = firstParamTargets.value) === null || _firstParamTargets$va2 === void 0 ? void 0 : _firstParamTargets$va2.map((e) => unrefElement(e))) !== null && _firstParamTargets$va !== void 0 ? _firstParamTargets$va : [defaultWindow].filter((e) => e != null),\n\t\t\ttoArray(toValue(firstParamTargets.value ? args[1] : args[0])),\n\t\t\ttoArray(unref(firstParamTargets.value ? args[2] : args[1])),\n\t\t\ttoValue(firstParamTargets.value ? args[3] : args[2])\n\t\t];\n\t}, ([raw_targets, raw_events, raw_listeners, raw_options], _, onCleanup) => {\n\t\tif (!(raw_targets === null || raw_targets === void 0 ? void 0 : raw_targets.length) || !(raw_events === null || raw_events === void 0 ? void 0 : raw_events.length) || !(raw_listeners === null || raw_listeners === void 0 ? void 0 : raw_listeners.length)) return;\n\t\tconst optionsClone = isObject(raw_options) ? { ...raw_options } : raw_options;\n\t\tconst cleanups = raw_targets.flatMap((el) => raw_events.flatMap((event) => raw_listeners.map((listener) => register(el, event, listener, optionsClone))));\n\t\tonCleanup(() => {\n\t\t\tcleanups.forEach((fn) => fn());\n\t\t});\n\t}, { flush: \"post\" });\n}\n//#endregion\n//#region onClickOutside/index.ts\nlet _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n\tconst { window = defaultWindow, ignore = [], capture = true, detectIframe = false, controls = false } = options;\n\tif (!window) return controls ? {\n\t\tstop: noop,\n\t\tcancel: noop,\n\t\ttrigger: noop\n\t} : noop;\n\tif (isIOS && !_iOSWorkaround) {\n\t\t_iOSWorkaround = true;\n\t\tconst listenerOptions = { passive: true };\n\t\tArray.from(window.document.body.children).forEach((el) => el.addEventListener(\"click\", noop, listenerOptions));\n\t\twindow.document.documentElement.addEventListener(\"click\", noop, listenerOptions);\n\t}\n\tlet shouldListen = true;\n\tconst shouldIgnore = (event) => {\n\t\treturn toValue(ignore).some((target) => {\n\t\t\tif (typeof target === \"string\") return Array.from(window.document.querySelectorAll(target)).some((el) => el === event.target || event.composedPath().includes(el));\n\t\t\telse {\n\t\t\t\tconst el = unrefElement(target);\n\t\t\t\treturn el && (event.target === el || event.composedPath().includes(el));\n\t\t\t}\n\t\t});\n\t};\n\t/**\n\t* Determines if the given target has multiple root elements.\n\t* Referenced from: https://github.com/vuejs/test-utils/blob/ccb460be55f9f6be05ab708500a41ec8adf6f4bc/src/vue-wrapper.ts#L21\n\t*/\n\tfunction hasMultipleRoots(target) {\n\t\tconst vm = toValue(target);\n\t\treturn vm && vm.$.subTree.shapeFlag === 16;\n\t}\n\tfunction checkMultipleRoots(target, event) {\n\t\tconst vm = toValue(target);\n\t\tconst children = vm.$.subTree && vm.$.subTree.children;\n\t\tif (children == null || !Array.isArray(children)) return false;\n\t\treturn children.some((child) => child.el === event.target || event.composedPath().includes(child.el));\n\t}\n\tconst listener = (event) => {\n\t\tconst el = unrefElement(target);\n\t\tif (event.target == null) return;\n\t\tif (!(el instanceof Element) && hasMultipleRoots(target) && checkMultipleRoots(target, event)) return;\n\t\tif (!el || el === event.target || event.composedPath().includes(el)) return;\n\t\tif (\"detail\" in event && event.detail === 0) shouldListen = !shouldIgnore(event);\n\t\tif (!shouldListen) {\n\t\t\tshouldListen = true;\n\t\t\treturn;\n\t\t}\n\t\thandler(event);\n\t};\n\tlet isProcessingClick = false;\n\tconst cleanup = [\n\t\tuseEventListener(window, \"click\", (event) => {\n\t\t\tif (!isProcessingClick) {\n\t\t\t\tisProcessingClick = true;\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tisProcessingClick = false;\n\t\t\t\t}, 0);\n\t\t\t\tlistener(event);\n\t\t\t}\n\t\t}, {\n\t\t\tpassive: true,\n\t\t\tcapture\n\t\t}),\n\t\tuseEventListener(window, \"pointerdown\", (e) => {\n\t\t\tconst el = unrefElement(target);\n\t\t\tshouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));\n\t\t}, { passive: true }),\n\t\tdetectIframe && useEventListener(window, \"blur\", (event) => {\n\t\t\tsetTimeout(() => {\n\t\t\t\tconst el = unrefElement(target);\n\t\t\t\tlet activeEl = window.document.activeElement;\n\t\t\t\twhile (activeEl === null || activeEl === void 0 ? void 0 : activeEl.shadowRoot) activeEl = activeEl.shadowRoot.activeElement;\n\t\t\t\tif ((activeEl === null || activeEl === void 0 ? void 0 : activeEl.tagName) === \"IFRAME\" && !(el === null || el === void 0 ? void 0 : el.contains(window.document.activeElement))) handler(event);\n\t\t\t}, 0);\n\t\t}, { passive: true })\n\t].filter(Boolean);\n\tconst stop = () => cleanup.forEach((fn) => fn());\n\tif (controls) return {\n\t\tstop,\n\t\tcancel: () => {\n\t\t\tshouldListen = false;\n\t\t},\n\t\ttrigger: (event) => {\n\t\t\tshouldListen = true;\n\t\t\tlistener(event);\n\t\t\tshouldListen = false;\n\t\t}\n\t};\n\treturn stop;\n}\n//#endregion\n//#region useMounted/index.ts\n/**\n* Mounted state in ref.\n*\n* @see https://vueuse.org/useMounted\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useMounted() {\n\tconst isMounted = shallowRef(false);\n\tconst instance = getCurrentInstance();\n\tif (instance) onMounted(() => {\n\t\tisMounted.value = true;\n\t}, instance);\n\treturn isMounted;\n}\n//#endregion\n//#region useSupported/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useSupported(callback) {\n\tconst isMounted = useMounted();\n\treturn computed(() => {\n\t\tisMounted.value;\n\t\treturn Boolean(callback());\n\t});\n}\n//#endregion\n//#region useMutationObserver/index.ts\n/**\n* Watch for changes being made to the DOM tree.\n*\n* @see https://vueuse.org/useMutationObserver\n* @see https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver MutationObserver MDN\n* @param target\n* @param callback\n* @param options\n*/\nfunction useMutationObserver(target, callback, options = {}) {\n\tconst { window = defaultWindow, ...mutationOptions } = options;\n\tlet observer;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && \"MutationObserver\" in window);\n\tconst cleanup = () => {\n\t\tif (observer) {\n\t\t\tobserver.disconnect();\n\t\t\tobserver = void 0;\n\t\t}\n\t};\n\tconst stopWatch = watch(computed(() => {\n\t\tconst items = toArray(toValue(target)).map(unrefElement).filter(notNullish);\n\t\treturn new Set(items);\n\t}), (newTargets) => {\n\t\tcleanup();\n\t\tif (isSupported.value && newTargets.size) {\n\t\t\tobserver = new MutationObserver(callback);\n\t\t\tnewTargets.forEach((el) => observer.observe(el, mutationOptions));\n\t\t}\n\t}, {\n\t\timmediate: true,\n\t\tflush: \"post\"\n\t});\n\tconst takeRecords = () => {\n\t\treturn observer === null || observer === void 0 ? void 0 : observer.takeRecords();\n\t};\n\tconst stop = () => {\n\t\tstopWatch();\n\t\tcleanup();\n\t};\n\ttryOnScopeDispose(stop);\n\treturn {\n\t\tisSupported,\n\t\tstop,\n\t\ttakeRecords\n\t};\n}\n//#endregion\n//#region onElementRemoval/index.ts\n/**\n* Fires when the element or any element containing it is removed.\n*\n* @param target\n* @param callback\n* @param options\n*/\nfunction onElementRemoval(target, callback, options = {}) {\n\tconst { window = defaultWindow, document = window === null || window === void 0 ? void 0 : window.document, flush = \"sync\" } = options;\n\tif (!window || !document) return noop;\n\tlet stopFn;\n\tconst cleanupAndUpdate = (fn) => {\n\t\tstopFn === null || stopFn === void 0 || stopFn();\n\t\tstopFn = fn;\n\t};\n\tconst stopWatch = watchEffect(() => {\n\t\tconst el = unrefElement(target);\n\t\tif (el) {\n\t\t\tconst { stop } = useMutationObserver(document, (mutationsList) => {\n\t\t\t\tif (mutationsList.map((mutation) => [...mutation.removedNodes]).flat().some((node) => node === el || node.contains(el))) callback(mutationsList);\n\t\t\t}, {\n\t\t\t\twindow,\n\t\t\t\tchildList: true,\n\t\t\t\tsubtree: true\n\t\t\t});\n\t\t\tcleanupAndUpdate(stop);\n\t\t}\n\t}, { flush });\n\tconst stopHandle = () => {\n\t\tstopWatch();\n\t\tcleanupAndUpdate();\n\t};\n\ttryOnScopeDispose(stopHandle);\n\treturn stopHandle;\n}\n//#endregion\n//#region onKeyStroke/index.ts\nfunction createKeyPredicate(keyFilter) {\n\tif (typeof keyFilter === \"function\") return keyFilter;\n\telse if (typeof keyFilter === \"string\") return (event) => event.key === keyFilter;\n\telse if (Array.isArray(keyFilter)) return (event) => keyFilter.includes(event.key);\n\treturn () => true;\n}\nfunction onKeyStroke(...args) {\n\tlet key;\n\tlet handler;\n\tlet options = {};\n\tif (args.length === 3) {\n\t\tkey = args[0];\n\t\thandler = args[1];\n\t\toptions = args[2];\n\t} else if (args.length === 2) if (typeof args[1] === \"object\") {\n\t\tkey = true;\n\t\thandler = args[0];\n\t\toptions = args[1];\n\t} else {\n\t\tkey = args[0];\n\t\thandler = args[1];\n\t}\n\telse {\n\t\tkey = true;\n\t\thandler = args[0];\n\t}\n\tconst { target = defaultWindow, eventName = \"keydown\", passive = false, dedupe = false } = options;\n\tconst predicate = createKeyPredicate(key);\n\tconst listener = (e) => {\n\t\tif (e.repeat && toValue(dedupe)) return;\n\t\tif (predicate(e)) handler(e);\n\t};\n\treturn useEventListener(target, eventName, listener, passive);\n}\n/**\n* Listen to the keydown event of the given key.\n*\n* @see https://vueuse.org/onKeyStroke\n* @param key\n* @param handler\n* @param options\n*/\nfunction onKeyDown(key, handler, options = {}) {\n\treturn onKeyStroke(key, handler, {\n\t\t...options,\n\t\teventName: \"keydown\"\n\t});\n}\n/**\n* Listen to the keypress event of the given key.\n*\n* @see https://vueuse.org/onKeyStroke\n* @param key\n* @param handler\n* @param options\n*/\nfunction onKeyPressed(key, handler, options = {}) {\n\treturn onKeyStroke(key, handler, {\n\t\t...options,\n\t\teventName: \"keypress\"\n\t});\n}\n/**\n* Listen to the keyup event of the given key.\n*\n* @see https://vueuse.org/onKeyStroke\n* @param key\n* @param handler\n* @param options\n*/\nfunction onKeyUp(key, handler, options = {}) {\n\treturn onKeyStroke(key, handler, {\n\t\t...options,\n\t\teventName: \"keyup\"\n\t});\n}\n//#endregion\n//#region onLongPress/index.ts\nconst DEFAULT_DELAY = 500;\nconst DEFAULT_THRESHOLD = 10;\nfunction onLongPress(target, handler, options) {\n\tvar _options$modifiers10, _options$modifiers11;\n\tconst elementRef = computed(() => unrefElement(target));\n\tlet timeout;\n\tlet posStart;\n\tlet startTimestamp;\n\tlet hasLongPressed = false;\n\tfunction clear() {\n\t\tif (timeout) {\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = void 0;\n\t\t}\n\t\tposStart = void 0;\n\t\tstartTimestamp = void 0;\n\t\thasLongPressed = false;\n\t}\n\tfunction getDelay(ev) {\n\t\tconst delay = options === null || options === void 0 ? void 0 : options.delay;\n\t\tif (typeof delay === \"function\") return delay(ev);\n\t\treturn delay !== null && delay !== void 0 ? delay : DEFAULT_DELAY;\n\t}\n\tfunction onRelease(ev) {\n\t\tvar _options$modifiers, _options$modifiers2, _options$modifiers3;\n\t\tconst [_startTimestamp, _posStart, _hasLongPressed] = [\n\t\t\tstartTimestamp,\n\t\t\tposStart,\n\t\t\thasLongPressed\n\t\t];\n\t\tclear();\n\t\tif (!(options === null || options === void 0 ? void 0 : options.onMouseUp) || !_posStart || !_startTimestamp) return;\n\t\tif ((options === null || options === void 0 || (_options$modifiers = options.modifiers) === null || _options$modifiers === void 0 ? void 0 : _options$modifiers.self) && ev.target !== elementRef.value) return;\n\t\tif (options === null || options === void 0 || (_options$modifiers2 = options.modifiers) === null || _options$modifiers2 === void 0 ? void 0 : _options$modifiers2.prevent) ev.preventDefault();\n\t\tif (options === null || options === void 0 || (_options$modifiers3 = options.modifiers) === null || _options$modifiers3 === void 0 ? void 0 : _options$modifiers3.stop) ev.stopPropagation();\n\t\tconst dx = ev.x - _posStart.x;\n\t\tconst dy = ev.y - _posStart.y;\n\t\tconst distance = Math.sqrt(dx * dx + dy * dy);\n\t\toptions.onMouseUp(ev.timeStamp - _startTimestamp, distance, _hasLongPressed, ev);\n\t}\n\tfunction onDown(ev) {\n\t\tvar _options$modifiers4, _options$modifiers5, _options$modifiers6;\n\t\tif ((options === null || options === void 0 || (_options$modifiers4 = options.modifiers) === null || _options$modifiers4 === void 0 ? void 0 : _options$modifiers4.self) && ev.target !== elementRef.value) return;\n\t\tclear();\n\t\tif (options === null || options === void 0 || (_options$modifiers5 = options.modifiers) === null || _options$modifiers5 === void 0 ? void 0 : _options$modifiers5.prevent) ev.preventDefault();\n\t\tif (options === null || options === void 0 || (_options$modifiers6 = options.modifiers) === null || _options$modifiers6 === void 0 ? void 0 : _options$modifiers6.stop) ev.stopPropagation();\n\t\tposStart = {\n\t\t\tx: ev.x,\n\t\t\ty: ev.y\n\t\t};\n\t\tstartTimestamp = ev.timeStamp;\n\t\ttimeout = setTimeout(() => {\n\t\t\thasLongPressed = true;\n\t\t\thandler(ev);\n\t\t}, getDelay(ev));\n\t}\n\tfunction onMove(ev) {\n\t\tvar _options$modifiers7, _options$modifiers8, _options$modifiers9, _options$distanceThre;\n\t\tif ((options === null || options === void 0 || (_options$modifiers7 = options.modifiers) === null || _options$modifiers7 === void 0 ? void 0 : _options$modifiers7.self) && ev.target !== elementRef.value) return;\n\t\tif (!posStart || (options === null || options === void 0 ? void 0 : options.distanceThreshold) === false) return;\n\t\tif (options === null || options === void 0 || (_options$modifiers8 = options.modifiers) === null || _options$modifiers8 === void 0 ? void 0 : _options$modifiers8.prevent) ev.preventDefault();\n\t\tif (options === null || options === void 0 || (_options$modifiers9 = options.modifiers) === null || _options$modifiers9 === void 0 ? void 0 : _options$modifiers9.stop) ev.stopPropagation();\n\t\tconst dx = ev.x - posStart.x;\n\t\tconst dy = ev.y - posStart.y;\n\t\tif (Math.sqrt(dx * dx + dy * dy) >= ((_options$distanceThre = options === null || options === void 0 ? void 0 : options.distanceThreshold) !== null && _options$distanceThre !== void 0 ? _options$distanceThre : DEFAULT_THRESHOLD)) clear();\n\t}\n\tconst listenerOptions = {\n\t\tcapture: options === null || options === void 0 || (_options$modifiers10 = options.modifiers) === null || _options$modifiers10 === void 0 ? void 0 : _options$modifiers10.capture,\n\t\tonce: options === null || options === void 0 || (_options$modifiers11 = options.modifiers) === null || _options$modifiers11 === void 0 ? void 0 : _options$modifiers11.once\n\t};\n\tconst cleanup = [\n\t\tuseEventListener(elementRef, \"pointerdown\", onDown, listenerOptions),\n\t\tuseEventListener(elementRef, \"pointermove\", onMove, listenerOptions),\n\t\tuseEventListener(elementRef, [\"pointerup\", \"pointerleave\"], onRelease, listenerOptions)\n\t];\n\tconst stop = () => cleanup.forEach((fn) => fn());\n\treturn stop;\n}\n//#endregion\n//#region onStartTyping/index.ts\nfunction isFocusedElementEditable() {\n\tconst { activeElement, body } = document;\n\tif (!activeElement) return false;\n\tif (activeElement === body) return false;\n\tswitch (activeElement.tagName) {\n\t\tcase \"INPUT\":\n\t\tcase \"TEXTAREA\": return true;\n\t}\n\treturn activeElement.hasAttribute(\"contenteditable\");\n}\nfunction isTypedCharValid({ keyCode, metaKey, ctrlKey, altKey }) {\n\tif (metaKey || ctrlKey || altKey) return false;\n\tif (keyCode >= 48 && keyCode <= 57 || keyCode >= 96 && keyCode <= 105) return true;\n\tif (keyCode >= 65 && keyCode <= 90) return true;\n\treturn false;\n}\n/**\n* Fires when users start typing on non-editable elements.\n*\n* @see https://vueuse.org/onStartTyping\n* @param callback\n* @param options\n*/\nfunction onStartTyping(callback, options = {}) {\n\tconst { document = defaultDocument, isTypedCharValid: isTypedCharValidFn = isTypedCharValid, isFocusedElementEditable: isFocusedElementEditableFn = isFocusedElementEditable } = options;\n\tconst keydown = (event) => {\n\t\tif (!isFocusedElementEditableFn() && isTypedCharValidFn(event)) callback(event);\n\t};\n\tif (document) useEventListener(document, \"keydown\", keydown, { passive: true });\n}\n//#endregion\n//#region templateRef/index.ts\n/**\n* @deprecated Use Vue's built-in `useTemplateRef` instead.\n*\n* Shorthand for binding ref to template element.\n*\n* @see https://vueuse.org/templateRef\n* @param key\n* @param initialValue\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction templateRef(key, initialValue = null) {\n\tconst instance = getCurrentInstance();\n\tlet _trigger = () => {};\n\tconst element = customRef((track, trigger) => {\n\t\t_trigger = trigger;\n\t\treturn {\n\t\t\tget() {\n\t\t\t\tvar _instance$proxy$$refs, _instance$proxy;\n\t\t\t\ttrack();\n\t\t\t\treturn (_instance$proxy$$refs = instance === null || instance === void 0 || (_instance$proxy = instance.proxy) === null || _instance$proxy === void 0 ? void 0 : _instance$proxy.$refs[key]) !== null && _instance$proxy$$refs !== void 0 ? _instance$proxy$$refs : initialValue;\n\t\t\t},\n\t\t\tset() {}\n\t\t};\n\t});\n\ttryOnMounted(_trigger);\n\tonUpdated(_trigger);\n\treturn element;\n}\n//#endregion\n//#region useActiveElement/index.ts\n/**\n* Reactive `document.activeElement`\n*\n* @see https://vueuse.org/useActiveElement\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useActiveElement(options = {}) {\n\tvar _options$document;\n\tconst { window = defaultWindow, deep = true, triggerOnRemoval = false } = options;\n\tconst document = (_options$document = options.document) !== null && _options$document !== void 0 ? _options$document : window === null || window === void 0 ? void 0 : window.document;\n\tconst getDeepActiveElement = () => {\n\t\tlet element = document === null || document === void 0 ? void 0 : document.activeElement;\n\t\tif (deep) {\n\t\t\tvar _element$shadowRoot;\n\t\t\twhile (element === null || element === void 0 ? void 0 : element.shadowRoot) element = element === null || element === void 0 || (_element$shadowRoot = element.shadowRoot) === null || _element$shadowRoot === void 0 ? void 0 : _element$shadowRoot.activeElement;\n\t\t}\n\t\treturn element;\n\t};\n\tconst activeElement = shallowRef();\n\tconst trigger = () => {\n\t\tactiveElement.value = getDeepActiveElement();\n\t};\n\tif (window) {\n\t\tconst listenerOptions = {\n\t\t\tcapture: true,\n\t\t\tpassive: true\n\t\t};\n\t\tuseEventListener(window, \"blur\", (event) => {\n\t\t\tif (event.relatedTarget !== null) return;\n\t\t\ttrigger();\n\t\t}, listenerOptions);\n\t\tuseEventListener(window, \"focus\", trigger, listenerOptions);\n\t}\n\tif (triggerOnRemoval) onElementRemoval(activeElement, trigger, { document });\n\ttrigger();\n\treturn activeElement;\n}\n//#endregion\n//#region useRafFn/index.ts\n/**\n* Call function on every `requestAnimationFrame`. With controls of pausing and resuming.\n*\n* @see https://vueuse.org/useRafFn\n* @param fn\n* @param options\n*/\nfunction useRafFn(fn, options = {}) {\n\tconst { immediate = true, fpsLimit = null, window = defaultWindow, once = false } = options;\n\tconst isActive = shallowRef(false);\n\tconst intervalLimit = computed(() => {\n\t\tconst limit = toValue(fpsLimit);\n\t\treturn limit ? 1e3 / limit : null;\n\t});\n\tlet previousFrameTimestamp = 0;\n\tlet rafId = null;\n\tfunction loop(timestamp) {\n\t\tif (!isActive.value || !window) return;\n\t\tif (!previousFrameTimestamp) previousFrameTimestamp = timestamp;\n\t\tconst delta = timestamp - previousFrameTimestamp;\n\t\tif (intervalLimit.value && delta < intervalLimit.value) {\n\t\t\trafId = window.requestAnimationFrame(loop);\n\t\t\treturn;\n\t\t}\n\t\tpreviousFrameTimestamp = timestamp;\n\t\tfn({\n\t\t\tdelta,\n\t\t\ttimestamp\n\t\t});\n\t\tif (once) {\n\t\t\tisActive.value = false;\n\t\t\trafId = null;\n\t\t\treturn;\n\t\t}\n\t\trafId = window.requestAnimationFrame(loop);\n\t}\n\tfunction resume() {\n\t\tif (!isActive.value && window) {\n\t\t\tisActive.value = true;\n\t\t\tpreviousFrameTimestamp = 0;\n\t\t\trafId = window.requestAnimationFrame(loop);\n\t\t}\n\t}\n\tfunction pause() {\n\t\tisActive.value = false;\n\t\tif (rafId != null && window) {\n\t\t\twindow.cancelAnimationFrame(rafId);\n\t\t\trafId = null;\n\t\t}\n\t}\n\tif (immediate) resume();\n\ttryOnScopeDispose(pause);\n\treturn {\n\t\tisActive: shallowReadonly(isActive),\n\t\tpause,\n\t\tresume\n\t};\n}\n//#endregion\n//#region useAnimate/index.ts\n/**\n* Reactive Web Animations API\n*\n* @see https://vueuse.org/useAnimate\n* @param target\n* @param keyframes\n* @param options\n*/\nfunction useAnimate(target, keyframes, options) {\n\tlet config;\n\tlet animateOptions;\n\tif (isObject(options)) {\n\t\tconfig = options;\n\t\tanimateOptions = objectOmit(options, [\n\t\t\t\"window\",\n\t\t\t\"immediate\",\n\t\t\t\"commitStyles\",\n\t\t\t\"persist\",\n\t\t\t\"onReady\",\n\t\t\t\"onError\"\n\t\t]);\n\t} else {\n\t\tconfig = { duration: options };\n\t\tanimateOptions = options;\n\t}\n\tconst { window = defaultWindow, immediate = true, commitStyles, persist, playbackRate: _playbackRate = 1, onReady, onError = (e) => {\n\t\tconsole.error(e);\n\t} } = config;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && HTMLElement && \"animate\" in HTMLElement.prototype);\n\tconst animate = shallowRef(void 0);\n\tconst store = shallowReactive({\n\t\tstartTime: null,\n\t\tcurrentTime: null,\n\t\ttimeline: null,\n\t\tplaybackRate: _playbackRate,\n\t\tpending: false,\n\t\tplayState: immediate ? \"idle\" : \"paused\",\n\t\treplaceState: \"active\"\n\t});\n\tconst pending = computed(() => store.pending);\n\tconst playState = computed(() => store.playState);\n\tconst replaceState = computed(() => store.replaceState);\n\tconst startTime = computed({\n\t\tget() {\n\t\t\treturn store.startTime;\n\t\t},\n\t\tset(value) {\n\t\t\tstore.startTime = value;\n\t\t\tif (animate.value) animate.value.startTime = value;\n\t\t}\n\t});\n\tconst currentTime = computed({\n\t\tget() {\n\t\t\treturn store.currentTime;\n\t\t},\n\t\tset(value) {\n\t\t\tstore.currentTime = value;\n\t\t\tif (animate.value) {\n\t\t\t\tanimate.value.currentTime = value;\n\t\t\t\tsyncResume();\n\t\t\t}\n\t\t}\n\t});\n\tconst timeline = computed({\n\t\tget() {\n\t\t\treturn store.timeline;\n\t\t},\n\t\tset(value) {\n\t\t\tstore.timeline = value;\n\t\t\tif (animate.value) animate.value.timeline = value;\n\t\t}\n\t});\n\tconst playbackRate = computed({\n\t\tget() {\n\t\t\treturn store.playbackRate;\n\t\t},\n\t\tset(value) {\n\t\t\tstore.playbackRate = value;\n\t\t\tif (animate.value) animate.value.playbackRate = value;\n\t\t}\n\t});\n\tconst play = () => {\n\t\tif (animate.value) try {\n\t\t\tanimate.value.play();\n\t\t\tsyncResume();\n\t\t} catch (e) {\n\t\t\tsyncPause();\n\t\t\tonError(e);\n\t\t}\n\t\telse update();\n\t};\n\tconst pause = () => {\n\t\ttry {\n\t\t\tvar _animate$value;\n\t\t\t(_animate$value = animate.value) === null || _animate$value === void 0 || _animate$value.pause();\n\t\t\tsyncPause();\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t};\n\tconst reverse = () => {\n\t\tif (!animate.value) update();\n\t\ttry {\n\t\t\tvar _animate$value2;\n\t\t\t(_animate$value2 = animate.value) === null || _animate$value2 === void 0 || _animate$value2.reverse();\n\t\t\tsyncResume();\n\t\t} catch (e) {\n\t\t\tsyncPause();\n\t\t\tonError(e);\n\t\t}\n\t};\n\tconst finish = () => {\n\t\ttry {\n\t\t\tvar _animate$value3;\n\t\t\t(_animate$value3 = animate.value) === null || _animate$value3 === void 0 || _animate$value3.finish();\n\t\t\tsyncPause();\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t};\n\tconst cancel = () => {\n\t\ttry {\n\t\t\tvar _animate$value4;\n\t\t\t(_animate$value4 = animate.value) === null || _animate$value4 === void 0 || _animate$value4.cancel();\n\t\t\tsyncPause();\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t};\n\twatch(() => unrefElement(target), (el) => {\n\t\tif (el) update(true);\n\t\telse animate.value = void 0;\n\t});\n\twatch(() => keyframes, (value) => {\n\t\tif (animate.value) {\n\t\t\tupdate();\n\t\t\tconst targetEl = unrefElement(target);\n\t\t\tif (targetEl) animate.value.effect = new KeyframeEffect(targetEl, toValue(value), animateOptions);\n\t\t}\n\t}, { deep: true });\n\ttryOnMounted(() => update(true), false);\n\ttryOnScopeDispose(cancel);\n\tfunction update(init) {\n\t\tconst el = unrefElement(target);\n\t\tif (!isSupported.value || !el) return;\n\t\tif (!animate.value) animate.value = el.animate(toValue(keyframes), animateOptions);\n\t\tif (persist) animate.value.persist();\n\t\tif (_playbackRate !== 1) animate.value.playbackRate = _playbackRate;\n\t\tif (init && !immediate) animate.value.pause();\n\t\telse syncResume();\n\t\tonReady === null || onReady === void 0 || onReady(animate.value);\n\t}\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(animate, [\n\t\t\"cancel\",\n\t\t\"finish\",\n\t\t\"remove\"\n\t], syncPause, listenerOptions);\n\tuseEventListener(animate, \"finish\", () => {\n\t\tvar _animate$value5;\n\t\tif (commitStyles) (_animate$value5 = animate.value) === null || _animate$value5 === void 0 || _animate$value5.commitStyles();\n\t}, listenerOptions);\n\tconst { resume: resumeRef, pause: pauseRef } = useRafFn(() => {\n\t\tif (!animate.value) return;\n\t\tstore.pending = animate.value.pending;\n\t\tstore.playState = animate.value.playState;\n\t\tstore.replaceState = animate.value.replaceState;\n\t\tstore.startTime = animate.value.startTime;\n\t\tstore.currentTime = animate.value.currentTime;\n\t\tstore.timeline = animate.value.timeline;\n\t\tstore.playbackRate = animate.value.playbackRate;\n\t}, { immediate: false });\n\tfunction syncResume() {\n\t\tif (isSupported.value) resumeRef();\n\t}\n\tfunction syncPause() {\n\t\tif (isSupported.value && window) window.requestAnimationFrame(pauseRef);\n\t}\n\treturn {\n\t\tisSupported,\n\t\tanimate,\n\t\tplay,\n\t\tpause,\n\t\treverse,\n\t\tfinish,\n\t\tcancel,\n\t\tpending,\n\t\tplayState,\n\t\treplaceState,\n\t\tstartTime,\n\t\tcurrentTime,\n\t\ttimeline,\n\t\tplaybackRate\n\t};\n}\n//#endregion\n//#region useAsyncQueue/index.ts\n/**\n* Asynchronous queue task controller.\n*\n* @see https://vueuse.org/useAsyncQueue\n* @param tasks\n* @param options\n*/\nfunction useAsyncQueue(tasks, options) {\n\tconst { interrupt = true, onError = noop, onFinished = noop, signal } = options || {};\n\tconst promiseState = {\n\t\taborted: \"aborted\",\n\t\tfulfilled: \"fulfilled\",\n\t\tpending: \"pending\",\n\t\trejected: \"rejected\"\n\t};\n\tconst result = reactive(Array.from(Array.from({ length: tasks.length }), () => ({\n\t\tstate: promiseState.pending,\n\t\tdata: null\n\t})));\n\tconst activeIndex = shallowRef(-1);\n\tif (!tasks || tasks.length === 0) {\n\t\tonFinished();\n\t\treturn {\n\t\t\tactiveIndex,\n\t\t\tresult\n\t\t};\n\t}\n\tfunction updateResult(state, res) {\n\t\tactiveIndex.value++;\n\t\tresult[activeIndex.value].data = res;\n\t\tresult[activeIndex.value].state = state;\n\t}\n\ttasks.reduce((prev, curr) => {\n\t\treturn prev.then((prevRes) => {\n\t\t\tvar _result$activeIndex$v;\n\t\t\tif (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n\t\t\t\tupdateResult(promiseState.aborted, /* @__PURE__ */ new Error(\"aborted\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (((_result$activeIndex$v = result[activeIndex.value]) === null || _result$activeIndex$v === void 0 ? void 0 : _result$activeIndex$v.state) === promiseState.rejected && interrupt) {\n\t\t\t\tonFinished();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst done = curr(prevRes).then((currentRes) => {\n\t\t\t\tupdateResult(promiseState.fulfilled, currentRes);\n\t\t\t\tif (activeIndex.value === tasks.length - 1) onFinished();\n\t\t\t\treturn currentRes;\n\t\t\t});\n\t\t\tif (!signal) return done;\n\t\t\treturn Promise.race([done, whenAborted(signal)]);\n\t\t}).catch((e) => {\n\t\t\tif (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n\t\t\t\tupdateResult(promiseState.aborted, e);\n\t\t\t\treturn e;\n\t\t\t}\n\t\t\tupdateResult(promiseState.rejected, e);\n\t\t\tonError();\n\t\t\tif (activeIndex.value === tasks.length - 1) onFinished();\n\t\t\treturn e;\n\t\t});\n\t}, Promise.resolve());\n\treturn {\n\t\tactiveIndex,\n\t\tresult\n\t};\n}\nfunction whenAborted(signal) {\n\treturn new Promise((resolve, reject) => {\n\t\tconst error = /* @__PURE__ */ new Error(\"aborted\");\n\t\tif (signal.aborted) reject(error);\n\t\telse signal.addEventListener(\"abort\", () => reject(error), { once: true });\n\t});\n}\n//#endregion\n//#region useAsyncState/index.ts\n/**\n* Reactive async state. Will not block your setup function and will trigger changes once\n* the promise is ready.\n*\n* @see https://vueuse.org/useAsyncState\n* @param promise         The promise / async function to be resolved\n* @param initialState    The initial state, used until the first evaluation finishes\n* @param options\n*/\nfunction useAsyncState(promise, initialState, options) {\n\tvar _globalThis$reportErr;\n\tconst { immediate = true, delay = 0, onError = (_globalThis$reportErr = globalThis.reportError) !== null && _globalThis$reportErr !== void 0 ? _globalThis$reportErr : noop, onSuccess = noop, resetOnExecute = true, shallow = true, throwError } = options !== null && options !== void 0 ? options : {};\n\tconst state = shallow ? shallowRef(initialState) : ref(initialState);\n\tconst isReady = shallowRef(false);\n\tconst isLoading = shallowRef(false);\n\tconst error = shallowRef(void 0);\n\tlet executionsCount = 0;\n\tasync function execute(delay = 0, ...args) {\n\t\tconst executionId = executionsCount += 1;\n\t\tif (resetOnExecute) state.value = toValue(initialState);\n\t\terror.value = void 0;\n\t\tisReady.value = false;\n\t\tisLoading.value = true;\n\t\tif (delay > 0) await promiseTimeout(delay);\n\t\tconst _promise = typeof promise === \"function\" ? promise(...args) : promise;\n\t\ttry {\n\t\t\tconst data = await _promise;\n\t\t\tif (executionId === executionsCount) {\n\t\t\t\tstate.value = data;\n\t\t\t\tisReady.value = true;\n\t\t\t}\n\t\t\tonSuccess(data);\n\t\t\treturn data;\n\t\t} catch (e) {\n\t\t\tif (executionId === executionsCount) error.value = e;\n\t\t\tonError(e);\n\t\t\tif (throwError) throw e;\n\t\t} finally {\n\t\t\tif (executionId === executionsCount) isLoading.value = false;\n\t\t}\n\t}\n\tif (immediate) execute(delay);\n\tconst shell = {\n\t\tstate,\n\t\tisReady,\n\t\tisLoading,\n\t\terror,\n\t\texecute,\n\t\texecuteImmediate: (...args) => execute(0, ...args)\n\t};\n\tfunction waitUntilIsLoaded() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tuntil(isLoading).toBe(false).then(() => resolve(shell)).catch(reject);\n\t\t});\n\t}\n\treturn {\n\t\t...shell,\n\t\tthen(onFulfilled, onRejected) {\n\t\t\treturn waitUntilIsLoaded().then(onFulfilled, onRejected);\n\t\t}\n\t};\n}\n//#endregion\n//#region useBase64/serialization.ts\nconst defaults = {\n\tarray: (v) => JSON.stringify(v),\n\tobject: (v) => JSON.stringify(v),\n\tset: (v) => JSON.stringify(Array.from(v)),\n\tmap: (v) => JSON.stringify(Object.fromEntries(v)),\n\tnull: () => \"\"\n};\nfunction getDefaultSerialization(target) {\n\tif (!target) return defaults.null;\n\tif (target instanceof Map) return defaults.map;\n\telse if (target instanceof Set) return defaults.set;\n\telse if (Array.isArray(target)) return defaults.array;\n\telse return defaults.object;\n}\n//#endregion\n//#region useBase64/index.ts\nfunction useBase64(target, options) {\n\tconst base64 = shallowRef(\"\");\n\tconst promise = shallowRef();\n\tfunction execute() {\n\t\tif (!isClient) return;\n\t\tpromise.value = new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst _target = toValue(target);\n\t\t\t\tif (_target == null) resolve(\"\");\n\t\t\t\telse if (typeof _target === \"string\") resolve(blobToBase64(new Blob([_target], { type: \"text/plain\" })));\n\t\t\t\telse if (_target instanceof Blob) resolve(blobToBase64(_target));\n\t\t\t\telse if (_target instanceof ArrayBuffer) resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target))));\n\t\t\t\telse if (_target instanceof HTMLCanvasElement) resolve(_target.toDataURL(options === null || options === void 0 ? void 0 : options.type, options === null || options === void 0 ? void 0 : options.quality));\n\t\t\t\telse if (_target instanceof HTMLImageElement) {\n\t\t\t\t\tconst img = _target.cloneNode(false);\n\t\t\t\t\timg.crossOrigin = \"Anonymous\";\n\t\t\t\t\timgLoaded(img).then(() => {\n\t\t\t\t\t\tconst canvas = document.createElement(\"canvas\");\n\t\t\t\t\t\tconst ctx = canvas.getContext(\"2d\");\n\t\t\t\t\t\tcanvas.width = img.width;\n\t\t\t\t\t\tcanvas.height = img.height;\n\t\t\t\t\t\tctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n\t\t\t\t\t\tresolve(canvas.toDataURL(options === null || options === void 0 ? void 0 : options.type, options === null || options === void 0 ? void 0 : options.quality));\n\t\t\t\t\t}).catch(reject);\n\t\t\t\t} else if (typeof _target === \"object\") {\n\t\t\t\t\tconst serialized = ((options === null || options === void 0 ? void 0 : options.serializer) || getDefaultSerialization(_target))(_target);\n\t\t\t\t\treturn resolve(blobToBase64(new Blob([serialized], { type: \"application/json\" })));\n\t\t\t\t} else reject(/* @__PURE__ */ new Error(\"target is unsupported types\"));\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t}\n\t\t});\n\t\tpromise.value.then((res) => {\n\t\t\tbase64.value = (options === null || options === void 0 ? void 0 : options.dataUrl) === false ? res.replace(/^data:.*?;base64,/, \"\") : res;\n\t\t});\n\t\treturn promise.value;\n\t}\n\tif (isRef(target) || typeof target === \"function\") watch(target, execute, { immediate: true });\n\telse execute();\n\treturn {\n\t\tbase64,\n\t\tpromise,\n\t\texecute\n\t};\n}\nfunction imgLoaded(img) {\n\treturn new Promise((resolve, reject) => {\n\t\tif (!img.complete) {\n\t\t\timg.onload = () => {\n\t\t\t\tresolve();\n\t\t\t};\n\t\t\timg.onerror = reject;\n\t\t} else resolve();\n\t});\n}\nfunction blobToBase64(blob) {\n\treturn new Promise((resolve, reject) => {\n\t\tconst fr = new FileReader();\n\t\tfr.onload = (e) => {\n\t\t\tresolve(e.target.result);\n\t\t};\n\t\tfr.onerror = reject;\n\t\tfr.readAsDataURL(blob);\n\t});\n}\n//#endregion\n//#region useBattery/index.ts\n/**\n* Reactive Battery Status API.\n*\n* @see https://vueuse.org/useBattery\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useBattery(options = {}) {\n\tconst { navigator = defaultNavigator } = options;\n\tconst events = [\n\t\t\"chargingchange\",\n\t\t\"chargingtimechange\",\n\t\t\"dischargingtimechange\",\n\t\t\"levelchange\"\n\t];\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && \"getBattery\" in navigator && typeof navigator.getBattery === \"function\");\n\tconst charging = shallowRef(false);\n\tconst chargingTime = shallowRef(0);\n\tconst dischargingTime = shallowRef(0);\n\tconst level = shallowRef(1);\n\tlet battery;\n\tfunction updateBatteryInfo() {\n\t\tcharging.value = this.charging;\n\t\tchargingTime.value = this.chargingTime || 0;\n\t\tdischargingTime.value = this.dischargingTime || 0;\n\t\tlevel.value = this.level;\n\t}\n\tif (isSupported.value) navigator.getBattery().then((_battery) => {\n\t\tbattery = _battery;\n\t\tupdateBatteryInfo.call(battery);\n\t\tuseEventListener(battery, events, updateBatteryInfo, { passive: true });\n\t});\n\treturn {\n\t\tisSupported,\n\t\tcharging,\n\t\tchargingTime,\n\t\tdischargingTime,\n\t\tlevel\n\t};\n}\n//#endregion\n//#region useBluetooth/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useBluetooth(options) {\n\tlet { acceptAllDevices = false } = options || {};\n\tconst { filters = void 0, optionalServices = void 0, navigator = defaultNavigator } = options || {};\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && \"bluetooth\" in navigator);\n\tconst device = shallowRef();\n\tconst error = shallowRef(null);\n\twatch(device, () => {\n\t\tconnectToBluetoothGATTServer();\n\t});\n\tasync function requestDevice() {\n\t\tif (!isSupported.value) return;\n\t\terror.value = null;\n\t\tif (filters && filters.length > 0) acceptAllDevices = false;\n\t\ttry {\n\t\t\tdevice.value = await (navigator === null || navigator === void 0 ? void 0 : navigator.bluetooth.requestDevice({\n\t\t\t\tacceptAllDevices,\n\t\t\t\tfilters,\n\t\t\t\toptionalServices\n\t\t\t}));\n\t\t} catch (err) {\n\t\t\terror.value = err;\n\t\t}\n\t}\n\tconst server = shallowRef();\n\tconst isConnected = shallowRef(false);\n\tfunction reset() {\n\t\tisConnected.value = false;\n\t\tdevice.value = void 0;\n\t\tserver.value = void 0;\n\t}\n\tasync function connectToBluetoothGATTServer() {\n\t\terror.value = null;\n\t\tif (device.value && device.value.gatt) {\n\t\t\tuseEventListener(device, \"gattserverdisconnected\", reset, { passive: true });\n\t\t\ttry {\n\t\t\t\tserver.value = await device.value.gatt.connect();\n\t\t\t\tisConnected.value = server.value.connected;\n\t\t\t} catch (err) {\n\t\t\t\terror.value = err;\n\t\t\t}\n\t\t}\n\t}\n\ttryOnMounted(() => {\n\t\tvar _device$value$gatt;\n\t\tif (device.value) (_device$value$gatt = device.value.gatt) === null || _device$value$gatt === void 0 || _device$value$gatt.connect();\n\t});\n\ttryOnScopeDispose(() => {\n\t\tvar _device$value$gatt2;\n\t\tif (device.value) (_device$value$gatt2 = device.value.gatt) === null || _device$value$gatt2 === void 0 || _device$value$gatt2.disconnect();\n\t});\n\treturn {\n\t\tisSupported,\n\t\tisConnected: shallowReadonly(isConnected),\n\t\tdevice,\n\t\trequestDevice,\n\t\tserver,\n\t\terror\n\t};\n}\n//#endregion\n//#region useSSRWidth/index.ts\nconst ssrWidthSymbol = Symbol(\"vueuse-ssr-width\");\n/* @__NO_SIDE_EFFECTS__ */\nfunction useSSRWidth() {\n\tconst ssrWidth = hasInjectionContext() ? injectLocal(ssrWidthSymbol, null) : null;\n\treturn typeof ssrWidth === \"number\" ? ssrWidth : void 0;\n}\nfunction provideSSRWidth(width, app) {\n\tif (app !== void 0) app.provide(ssrWidthSymbol, width);\n\telse provideLocal(ssrWidthSymbol, width);\n}\n//#endregion\n//#region useMediaQuery/index.ts\n/**\n* Reactive Media Query.\n*\n* @see https://vueuse.org/useMediaQuery\n* @param query\n* @param options\n*/\nfunction useMediaQuery(query, options = {}) {\n\tconst { window = defaultWindow, ssrWidth = /* @__PURE__ */ useSSRWidth() } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && \"matchMedia\" in window && typeof window.matchMedia === \"function\");\n\tconst ssrSupport = shallowRef(typeof ssrWidth === \"number\");\n\tconst mediaQuery = shallowRef();\n\tconst matches = shallowRef(false);\n\tconst handler = (event) => {\n\t\tmatches.value = event.matches;\n\t};\n\twatchEffect(() => {\n\t\tif (ssrSupport.value) {\n\t\t\tssrSupport.value = !isSupported.value;\n\t\t\tconst queryStrings = toValue(query).split(\",\");\n\t\t\tmatches.value = queryStrings.some((queryString) => {\n\t\t\t\tconst not = queryString.includes(\"not all\");\n\t\t\t\tconst minWidth = queryString.match(/\\(\\s*min-width:\\s*(-?\\d+(?:\\.\\d*)?[a-z]+\\s*)\\)/);\n\t\t\t\tconst maxWidth = queryString.match(/\\(\\s*max-width:\\s*(-?\\d+(?:\\.\\d*)?[a-z]+\\s*)\\)/);\n\t\t\t\tlet res = Boolean(minWidth || maxWidth);\n\t\t\t\tif (minWidth && res) res = ssrWidth >= pxValue(minWidth[1]);\n\t\t\t\tif (maxWidth && res) res = ssrWidth <= pxValue(maxWidth[1]);\n\t\t\t\treturn not ? !res : res;\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tif (!isSupported.value) return;\n\t\tmediaQuery.value = window.matchMedia(toValue(query));\n\t\tmatches.value = mediaQuery.value.matches;\n\t});\n\tuseEventListener(mediaQuery, \"change\", handler, { passive: true });\n\treturn computed(() => matches.value);\n}\n//#endregion\n//#region useBreakpoints/breakpoints.ts\n/**\n* Breakpoints from Tailwind V2\n*\n* @see https://tailwindcss.com/docs/breakpoints\n*/\nconst breakpointsTailwind = {\n\t\"sm\": 640,\n\t\"md\": 768,\n\t\"lg\": 1024,\n\t\"xl\": 1280,\n\t\"2xl\": 1536\n};\n/**\n* Breakpoints from Bootstrap V5\n*\n* @see https://getbootstrap.com/docs/5.0/layout/breakpoints\n*/\nconst breakpointsBootstrapV5 = {\n\txs: 0,\n\tsm: 576,\n\tmd: 768,\n\tlg: 992,\n\txl: 1200,\n\txxl: 1400\n};\n/**\n* Breakpoints from Vuetify V2\n*\n* @see https://v2.vuetifyjs.com/en/features/breakpoints/\n*/\nconst breakpointsVuetifyV2 = {\n\txs: 0,\n\tsm: 600,\n\tmd: 960,\n\tlg: 1264,\n\txl: 1904\n};\n/**\n* Breakpoints from Vuetify V3\n*\n* @see https://vuetifyjs.com/en/styles/float/#overview\n*/\nconst breakpointsVuetifyV3 = {\n\txs: 0,\n\tsm: 600,\n\tmd: 960,\n\tlg: 1280,\n\txl: 1920,\n\txxl: 2560\n};\n/**\n* Alias to `breakpointsVuetifyV2`\n*\n* @deprecated explictly use `breakpointsVuetifyV2` or `breakpointsVuetifyV3` instead\n*/\nconst breakpointsVuetify = breakpointsVuetifyV2;\n/**\n* Breakpoints from Ant Design\n*\n* @see https://ant.design/components/layout/#breakpoint-width\n*/\nconst breakpointsAntDesign = {\n\txs: 480,\n\tsm: 576,\n\tmd: 768,\n\tlg: 992,\n\txl: 1200,\n\txxl: 1600\n};\n/**\n* Breakpoints from Quasar V2\n*\n* @see https://quasar.dev/style/breakpoints\n*/\nconst breakpointsQuasar = {\n\txs: 0,\n\tsm: 600,\n\tmd: 1024,\n\tlg: 1440,\n\txl: 1920\n};\n/**\n* Sematic Breakpoints\n*/\nconst breakpointsSematic = {\n\tmobileS: 320,\n\tmobileM: 375,\n\tmobileL: 425,\n\ttablet: 768,\n\tlaptop: 1024,\n\tlaptopL: 1440,\n\tdesktop4K: 2560\n};\n/**\n* Breakpoints from Master CSS\n*\n* @see https://docs.master.co/css/breakpoints\n*/\nconst breakpointsMasterCss = {\n\t\"3xs\": 360,\n\t\"2xs\": 480,\n\t\"xs\": 600,\n\t\"sm\": 768,\n\t\"md\": 1024,\n\t\"lg\": 1280,\n\t\"xl\": 1440,\n\t\"2xl\": 1600,\n\t\"3xl\": 1920,\n\t\"4xl\": 2560\n};\n/**\n* Breakpoints from PrimeFlex\n*\n* @see https://primeflex.org/installation\n*/\nconst breakpointsPrimeFlex = {\n\tsm: 576,\n\tmd: 768,\n\tlg: 992,\n\txl: 1200\n};\n/**\n* Breakpoints from ElementUI/ElementPlus\n*\n* @see https://element.eleme.io/#/en-US/component/layout\n* @see https://element-plus.org/en-US/component/layout.html\n*/\nconst breakpointsElement = {\n\txs: 0,\n\tsm: 768,\n\tmd: 992,\n\tlg: 1200,\n\txl: 1920\n};\n//#endregion\n//#region useBreakpoints/index.ts\n/**\n* Reactively viewport breakpoints\n*\n* @see https://vueuse.org/useBreakpoints\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useBreakpoints(breakpoints, options = {}) {\n\tfunction getValue(k, delta) {\n\t\tlet v = toValue(breakpoints[toValue(k)]);\n\t\tif (delta != null) v = increaseWithUnit(v, delta);\n\t\tif (typeof v === \"number\") v = `${v}px`;\n\t\treturn v;\n\t}\n\tconst { window = defaultWindow, strategy = \"min-width\", ssrWidth = /* @__PURE__ */ useSSRWidth() } = options;\n\tconst ssrSupport = typeof ssrWidth === \"number\";\n\tconst mounted = ssrSupport ? shallowRef(false) : { value: true };\n\tif (ssrSupport) tryOnMounted(() => mounted.value = !!window);\n\tfunction match(query, size) {\n\t\tif (!mounted.value && ssrSupport) return query === \"min\" ? ssrWidth >= pxValue(size) : ssrWidth <= pxValue(size);\n\t\tif (!window) return false;\n\t\treturn window.matchMedia(`(${query}-width: ${size})`).matches;\n\t}\n\tconst greaterOrEqual = (k) => {\n\t\treturn useMediaQuery(() => `(min-width: ${getValue(k)})`, options);\n\t};\n\tconst smallerOrEqual = (k) => {\n\t\treturn useMediaQuery(() => `(max-width: ${getValue(k)})`, options);\n\t};\n\tconst shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\n\t\tObject.defineProperty(shortcuts, k, {\n\t\t\tget: () => strategy === \"min-width\" ? greaterOrEqual(k) : smallerOrEqual(k),\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true\n\t\t});\n\t\treturn shortcuts;\n\t}, {});\n\tfunction current() {\n\t\tconst points = Object.keys(breakpoints).map((k) => [\n\t\t\tk,\n\t\t\tshortcutMethods[k],\n\t\t\tpxValue(getValue(k))\n\t\t]).sort((a, b) => a[2] - b[2]);\n\t\treturn computed(() => points.filter(([, v]) => v.value).map(([k]) => k));\n\t}\n\treturn Object.assign(shortcutMethods, {\n\t\tgreaterOrEqual,\n\t\tsmallerOrEqual,\n\t\tgreater(k) {\n\t\t\treturn useMediaQuery(() => `(min-width: ${getValue(k, .1)})`, options);\n\t\t},\n\t\tsmaller(k) {\n\t\t\treturn useMediaQuery(() => `(max-width: ${getValue(k, -.1)})`, options);\n\t\t},\n\t\tbetween(a, b) {\n\t\t\treturn useMediaQuery(() => `(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -.1)})`, options);\n\t\t},\n\t\tisGreater(k) {\n\t\t\treturn match(\"min\", getValue(k, .1));\n\t\t},\n\t\tisGreaterOrEqual(k) {\n\t\t\treturn match(\"min\", getValue(k));\n\t\t},\n\t\tisSmaller(k) {\n\t\t\treturn match(\"max\", getValue(k, -.1));\n\t\t},\n\t\tisSmallerOrEqual(k) {\n\t\t\treturn match(\"max\", getValue(k));\n\t\t},\n\t\tisInBetween(a, b) {\n\t\t\treturn match(\"min\", getValue(a)) && match(\"max\", getValue(b, -.1));\n\t\t},\n\t\tcurrent,\n\t\tactive() {\n\t\t\tconst bps = current();\n\t\t\treturn computed(() => bps.value.length === 0 ? \"\" : bps.value.at(strategy === \"min-width\" ? -1 : 0));\n\t\t}\n\t});\n}\n//#endregion\n//#region useBroadcastChannel/index.ts\n/**\n* Reactive BroadcastChannel\n*\n* @see https://vueuse.org/useBroadcastChannel\n* @see https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel\n* @param options\n*\n*/\nfunction useBroadcastChannel(options) {\n\tconst { name, window = defaultWindow } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && \"BroadcastChannel\" in window);\n\tconst isClosed = shallowRef(false);\n\tconst channel = shallowRef();\n\tconst data = shallowRef();\n\tconst error = shallowRef(null);\n\tconst post = (data) => {\n\t\tif (channel.value) channel.value.postMessage(data);\n\t};\n\tconst close = () => {\n\t\tif (channel.value) channel.value.close();\n\t\tisClosed.value = true;\n\t};\n\tif (isSupported.value) tryOnMounted(() => {\n\t\terror.value = null;\n\t\tchannel.value = new BroadcastChannel(name);\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(channel, \"message\", (e) => {\n\t\t\tdata.value = e.data;\n\t\t}, listenerOptions);\n\t\tuseEventListener(channel, \"messageerror\", (e) => {\n\t\t\terror.value = e;\n\t\t}, listenerOptions);\n\t\tuseEventListener(channel, \"close\", () => {\n\t\t\tisClosed.value = true;\n\t\t}, listenerOptions);\n\t});\n\ttryOnScopeDispose(() => {\n\t\tclose();\n\t});\n\treturn {\n\t\tisSupported,\n\t\tchannel,\n\t\tdata,\n\t\tpost,\n\t\tclose,\n\t\terror,\n\t\tisClosed\n\t};\n}\n//#endregion\n//#region useBrowserLocation/index.ts\nconst WRITABLE_PROPERTIES = [\n\t\"hash\",\n\t\"host\",\n\t\"hostname\",\n\t\"href\",\n\t\"pathname\",\n\t\"port\",\n\t\"protocol\",\n\t\"search\"\n];\n/**\n* Reactive browser location.\n*\n* @see https://vueuse.org/useBrowserLocation\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useBrowserLocation(options = {}) {\n\tconst { window = defaultWindow } = options;\n\tconst refs = Object.fromEntries(WRITABLE_PROPERTIES.map((key) => [key, ref()]));\n\tconst buildState = (trigger) => {\n\t\tvar _window$location;\n\t\tconst { state, length } = (window === null || window === void 0 ? void 0 : window.history) || {};\n\t\tconst { origin } = (window === null || window === void 0 ? void 0 : window.location) || {};\n\t\tfor (const key of WRITABLE_PROPERTIES) refs[key].value = window === null || window === void 0 || (_window$location = window.location) === null || _window$location === void 0 ? void 0 : _window$location[key];\n\t\treturn reactive({\n\t\t\ttrigger,\n\t\t\tstate,\n\t\t\tlength,\n\t\t\torigin,\n\t\t\t...refs\n\t\t});\n\t};\n\tconst state = ref(buildState(\"load\"));\n\tfor (const [key, ref] of objectEntries(refs)) watch(ref, (value) => {\n\t\tif (!(window === null || window === void 0 ? void 0 : window.location) || window.location[key] === value) return;\n\t\twindow.location[key] = value;\n\t});\n\tif (window) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(window, \"popstate\", () => state.value = buildState(\"popstate\"), listenerOptions);\n\t\tuseEventListener(window, \"hashchange\", () => state.value = buildState(\"hashchange\"), listenerOptions);\n\t}\n\treturn state;\n}\n//#endregion\n//#region useCached/index.ts\nfunction useCached(refValue, comparator = (newSourceValue, cachedValue) => newSourceValue === cachedValue, options) {\n\tconst { deepRefs = true, ...watchOptions } = options || {};\n\tconst cachedValue = createRef(refValue.value, deepRefs);\n\twatch(() => refValue.value, (value) => {\n\t\tif (!comparator(value, cachedValue.value)) cachedValue.value = value;\n\t}, watchOptions);\n\treturn cachedValue;\n}\n//#endregion\n//#region usePermission/index.ts\n/**\n* Reactive Permissions API.\n*\n* @see https://vueuse.org/usePermission\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePermission(permissionDesc, options = {}) {\n\tconst { controls = false, navigator = defaultNavigator } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && \"permissions\" in navigator);\n\tconst permissionStatus = shallowRef();\n\tconst desc = typeof permissionDesc === \"string\" ? { name: permissionDesc } : permissionDesc;\n\tconst state = shallowRef();\n\tconst update = () => {\n\t\tvar _permissionStatus$val, _permissionStatus$val2;\n\t\tstate.value = (_permissionStatus$val = (_permissionStatus$val2 = permissionStatus.value) === null || _permissionStatus$val2 === void 0 ? void 0 : _permissionStatus$val2.state) !== null && _permissionStatus$val !== void 0 ? _permissionStatus$val : \"prompt\";\n\t};\n\tuseEventListener(permissionStatus, \"change\", update, { passive: true });\n\tconst query = createSingletonPromise(async () => {\n\t\tif (!isSupported.value) return;\n\t\tif (!permissionStatus.value) try {\n\t\t\tpermissionStatus.value = await navigator.permissions.query(desc);\n\t\t} catch (_unused) {\n\t\t\tpermissionStatus.value = void 0;\n\t\t} finally {\n\t\t\tupdate();\n\t\t}\n\t\tif (controls) return toRaw(permissionStatus.value);\n\t});\n\tquery();\n\tif (controls) return {\n\t\tstate,\n\t\tisSupported,\n\t\tquery\n\t};\n\telse return state;\n}\n//#endregion\n//#region useClipboard/index.ts\nfunction useClipboard(options = {}) {\n\tconst { navigator = defaultNavigator, read = false, source, copiedDuring = 1500, legacy = false } = options;\n\tconst isClipboardApiSupported = /* @__PURE__ */ useSupported(() => navigator && \"clipboard\" in navigator);\n\tconst permissionRead = usePermission(\"clipboard-read\");\n\tconst permissionWrite = usePermission(\"clipboard-write\");\n\tconst isSupported = computed(() => isClipboardApiSupported.value || legacy);\n\tconst text = shallowRef(\"\");\n\tconst copied = shallowRef(false);\n\tconst copyPending = shallowRef(false);\n\tconst timeout = useTimeoutFn(() => copied.value = false, copiedDuring, { immediate: false });\n\tlet lastLegacyId = 0;\n\tasync function updateText() {\n\t\tlet useLegacy = !(isClipboardApiSupported.value && isAllowed(permissionRead.value));\n\t\tif (!useLegacy) try {\n\t\t\ttext.value = await navigator.clipboard.readText();\n\t\t} catch (_unused) {\n\t\t\tuseLegacy = true;\n\t\t}\n\t\tif (useLegacy) text.value = legacyRead();\n\t}\n\tif (isSupported.value && read) useEventListener([\"copy\", \"cut\"], updateText, { passive: true });\n\tasync function copy(value) {\n\t\tconst resolvedValue = value !== null && value !== void 0 ? value : toValue(source);\n\t\tif (isSupported.value && resolvedValue != null) {\n\t\t\tcopyPending.value = true;\n\t\t\tlet useLegacy = !(isClipboardApiSupported.value && isAllowed(permissionWrite.value));\n\t\t\tif (!useLegacy) try {\n\t\t\t\tconst clipboardItem = createClipboardItem(resolvedValue);\n\t\t\t\tawait navigator.clipboard.write([clipboardItem]);\n\t\t\t} catch (_unused2) {\n\t\t\t\tuseLegacy = true;\n\t\t\t}\n\t\t\tif (useLegacy) if (typeof resolvedValue === \"string\") {\n\t\t\t\ttext.value = resolvedValue;\n\t\t\t\tlegacyCopy(resolvedValue);\n\t\t\t} else {\n\t\t\t\tconst currentId = ++lastLegacyId;\n\t\t\t\tconst resolvedText = await resolvedValue();\n\t\t\t\tif (resolvedText != null && currentId === lastLegacyId) {\n\t\t\t\t\ttext.value = resolvedText;\n\t\t\t\t\tlegacyCopy(resolvedText);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcopied.value = true;\n\t\t\ttimeout.start();\n\t\t\tcopyPending.value = false;\n\t\t}\n\t}\n\tfunction createClipboardItem(value) {\n\t\tif (typeof value === \"string\") {\n\t\t\ttext.value = value;\n\t\t\treturn new ClipboardItem({ \"text/plain\": value });\n\t\t} else return new ClipboardItem({ \"text/plain\": value().then((resolvedText = \"\") => {\n\t\t\ttext.value = resolvedText;\n\t\t\treturn new Blob([resolvedText], { type: \"text/plain\" });\n\t\t}) });\n\t}\n\tfunction legacyCopy(value) {\n\t\tconst ta = document.createElement(\"textarea\");\n\t\tta.value = value;\n\t\tta.style.position = \"absolute\";\n\t\tta.style.opacity = \"0\";\n\t\tta.setAttribute(\"readonly\", \"\");\n\t\tdocument.body.appendChild(ta);\n\t\tta.select();\n\t\tdocument.execCommand(\"copy\");\n\t\tta.remove();\n\t}\n\tfunction legacyRead() {\n\t\tvar _document$getSelectio, _document, _document$getSelectio2;\n\t\treturn (_document$getSelectio = (_document = document) === null || _document === void 0 || (_document$getSelectio2 = _document.getSelection) === null || _document$getSelectio2 === void 0 || (_document$getSelectio2 = _document$getSelectio2.call(_document)) === null || _document$getSelectio2 === void 0 ? void 0 : _document$getSelectio2.toString()) !== null && _document$getSelectio !== void 0 ? _document$getSelectio : \"\";\n\t}\n\tfunction isAllowed(status) {\n\t\treturn status === \"granted\" || status === \"prompt\";\n\t}\n\treturn {\n\t\tcopyPending: shallowReadonly(copyPending),\n\t\tisSupported,\n\t\ttext: shallowReadonly(text),\n\t\tcopied: shallowReadonly(copied),\n\t\tcopy\n\t};\n}\n//#endregion\n//#region useClipboardItems/index.ts\nfunction useClipboardItems(options = {}) {\n\tconst { navigator = defaultNavigator, read = false, source, copiedDuring = 1500 } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && \"clipboard\" in navigator);\n\tconst content = shallowRef([]);\n\tconst copied = shallowRef(false);\n\tconst timeout = useTimeoutFn(() => copied.value = false, copiedDuring, { immediate: false });\n\tfunction updateContent() {\n\t\tif (isSupported.value) navigator.clipboard.read().then((items) => {\n\t\t\tcontent.value = items;\n\t\t});\n\t}\n\tif (isSupported.value && read) useEventListener([\"copy\", \"cut\"], updateContent, { passive: true });\n\tasync function copy(value = toValue(source)) {\n\t\tif (isSupported.value && value != null) {\n\t\t\tawait navigator.clipboard.write(value);\n\t\t\tcontent.value = value;\n\t\t\tcopied.value = true;\n\t\t\ttimeout.start();\n\t\t}\n\t}\n\treturn {\n\t\tisSupported,\n\t\tcontent: shallowReadonly(content),\n\t\tcopied: shallowReadonly(copied),\n\t\tcopy,\n\t\tread: updateContent\n\t};\n}\n//#endregion\n//#region useCloned/index.ts\nfunction cloneFnJSON(source) {\n\treturn JSON.parse(JSON.stringify(source));\n}\nfunction useCloned(source, options = {}) {\n\tconst cloned = ref({});\n\tconst isModified = shallowRef(false);\n\tlet _lastSync = false;\n\tconst { manual, clone = cloneFnJSON, deep = true, immediate = true } = options;\n\twatch(cloned, () => {\n\t\tif (_lastSync) {\n\t\t\t_lastSync = false;\n\t\t\treturn;\n\t\t}\n\t\tisModified.value = true;\n\t}, {\n\t\tdeep: true,\n\t\tflush: \"sync\"\n\t});\n\tfunction sync() {\n\t\t_lastSync = true;\n\t\tisModified.value = false;\n\t\tcloned.value = clone(toValue(source));\n\t}\n\tif (!manual && (isRef(source) || typeof source === \"function\")) watch(source, sync, {\n\t\t...options,\n\t\tdeep,\n\t\timmediate\n\t});\n\telse sync();\n\treturn {\n\t\tcloned,\n\t\tisModified,\n\t\tsync\n\t};\n}\n//#endregion\n//#region ssr-handlers.ts\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\tif (!(globalKey in _global)) _global[globalKey] = _global[globalKey] || {};\n\treturn _global[globalKey];\n}\nfunction getSSRHandler(key, fallback) {\n\treturn handlers[key] || fallback;\n}\nfunction setSSRHandler(key, fn) {\n\thandlers[key] = fn;\n}\n//#endregion\n//#region usePreferredDark/index.ts\n/**\n* Reactive dark theme preference.\n*\n* @see https://vueuse.org/usePreferredDark\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredDark(options) {\n\treturn useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n//#endregion\n//#region useStorage/guess.ts\nfunction guessSerializerType(rawInit) {\n\treturn 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//#endregion\n//#region useStorage/index.ts\nconst StorageSerializers = {\n\tboolean: {\n\t\tread: (v) => v === \"true\",\n\t\twrite: (v) => String(v)\n\t},\n\tobject: {\n\t\tread: (v) => JSON.parse(v),\n\t\twrite: (v) => JSON.stringify(v)\n\t},\n\tnumber: {\n\t\tread: (v) => Number.parseFloat(v),\n\t\twrite: (v) => String(v)\n\t},\n\tany: {\n\t\tread: (v) => v,\n\t\twrite: (v) => String(v)\n\t},\n\tstring: {\n\t\tread: (v) => v,\n\t\twrite: (v) => String(v)\n\t},\n\tmap: {\n\t\tread: (v) => new Map(JSON.parse(v)),\n\t\twrite: (v) => JSON.stringify(Array.from(v.entries()))\n\t},\n\tset: {\n\t\tread: (v) => new Set(JSON.parse(v)),\n\t\twrite: (v) => JSON.stringify(Array.from(v))\n\t},\n\tdate: {\n\t\tread: (v) => new Date(v),\n\t\twrite: (v) => v.toISOString()\n\t}\n};\nconst customStorageEventName = \"vueuse-storage\";\n/**\n* Reactive LocalStorage/SessionStorage.\n*\n* @see https://vueuse.org/useStorage\n*/\nfunction useStorage(key, defaults, storage, options = {}) {\n\tvar _options$serializer;\n\tconst { flush = \"pre\", deep = true, listenToStorageChanges = true, writeDefaults = true, mergeDefaults = false, shallow, window = defaultWindow, eventFilter, onError = (e) => {\n\t\tconsole.error(e);\n\t}, initOnMounted } = options;\n\tconst data = (shallow ? shallowRef : ref)(typeof defaults === \"function\" ? defaults() : defaults);\n\tconst keyComputed = computed(() => toValue(key));\n\tif (!storage) try {\n\t\tstorage = getSSRHandler(\"getDefaultStorage\", () => defaultWindow === null || defaultWindow === void 0 ? void 0 : defaultWindow.localStorage)();\n\t} catch (e) {\n\t\tonError(e);\n\t}\n\tif (!storage) return data;\n\tconst rawInit = toValue(defaults);\n\tconst type = guessSerializerType(rawInit);\n\tconst serializer = (_options$serializer = options.serializer) !== null && _options$serializer !== void 0 ? _options$serializer : StorageSerializers[type];\n\tconst { pause: pauseWatch, resume: resumeWatch } = watchPausable(data, (newValue) => write(newValue), {\n\t\tflush,\n\t\tdeep,\n\t\teventFilter\n\t});\n\twatch(keyComputed, () => update(), { flush });\n\tlet firstMounted = false;\n\tconst onStorageEvent = (ev) => {\n\t\tif (initOnMounted && !firstMounted) return;\n\t\tupdate(ev);\n\t};\n\tconst onStorageCustomEvent = (ev) => {\n\t\tif (initOnMounted && !firstMounted) return;\n\t\tupdateFromCustomEvent(ev);\n\t};\n\t/**\n\t* The custom event is needed for same-document syncing when using custom\n\t* storage backends, but it doesn't work across different documents.\n\t*\n\t* TODO: Consider implementing a BroadcastChannel-based solution that fixes this.\n\t*/\n\tif (window && listenToStorageChanges) if (storage instanceof Storage) useEventListener(window, \"storage\", onStorageEvent, { passive: true });\n\telse useEventListener(window, customStorageEventName, onStorageCustomEvent);\n\tif (initOnMounted) tryOnMounted(() => {\n\t\tfirstMounted = true;\n\t\tupdate();\n\t});\n\telse update();\n\tfunction dispatchWriteEvent(oldValue, newValue) {\n\t\tif (window) {\n\t\t\tconst payload = {\n\t\t\t\tkey: keyComputed.value,\n\t\t\t\toldValue,\n\t\t\t\tnewValue,\n\t\t\t\tstorageArea: storage\n\t\t\t};\n\t\t\twindow.dispatchEvent(storage instanceof Storage ? new StorageEvent(\"storage\", payload) : new CustomEvent(customStorageEventName, { detail: payload }));\n\t\t}\n\t}\n\tfunction write(v) {\n\t\ttry {\n\t\t\tconst oldValue = storage.getItem(keyComputed.value);\n\t\t\tif (v == null) {\n\t\t\t\tdispatchWriteEvent(oldValue, null);\n\t\t\t\tstorage.removeItem(keyComputed.value);\n\t\t\t} else {\n\t\t\t\tconst serialized = serializer.write(v);\n\t\t\t\tif (oldValue !== serialized) {\n\t\t\t\t\tstorage.setItem(keyComputed.value, serialized);\n\t\t\t\t\tdispatchWriteEvent(oldValue, serialized);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t}\n\tfunction read(event) {\n\t\tconst rawValue = event ? event.newValue : storage.getItem(keyComputed.value);\n\t\tif (rawValue == null) {\n\t\t\tif (writeDefaults && rawInit != null) storage.setItem(keyComputed.value, serializer.write(rawInit));\n\t\t\treturn rawInit;\n\t\t} else if (!event && mergeDefaults) {\n\t\t\tconst value = serializer.read(rawValue);\n\t\t\tif (typeof mergeDefaults === \"function\") return mergeDefaults(value, rawInit);\n\t\t\telse if (type === \"object\" && !Array.isArray(value)) return {\n\t\t\t\t...rawInit,\n\t\t\t\t...value\n\t\t\t};\n\t\t\treturn value;\n\t\t} else if (typeof rawValue !== \"string\") return rawValue;\n\t\telse return serializer.read(rawValue);\n\t}\n\tfunction update(event) {\n\t\tif (event && event.storageArea !== storage) return;\n\t\tif (event && event.key == null) {\n\t\t\tdata.value = rawInit;\n\t\t\treturn;\n\t\t}\n\t\tif (event && event.key !== keyComputed.value) return;\n\t\tpauseWatch();\n\t\ttry {\n\t\t\tconst serializedData = serializer.write(data.value);\n\t\t\tif (event === void 0 || (event === null || event === void 0 ? void 0 : event.newValue) !== serializedData) data.value = read(event);\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t} finally {\n\t\t\tif (event) nextTick(resumeWatch);\n\t\t\telse resumeWatch();\n\t\t}\n\t}\n\tfunction updateFromCustomEvent(event) {\n\t\tupdate(event.detail);\n\t}\n\treturn data;\n}\n//#endregion\n//#region useColorMode/index.ts\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}\";\n/**\n* Reactive color mode with auto data persistence.\n*\n* @see https://vueuse.org/useColorMode\n* @param options\n*/\nfunction useColorMode(options = {}) {\n\tconst { selector = \"html\", attribute = \"class\", initialValue = \"auto\", window = defaultWindow, storage, storageKey = \"vueuse-color-scheme\", listenToStorageChanges = true, storageRef, emitAuto, disableTransition = true } = options;\n\tconst modes = {\n\t\tauto: \"\",\n\t\tlight: \"light\",\n\t\tdark: \"dark\",\n\t\t...options.modes || {}\n\t};\n\tconst preferredDark = usePreferredDark({ window });\n\tconst system = computed(() => preferredDark.value ? \"dark\" : \"light\");\n\tconst store = storageRef || (storageKey == null ? toRef(initialValue) : useStorage(storageKey, initialValue, storage, {\n\t\twindow,\n\t\tlistenToStorageChanges\n\t}));\n\tconst state = computed(() => store.value === \"auto\" ? system.value : store.value);\n\tconst updateHTMLAttrs = getSSRHandler(\"updateHTMLAttrs\", (selector, attribute, value) => {\n\t\tconst el = typeof selector === \"string\" ? window === null || window === void 0 ? void 0 : window.document.querySelector(selector) : unrefElement(selector);\n\t\tif (!el) return;\n\t\tconst classesToAdd = /* @__PURE__ */ new Set();\n\t\tconst classesToRemove = /* @__PURE__ */ new Set();\n\t\tlet attributeToChange = null;\n\t\tif (attribute === \"class\") {\n\t\t\tconst current = value.split(/\\s/g);\n\t\t\tObject.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n\t\t\t\tif (current.includes(v)) classesToAdd.add(v);\n\t\t\t\telse classesToRemove.add(v);\n\t\t\t});\n\t\t} else attributeToChange = {\n\t\t\tkey: attribute,\n\t\t\tvalue\n\t\t};\n\t\tif (classesToAdd.size === 0 && classesToRemove.size === 0 && attributeToChange === null) return;\n\t\tlet style;\n\t\tif (disableTransition) {\n\t\t\tstyle = window.document.createElement(\"style\");\n\t\t\tstyle.appendChild(document.createTextNode(CSS_DISABLE_TRANS));\n\t\t\twindow.document.head.appendChild(style);\n\t\t}\n\t\tfor (const c of classesToAdd) el.classList.add(c);\n\t\tfor (const c of classesToRemove) el.classList.remove(c);\n\t\tif (attributeToChange) el.setAttribute(attributeToChange.key, attributeToChange.value);\n\t\tif (disableTransition) {\n\t\t\twindow.getComputedStyle(style).opacity;\n\t\t\tdocument.head.removeChild(style);\n\t\t}\n\t});\n\tfunction defaultOnChanged(mode) {\n\t\tvar _modes$mode;\n\t\tupdateHTMLAttrs(selector, attribute, (_modes$mode = modes[mode]) !== null && _modes$mode !== void 0 ? _modes$mode : mode);\n\t}\n\tfunction onChanged(mode) {\n\t\tif (options.onChanged) options.onChanged(mode, defaultOnChanged);\n\t\telse defaultOnChanged(mode);\n\t}\n\twatch(state, onChanged, {\n\t\tflush: \"post\",\n\t\timmediate: true\n\t});\n\ttryOnMounted(() => onChanged(state.value));\n\tconst auto = computed({\n\t\tget() {\n\t\t\treturn emitAuto ? store.value : state.value;\n\t\t},\n\t\tset(v) {\n\t\t\tstore.value = v;\n\t\t}\n\t});\n\treturn Object.assign(auto, {\n\t\tstore,\n\t\tsystem,\n\t\tstate\n\t});\n}\n//#endregion\n//#region useConfirmDialog/index.ts\n/**\n* Hooks for creating confirm dialogs. Useful for modal windows, popups and logins.\n*\n* @see https://vueuse.org/useConfirmDialog/\n* @param revealed `boolean` `ref` that handles a modal window\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useConfirmDialog(revealed = shallowRef(false)) {\n\tconst confirmHook = createEventHook();\n\tconst cancelHook = createEventHook();\n\tconst revealHook = createEventHook();\n\tlet _resolve = noop;\n\tconst reveal = (data) => {\n\t\trevealHook.trigger(data);\n\t\trevealed.value = true;\n\t\treturn new Promise((resolve) => {\n\t\t\t_resolve = resolve;\n\t\t});\n\t};\n\tconst confirm = (data) => {\n\t\trevealed.value = false;\n\t\tconfirmHook.trigger(data);\n\t\t_resolve({\n\t\t\tdata,\n\t\t\tisCanceled: false\n\t\t});\n\t};\n\tconst cancel = (data) => {\n\t\trevealed.value = false;\n\t\tcancelHook.trigger(data);\n\t\t_resolve({\n\t\t\tdata,\n\t\t\tisCanceled: true\n\t\t});\n\t};\n\treturn {\n\t\tisRevealed: computed(() => revealed.value),\n\t\treveal,\n\t\tconfirm,\n\t\tcancel,\n\t\tonReveal: revealHook.on,\n\t\tonConfirm: confirmHook.on,\n\t\tonCancel: cancelHook.on\n\t};\n}\n//#endregion\n//#region useCountdown/index.ts\nfunction getDefaultScheduler$8(options) {\n\tif (\"interval\" in options || \"immediate\" in options) {\n\t\tconst { interval = 1e3, immediate = false } = options;\n\t\treturn (cb) => useIntervalFn(cb, interval, { immediate });\n\t}\n\treturn (cb) => useIntervalFn(cb, 1e3, { immediate: false });\n}\n/**\n* Reactive countdown timer in seconds.\n*\n* @param initialCountdown\n* @param options\n*\n* @see https://vueuse.org/useCountdown\n*/\nfunction useCountdown(initialCountdown, options = {}) {\n\tconst remaining = shallowRef(toValue(initialCountdown));\n\tconst { scheduler = getDefaultScheduler$8(options), onTick, onComplete } = options;\n\tconst controls = scheduler(() => {\n\t\tconst value = remaining.value - 1;\n\t\tremaining.value = value < 0 ? 0 : value;\n\t\tonTick === null || onTick === void 0 || onTick();\n\t\tif (remaining.value <= 0) {\n\t\t\tcontrols.pause();\n\t\t\tonComplete === null || onComplete === void 0 || onComplete();\n\t\t}\n\t});\n\tconst reset = (countdown) => {\n\t\tvar _toValue;\n\t\tremaining.value = (_toValue = toValue(countdown)) !== null && _toValue !== void 0 ? _toValue : toValue(initialCountdown);\n\t};\n\tconst stop = () => {\n\t\tcontrols.pause();\n\t\treset();\n\t};\n\tconst resume = () => {\n\t\tif (!controls.isActive.value) {\n\t\t\tif (remaining.value > 0) controls.resume();\n\t\t}\n\t};\n\tconst start = (countdown) => {\n\t\treset(countdown);\n\t\tcontrols.resume();\n\t};\n\treturn {\n\t\tremaining,\n\t\treset,\n\t\tstop,\n\t\tstart,\n\t\tpause: controls.pause,\n\t\tresume,\n\t\tisActive: controls.isActive\n\t};\n}\n//#endregion\n//#region useCssSupports/index.ts\nfunction useCssSupports(...args) {\n\tlet options = {};\n\tif (typeof toValue(args.at(-1)) === \"object\") options = args.pop();\n\tconst [prop, value] = args;\n\tconst { window = defaultWindow, ssrValue = false } = options;\n\tconst isMounted = useMounted();\n\treturn { isSupported: computed(() => {\n\t\tif (!isClient || !isMounted.value) return ssrValue;\n\t\treturn args.length === 2 ? window === null || window === void 0 ? void 0 : window.CSS.supports(toValue(prop), toValue(value)) : window === null || window === void 0 ? void 0 : window.CSS.supports(toValue(prop));\n\t}) };\n}\n//#endregion\n//#region useCssVar/index.ts\n/**\n* Manipulate CSS variables.\n*\n* @see https://vueuse.org/useCssVar\n* @param prop\n* @param target\n* @param options\n*/\nfunction useCssVar(prop, target, options = {}) {\n\tconst { window = defaultWindow, initialValue, observe = false } = options;\n\tconst variable = shallowRef(initialValue);\n\tconst elRef = computed(() => {\n\t\tvar _window$document;\n\t\treturn unrefElement(target) || (window === null || window === void 0 || (_window$document = window.document) === null || _window$document === void 0 ? void 0 : _window$document.documentElement);\n\t});\n\tfunction updateCssVar() {\n\t\tconst key = toValue(prop);\n\t\tconst el = toValue(elRef);\n\t\tif (el && window && key) {\n\t\t\tvar _window$getComputedSt;\n\t\t\tconst value = (_window$getComputedSt = window.getComputedStyle(el).getPropertyValue(key)) === null || _window$getComputedSt === void 0 ? void 0 : _window$getComputedSt.trim();\n\t\t\tvariable.value = value || variable.value || initialValue;\n\t\t}\n\t}\n\tif (observe) useMutationObserver(elRef, updateCssVar, {\n\t\tattributeFilter: [\"style\", \"class\"],\n\t\twindow\n\t});\n\twatch([elRef, () => toValue(prop)], (_, old) => {\n\t\tif (old[0] && old[1]) old[0].style.removeProperty(old[1]);\n\t\tupdateCssVar();\n\t}, { immediate: true });\n\twatch([variable, elRef], ([val, el]) => {\n\t\tconst raw_prop = toValue(prop);\n\t\tif ((el === null || el === void 0 ? void 0 : el.style) && raw_prop) if (val == null) el.style.removeProperty(raw_prop);\n\t\telse el.style.setProperty(raw_prop, val);\n\t}, { immediate: true });\n\treturn variable;\n}\n//#endregion\n//#region useCurrentElement/index.ts\nfunction useCurrentElement(rootComponent) {\n\tconst vm = getCurrentInstance();\n\tconst currentElement = computedWithControl(() => null, () => rootComponent ? unrefElement(rootComponent) : vm.proxy.$el);\n\tonUpdated(currentElement.trigger);\n\tonMounted(currentElement.trigger);\n\treturn currentElement;\n}\n//#endregion\n//#region useCycleList/index.ts\n/**\n* Cycle through a list of items\n*\n* @see https://vueuse.org/useCycleList\n*/\nfunction useCycleList(list, options) {\n\tconst state = shallowRef(getInitialValue());\n\tconst listRef = toRef(list);\n\tconst index = computed({\n\t\tget() {\n\t\t\tvar _options$fallbackInde;\n\t\t\tconst targetList = listRef.value;\n\t\t\tlet index = (options === null || options === void 0 ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, targetList) : targetList.indexOf(state.value);\n\t\t\tif (index < 0) index = (_options$fallbackInde = options === null || options === void 0 ? void 0 : options.fallbackIndex) !== null && _options$fallbackInde !== void 0 ? _options$fallbackInde : 0;\n\t\t\treturn index;\n\t\t},\n\t\tset(v) {\n\t\t\tset(v);\n\t\t}\n\t});\n\tfunction set(i) {\n\t\tconst targetList = listRef.value;\n\t\tconst length = targetList.length;\n\t\tconst value = targetList[(i % length + length) % length];\n\t\tstate.value = value;\n\t\treturn value;\n\t}\n\tfunction shift(delta = 1) {\n\t\treturn set(index.value + delta);\n\t}\n\tfunction next(n = 1) {\n\t\treturn shift(n);\n\t}\n\tfunction prev(n = 1) {\n\t\treturn shift(-n);\n\t}\n\tfunction getInitialValue() {\n\t\tvar _toValue, _options$initialValue;\n\t\treturn (_toValue = toValue((_options$initialValue = options === null || options === void 0 ? void 0 : options.initialValue) !== null && _options$initialValue !== void 0 ? _options$initialValue : toValue(list)[0])) !== null && _toValue !== void 0 ? _toValue : void 0;\n\t}\n\twatch(listRef, () => set(index.value));\n\treturn {\n\t\tstate,\n\t\tindex,\n\t\tnext,\n\t\tprev,\n\t\tgo: set\n\t};\n}\n//#endregion\n//#region useDark/index.ts\n/**\n* Reactive dark mode with auto data persistence.\n*\n* @see https://vueuse.org/useDark\n* @param options\n*/\nfunction useDark(options = {}) {\n\tconst { valueDark = \"dark\", valueLight = \"\" } = options;\n\tconst mode = useColorMode({\n\t\t...options,\n\t\tonChanged: (mode, defaultHandler) => {\n\t\t\tvar _options$onChanged;\n\t\t\tif (options.onChanged) (_options$onChanged = options.onChanged) === null || _options$onChanged === void 0 || _options$onChanged.call(options, mode === \"dark\", defaultHandler, mode);\n\t\t\telse defaultHandler(mode);\n\t\t},\n\t\tmodes: {\n\t\t\tdark: valueDark,\n\t\t\tlight: valueLight\n\t\t}\n\t});\n\tconst system = computed(() => mode.system.value);\n\treturn computed({\n\t\tget() {\n\t\t\treturn mode.value === \"dark\";\n\t\t},\n\t\tset(v) {\n\t\t\tconst modeVal = v ? \"dark\" : \"light\";\n\t\t\tif (system.value === modeVal) mode.value = \"auto\";\n\t\t\telse mode.value = modeVal;\n\t\t}\n\t});\n}\n//#endregion\n//#region useManualRefHistory/index.ts\nfunction fnBypass(v) {\n\treturn v;\n}\nfunction fnSetSource(source, value) {\n\treturn source.value = value;\n}\nfunction defaultDump(clone) {\n\treturn clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction defaultParse(clone) {\n\treturn clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\n/**\n* Track the change history of a ref, also provides undo and redo functionality.\n*\n* @see https://vueuse.org/useManualRefHistory\n* @param source\n* @param options\n*/\nfunction useManualRefHistory(source, options = {}) {\n\tconst { clone = false, dump = defaultDump(clone), parse = defaultParse(clone), setSource = fnSetSource } = options;\n\tfunction _createHistoryRecord() {\n\t\treturn markRaw({\n\t\t\tsnapshot: dump(source.value),\n\t\t\ttimestamp: timestamp()\n\t\t});\n\t}\n\tconst last = ref(_createHistoryRecord());\n\tconst undoStack = ref([]);\n\tconst redoStack = ref([]);\n\tconst _setSource = (record) => {\n\t\tsetSource(source, parse(record.snapshot));\n\t\tlast.value = record;\n\t};\n\tconst commit = () => {\n\t\tundoStack.value.unshift(last.value);\n\t\tlast.value = _createHistoryRecord();\n\t\tif (options.capacity && undoStack.value.length > options.capacity) undoStack.value.splice(options.capacity, Number.POSITIVE_INFINITY);\n\t\tif (redoStack.value.length) redoStack.value.splice(0, redoStack.value.length);\n\t};\n\tconst clear = () => {\n\t\tundoStack.value.splice(0, undoStack.value.length);\n\t\tredoStack.value.splice(0, redoStack.value.length);\n\t};\n\tconst undo = () => {\n\t\tconst state = undoStack.value.shift();\n\t\tif (state) {\n\t\t\tredoStack.value.unshift(last.value);\n\t\t\t_setSource(state);\n\t\t}\n\t};\n\tconst redo = () => {\n\t\tconst state = redoStack.value.shift();\n\t\tif (state) {\n\t\t\tundoStack.value.unshift(last.value);\n\t\t\t_setSource(state);\n\t\t}\n\t};\n\tconst reset = () => {\n\t\t_setSource(last.value);\n\t};\n\treturn {\n\t\tsource,\n\t\tundoStack,\n\t\tredoStack,\n\t\tlast,\n\t\thistory: computed(() => [last.value, ...undoStack.value]),\n\t\tcanUndo: computed(() => undoStack.value.length > 0),\n\t\tcanRedo: computed(() => redoStack.value.length > 0),\n\t\tclear,\n\t\tcommit,\n\t\treset,\n\t\tundo,\n\t\tredo\n\t};\n}\n//#endregion\n//#region useRefHistory/index.ts\n/**\n* Track the change history of a ref, also provides undo and redo functionality.\n*\n* @see https://vueuse.org/useRefHistory\n* @param source\n* @param options\n*/\nfunction useRefHistory(source, options = {}) {\n\tconst { deep = false, flush = \"pre\", eventFilter, shouldCommit = () => true } = options;\n\tconst { eventFilter: composedFilter, pause, resume: resumeTracking, isActive: isTracking } = pausableFilter(eventFilter);\n\tlet lastRawValue = source.value;\n\tconst { ignoreUpdates, ignorePrevAsyncUpdates, stop } = watchIgnorable(source, commit, {\n\t\tdeep,\n\t\tflush,\n\t\teventFilter: composedFilter\n\t});\n\tfunction setSource(source, value) {\n\t\tignorePrevAsyncUpdates();\n\t\tignoreUpdates(() => {\n\t\t\tsource.value = value;\n\t\t\tlastRawValue = value;\n\t\t});\n\t}\n\tconst manualHistory = useManualRefHistory(source, {\n\t\t...options,\n\t\tclone: options.clone || deep,\n\t\tsetSource\n\t});\n\tconst { clear, commit: manualCommit } = manualHistory;\n\tfunction commit() {\n\t\tignorePrevAsyncUpdates();\n\t\tif (!shouldCommit(lastRawValue, source.value)) return;\n\t\tlastRawValue = source.value;\n\t\tmanualCommit();\n\t}\n\tfunction resume(commitNow) {\n\t\tresumeTracking();\n\t\tif (commitNow) commit();\n\t}\n\tfunction batch(fn) {\n\t\tlet canceled = false;\n\t\tconst cancel = () => canceled = true;\n\t\tignoreUpdates(() => {\n\t\t\tfn(cancel);\n\t\t});\n\t\tif (!canceled) commit();\n\t}\n\tfunction dispose() {\n\t\tstop();\n\t\tclear();\n\t}\n\treturn {\n\t\t...manualHistory,\n\t\tisTracking,\n\t\tpause,\n\t\tresume,\n\t\tcommit,\n\t\tbatch,\n\t\tdispose\n\t};\n}\n//#endregion\n//#region useDebouncedRefHistory/index.ts\n/**\n* Shorthand for [useRefHistory](https://vueuse.org/useRefHistory) with debounce filter.\n*\n* @see https://vueuse.org/useDebouncedRefHistory\n* @param source\n* @param options\n*/\nfunction useDebouncedRefHistory(source, options = {}) {\n\tconst filter = options.debounce ? debounceFilter(options.debounce) : void 0;\n\treturn { ...useRefHistory(source, {\n\t\t...options,\n\t\teventFilter: filter\n\t}) };\n}\n//#endregion\n//#region useDeviceMotion/index.ts\n/**\n* Reactive DeviceMotionEvent.\n*\n* @see https://vueuse.org/useDeviceMotion\n* @param options\n*/\nfunction useDeviceMotion(options = {}) {\n\tconst { window = defaultWindow, requestPermissions = false, eventFilter = bypassFilter } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => typeof DeviceMotionEvent !== \"undefined\");\n\tconst requirePermissions = /* @__PURE__ */ useSupported(() => isSupported.value && \"requestPermission\" in DeviceMotionEvent && typeof DeviceMotionEvent.requestPermission === \"function\");\n\tconst permissionGranted = shallowRef(false);\n\tconst acceleration = ref({\n\t\tx: null,\n\t\ty: null,\n\t\tz: null\n\t});\n\tconst rotationRate = ref({\n\t\talpha: null,\n\t\tbeta: null,\n\t\tgamma: null\n\t});\n\tconst interval = shallowRef(0);\n\tconst accelerationIncludingGravity = ref({\n\t\tx: null,\n\t\ty: null,\n\t\tz: null\n\t});\n\tfunction init() {\n\t\tif (window) {\n\t\t\tconst onDeviceMotion = createFilterWrapper(eventFilter, (event) => {\n\t\t\t\tvar _event$acceleration, _event$acceleration2, _event$acceleration3, _event$accelerationIn, _event$accelerationIn2, _event$accelerationIn3, _event$rotationRate, _event$rotationRate2, _event$rotationRate3;\n\t\t\t\tacceleration.value = {\n\t\t\t\t\tx: ((_event$acceleration = event.acceleration) === null || _event$acceleration === void 0 ? void 0 : _event$acceleration.x) || null,\n\t\t\t\t\ty: ((_event$acceleration2 = event.acceleration) === null || _event$acceleration2 === void 0 ? void 0 : _event$acceleration2.y) || null,\n\t\t\t\t\tz: ((_event$acceleration3 = event.acceleration) === null || _event$acceleration3 === void 0 ? void 0 : _event$acceleration3.z) || null\n\t\t\t\t};\n\t\t\t\taccelerationIncludingGravity.value = {\n\t\t\t\t\tx: ((_event$accelerationIn = event.accelerationIncludingGravity) === null || _event$accelerationIn === void 0 ? void 0 : _event$accelerationIn.x) || null,\n\t\t\t\t\ty: ((_event$accelerationIn2 = event.accelerationIncludingGravity) === null || _event$accelerationIn2 === void 0 ? void 0 : _event$accelerationIn2.y) || null,\n\t\t\t\t\tz: ((_event$accelerationIn3 = event.accelerationIncludingGravity) === null || _event$accelerationIn3 === void 0 ? void 0 : _event$accelerationIn3.z) || null\n\t\t\t\t};\n\t\t\t\trotationRate.value = {\n\t\t\t\t\talpha: ((_event$rotationRate = event.rotationRate) === null || _event$rotationRate === void 0 ? void 0 : _event$rotationRate.alpha) || null,\n\t\t\t\t\tbeta: ((_event$rotationRate2 = event.rotationRate) === null || _event$rotationRate2 === void 0 ? void 0 : _event$rotationRate2.beta) || null,\n\t\t\t\t\tgamma: ((_event$rotationRate3 = event.rotationRate) === null || _event$rotationRate3 === void 0 ? void 0 : _event$rotationRate3.gamma) || null\n\t\t\t\t};\n\t\t\t\tinterval.value = event.interval;\n\t\t\t});\n\t\t\tuseEventListener(window, \"devicemotion\", onDeviceMotion, { passive: true });\n\t\t}\n\t}\n\tconst ensurePermissions = async () => {\n\t\tif (!requirePermissions.value) permissionGranted.value = true;\n\t\tif (permissionGranted.value) return;\n\t\tif (requirePermissions.value) {\n\t\t\tconst requestPermission = DeviceMotionEvent.requestPermission;\n\t\t\ttry {\n\t\t\t\tif (await requestPermission() === \"granted\") {\n\t\t\t\t\tpermissionGranted.value = true;\n\t\t\t\t\tinit();\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error);\n\t\t\t}\n\t\t}\n\t};\n\tif (isSupported.value) if (requestPermissions && requirePermissions.value) ensurePermissions().then(() => init());\n\telse init();\n\treturn {\n\t\tacceleration,\n\t\taccelerationIncludingGravity,\n\t\trotationRate,\n\t\tinterval,\n\t\tisSupported,\n\t\trequirePermissions,\n\t\tensurePermissions,\n\t\tpermissionGranted\n\t};\n}\n//#endregion\n//#region useDeviceOrientation/index.ts\n/**\n* Reactive DeviceOrientationEvent.\n*\n* @see https://vueuse.org/useDeviceOrientation\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useDeviceOrientation(options = {}) {\n\tconst { window = defaultWindow } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && \"DeviceOrientationEvent\" in window);\n\tconst isAbsolute = shallowRef(false);\n\tconst alpha = shallowRef(null);\n\tconst beta = shallowRef(null);\n\tconst gamma = shallowRef(null);\n\tif (window && isSupported.value) useEventListener(window, \"deviceorientation\", (event) => {\n\t\tisAbsolute.value = event.absolute;\n\t\talpha.value = event.alpha;\n\t\tbeta.value = event.beta;\n\t\tgamma.value = event.gamma;\n\t}, { passive: true });\n\treturn {\n\t\tisSupported,\n\t\tisAbsolute,\n\t\talpha,\n\t\tbeta,\n\t\tgamma\n\t};\n}\n//#endregion\n//#region useDevicePixelRatio/index.ts\n/**\n* Reactively track `window.devicePixelRatio`.\n*\n* @see https://vueuse.org/useDevicePixelRatio\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useDevicePixelRatio(options = {}) {\n\tconst { window = defaultWindow } = options;\n\tconst pixelRatio = shallowRef(1);\n\tconst query = useMediaQuery(() => `(resolution: ${pixelRatio.value}dppx)`, options);\n\tlet stop = noop;\n\tif (window) stop = watchImmediate(query, () => pixelRatio.value = window.devicePixelRatio);\n\treturn {\n\t\tpixelRatio: shallowReadonly(pixelRatio),\n\t\tstop\n\t};\n}\n//#endregion\n//#region useDevicesList/index.ts\n/**\n* Reactive `enumerateDevices` listing available input/output devices\n*\n* @see https://vueuse.org/useDevicesList\n* @param options\n*/\nfunction useDevicesList(options = {}) {\n\tconst { navigator = defaultNavigator, requestPermissions = false, constraints = {\n\t\taudio: true,\n\t\tvideo: true\n\t}, onUpdated } = options;\n\tconst devices = shallowRef([]);\n\tconst videoInputs = computed(() => devices.value.filter((i) => i.kind === \"videoinput\"));\n\tconst audioInputs = computed(() => devices.value.filter((i) => i.kind === \"audioinput\"));\n\tconst audioOutputs = computed(() => devices.value.filter((i) => i.kind === \"audiooutput\"));\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices);\n\tconst permissionGranted = shallowRef(false);\n\tlet stream;\n\tasync function update() {\n\t\tif (!isSupported.value) return;\n\t\tdevices.value = await navigator.mediaDevices.enumerateDevices();\n\t\tonUpdated === null || onUpdated === void 0 || onUpdated(devices.value);\n\t\tif (stream) {\n\t\t\tstream.getTracks().forEach((t) => t.stop());\n\t\t\tstream = null;\n\t\t}\n\t}\n\tasync function ensurePermissions() {\n\t\tconst deviceName = constraints.video ? \"camera\" : \"microphone\";\n\t\tif (!isSupported.value) return false;\n\t\tif (permissionGranted.value) return true;\n\t\tconst { state, query } = usePermission(deviceName, { controls: true });\n\t\tawait query();\n\t\tif (state.value !== \"granted\") {\n\t\t\tlet granted = true;\n\t\t\ttry {\n\t\t\t\tconst allDevices = await navigator.mediaDevices.enumerateDevices();\n\t\t\t\tconst hasCamera = allDevices.some((device) => device.kind === \"videoinput\");\n\t\t\t\tconst hasMicrophone = allDevices.some((device) => device.kind === \"audioinput\" || device.kind === \"audiooutput\");\n\t\t\t\tconstraints.video = hasCamera ? constraints.video : false;\n\t\t\t\tconstraints.audio = hasMicrophone ? constraints.audio : false;\n\t\t\t\tstream = await navigator.mediaDevices.getUserMedia(constraints);\n\t\t\t} catch (_unused) {\n\t\t\t\tstream = null;\n\t\t\t\tgranted = false;\n\t\t\t}\n\t\t\tupdate();\n\t\t\tpermissionGranted.value = granted;\n\t\t} else permissionGranted.value = true;\n\t\treturn permissionGranted.value;\n\t}\n\tif (isSupported.value) {\n\t\tif (requestPermissions) ensurePermissions();\n\t\tuseEventListener(navigator.mediaDevices, \"devicechange\", update, { passive: true });\n\t\tupdate();\n\t}\n\treturn {\n\t\tdevices,\n\t\tensurePermissions,\n\t\tpermissionGranted,\n\t\tvideoInputs,\n\t\taudioInputs,\n\t\taudioOutputs,\n\t\tisSupported\n\t};\n}\n//#endregion\n//#region useDisplayMedia/index.ts\n/**\n* Reactive `mediaDevices.getDisplayMedia` streaming\n*\n* @see https://vueuse.org/useDisplayMedia\n* @param options\n*/\nfunction useDisplayMedia(options = {}) {\n\tvar _options$enabled;\n\tconst enabled = shallowRef((_options$enabled = options.enabled) !== null && _options$enabled !== void 0 ? _options$enabled : false);\n\tconst video = options.video;\n\tconst audio = options.audio;\n\tconst { navigator = defaultNavigator } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => {\n\t\tvar _navigator$mediaDevic;\n\t\treturn navigator === null || navigator === void 0 || (_navigator$mediaDevic = navigator.mediaDevices) === null || _navigator$mediaDevic === void 0 ? void 0 : _navigator$mediaDevic.getDisplayMedia;\n\t});\n\tconst constraint = {\n\t\taudio,\n\t\tvideo\n\t};\n\tconst stream = shallowRef();\n\tasync function _start() {\n\t\tvar _stream$value;\n\t\tif (!isSupported.value || stream.value) return;\n\t\tstream.value = await navigator.mediaDevices.getDisplayMedia(constraint);\n\t\t(_stream$value = stream.value) === null || _stream$value === void 0 || _stream$value.getTracks().forEach((t) => useEventListener(t, \"ended\", stop, { passive: true }));\n\t\treturn stream.value;\n\t}\n\tasync function _stop() {\n\t\tvar _stream$value2;\n\t\t(_stream$value2 = stream.value) === null || _stream$value2 === void 0 || _stream$value2.getTracks().forEach((t) => t.stop());\n\t\tstream.value = void 0;\n\t}\n\tfunction stop() {\n\t\t_stop();\n\t\tenabled.value = false;\n\t}\n\tasync function start() {\n\t\tawait _start();\n\t\tif (stream.value) enabled.value = true;\n\t\treturn stream.value;\n\t}\n\twatch(enabled, (v) => {\n\t\tif (v) _start();\n\t\telse _stop();\n\t}, { immediate: true });\n\treturn {\n\t\tisSupported,\n\t\tstream,\n\t\tstart,\n\t\tstop,\n\t\tenabled\n\t};\n}\n//#endregion\n//#region useDocumentVisibility/index.ts\n/**\n* Reactively track `document.visibilityState`.\n*\n* @see https://vueuse.org/useDocumentVisibility\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useDocumentVisibility(options = {}) {\n\tconst { document = defaultDocument } = options;\n\tif (!document) return shallowRef(\"visible\");\n\tconst visibility = shallowRef(document.visibilityState);\n\tuseEventListener(document, \"visibilitychange\", () => {\n\t\tvisibility.value = document.visibilityState;\n\t}, { passive: true });\n\treturn visibility;\n}\n//#endregion\n//#region useDraggable/index.ts\nconst defaultScrollConfig = {\n\tspeed: 2,\n\tmargin: 30,\n\tdirection: \"both\"\n};\nfunction clampContainerScroll(container) {\n\tif (container.scrollLeft > container.scrollWidth - container.clientWidth) container.scrollLeft = Math.max(0, container.scrollWidth - container.clientWidth);\n\tif (container.scrollTop > container.scrollHeight - container.clientHeight) container.scrollTop = Math.max(0, container.scrollHeight - container.clientHeight);\n}\n/**\n* Make elements draggable.\n*\n* @see https://vueuse.org/useDraggable\n* @param target\n* @param options\n*/\nfunction useDraggable(target, options = {}) {\n\tvar _toValue, _toValue2, _toValue3, _scrollConfig$directi;\n\tconst { pointerTypes, preventDefault, stopPropagation, exact, onMove, onEnd, onStart, initialValue, axis = \"both\", draggingElement = defaultWindow, containerElement, handle: draggingHandle = target, buttons = [0], restrictInView, autoScroll = false } = options;\n\tconst position = ref((_toValue = toValue(initialValue)) !== null && _toValue !== void 0 ? _toValue : {\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst pressedDelta = ref();\n\tconst filterEvent = (e) => {\n\t\tif (pointerTypes) return pointerTypes.includes(e.pointerType);\n\t\treturn true;\n\t};\n\tconst handleEvent = (e) => {\n\t\tif (toValue(preventDefault)) e.preventDefault();\n\t\tif (toValue(stopPropagation)) e.stopPropagation();\n\t};\n\tconst scrollConfig = toValue(autoScroll);\n\tconst scrollSettings = typeof scrollConfig === \"object\" ? {\n\t\tspeed: (_toValue2 = toValue(scrollConfig.speed)) !== null && _toValue2 !== void 0 ? _toValue2 : defaultScrollConfig.speed,\n\t\tmargin: (_toValue3 = toValue(scrollConfig.margin)) !== null && _toValue3 !== void 0 ? _toValue3 : defaultScrollConfig.margin,\n\t\tdirection: (_scrollConfig$directi = scrollConfig.direction) !== null && _scrollConfig$directi !== void 0 ? _scrollConfig$directi : defaultScrollConfig.direction\n\t} : defaultScrollConfig;\n\tconst getScrollAxisValues = (value) => typeof value === \"number\" ? [value, value] : [value.x, value.y];\n\tconst handleAutoScroll = (container, targetRect, position) => {\n\t\tconst { clientWidth, clientHeight, scrollLeft, scrollTop, scrollWidth, scrollHeight } = container;\n\t\tconst [marginX, marginY] = getScrollAxisValues(scrollSettings.margin);\n\t\tconst [speedX, speedY] = getScrollAxisValues(scrollSettings.speed);\n\t\tlet deltaX = 0;\n\t\tlet deltaY = 0;\n\t\tif (scrollSettings.direction === \"x\" || scrollSettings.direction === \"both\") {\n\t\t\tif (position.x < marginX && scrollLeft > 0) deltaX = -speedX;\n\t\t\telse if (position.x + targetRect.width > clientWidth - marginX && scrollLeft < scrollWidth - clientWidth) deltaX = speedX;\n\t\t}\n\t\tif (scrollSettings.direction === \"y\" || scrollSettings.direction === \"both\") {\n\t\t\tif (position.y < marginY && scrollTop > 0) deltaY = -speedY;\n\t\t\telse if (position.y + targetRect.height > clientHeight - marginY && scrollTop < scrollHeight - clientHeight) deltaY = speedY;\n\t\t}\n\t\tif (deltaX || deltaY) container.scrollBy({\n\t\t\tleft: deltaX,\n\t\t\ttop: deltaY,\n\t\t\tbehavior: \"auto\"\n\t\t});\n\t};\n\tlet autoScrollInterval = null;\n\tconst startAutoScroll = () => {\n\t\tconst container = toValue(containerElement);\n\t\tif (container && !autoScrollInterval) autoScrollInterval = setInterval(() => {\n\t\t\tconst targetRect = toValue(target).getBoundingClientRect();\n\t\t\tconst { x, y } = position.value;\n\t\t\tconst relativePosition = {\n\t\t\t\tx: x - container.scrollLeft,\n\t\t\t\ty: y - container.scrollTop\n\t\t\t};\n\t\t\tif (relativePosition.x >= 0 && relativePosition.y >= 0) {\n\t\t\t\thandleAutoScroll(container, targetRect, relativePosition);\n\t\t\t\trelativePosition.x += container.scrollLeft;\n\t\t\t\trelativePosition.y += container.scrollTop;\n\t\t\t\tposition.value = relativePosition;\n\t\t\t}\n\t\t}, 1e3 / 60);\n\t};\n\tconst stopAutoScroll = () => {\n\t\tif (autoScrollInterval) {\n\t\t\tclearInterval(autoScrollInterval);\n\t\t\tautoScrollInterval = null;\n\t\t}\n\t};\n\tconst isPointerNearEdge = (pointer, container, margin, targetRect) => {\n\t\tconst [marginX, marginY] = typeof margin === \"number\" ? [margin, margin] : [margin.x, margin.y];\n\t\tconst { clientWidth, clientHeight } = container;\n\t\treturn pointer.x < marginX || pointer.x + targetRect.width > clientWidth - marginX || pointer.y < marginY || pointer.y + targetRect.height > clientHeight - marginY;\n\t};\n\tconst checkAutoScroll = () => {\n\t\tif (toValue(options.disabled) || !pressedDelta.value) return;\n\t\tconst container = toValue(containerElement);\n\t\tif (!container) return;\n\t\tconst targetRect = toValue(target).getBoundingClientRect();\n\t\tconst { x, y } = position.value;\n\t\tconst relativePosition = {\n\t\t\tx: x - container.scrollLeft,\n\t\t\ty: y - container.scrollTop\n\t\t};\n\t\tif (isPointerNearEdge(relativePosition, container, scrollSettings.margin, targetRect)) startAutoScroll();\n\t\telse stopAutoScroll();\n\t};\n\tif (toValue(autoScroll)) watch(position, checkAutoScroll);\n\tconst start = (e) => {\n\t\tvar _container$getBoundin;\n\t\tif (!toValue(buttons).includes(e.button)) return;\n\t\tif (toValue(options.disabled) || !filterEvent(e)) return;\n\t\tif (toValue(exact) && e.target !== toValue(target)) return;\n\t\tconst container = toValue(containerElement);\n\t\tconst containerRect = container === null || container === void 0 || (_container$getBoundin = container.getBoundingClientRect) === null || _container$getBoundin === void 0 ? void 0 : _container$getBoundin.call(container);\n\t\tconst targetRect = toValue(target).getBoundingClientRect();\n\t\tconst pos = {\n\t\t\tx: e.clientX - (container ? targetRect.left - containerRect.left + (autoScroll ? 0 : container.scrollLeft) : targetRect.left),\n\t\t\ty: e.clientY - (container ? targetRect.top - containerRect.top + (autoScroll ? 0 : container.scrollTop) : targetRect.top)\n\t\t};\n\t\tif ((onStart === null || onStart === void 0 ? void 0 : onStart(pos, e)) === false) return;\n\t\tpressedDelta.value = pos;\n\t\thandleEvent(e);\n\t};\n\tconst move = (e) => {\n\t\tif (toValue(options.disabled) || !filterEvent(e)) return;\n\t\tif (!pressedDelta.value) return;\n\t\tconst container = toValue(containerElement);\n\t\tif (container instanceof HTMLElement) clampContainerScroll(container);\n\t\tconst targetRect = toValue(target).getBoundingClientRect();\n\t\tlet { x, y } = position.value;\n\t\tif (axis === \"x\" || axis === \"both\") {\n\t\t\tx = e.clientX - pressedDelta.value.x;\n\t\t\tif (container) x = Math.min(Math.max(0, x), container.scrollWidth - targetRect.width);\n\t\t}\n\t\tif (axis === \"y\" || axis === \"both\") {\n\t\t\ty = e.clientY - pressedDelta.value.y;\n\t\t\tif (container) y = Math.min(Math.max(0, y), container.scrollHeight - targetRect.height);\n\t\t}\n\t\tif (toValue(autoScroll) && container) {\n\t\t\tif (autoScrollInterval === null) handleAutoScroll(container, targetRect, {\n\t\t\t\tx,\n\t\t\t\ty\n\t\t\t});\n\t\t\tx += container.scrollLeft;\n\t\t\ty += container.scrollTop;\n\t\t}\n\t\tif (container && (restrictInView || autoScroll)) {\n\t\t\tif (axis !== \"y\") {\n\t\t\t\tconst relativeX = x - container.scrollLeft;\n\t\t\t\tif (relativeX < 0) x = container.scrollLeft;\n\t\t\t\telse if (relativeX > container.clientWidth - targetRect.width) x = container.clientWidth - targetRect.width + container.scrollLeft;\n\t\t\t}\n\t\t\tif (axis !== \"x\") {\n\t\t\t\tconst relativeY = y - container.scrollTop;\n\t\t\t\tif (relativeY < 0) y = container.scrollTop;\n\t\t\t\telse if (relativeY > container.clientHeight - targetRect.height) y = container.clientHeight - targetRect.height + container.scrollTop;\n\t\t\t}\n\t\t}\n\t\tposition.value = {\n\t\t\tx,\n\t\t\ty\n\t\t};\n\t\tonMove === null || onMove === void 0 || onMove(position.value, e);\n\t\thandleEvent(e);\n\t};\n\tconst end = (e) => {\n\t\tif (toValue(options.disabled) || !filterEvent(e)) return;\n\t\tif (!pressedDelta.value) return;\n\t\tpressedDelta.value = void 0;\n\t\tif (autoScroll) stopAutoScroll();\n\t\tonEnd === null || onEnd === void 0 || onEnd(position.value, e);\n\t\thandleEvent(e);\n\t};\n\tif (isClient) {\n\t\tconst config = () => {\n\t\t\tvar _options$capture;\n\t\t\treturn {\n\t\t\t\tcapture: (_options$capture = options.capture) !== null && _options$capture !== void 0 ? _options$capture : true,\n\t\t\t\tpassive: !toValue(preventDefault)\n\t\t\t};\n\t\t};\n\t\tuseEventListener(draggingHandle, \"pointerdown\", start, config);\n\t\tuseEventListener(draggingElement, \"pointermove\", move, config);\n\t\tuseEventListener(draggingElement, [\"pointerup\", \"pointercancel\"], end, config);\n\t}\n\treturn {\n\t\t...toRefs(position),\n\t\tposition,\n\t\tisDragging: computed(() => !!pressedDelta.value),\n\t\tstyle: computed(() => `\n      left: ${position.value.x}px;\n      top: ${position.value.y}px;\n      ${autoScroll ? \"text-wrap: nowrap;\" : \"\"}\n    `)\n\t};\n}\n//#endregion\n//#region useDropZone/index.ts\nfunction useDropZone(target, options = {}) {\n\tconst isOverDropZone = shallowRef(false);\n\tconst files = shallowRef(null);\n\tlet counter = 0;\n\tlet isValid = true;\n\tif (isClient) {\n\t\tvar _options$multiple, _options$preventDefau;\n\t\tconst _options = typeof options === \"function\" ? { onDrop: options } : options;\n\t\tconst multiple = (_options$multiple = _options.multiple) !== null && _options$multiple !== void 0 ? _options$multiple : true;\n\t\tconst preventDefaultForUnhandled = (_options$preventDefau = _options.preventDefaultForUnhandled) !== null && _options$preventDefau !== void 0 ? _options$preventDefau : false;\n\t\tconst getFiles = (event) => {\n\t\t\tvar _event$dataTransfer$f, _event$dataTransfer;\n\t\t\tconst list = Array.from((_event$dataTransfer$f = (_event$dataTransfer = event.dataTransfer) === null || _event$dataTransfer === void 0 ? void 0 : _event$dataTransfer.files) !== null && _event$dataTransfer$f !== void 0 ? _event$dataTransfer$f : []);\n\t\t\treturn list.length === 0 ? null : multiple ? list : [list[0]];\n\t\t};\n\t\tconst checkDataTypes = (types) => {\n\t\t\tconst dataTypes = unref(_options.dataTypes);\n\t\t\tif (typeof dataTypes === \"function\") return dataTypes(types);\n\t\t\tif (!(dataTypes === null || dataTypes === void 0 ? void 0 : dataTypes.length)) return true;\n\t\t\tif (types.length === 0) return false;\n\t\t\treturn types.every((type) => dataTypes.some((allowedType) => type.includes(allowedType)));\n\t\t};\n\t\tconst checkValidity = (items) => {\n\t\t\tif (_options.checkValidity) return _options.checkValidity(items);\n\t\t\tconst types = Array.from(items !== null && items !== void 0 ? items : []).map((item) => item.type);\n\t\t\tconst dataTypesValid = checkDataTypes(types);\n\t\t\tconst multipleFilesValid = multiple || items.length <= 1;\n\t\t\treturn dataTypesValid && multipleFilesValid;\n\t\t};\n\t\tconst isSafari = () => /^(?:(?!chrome|android).)*safari/i.test(navigator.userAgent) && !(\"chrome\" in window);\n\t\tconst handleDragEvent = (event, eventType) => {\n\t\t\tvar _event$dataTransfer2, _ref;\n\t\t\tconst dataTransferItemList = (_event$dataTransfer2 = event.dataTransfer) === null || _event$dataTransfer2 === void 0 ? void 0 : _event$dataTransfer2.items;\n\t\t\tisValid = (_ref = dataTransferItemList && checkValidity(dataTransferItemList)) !== null && _ref !== void 0 ? _ref : false;\n\t\t\tif (preventDefaultForUnhandled) event.preventDefault();\n\t\t\tif (!isSafari() && !isValid) {\n\t\t\t\tif (event.dataTransfer) event.dataTransfer.dropEffect = \"none\";\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tif (event.dataTransfer) event.dataTransfer.dropEffect = \"copy\";\n\t\t\tconst currentFiles = getFiles(event);\n\t\t\tswitch (eventType) {\n\t\t\t\tcase \"enter\":\n\t\t\t\t\tvar _options$onEnter;\n\t\t\t\t\tcounter += 1;\n\t\t\t\t\tisOverDropZone.value = true;\n\t\t\t\t\t(_options$onEnter = _options.onEnter) === null || _options$onEnter === void 0 || _options$onEnter.call(_options, null, event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"over\":\n\t\t\t\t\tvar _options$onOver;\n\t\t\t\t\t(_options$onOver = _options.onOver) === null || _options$onOver === void 0 || _options$onOver.call(_options, null, event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"leave\":\n\t\t\t\t\tvar _options$onLeave;\n\t\t\t\t\tcounter -= 1;\n\t\t\t\t\tif (counter === 0) isOverDropZone.value = false;\n\t\t\t\t\t(_options$onLeave = _options.onLeave) === null || _options$onLeave === void 0 || _options$onLeave.call(_options, null, event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"drop\":\n\t\t\t\t\tcounter = 0;\n\t\t\t\t\tisOverDropZone.value = false;\n\t\t\t\t\tif (isValid) {\n\t\t\t\t\t\tvar _options$onDrop;\n\t\t\t\t\t\tfiles.value = currentFiles;\n\t\t\t\t\t\t(_options$onDrop = _options.onDrop) === null || _options$onDrop === void 0 || _options$onDrop.call(_options, currentFiles, event);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\t\tuseEventListener(target, \"dragenter\", (event) => handleDragEvent(event, \"enter\"));\n\t\tuseEventListener(target, \"dragover\", (event) => handleDragEvent(event, \"over\"));\n\t\tuseEventListener(target, \"dragleave\", (event) => handleDragEvent(event, \"leave\"));\n\t\tuseEventListener(target, \"drop\", (event) => handleDragEvent(event, \"drop\"));\n\t}\n\treturn {\n\t\tfiles,\n\t\tisOverDropZone\n\t};\n}\n//#endregion\n//#region useResizeObserver/index.ts\n/**\n* Reports changes to the dimensions of an Element's content or the border-box\n*\n* @see https://vueuse.org/useResizeObserver\n* @param target\n* @param callback\n* @param options\n*/\nfunction useResizeObserver(target, callback, options = {}) {\n\tconst { window = defaultWindow, ...observerOptions } = options;\n\tlet observer;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && \"ResizeObserver\" in window);\n\tconst cleanup = () => {\n\t\tif (observer) {\n\t\t\tobserver.disconnect();\n\t\t\tobserver = void 0;\n\t\t}\n\t};\n\tconst stopWatch = watch(computed(() => {\n\t\tconst _targets = toValue(target);\n\t\treturn Array.isArray(_targets) ? _targets.map((el) => unrefElement(el)) : [unrefElement(_targets)];\n\t}), (els) => {\n\t\tcleanup();\n\t\tif (isSupported.value && window) {\n\t\t\tobserver = new ResizeObserver(callback);\n\t\t\tfor (const _el of els) if (_el) observer.observe(_el, observerOptions);\n\t\t}\n\t}, {\n\t\timmediate: true,\n\t\tflush: \"post\"\n\t});\n\tconst stop = () => {\n\t\tcleanup();\n\t\tstopWatch();\n\t};\n\ttryOnScopeDispose(stop);\n\treturn {\n\t\tisSupported,\n\t\tstop\n\t};\n}\n//#endregion\n//#region useElementBounding/index.ts\n/**\n* Reactive bounding box of an HTML element.\n*\n* @see https://vueuse.org/useElementBounding\n* @param target\n*/\nfunction useElementBounding(target, options = {}) {\n\tconst { reset = true, windowResize = true, windowScroll = true, immediate = true, updateTiming = \"sync\" } = options;\n\tconst height = shallowRef(0);\n\tconst bottom = shallowRef(0);\n\tconst left = shallowRef(0);\n\tconst right = shallowRef(0);\n\tconst top = shallowRef(0);\n\tconst width = shallowRef(0);\n\tconst x = shallowRef(0);\n\tconst y = shallowRef(0);\n\tfunction recalculate() {\n\t\tconst el = unrefElement(target);\n\t\tif (!el) {\n\t\t\tif (reset) {\n\t\t\t\theight.value = 0;\n\t\t\t\tbottom.value = 0;\n\t\t\t\tleft.value = 0;\n\t\t\t\tright.value = 0;\n\t\t\t\ttop.value = 0;\n\t\t\t\twidth.value = 0;\n\t\t\t\tx.value = 0;\n\t\t\t\ty.value = 0;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst rect = el.getBoundingClientRect();\n\t\theight.value = rect.height;\n\t\tbottom.value = rect.bottom;\n\t\tleft.value = rect.left;\n\t\tright.value = rect.right;\n\t\ttop.value = rect.top;\n\t\twidth.value = rect.width;\n\t\tx.value = rect.x;\n\t\ty.value = rect.y;\n\t}\n\tfunction update() {\n\t\tif (updateTiming === \"sync\") recalculate();\n\t\telse if (updateTiming === \"next-frame\") requestAnimationFrame(() => recalculate());\n\t}\n\tuseResizeObserver(target, update);\n\twatch(() => unrefElement(target), (ele) => !ele && update());\n\tuseMutationObserver(target, update, { attributeFilter: [\"style\", \"class\"] });\n\tif (windowScroll) useEventListener(\"scroll\", update, {\n\t\tcapture: true,\n\t\tpassive: true\n\t});\n\tif (windowResize) useEventListener(\"resize\", update, { passive: true });\n\ttryOnMounted(() => {\n\t\tif (immediate) update();\n\t});\n\treturn {\n\t\theight,\n\t\tbottom,\n\t\tleft,\n\t\tright,\n\t\ttop,\n\t\twidth,\n\t\tx,\n\t\ty,\n\t\tupdate\n\t};\n}\n//#endregion\n//#region useElementByPoint/index.ts\nfunction getDefaultScheduler$7(options) {\n\tif (\"interval\" in options || \"immediate\" in options) {\n\t\tconst { interval = \"requestAnimationFrame\", immediate = true } = options;\n\t\treturn interval === \"requestAnimationFrame\" ? (cb) => useRafFn(cb, { immediate }) : (cb) => useIntervalFn(cb, interval, { immediate });\n\t}\n\treturn useRafFn;\n}\n/**\n* Reactive element by point.\n*\n* @see https://vueuse.org/useElementByPoint\n* @param options - UseElementByPointOptions\n*/\nfunction useElementByPoint(options) {\n\tconst { x, y, document = defaultDocument, multiple, scheduler = getDefaultScheduler$7(options) } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => {\n\t\tif (toValue(multiple)) return document && \"elementsFromPoint\" in document;\n\t\treturn document && \"elementFromPoint\" in document;\n\t});\n\tconst element = shallowRef(null);\n\treturn {\n\t\tisSupported,\n\t\telement,\n\t\t...scheduler(() => {\n\t\t\tvar _document$elementsFro, _document$elementFrom;\n\t\t\telement.value = toValue(multiple) ? (_document$elementsFro = document === null || document === void 0 ? void 0 : document.elementsFromPoint(toValue(x), toValue(y))) !== null && _document$elementsFro !== void 0 ? _document$elementsFro : [] : (_document$elementFrom = document === null || document === void 0 ? void 0 : document.elementFromPoint(toValue(x), toValue(y))) !== null && _document$elementFrom !== void 0 ? _document$elementFrom : null;\n\t\t})\n\t};\n}\n//#endregion\n//#region useElementHover/index.ts\nfunction useElementHover(el, options = {}) {\n\tconst { delayEnter = 0, delayLeave = 0, triggerOnRemoval = false, window = defaultWindow } = options;\n\tconst isHovered = shallowRef(false);\n\tlet timer;\n\tconst toggle = (entering) => {\n\t\tconst delay = entering ? delayEnter : delayLeave;\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = void 0;\n\t\t}\n\t\tif (delay) timer = setTimeout(() => isHovered.value = entering, delay);\n\t\telse isHovered.value = entering;\n\t};\n\tif (!window) return isHovered;\n\tuseEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n\tuseEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n\tif (triggerOnRemoval) onElementRemoval(computed(() => unrefElement(el)), () => toggle(false));\n\treturn isHovered;\n}\n//#endregion\n//#region useElementOverflow/index.ts\n/**\n* react a dom's overflow state\n* @see https://vueuse.org/useElementOverflow\n* @param target\n* @param option\n*/\nfunction useElementOverflow(target, option = {}) {\n\tconst { observeMutation = false, onUpdated, window = defaultWindow } = option;\n\tconst isXOverflowed = shallowRef(false);\n\tconst isYOverflowed = shallowRef(false);\n\tfunction update(htmlEl) {\n\t\tisXOverflowed.value = htmlEl.scrollWidth > htmlEl.offsetWidth;\n\t\tisYOverflowed.value = htmlEl.scrollHeight > htmlEl.offsetHeight;\n\t}\n\tconst onResizeUpdated = onUpdated;\n\tconst targetEl = computed(() => {\n\t\tconst el = unrefElement(target);\n\t\tif (!el || el instanceof SVGElement) return void 0;\n\t\treturn el;\n\t});\n\tconst targets = () => {\n\t\tconst el = targetEl.value;\n\t\tif (!el || el instanceof SVGElement) return [];\n\t\treturn [el, ...Array.from(el.children).filter((i) => i instanceof HTMLElement)];\n\t};\n\tuseResizeObserver(targets, (entries, observer) => {\n\t\tconst el = targetEl.value;\n\t\tif (el) update(el);\n\t\tonResizeUpdated === null || onResizeUpdated === void 0 || onResizeUpdated(entries, observer);\n\t}, { window });\n\tif (observeMutation) {\n\t\tconst onMutationUpdated = onUpdated;\n\t\tuseMutationObserver(targets, (entries, observer) => {\n\t\t\tconst el = targetEl.value;\n\t\t\tif (el) update(el);\n\t\t\tonMutationUpdated === null || onMutationUpdated === void 0 || onMutationUpdated(entries, observer);\n\t\t}, {\n\t\t\twindow,\n\t\t\t...typeof observeMutation === \"object\" ? observeMutation : {\n\t\t\t\tchildList: true,\n\t\t\t\tsubtree: true,\n\t\t\t\tcharacterData: true\n\t\t\t}\n\t\t});\n\t}\n\treturn {\n\t\tisXOverflowed: shallowReadonly(isXOverflowed),\n\t\tisYOverflowed: shallowReadonly(isYOverflowed),\n\t\tstop,\n\t\tupdate: () => {\n\t\t\tconst el = targetEl.value;\n\t\t\tif (el && window) update(el);\n\t\t}\n\t};\n}\n//#endregion\n//#region useElementSize/index.ts\n/**\n* Reactive size of an HTML element.\n*\n* @see https://vueuse.org/useElementSize\n*/\nfunction useElementSize(target, initialSize = {\n\twidth: 0,\n\theight: 0\n}, options = {}) {\n\tconst { window = defaultWindow, box = \"content-box\" } = options;\n\tconst isSVG = computed(() => {\n\t\tvar _unrefElement;\n\t\treturn (_unrefElement = unrefElement(target)) === null || _unrefElement === void 0 || (_unrefElement = _unrefElement.namespaceURI) === null || _unrefElement === void 0 ? void 0 : _unrefElement.includes(\"svg\");\n\t});\n\tconst width = shallowRef(initialSize.width);\n\tconst height = shallowRef(initialSize.height);\n\tconst { stop: stop1 } = useResizeObserver(target, ([entry]) => {\n\t\tconst boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n\t\tif (window && isSVG.value) {\n\t\t\tconst $elem = unrefElement(target);\n\t\t\tif ($elem) {\n\t\t\t\tconst rect = $elem.getBoundingClientRect();\n\t\t\t\twidth.value = rect.width;\n\t\t\t\theight.value = rect.height;\n\t\t\t}\n\t\t} else if (boxSize) {\n\t\t\tconst formatBoxSize = toArray(boxSize);\n\t\t\twidth.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n\t\t\theight.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n\t\t} else {\n\t\t\twidth.value = entry.contentRect.width;\n\t\t\theight.value = entry.contentRect.height;\n\t\t}\n\t}, options);\n\ttryOnMounted(() => {\n\t\tconst ele = unrefElement(target);\n\t\tif (ele && \"offsetWidth\" in ele) if (box === \"content-box\" && window) {\n\t\t\tconst cs = window.getComputedStyle(ele);\n\t\t\tconst padX = Number.parseFloat(cs.paddingLeft) + Number.parseFloat(cs.paddingRight);\n\t\t\tconst padY = Number.parseFloat(cs.paddingTop) + Number.parseFloat(cs.paddingBottom);\n\t\t\tconst bdX = Number.parseFloat(cs.borderLeftWidth) + Number.parseFloat(cs.borderRightWidth);\n\t\t\tconst bdY = Number.parseFloat(cs.borderTopWidth) + Number.parseFloat(cs.borderBottomWidth);\n\t\t\twidth.value = ele.offsetWidth - padX - bdX;\n\t\t\theight.value = ele.offsetHeight - padY - bdY;\n\t\t} else {\n\t\t\twidth.value = ele.offsetWidth;\n\t\t\theight.value = ele.offsetHeight;\n\t\t}\n\t\telse if (ele) {\n\t\t\twidth.value = initialSize.width;\n\t\t\theight.value = initialSize.height;\n\t\t}\n\t});\n\tconst stop2 = watch(() => unrefElement(target), (ele) => {\n\t\twidth.value = ele ? initialSize.width : 0;\n\t\theight.value = ele ? initialSize.height : 0;\n\t});\n\tfunction stop() {\n\t\tstop1();\n\t\tstop2();\n\t}\n\treturn {\n\t\twidth,\n\t\theight,\n\t\tstop\n\t};\n}\n//#endregion\n//#region useIntersectionObserver/index.ts\n/**\n* Detects changes to a target element's visibility.\n*\n* @see https://vueuse.org/useIntersectionObserver\n* @param target\n* @param callback\n* @param options\n*/\nfunction useIntersectionObserver(target, callback, options = {}) {\n\tconst { root, rootMargin, threshold = 0, window = defaultWindow, immediate = true } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && \"IntersectionObserver\" in window);\n\tconst targets = computed(() => {\n\t\treturn toArray(toValue(target)).map(unrefElement).filter(notNullish);\n\t});\n\tlet cleanup = noop;\n\tconst isActive = shallowRef(immediate);\n\tconst stopWatch = isSupported.value ? watch(() => [\n\t\ttargets.value,\n\t\tunrefElement(root),\n\t\ttoValue(rootMargin),\n\t\tisActive.value\n\t], ([targets, root, rootMargin]) => {\n\t\tcleanup();\n\t\tif (!isActive.value) return;\n\t\tif (!targets.length) return;\n\t\tconst observer = new IntersectionObserver(callback, {\n\t\t\troot: unrefElement(root),\n\t\t\trootMargin,\n\t\t\tthreshold\n\t\t});\n\t\ttargets.forEach((el) => el && observer.observe(el));\n\t\tcleanup = () => {\n\t\t\tobserver.disconnect();\n\t\t\tcleanup = noop;\n\t\t};\n\t}, {\n\t\timmediate,\n\t\tflush: \"post\"\n\t}) : noop;\n\tconst stop = () => {\n\t\tcleanup();\n\t\tstopWatch();\n\t\tisActive.value = false;\n\t};\n\ttryOnScopeDispose(stop);\n\treturn {\n\t\tisSupported,\n\t\tisActive,\n\t\tpause() {\n\t\t\tcleanup();\n\t\t\tisActive.value = false;\n\t\t},\n\t\tresume() {\n\t\t\tisActive.value = true;\n\t\t},\n\t\tstop\n\t};\n}\n//#endregion\n//#region useElementVisibility/index.ts\nfunction useElementVisibility(element, options = {}) {\n\tconst { window = defaultWindow, scrollTarget, threshold = 0, rootMargin, once = false, initialValue = false } = options;\n\tconst isVisible = shallowRef(initialValue);\n\tconst observerController = useIntersectionObserver(element, (intersectionObserverEntries) => {\n\t\tlet isIntersecting = isVisible.value;\n\t\tlet latestTime = 0;\n\t\tfor (const entry of intersectionObserverEntries) if (entry.time >= latestTime) {\n\t\t\tlatestTime = entry.time;\n\t\t\tisIntersecting = entry.isIntersecting;\n\t\t}\n\t\tisVisible.value = isIntersecting;\n\t\tif (once) watchOnce(isVisible, () => {\n\t\t\tobserverController.stop();\n\t\t});\n\t}, {\n\t\troot: scrollTarget,\n\t\twindow,\n\t\tthreshold,\n\t\trootMargin\n\t});\n\treturn options.controls ? {\n\t\t...observerController,\n\t\tisVisible\n\t} : isVisible;\n}\n//#endregion\n//#region useEventBus/internal.ts\nconst events = /* @__PURE__ */ new Map();\n//#endregion\n//#region useEventBus/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useEventBus(key) {\n\tfunction on(listener) {\n\t\tconst listeners = events.get(key) || /* @__PURE__ */ new Set();\n\t\tlisteners.add(listener);\n\t\tevents.set(key, listeners);\n\t\tconst _off = () => off(listener);\n\t\ttryOnScopeDispose(_off);\n\t\treturn _off;\n\t}\n\tfunction once(listener) {\n\t\tfunction _listener(...args) {\n\t\t\toff(_listener);\n\t\t\tlistener(...args);\n\t\t}\n\t\treturn on(_listener);\n\t}\n\tfunction off(listener) {\n\t\tconst listeners = events.get(key);\n\t\tif (!listeners) return;\n\t\tlisteners.delete(listener);\n\t\tif (!listeners.size) reset();\n\t}\n\tfunction reset() {\n\t\tevents.delete(key);\n\t}\n\tfunction emit(event, payload) {\n\t\tvar _events$get;\n\t\t(_events$get = events.get(key)) === null || _events$get === void 0 || _events$get.forEach((v) => v(event, payload));\n\t}\n\treturn {\n\t\ton,\n\t\tonce,\n\t\toff,\n\t\temit,\n\t\treset\n\t};\n}\n//#endregion\n//#region useEventSource/index.ts\nfunction resolveNestedOptions$1(options) {\n\tif (options === true) return {};\n\treturn options;\n}\n/**\n* Reactive wrapper for EventSource.\n*\n* @see https://vueuse.org/useEventSource\n* @see https://developer.mozilla.org/en-US/docs/Web/API/EventSource/EventSource EventSource\n* @param url\n* @param events\n* @param options\n*/\nfunction useEventSource(url, events = [], options = {}) {\n\tconst event = shallowRef(null);\n\tconst data = shallowRef(null);\n\tconst status = shallowRef(\"CONNECTING\");\n\tconst eventSource = shallowRef(null);\n\tconst error = shallowRef(null);\n\tconst urlRef = toRef(url);\n\tconst lastEventId = shallowRef(null);\n\tlet explicitlyClosed = false;\n\tlet retried = 0;\n\tconst { withCredentials = false, immediate = true, autoConnect = true, autoReconnect, serializer = { read: (v) => v } } = options;\n\tconst close = () => {\n\t\tif (isClient && eventSource.value) {\n\t\t\teventSource.value.close();\n\t\t\teventSource.value = null;\n\t\t\tstatus.value = \"CLOSED\";\n\t\t\texplicitlyClosed = true;\n\t\t}\n\t};\n\tconst _init = () => {\n\t\tif (explicitlyClosed || typeof urlRef.value === \"undefined\") return;\n\t\tconst es = new EventSource(urlRef.value, { withCredentials });\n\t\tstatus.value = \"CONNECTING\";\n\t\teventSource.value = es;\n\t\tes.onopen = () => {\n\t\t\tstatus.value = \"OPEN\";\n\t\t\terror.value = null;\n\t\t};\n\t\tes.onerror = (e) => {\n\t\t\tstatus.value = \"CLOSED\";\n\t\t\terror.value = e;\n\t\t\tif (es.readyState === 2 && !explicitlyClosed && autoReconnect) {\n\t\t\t\tes.close();\n\t\t\t\tconst { retries = -1, delay = 1e3, onFailed } = resolveNestedOptions$1(autoReconnect);\n\t\t\t\tretried += 1;\n\t\t\t\tif (typeof retries === \"number\" && (retries < 0 || retried < retries)) setTimeout(_init, delay);\n\t\t\t\telse if (typeof retries === \"function\" && retries()) setTimeout(_init, delay);\n\t\t\t\telse onFailed === null || onFailed === void 0 || onFailed();\n\t\t\t}\n\t\t};\n\t\tes.onmessage = (e) => {\n\t\t\tvar _serializer$read;\n\t\t\tevent.value = null;\n\t\t\tdata.value = (_serializer$read = serializer.read(e.data)) !== null && _serializer$read !== void 0 ? _serializer$read : null;\n\t\t\tlastEventId.value = e.lastEventId;\n\t\t};\n\t\tfor (const event_name of events) useEventListener(es, event_name, (e) => {\n\t\t\tvar _serializer$read2, _e$lastEventId;\n\t\t\tevent.value = event_name;\n\t\t\tdata.value = (_serializer$read2 = serializer.read(e.data)) !== null && _serializer$read2 !== void 0 ? _serializer$read2 : null;\n\t\t\tlastEventId.value = (_e$lastEventId = e.lastEventId) !== null && _e$lastEventId !== void 0 ? _e$lastEventId : null;\n\t\t}, { passive: true });\n\t};\n\tconst open = () => {\n\t\tif (!isClient) return;\n\t\tclose();\n\t\texplicitlyClosed = false;\n\t\tretried = 0;\n\t\t_init();\n\t};\n\tif (immediate) open();\n\tif (autoConnect) watch(urlRef, open);\n\ttryOnScopeDispose(close);\n\treturn {\n\t\teventSource,\n\t\tevent,\n\t\tdata,\n\t\tstatus,\n\t\terror,\n\t\topen,\n\t\tclose,\n\t\tlastEventId\n\t};\n}\n//#endregion\n//#region useEyeDropper/index.ts\n/**\n* Reactive [EyeDropper API](https://developer.mozilla.org/en-US/docs/Web/API/EyeDropper_API)\n*\n* @see https://vueuse.org/useEyeDropper\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useEyeDropper(options = {}) {\n\tconst { initialValue = \"\" } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => typeof window !== \"undefined\" && \"EyeDropper\" in window);\n\tconst sRGBHex = shallowRef(initialValue);\n\tasync function open(openOptions) {\n\t\tif (!isSupported.value) return;\n\t\tconst result = await new window.EyeDropper().open(openOptions);\n\t\tsRGBHex.value = result.sRGBHex;\n\t\treturn result;\n\t}\n\treturn {\n\t\tisSupported,\n\t\tsRGBHex,\n\t\topen\n\t};\n}\n//#endregion\n//#region useFavicon/index.ts\nfunction useFavicon(newIcon = null, options = {}) {\n\tconst { baseUrl = \"\", rel = \"icon\", document = defaultDocument } = options;\n\tconst favicon = toRef(newIcon);\n\tconst applyIcon = (icon) => {\n\t\tconst elements = document === null || document === void 0 ? void 0 : document.head.querySelectorAll(`link[rel*=\"${rel}\"]`);\n\t\tif (!elements || elements.length === 0) {\n\t\t\tconst link = document === null || document === void 0 ? void 0 : document.createElement(\"link\");\n\t\t\tif (link) {\n\t\t\t\tlink.rel = rel;\n\t\t\t\tlink.href = `${baseUrl}${icon}`;\n\t\t\t\tlink.type = `image/${icon.split(\".\").pop()}`;\n\t\t\t\tdocument === null || document === void 0 || document.head.append(link);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\telements === null || elements === void 0 || elements.forEach((el) => el.href = `${baseUrl}${icon}`);\n\t};\n\twatch(favicon, (i, o) => {\n\t\tif (typeof i === \"string\" && i !== o) applyIcon(i);\n\t}, { immediate: true });\n\treturn favicon;\n}\n//#endregion\n//#region useFetch/index.ts\nconst payloadMapping = {\n\tjson: \"application/json\",\n\ttext: \"text/plain\"\n};\n/**\n* !!!IMPORTANT!!!\n*\n* If you update the UseFetchOptions interface, be sure to update this object\n* to include the new options\n*/\nfunction isFetchOptions(obj) {\n\treturn 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\treturn reAbsolute.test(url);\n}\nfunction headersToObject(headers) {\n\tif (typeof Headers !== \"undefined\" && headers instanceof Headers) return Object.fromEntries(headers.entries());\n\treturn headers;\n}\nfunction combineCallbacks(combination, ...callbacks) {\n\tif (combination === \"overwrite\") return async (ctx) => {\n\t\tlet callback;\n\t\tfor (let i = callbacks.length - 1; i >= 0; i--) if (callbacks[i] != null) {\n\t\t\tcallback = callbacks[i];\n\t\t\tbreak;\n\t\t}\n\t\tif (callback) return {\n\t\t\t...ctx,\n\t\t\t...await callback(ctx)\n\t\t};\n\t\treturn ctx;\n\t};\n\telse return async (ctx) => {\n\t\tfor (const callback of callbacks) if (callback) ctx = {\n\t\t\t...ctx,\n\t\t\t...await callback(ctx)\n\t\t};\n\t\treturn ctx;\n\t};\n}\nfunction createFetch(config = {}) {\n\tconst _combination = config.combination || \"chain\";\n\tconst _options = config.options || {};\n\tconst _fetchOptions = config.fetchOptions || {};\n\tfunction useFactoryFetch(url, ...args) {\n\t\tconst computedUrl = computed(() => {\n\t\t\tconst baseUrl = toValue(config.baseUrl);\n\t\t\tconst targetUrl = toValue(url);\n\t\t\treturn baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl;\n\t\t});\n\t\tlet options = _options;\n\t\tlet fetchOptions = _fetchOptions;\n\t\tif (args.length > 0) if (isFetchOptions(args[0])) options = {\n\t\t\t...options,\n\t\t\t...args[0],\n\t\t\tbeforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[0].beforeFetch),\n\t\t\tafterFetch: combineCallbacks(_combination, _options.afterFetch, args[0].afterFetch),\n\t\t\tonFetchError: combineCallbacks(_combination, _options.onFetchError, args[0].onFetchError)\n\t\t};\n\t\telse fetchOptions = {\n\t\t\t...fetchOptions,\n\t\t\t...args[0],\n\t\t\theaders: {\n\t\t\t\t...headersToObject(fetchOptions.headers) || {},\n\t\t\t\t...headersToObject(args[0].headers) || {}\n\t\t\t}\n\t\t};\n\t\tif (args.length > 1 && isFetchOptions(args[1])) options = {\n\t\t\t...options,\n\t\t\t...args[1],\n\t\t\tbeforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[1].beforeFetch),\n\t\t\tafterFetch: combineCallbacks(_combination, _options.afterFetch, args[1].afterFetch),\n\t\t\tonFetchError: combineCallbacks(_combination, _options.onFetchError, args[1].onFetchError)\n\t\t};\n\t\treturn useFetch(computedUrl, fetchOptions, options);\n\t}\n\treturn useFactoryFetch;\n}\nfunction useFetch(url, ...args) {\n\tvar _defaultWindow$fetch, _globalThis;\n\tconst supportsAbort = typeof AbortController === \"function\";\n\tlet fetchOptions = {};\n\tlet options = {\n\t\timmediate: true,\n\t\trefetch: false,\n\t\ttimeout: 0,\n\t\tupdateDataOnError: false\n\t};\n\tconst config = {\n\t\tmethod: \"GET\",\n\t\ttype: \"text\",\n\t\tpayload: void 0\n\t};\n\tif (args.length > 0) if (isFetchOptions(args[0])) options = {\n\t\t...options,\n\t\t...args[0]\n\t};\n\telse fetchOptions = args[0];\n\tif (args.length > 1) {\n\t\tif (isFetchOptions(args[1])) options = {\n\t\t\t...options,\n\t\t\t...args[1]\n\t\t};\n\t}\n\tconst { fetch = (_defaultWindow$fetch = defaultWindow === null || defaultWindow === void 0 ? void 0 : defaultWindow.fetch) !== null && _defaultWindow$fetch !== void 0 ? _defaultWindow$fetch : (_globalThis = globalThis) === null || _globalThis === void 0 ? void 0 : _globalThis.fetch, initialData, timeout } = options;\n\tconst responseEvent = createEventHook();\n\tconst errorEvent = createEventHook();\n\tconst finallyEvent = createEventHook();\n\tconst isFinished = shallowRef(false);\n\tconst isFetching = shallowRef(false);\n\tconst aborted = shallowRef(false);\n\tconst statusCode = shallowRef(null);\n\tconst response = shallowRef(null);\n\tconst error = shallowRef(null);\n\tconst data = shallowRef(initialData || null);\n\tconst canAbort = computed(() => supportsAbort && isFetching.value);\n\tlet controller;\n\tlet timer;\n\tconst abort = (reason) => {\n\t\tif (supportsAbort) {\n\t\t\tcontroller === null || controller === void 0 || controller.abort(reason);\n\t\t\tcontroller = new AbortController();\n\t\t\tcontroller.signal.onabort = () => aborted.value = true;\n\t\t\tfetchOptions = {\n\t\t\t\t...fetchOptions,\n\t\t\t\tsignal: controller.signal\n\t\t\t};\n\t\t}\n\t};\n\tconst loading = (isLoading) => {\n\t\tisFetching.value = isLoading;\n\t\tisFinished.value = !isLoading;\n\t};\n\tif (timeout) timer = useTimeoutFn(abort, timeout, { immediate: false });\n\tlet executeCounter = 0;\n\tconst execute = async (throwOnFailed = false) => {\n\t\tvar _context$options;\n\t\tabort();\n\t\tloading(true);\n\t\terror.value = null;\n\t\tstatusCode.value = null;\n\t\taborted.value = false;\n\t\texecuteCounter += 1;\n\t\tconst currentExecuteCounter = executeCounter;\n\t\tconst defaultFetchOptions = {\n\t\t\tmethod: config.method,\n\t\t\theaders: {}\n\t\t};\n\t\tconst payload = toValue(config.payload);\n\t\tif (payload) {\n\t\t\tvar _payloadMapping$confi;\n\t\t\tconst headers = headersToObject(defaultFetchOptions.headers);\n\t\t\tconst proto = Object.getPrototypeOf(payload);\n\t\t\tif (!config.payloadType && payload && (proto === Object.prototype || Array.isArray(proto)) && !(payload instanceof FormData)) config.payloadType = \"json\";\n\t\t\tif (config.payloadType) headers[\"Content-Type\"] = (_payloadMapping$confi = payloadMapping[config.payloadType]) !== null && _payloadMapping$confi !== void 0 ? _payloadMapping$confi : config.payloadType;\n\t\t\tdefaultFetchOptions.body = config.payloadType === \"json\" ? JSON.stringify(payload) : payload;\n\t\t}\n\t\tlet isCanceled = false;\n\t\tconst context = {\n\t\t\turl: toValue(url),\n\t\t\toptions: {\n\t\t\t\t...defaultFetchOptions,\n\t\t\t\t...fetchOptions\n\t\t\t},\n\t\t\tcancel: () => {\n\t\t\t\tisCanceled = true;\n\t\t\t}\n\t\t};\n\t\tif (options.beforeFetch) Object.assign(context, await options.beforeFetch(context));\n\t\tif (isCanceled || !fetch) {\n\t\t\tloading(false);\n\t\t\treturn Promise.resolve(null);\n\t\t}\n\t\tlet responseData = null;\n\t\tif (timer) timer.start();\n\t\treturn fetch(context.url, {\n\t\t\t...defaultFetchOptions,\n\t\t\t...context.options,\n\t\t\theaders: {\n\t\t\t\t...headersToObject(defaultFetchOptions.headers),\n\t\t\t\t...headersToObject((_context$options = context.options) === null || _context$options === void 0 ? void 0 : _context$options.headers)\n\t\t\t}\n\t\t}).then(async (fetchResponse) => {\n\t\t\tresponse.value = fetchResponse;\n\t\t\tstatusCode.value = fetchResponse.status;\n\t\t\tresponseData = await fetchResponse.clone()[config.type]();\n\t\t\tif (!fetchResponse.ok) {\n\t\t\t\tdata.value = initialData || null;\n\t\t\t\tthrow new Error(fetchResponse.statusText);\n\t\t\t}\n\t\t\tif (options.afterFetch) ({data: responseData} = await options.afterFetch({\n\t\t\t\tdata: responseData,\n\t\t\t\tresponse: fetchResponse,\n\t\t\t\tcontext,\n\t\t\t\texecute\n\t\t\t}));\n\t\t\tdata.value = responseData;\n\t\t\tresponseEvent.trigger(fetchResponse);\n\t\t\treturn fetchResponse;\n\t\t}).catch(async (fetchError) => {\n\t\t\tlet errorData = fetchError.message || fetchError.name;\n\t\t\tif (options.onFetchError) ({error: errorData, data: responseData} = await options.onFetchError({\n\t\t\t\tdata: responseData,\n\t\t\t\terror: fetchError,\n\t\t\t\tresponse: response.value,\n\t\t\t\tcontext,\n\t\t\t\texecute\n\t\t\t}));\n\t\t\tif (currentExecuteCounter === executeCounter) {\n\t\t\t\terror.value = errorData;\n\t\t\t\tif (options.updateDataOnError) data.value = responseData;\n\t\t\t}\n\t\t\terrorEvent.trigger(fetchError);\n\t\t\tif (throwOnFailed) throw fetchError;\n\t\t\treturn null;\n\t\t}).finally(() => {\n\t\t\tif (currentExecuteCounter === executeCounter) loading(false);\n\t\t\tif (timer) timer.stop();\n\t\t\tfinallyEvent.trigger(null);\n\t\t});\n\t};\n\tconst refetch = toRef(options.refetch);\n\twatch([refetch, toRef(url)], ([refetch]) => refetch && execute(), { deep: true });\n\tconst shell = {\n\t\tisFinished: shallowReadonly(isFinished),\n\t\tisFetching: shallowReadonly(isFetching),\n\t\tstatusCode,\n\t\tresponse,\n\t\terror,\n\t\tdata,\n\t\tcanAbort,\n\t\taborted,\n\t\tabort,\n\t\texecute,\n\t\tonFetchResponse: responseEvent.on,\n\t\tonFetchError: errorEvent.on,\n\t\tonFetchFinally: finallyEvent.on,\n\t\tget: setMethod(\"GET\"),\n\t\tput: setMethod(\"PUT\"),\n\t\tpost: setMethod(\"POST\"),\n\t\tdelete: setMethod(\"DELETE\"),\n\t\tpatch: setMethod(\"PATCH\"),\n\t\thead: setMethod(\"HEAD\"),\n\t\toptions: setMethod(\"OPTIONS\"),\n\t\tjson: setType(\"json\"),\n\t\ttext: setType(\"text\"),\n\t\tblob: setType(\"blob\"),\n\t\tarrayBuffer: setType(\"arrayBuffer\"),\n\t\tformData: setType(\"formData\")\n\t};\n\tfunction setMethod(method) {\n\t\treturn (payload, payloadType) => {\n\t\t\tif (!isFetching.value) {\n\t\t\t\tconfig.method = method;\n\t\t\t\tconfig.payload = payload;\n\t\t\t\tconfig.payloadType = payloadType;\n\t\t\t\tif (isRef(config.payload)) watch([refetch, toRef(config.payload)], ([refetch]) => refetch && execute(), { deep: true });\n\t\t\t\treturn {\n\t\t\t\t\t...shell,\n\t\t\t\t\tthen(onFulfilled, onRejected) {\n\t\t\t\t\t\treturn waitUntilFinished().then(onFulfilled, onRejected);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t}\n\tfunction waitUntilFinished() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tuntil(isFinished).toBe(true).then(() => resolve(shell)).catch(reject);\n\t\t});\n\t}\n\tfunction setType(type) {\n\t\treturn () => {\n\t\t\tif (!isFetching.value) {\n\t\t\t\tconfig.type = type;\n\t\t\t\treturn {\n\t\t\t\t\t...shell,\n\t\t\t\t\tthen(onFulfilled, onRejected) {\n\t\t\t\t\t\treturn waitUntilFinished().then(onFulfilled, onRejected);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t}\n\tif (options.immediate) Promise.resolve().then(() => execute());\n\treturn {\n\t\t...shell,\n\t\tthen(onFulfilled, onRejected) {\n\t\t\treturn waitUntilFinished().then(onFulfilled, onRejected);\n\t\t}\n\t};\n}\nfunction joinPaths(start, end) {\n\tif (!start.endsWith(\"/\") && !end.startsWith(\"/\")) return `${start}/${end}`;\n\tif (start.endsWith(\"/\") && end.startsWith(\"/\")) return `${start.slice(0, -1)}${end}`;\n\treturn `${start}${end}`;\n}\n//#endregion\n//#region useFileDialog/index.ts\nconst DEFAULT_OPTIONS = {\n\tmultiple: true,\n\taccept: \"*\",\n\treset: false,\n\tdirectory: false\n};\nfunction prepareInitialFiles(files) {\n\tif (!files) return null;\n\tif (files instanceof FileList) return files;\n\tconst dt = new DataTransfer();\n\tfor (const file of files) dt.items.add(file);\n\treturn dt.files;\n}\n/**\n* Open file dialog with ease.\n*\n* @see https://vueuse.org/useFileDialog\n* @param options\n*/\nfunction useFileDialog(options = {}) {\n\tconst { document = defaultDocument } = options;\n\tconst files = ref(prepareInitialFiles(options.initialFiles));\n\tconst { on: onChange, trigger: changeTrigger } = createEventHook();\n\tconst { on: onCancel, trigger: cancelTrigger } = createEventHook();\n\tconst inputRef = computed(() => {\n\t\tvar _unrefElement;\n\t\tconst input = (_unrefElement = unrefElement(options.input)) !== null && _unrefElement !== void 0 ? _unrefElement : document ? document.createElement(\"input\") : void 0;\n\t\tif (input) {\n\t\t\tinput.type = \"file\";\n\t\t\tinput.onchange = (event) => {\n\t\t\t\tconst result = event.target;\n\t\t\t\tfiles.value = result.files;\n\t\t\t\tchangeTrigger(files.value);\n\t\t\t};\n\t\t\tinput.oncancel = () => {\n\t\t\t\tcancelTrigger();\n\t\t\t};\n\t\t}\n\t\treturn input;\n\t});\n\tconst reset = () => {\n\t\tfiles.value = null;\n\t\tif (inputRef.value && inputRef.value.value) {\n\t\t\tinputRef.value.value = \"\";\n\t\t\tchangeTrigger(null);\n\t\t}\n\t};\n\tconst applyOptions = (options) => {\n\t\tconst el = inputRef.value;\n\t\tif (!el) return;\n\t\tel.multiple = toValue(options.multiple);\n\t\tel.accept = toValue(options.accept);\n\t\tel.webkitdirectory = toValue(options.directory);\n\t\tif (hasOwn(options, \"capture\")) el.capture = toValue(options.capture);\n\t};\n\tconst open = (localOptions) => {\n\t\tconst el = inputRef.value;\n\t\tif (!el) return;\n\t\tconst mergedOptions = {\n\t\t\t...DEFAULT_OPTIONS,\n\t\t\t...options,\n\t\t\t...localOptions\n\t\t};\n\t\tapplyOptions(mergedOptions);\n\t\tif (toValue(mergedOptions.reset)) reset();\n\t\tel.click();\n\t};\n\twatchEffect(() => {\n\t\tapplyOptions(options);\n\t});\n\treturn {\n\t\tfiles: readonly(files),\n\t\topen,\n\t\treset,\n\t\tonCancel,\n\t\tonChange\n\t};\n}\n//#endregion\n//#region useFileSystemAccess/index.ts\nfunction useFileSystemAccess(options = {}) {\n\tconst { window: _window = defaultWindow, dataType = \"Text\" } = options;\n\tconst window = _window;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && \"showSaveFilePicker\" in window && \"showOpenFilePicker\" in window);\n\tconst fileHandle = shallowRef();\n\tconst data = shallowRef();\n\tconst file = shallowRef();\n\tconst fileName = computed(() => {\n\t\tvar _file$value$name, _file$value;\n\t\treturn (_file$value$name = (_file$value = file.value) === null || _file$value === void 0 ? void 0 : _file$value.name) !== null && _file$value$name !== void 0 ? _file$value$name : \"\";\n\t});\n\tconst fileMIME = computed(() => {\n\t\tvar _file$value$type, _file$value2;\n\t\treturn (_file$value$type = (_file$value2 = file.value) === null || _file$value2 === void 0 ? void 0 : _file$value2.type) !== null && _file$value$type !== void 0 ? _file$value$type : \"\";\n\t});\n\tconst fileSize = computed(() => {\n\t\tvar _file$value$size, _file$value3;\n\t\treturn (_file$value$size = (_file$value3 = file.value) === null || _file$value3 === void 0 ? void 0 : _file$value3.size) !== null && _file$value$size !== void 0 ? _file$value$size : 0;\n\t});\n\tconst fileLastModified = computed(() => {\n\t\tvar _file$value$lastModif, _file$value4;\n\t\treturn (_file$value$lastModif = (_file$value4 = file.value) === null || _file$value4 === void 0 ? void 0 : _file$value4.lastModified) !== null && _file$value$lastModif !== void 0 ? _file$value$lastModif : 0;\n\t});\n\tasync function open(_options = {}) {\n\t\tif (!isSupported.value) return;\n\t\tconst [handle] = await window.showOpenFilePicker({\n\t\t\t...toValue(options),\n\t\t\t..._options\n\t\t});\n\t\tfileHandle.value = handle;\n\t\tawait updateData();\n\t}\n\tasync function create(_options = {}) {\n\t\tif (!isSupported.value) return;\n\t\tfileHandle.value = await window.showSaveFilePicker({\n\t\t\t...options,\n\t\t\t..._options\n\t\t});\n\t\tdata.value = void 0;\n\t\tawait updateData();\n\t}\n\tasync function save(_options = {}) {\n\t\tif (!isSupported.value) return;\n\t\tif (!fileHandle.value) return saveAs(_options);\n\t\tif (data.value) {\n\t\t\tconst writableStream = await fileHandle.value.createWritable();\n\t\t\tawait writableStream.write(data.value);\n\t\t\tawait writableStream.close();\n\t\t}\n\t\tawait updateFile();\n\t}\n\tasync function saveAs(_options = {}) {\n\t\tif (!isSupported.value) return;\n\t\tfileHandle.value = await window.showSaveFilePicker({\n\t\t\t...options,\n\t\t\t..._options\n\t\t});\n\t\tif (data.value) {\n\t\t\tconst writableStream = await fileHandle.value.createWritable();\n\t\t\tawait writableStream.write(data.value);\n\t\t\tawait writableStream.close();\n\t\t}\n\t\tawait updateFile();\n\t}\n\tasync function updateFile() {\n\t\tvar _fileHandle$value;\n\t\tfile.value = await ((_fileHandle$value = fileHandle.value) === null || _fileHandle$value === void 0 ? void 0 : _fileHandle$value.getFile());\n\t}\n\tasync function updateData() {\n\t\tvar _file$value5, _file$value6;\n\t\tawait updateFile();\n\t\tconst type = toValue(dataType);\n\t\tif (type === \"Text\") data.value = await ((_file$value5 = file.value) === null || _file$value5 === void 0 ? void 0 : _file$value5.text());\n\t\telse if (type === \"ArrayBuffer\") data.value = await ((_file$value6 = file.value) === null || _file$value6 === void 0 ? void 0 : _file$value6.arrayBuffer());\n\t\telse if (type === \"Blob\") data.value = file.value;\n\t}\n\twatch(() => toValue(dataType), updateData);\n\treturn {\n\t\tisSupported,\n\t\tdata,\n\t\tfile,\n\t\tfileName,\n\t\tfileMIME,\n\t\tfileSize,\n\t\tfileLastModified,\n\t\topen,\n\t\tcreate,\n\t\tsave,\n\t\tsaveAs,\n\t\tupdateData\n\t};\n}\n//#endregion\n//#region useFocus/index.ts\n/**\n* Track or set the focus state of a DOM element.\n*\n* @see https://vueuse.org/useFocus\n* @param target The target element for the focus and blur events.\n* @param options\n*/\nfunction useFocus(target, options = {}) {\n\tconst { initialValue = false, focusVisible = false, preventScroll = false } = options;\n\tconst innerFocused = shallowRef(false);\n\tconst targetElement = computed(() => unrefElement(target));\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(targetElement, \"focus\", (event) => {\n\t\tvar _matches, _ref;\n\t\tif (!focusVisible || ((_matches = (_ref = event.target).matches) === null || _matches === void 0 ? void 0 : _matches.call(_ref, \":focus-visible\"))) innerFocused.value = true;\n\t}, listenerOptions);\n\tuseEventListener(targetElement, \"blur\", () => innerFocused.value = false, listenerOptions);\n\tconst focused = computed({\n\t\tget: () => innerFocused.value,\n\t\tset(value) {\n\t\t\tvar _targetElement$value, _targetElement$value2;\n\t\t\tif (!value && innerFocused.value) (_targetElement$value = targetElement.value) === null || _targetElement$value === void 0 || _targetElement$value.blur();\n\t\t\telse if (value && !innerFocused.value) (_targetElement$value2 = targetElement.value) === null || _targetElement$value2 === void 0 || _targetElement$value2.focus({ preventScroll });\n\t\t}\n\t});\n\twatch(targetElement, () => {\n\t\tfocused.value = initialValue;\n\t}, {\n\t\timmediate: true,\n\t\tflush: \"post\"\n\t});\n\treturn { focused };\n}\n//#endregion\n//#region useFocusWithin/index.ts\nconst EVENT_FOCUS_IN = \"focusin\";\nconst EVENT_FOCUS_OUT = \"focusout\";\nconst PSEUDO_CLASS_FOCUS_WITHIN = \":focus-within\";\n/**\n* Track if focus is contained within the target element\n*\n* @see https://vueuse.org/useFocusWithin\n* @param target The target element to track\n* @param options Focus within options\n*/\nfunction useFocusWithin(target, options = {}) {\n\tconst { window = defaultWindow } = options;\n\tconst targetElement = computed(() => unrefElement(target));\n\tconst _focused = shallowRef(false);\n\tconst focused = computed(() => _focused.value);\n\tconst activeElement = useActiveElement(options);\n\tif (!window || !activeElement.value) return { focused };\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(targetElement, EVENT_FOCUS_IN, () => _focused.value = true, listenerOptions);\n\tuseEventListener(targetElement, EVENT_FOCUS_OUT, () => {\n\t\tvar _targetElement$value$, _targetElement$value, _targetElement$value$2;\n\t\treturn _focused.value = (_targetElement$value$ = (_targetElement$value = targetElement.value) === null || _targetElement$value === void 0 || (_targetElement$value$2 = _targetElement$value.matches) === null || _targetElement$value$2 === void 0 ? void 0 : _targetElement$value$2.call(_targetElement$value, PSEUDO_CLASS_FOCUS_WITHIN)) !== null && _targetElement$value$ !== void 0 ? _targetElement$value$ : false;\n\t}, listenerOptions);\n\treturn { focused };\n}\n//#endregion\n//#region useFps/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useFps(options) {\n\tvar _options$every;\n\tconst fps = shallowRef(0);\n\tif (typeof performance === \"undefined\") return fps;\n\tconst every = (_options$every = options === null || options === void 0 ? void 0 : options.every) !== null && _options$every !== void 0 ? _options$every : 10;\n\tlet last = performance.now();\n\tlet ticks = 0;\n\tuseRafFn(() => {\n\t\tticks += 1;\n\t\tif (ticks >= every) {\n\t\t\tconst now = performance.now();\n\t\t\tconst diff = now - last;\n\t\t\tfps.value = Math.round(1e3 / (diff / ticks));\n\t\t\tlast = now;\n\t\t\tticks = 0;\n\t\t}\n\t});\n\treturn fps;\n}\n//#endregion\n//#region useFullscreen/index.ts\nconst eventHandlers = [\n\t\"fullscreenchange\",\n\t\"webkitfullscreenchange\",\n\t\"webkitendfullscreen\",\n\t\"mozfullscreenchange\",\n\t\"MSFullscreenChange\"\n];\n/**\n* Reactive Fullscreen API.\n*\n* @see https://vueuse.org/useFullscreen\n* @param target\n* @param options\n*/\nfunction useFullscreen(target, options = {}) {\n\tconst { document = defaultDocument, autoExit = false } = options;\n\tconst targetRef = computed(() => {\n\t\tvar _unrefElement;\n\t\treturn (_unrefElement = unrefElement(target)) !== null && _unrefElement !== void 0 ? _unrefElement : document === null || document === void 0 ? void 0 : document.documentElement;\n\t});\n\tconst isFullscreen = shallowRef(false);\n\tconst requestMethod = computed(() => {\n\t\treturn [\n\t\t\t\"requestFullscreen\",\n\t\t\t\"webkitRequestFullscreen\",\n\t\t\t\"webkitEnterFullscreen\",\n\t\t\t\"webkitEnterFullScreen\",\n\t\t\t\"webkitRequestFullScreen\",\n\t\t\t\"mozRequestFullScreen\",\n\t\t\t\"msRequestFullscreen\"\n\t\t].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n\t});\n\tconst exitMethod = computed(() => {\n\t\treturn [\n\t\t\t\"exitFullscreen\",\n\t\t\t\"webkitExitFullscreen\",\n\t\t\t\"webkitExitFullScreen\",\n\t\t\t\"webkitCancelFullScreen\",\n\t\t\t\"mozCancelFullScreen\",\n\t\t\t\"msExitFullscreen\"\n\t\t].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n\t});\n\tconst fullscreenEnabled = computed(() => {\n\t\treturn [\n\t\t\t\"fullScreen\",\n\t\t\t\"webkitIsFullScreen\",\n\t\t\t\"webkitDisplayingFullscreen\",\n\t\t\t\"mozFullScreen\",\n\t\t\t\"msFullscreenElement\"\n\t\t].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n\t});\n\tconst fullscreenElementMethod = [\n\t\t\"fullscreenElement\",\n\t\t\"webkitFullscreenElement\",\n\t\t\"mozFullScreenElement\",\n\t\t\"msFullscreenElement\"\n\t].find((m) => document && m in document);\n\tconst isSupported = /* @__PURE__ */ useSupported(() => targetRef.value && document && requestMethod.value !== void 0 && exitMethod.value !== void 0 && fullscreenEnabled.value !== void 0);\n\tconst isCurrentElementFullScreen = () => {\n\t\tif (fullscreenElementMethod) return (document === null || document === void 0 ? void 0 : document[fullscreenElementMethod]) === targetRef.value;\n\t\treturn false;\n\t};\n\tconst isElementFullScreen = () => {\n\t\tif (fullscreenEnabled.value) if (document && document[fullscreenEnabled.value] != null) return document[fullscreenEnabled.value];\n\t\telse {\n\t\t\tconst target = targetRef.value;\n\t\t\tif ((target === null || target === void 0 ? void 0 : target[fullscreenEnabled.value]) != null) return Boolean(target[fullscreenEnabled.value]);\n\t\t}\n\t\treturn false;\n\t};\n\tasync function exit() {\n\t\tif (!isSupported.value || !isFullscreen.value) return;\n\t\tif (exitMethod.value) if ((document === null || document === void 0 ? void 0 : document[exitMethod.value]) != null) await document[exitMethod.value]();\n\t\telse {\n\t\t\tconst target = targetRef.value;\n\t\t\tif ((target === null || target === void 0 ? void 0 : target[exitMethod.value]) != null) await target[exitMethod.value]();\n\t\t}\n\t\tisFullscreen.value = false;\n\t}\n\tasync function enter() {\n\t\tif (!isSupported.value || isFullscreen.value) return;\n\t\tif (isElementFullScreen()) await exit();\n\t\tconst target = targetRef.value;\n\t\tif (requestMethod.value && (target === null || target === void 0 ? void 0 : target[requestMethod.value]) != null) {\n\t\t\tawait target[requestMethod.value]();\n\t\t\tisFullscreen.value = true;\n\t\t}\n\t}\n\tasync function toggle() {\n\t\tawait (isFullscreen.value ? exit() : enter());\n\t}\n\tconst handlerCallback = () => {\n\t\tconst isElementFullScreenValue = isElementFullScreen();\n\t\tif (!isElementFullScreenValue || isElementFullScreenValue && isCurrentElementFullScreen()) isFullscreen.value = isElementFullScreenValue;\n\t};\n\tconst listenerOptions = {\n\t\tcapture: false,\n\t\tpassive: true\n\t};\n\tuseEventListener(document, eventHandlers, handlerCallback, listenerOptions);\n\tuseEventListener(() => unrefElement(targetRef), eventHandlers, handlerCallback, listenerOptions);\n\ttryOnMounted(handlerCallback, false);\n\tif (autoExit) tryOnScopeDispose(exit);\n\treturn {\n\t\tisSupported,\n\t\tisFullscreen,\n\t\tenter,\n\t\texit,\n\t\ttoggle\n\t};\n}\n//#endregion\n//#region useGamepad/index.ts\n/**\n* Maps a standard standard gamepad to an Xbox 360 Controller.\n*/\nfunction mapGamepadToXbox360Controller(gamepad) {\n\treturn computed(() => {\n\t\tif (gamepad.value) return {\n\t\t\tbuttons: {\n\t\t\t\ta: gamepad.value.buttons[0],\n\t\t\t\tb: gamepad.value.buttons[1],\n\t\t\t\tx: gamepad.value.buttons[2],\n\t\t\t\ty: gamepad.value.buttons[3]\n\t\t\t},\n\t\t\tbumper: {\n\t\t\t\tleft: gamepad.value.buttons[4],\n\t\t\t\tright: gamepad.value.buttons[5]\n\t\t\t},\n\t\t\ttriggers: {\n\t\t\t\tleft: gamepad.value.buttons[6],\n\t\t\t\tright: gamepad.value.buttons[7]\n\t\t\t},\n\t\t\tstick: {\n\t\t\t\tleft: {\n\t\t\t\t\thorizontal: gamepad.value.axes[0],\n\t\t\t\t\tvertical: gamepad.value.axes[1],\n\t\t\t\t\tbutton: gamepad.value.buttons[10]\n\t\t\t\t},\n\t\t\t\tright: {\n\t\t\t\t\thorizontal: gamepad.value.axes[2],\n\t\t\t\t\tvertical: gamepad.value.axes[3],\n\t\t\t\t\tbutton: gamepad.value.buttons[11]\n\t\t\t\t}\n\t\t\t},\n\t\t\tdpad: {\n\t\t\t\tup: gamepad.value.buttons[12],\n\t\t\t\tdown: gamepad.value.buttons[13],\n\t\t\t\tleft: gamepad.value.buttons[14],\n\t\t\t\tright: gamepad.value.buttons[15]\n\t\t\t},\n\t\t\tback: gamepad.value.buttons[8],\n\t\t\tstart: gamepad.value.buttons[9]\n\t\t};\n\t\treturn null;\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction useGamepad(options = {}) {\n\tconst { navigator = defaultNavigator } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && \"getGamepads\" in navigator);\n\tconst gamepads = ref([]);\n\tconst onConnectedHook = createEventHook();\n\tconst onDisconnectedHook = createEventHook();\n\tconst stateFromGamepad = (gamepad) => {\n\t\tconst hapticActuators = [];\n\t\tconst vibrationActuator = \"vibrationActuator\" in gamepad ? gamepad.vibrationActuator : null;\n\t\tif (vibrationActuator) hapticActuators.push(vibrationActuator);\n\t\tif (gamepad.hapticActuators) hapticActuators.push(...gamepad.hapticActuators);\n\t\treturn {\n\t\t\tid: gamepad.id,\n\t\t\tindex: gamepad.index,\n\t\t\tconnected: gamepad.connected,\n\t\t\tmapping: gamepad.mapping,\n\t\t\ttimestamp: gamepad.timestamp,\n\t\t\tvibrationActuator: gamepad.vibrationActuator,\n\t\t\thapticActuators,\n\t\t\taxes: gamepad.axes.map((axes) => axes),\n\t\t\tbuttons: gamepad.buttons.map((button) => ({\n\t\t\t\tpressed: button.pressed,\n\t\t\t\ttouched: button.touched,\n\t\t\t\tvalue: button.value\n\t\t\t}))\n\t\t};\n\t};\n\tconst updateGamepadState = () => {\n\t\tconst _gamepads = (navigator === null || navigator === void 0 ? void 0 : navigator.getGamepads()) || [];\n\t\tfor (const gamepad of _gamepads) {\n\t\t\tif (!gamepad) continue;\n\t\t\tconst index = gamepads.value.findIndex((x) => x.index === gamepad.index);\n\t\t\tif (index > -1) gamepads.value[index] = stateFromGamepad(gamepad);\n\t\t}\n\t};\n\tconst { isActive, pause, resume } = useRafFn(updateGamepadState);\n\tconst onGamepadConnected = (gamepad) => {\n\t\tif (!gamepads.value.some(({ index }) => index === gamepad.index)) {\n\t\t\tgamepads.value.push(stateFromGamepad(gamepad));\n\t\t\tonConnectedHook.trigger(gamepad.index);\n\t\t}\n\t\tresume();\n\t};\n\tconst onGamepadDisconnected = (gamepad) => {\n\t\tgamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index);\n\t\tonDisconnectedHook.trigger(gamepad.index);\n\t};\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(\"gamepadconnected\", (e) => onGamepadConnected(e.gamepad), listenerOptions);\n\tuseEventListener(\"gamepaddisconnected\", (e) => onGamepadDisconnected(e.gamepad), listenerOptions);\n\ttryOnMounted(() => {\n\t\tconst _gamepads = (navigator === null || navigator === void 0 ? void 0 : navigator.getGamepads()) || [];\n\t\tfor (const gamepad of _gamepads) if (gamepad && gamepads.value[gamepad.index]) onGamepadConnected(gamepad);\n\t});\n\tpause();\n\treturn {\n\t\tisSupported,\n\t\tonConnected: onConnectedHook.on,\n\t\tonDisconnected: onDisconnectedHook.on,\n\t\tgamepads,\n\t\tpause,\n\t\tresume,\n\t\tisActive\n\t};\n}\n//#endregion\n//#region useGeolocation/index.ts\n/**\n* Reactive Geolocation API.\n*\n* @see https://vueuse.org/useGeolocation\n* @param options\n*/\nfunction useGeolocation(options = {}) {\n\tconst { enableHighAccuracy = true, maximumAge = 3e4, timeout = 27e3, navigator = defaultNavigator, immediate = true } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && \"geolocation\" in navigator);\n\tconst locatedAt = shallowRef(null);\n\tconst error = shallowRef(null);\n\tconst coords = shallowRef({\n\t\taccuracy: 0,\n\t\tlatitude: Number.POSITIVE_INFINITY,\n\t\tlongitude: Number.POSITIVE_INFINITY,\n\t\taltitude: null,\n\t\taltitudeAccuracy: null,\n\t\theading: null,\n\t\tspeed: null\n\t});\n\tfunction updatePosition(position) {\n\t\tlocatedAt.value = position.timestamp;\n\t\tcoords.value = position.coords;\n\t\terror.value = null;\n\t}\n\tlet watcher;\n\tfunction resume() {\n\t\tif (isSupported.value) watcher = navigator.geolocation.watchPosition(updatePosition, (err) => error.value = err, {\n\t\t\tenableHighAccuracy,\n\t\t\tmaximumAge,\n\t\t\ttimeout\n\t\t});\n\t}\n\tif (immediate) resume();\n\tfunction pause() {\n\t\tif (watcher && navigator) navigator.geolocation.clearWatch(watcher);\n\t}\n\ttryOnScopeDispose(() => {\n\t\tpause();\n\t});\n\treturn {\n\t\tisSupported,\n\t\tcoords,\n\t\tlocatedAt,\n\t\terror,\n\t\tresume,\n\t\tpause\n\t};\n}\n//#endregion\n//#region useIdle/index.ts\nconst defaultEvents$1 = [\n\t\"mousemove\",\n\t\"mousedown\",\n\t\"resize\",\n\t\"keydown\",\n\t\"touchstart\",\n\t\"wheel\"\n];\nconst oneMinute = 6e4;\n/**\n* Tracks whether the user is being inactive.\n*\n* @see https://vueuse.org/useIdle\n* @param timeout default to 1 minute\n* @param options IdleOptions\n*/\nfunction useIdle(timeout = oneMinute, options = {}) {\n\tconst { initialState = false, listenForVisibilityChange = true, events = defaultEvents$1, window = defaultWindow, eventFilter = throttleFilter(50) } = options;\n\tconst idle = shallowRef(initialState);\n\tconst lastActive = shallowRef(timestamp());\n\tconst isPending = shallowRef(false);\n\tlet timer;\n\tconst reset = () => {\n\t\tidle.value = false;\n\t\tclearTimeout(timer);\n\t\ttimer = setTimeout(() => idle.value = true, timeout);\n\t};\n\tconst onEvent = createFilterWrapper(eventFilter, () => {\n\t\tlastActive.value = timestamp();\n\t\treset();\n\t});\n\tif (window) {\n\t\tconst document = window.document;\n\t\tconst listenerOptions = { passive: true };\n\t\tfor (const event of events) useEventListener(window, event, () => {\n\t\t\tif (!isPending.value) return;\n\t\t\tonEvent();\n\t\t}, listenerOptions);\n\t\tif (listenForVisibilityChange) useEventListener(document, \"visibilitychange\", () => {\n\t\t\tif (document.hidden || !isPending.value) return;\n\t\t\tonEvent();\n\t\t}, listenerOptions);\n\t\tstart();\n\t}\n\tfunction start() {\n\t\tif (isPending.value) return;\n\t\tisPending.value = true;\n\t\tif (!initialState) reset();\n\t}\n\tfunction stop() {\n\t\tidle.value = initialState;\n\t\tclearTimeout(timer);\n\t\tisPending.value = false;\n\t}\n\treturn {\n\t\tidle,\n\t\tlastActive,\n\t\treset,\n\t\tstop,\n\t\tstart,\n\t\tisPending: shallowReadonly(isPending)\n\t};\n}\n//#endregion\n//#region useImage/index.ts\nasync function loadImage(options) {\n\treturn new Promise((resolve, reject) => {\n\t\tconst img = new Image();\n\t\tconst { src, srcset, sizes, class: clazz, loading, crossorigin, referrerPolicy, width, height, decoding, fetchPriority, ismap, usemap } = options;\n\t\timg.src = src;\n\t\tif (srcset != null) img.srcset = srcset;\n\t\tif (sizes != null) img.sizes = sizes;\n\t\tif (clazz != null) img.className = clazz;\n\t\tif (loading != null) img.loading = loading;\n\t\tif (crossorigin != null) img.crossOrigin = crossorigin;\n\t\tif (referrerPolicy != null) img.referrerPolicy = referrerPolicy;\n\t\tif (width != null) img.width = width;\n\t\tif (height != null) img.height = height;\n\t\tif (decoding != null) img.decoding = decoding;\n\t\tif (fetchPriority != null) img.fetchPriority = fetchPriority;\n\t\tif (ismap != null) img.isMap = ismap;\n\t\tif (usemap != null) img.useMap = usemap;\n\t\timg.onload = () => resolve(img);\n\t\timg.onerror = reject;\n\t});\n}\n/**\n* Reactive load an image in the browser, you can wait the result to display it or show a fallback.\n*\n* @see https://vueuse.org/useImage\n* @param options Image attributes, as used in the <img> tag\n* @param asyncStateOptions\n*/\nfunction useImage(options, asyncStateOptions = {}) {\n\tconst state = useAsyncState(() => loadImage(toValue(options)), void 0, {\n\t\tresetOnExecute: true,\n\t\t...asyncStateOptions\n\t});\n\twatch(() => toValue(options), () => state.execute(asyncStateOptions.delay), { deep: true });\n\treturn state;\n}\n//#endregion\n//#region _resolve-element.ts\n/**\n* Resolves an element from a given element, window, or document.\n*\n* @internal\n*/\nfunction resolveElement(el) {\n\tif (typeof Window !== \"undefined\" && el instanceof Window) return el.document.documentElement;\n\tif (typeof Document !== \"undefined\" && el instanceof Document) return el.documentElement;\n\treturn el;\n}\n//#endregion\n//#region useScroll/index.ts\n/**\n* We have to check if the scroll amount is close enough to some threshold in order to\n* more accurately calculate arrivedState. This is because scrollTop/scrollLeft are non-rounded\n* numbers, while scrollHeight/scrollWidth and clientHeight/clientWidth are rounded.\n* https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#determine_if_an_element_has_been_totally_scrolled\n*/\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\n/**\n* Reactive scroll.\n*\n* @see https://vueuse.org/useScroll\n* @param element\n* @param options\n*/\nfunction useScroll(element, options = {}) {\n\tconst { throttle = 0, idle = 200, onStop = noop, onScroll = noop, offset = {\n\t\tleft: 0,\n\t\tright: 0,\n\t\ttop: 0,\n\t\tbottom: 0\n\t}, observe: _observe = { mutation: false }, eventListenerOptions = {\n\t\tcapture: false,\n\t\tpassive: true\n\t}, behavior = \"auto\", window = defaultWindow, onError = (e) => {\n\t\tconsole.error(e);\n\t} } = options;\n\tconst observe = typeof _observe === \"boolean\" ? { mutation: _observe } : _observe;\n\tconst internalX = shallowRef(0);\n\tconst internalY = shallowRef(0);\n\tconst x = computed({\n\t\tget() {\n\t\t\treturn internalX.value;\n\t\t},\n\t\tset(x) {\n\t\t\tscrollTo(x, void 0);\n\t\t}\n\t});\n\tconst y = computed({\n\t\tget() {\n\t\t\treturn internalY.value;\n\t\t},\n\t\tset(y) {\n\t\t\tscrollTo(void 0, y);\n\t\t}\n\t});\n\tfunction scrollTo(_x, _y) {\n\t\tvar _ref, _toValue, _toValue2, _document;\n\t\tif (!window) return;\n\t\tconst _element = toValue(element);\n\t\tif (!_element) return;\n\t\t(_ref = _element instanceof Document ? window.document.body : _element) === null || _ref === void 0 || _ref.scrollTo({\n\t\t\ttop: (_toValue = toValue(_y)) !== null && _toValue !== void 0 ? _toValue : y.value,\n\t\t\tleft: (_toValue2 = toValue(_x)) !== null && _toValue2 !== void 0 ? _toValue2 : x.value,\n\t\t\tbehavior: toValue(behavior)\n\t\t});\n\t\tconst scrollContainer = (_element === null || _element === void 0 || (_document = _element.document) === null || _document === void 0 ? void 0 : _document.documentElement) || (_element === null || _element === void 0 ? void 0 : _element.documentElement) || _element;\n\t\tif (x != null) internalX.value = scrollContainer.scrollLeft;\n\t\tif (y != null) internalY.value = scrollContainer.scrollTop;\n\t}\n\tconst isScrolling = shallowRef(false);\n\tconst arrivedState = reactive({\n\t\tleft: true,\n\t\tright: false,\n\t\ttop: true,\n\t\tbottom: false\n\t});\n\tconst directions = reactive({\n\t\tleft: false,\n\t\tright: false,\n\t\ttop: false,\n\t\tbottom: false\n\t});\n\tconst onScrollEnd = (e) => {\n\t\tif (!isScrolling.value) return;\n\t\tisScrolling.value = false;\n\t\tdirections.left = false;\n\t\tdirections.right = false;\n\t\tdirections.top = false;\n\t\tdirections.bottom = false;\n\t\tonStop(e);\n\t};\n\tconst onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);\n\tconst setArrivedState = (target) => {\n\t\tvar _document2;\n\t\tif (!window) return;\n\t\tconst el = (target === null || target === void 0 || (_document2 = target.document) === null || _document2 === void 0 ? void 0 : _document2.documentElement) || (target === null || target === void 0 ? void 0 : target.documentElement) || unrefElement(target);\n\t\tconst { display, flexDirection, direction } = window.getComputedStyle(el);\n\t\tconst directionMultipler = direction === \"rtl\" ? -1 : 1;\n\t\tconst scrollLeft = el.scrollLeft;\n\t\tdirections.left = scrollLeft < internalX.value;\n\t\tdirections.right = scrollLeft > internalX.value;\n\t\tconst left = Math.abs(scrollLeft * directionMultipler) <= (offset.left || 0);\n\t\tconst right = Math.abs(scrollLeft * directionMultipler) + el.clientWidth >= el.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n\t\tif (display === \"flex\" && flexDirection === \"row-reverse\") {\n\t\t\tarrivedState.left = right;\n\t\t\tarrivedState.right = left;\n\t\t} else {\n\t\t\tarrivedState.left = left;\n\t\t\tarrivedState.right = right;\n\t\t}\n\t\tinternalX.value = scrollLeft;\n\t\tlet scrollTop = el.scrollTop;\n\t\tif (target === window.document && !scrollTop) scrollTop = window.document.body.scrollTop;\n\t\tdirections.top = scrollTop < internalY.value;\n\t\tdirections.bottom = scrollTop > internalY.value;\n\t\tconst top = Math.abs(scrollTop) <= (offset.top || 0);\n\t\tconst bottom = Math.abs(scrollTop) + el.clientHeight >= el.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n\t\t/**\n\t\t* reverse columns and rows behave exactly the other way around,\n\t\t* bottom is treated as top and top is treated as the negative version of bottom\n\t\t*/\n\t\tif (display === \"flex\" && flexDirection === \"column-reverse\") {\n\t\t\tarrivedState.top = bottom;\n\t\t\tarrivedState.bottom = top;\n\t\t} else {\n\t\t\tarrivedState.top = top;\n\t\t\tarrivedState.bottom = bottom;\n\t\t}\n\t\tinternalY.value = scrollTop;\n\t};\n\tconst onScrollHandler = (e) => {\n\t\tvar _documentElement;\n\t\tif (!window) return;\n\t\tconst eventTarget = (_documentElement = e.target.documentElement) !== null && _documentElement !== void 0 ? _documentElement : e.target;\n\t\tsetArrivedState(eventTarget);\n\t\tisScrolling.value = true;\n\t\tonScrollEndDebounced(e);\n\t\tonScroll(e);\n\t};\n\tuseEventListener(element, \"scroll\", throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler, eventListenerOptions);\n\ttryOnMounted(() => {\n\t\ttry {\n\t\t\tconst _element = toValue(element);\n\t\t\tif (!_element) return;\n\t\t\tsetArrivedState(_element);\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t});\n\tif ((observe === null || observe === void 0 ? void 0 : observe.mutation) && element != null && element !== window && element !== document) useMutationObserver(element, () => {\n\t\tconst _element = toValue(element);\n\t\tif (!_element) return;\n\t\tsetArrivedState(_element);\n\t}, {\n\t\tattributes: true,\n\t\tchildList: true,\n\t\tsubtree: true\n\t});\n\tuseEventListener(element, \"scrollend\", onScrollEnd, eventListenerOptions);\n\treturn {\n\t\tx,\n\t\ty,\n\t\tisScrolling,\n\t\tarrivedState,\n\t\tdirections,\n\t\tmeasure() {\n\t\t\tconst _element = toValue(element);\n\t\t\tif (window && _element) setArrivedState(_element);\n\t\t}\n\t};\n}\n//#endregion\n//#region useInfiniteScroll/index.ts\n/**\n* Reactive infinite scroll.\n*\n* @see https://vueuse.org/useInfiniteScroll\n*/\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n\tvar _options$distance;\n\tconst { direction = \"bottom\", interval = 100, canLoadMore = () => true } = options;\n\tconst state = reactive(useScroll(element, {\n\t\t...options,\n\t\toffset: {\n\t\t\t[direction]: (_options$distance = options.distance) !== null && _options$distance !== void 0 ? _options$distance : 0,\n\t\t\t...options.offset\n\t\t}\n\t}));\n\tconst promise = shallowRef();\n\tconst isLoading = computed(() => !!promise.value);\n\tconst observedElement = computed(() => {\n\t\treturn resolveElement(toValue(element));\n\t});\n\tconst isElementVisible = useElementVisibility(observedElement);\n\tconst canLoad = computed(() => {\n\t\tif (!observedElement.value) return false;\n\t\treturn canLoadMore(observedElement.value);\n\t});\n\tfunction checkAndLoad() {\n\t\tstate.measure();\n\t\tif (!observedElement.value || !isElementVisible.value || !canLoad.value || promise.value) return;\n\t\tconst { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value;\n\t\tconst isNarrower = direction === \"bottom\" || direction === \"top\" ? scrollHeight <= clientHeight : scrollWidth <= clientWidth;\n\t\tif (state.arrivedState[direction] || isNarrower) promise.value = Promise.all([onLoadMore(state), new Promise((resolve) => setTimeout(resolve, interval))]).finally(() => {\n\t\t\tpromise.value = null;\n\t\t\tnextTick(() => checkAndLoad());\n\t\t});\n\t}\n\ttryOnUnmounted(watch(() => [\n\t\tstate.arrivedState[direction],\n\t\tisElementVisible.value,\n\t\tcanLoad.value\n\t], checkAndLoad, {\n\t\timmediate: true,\n\t\tflush: \"post\"\n\t}));\n\treturn {\n\t\tisLoading,\n\t\treset() {\n\t\t\tnextTick(() => checkAndLoad());\n\t\t}\n\t};\n}\n//#endregion\n//#region useKeyModifier/index.ts\nconst defaultEvents = [\n\t\"mousedown\",\n\t\"mouseup\",\n\t\"keydown\",\n\t\"keyup\"\n];\n/* @__NO_SIDE_EFFECTS__ */\nfunction useKeyModifier(modifier, options = {}) {\n\tconst { events = defaultEvents, document = defaultDocument, initial = null } = options;\n\tconst state = shallowRef(initial);\n\tif (document) events.forEach((listenerEvent) => {\n\t\tuseEventListener(document, listenerEvent, (evt) => {\n\t\t\tif (typeof evt.getModifierState === \"function\") state.value = evt.getModifierState(modifier);\n\t\t}, { passive: true });\n\t});\n\treturn state;\n}\n//#endregion\n//#region useLocalStorage/index.ts\n/**\n* Reactive LocalStorage.\n*\n* @see https://vueuse.org/useLocalStorage\n* @param key\n* @param initialValue\n* @param options\n*/\nfunction useLocalStorage(key, initialValue, options = {}) {\n\tconst { window = defaultWindow } = options;\n\treturn useStorage(key, initialValue, window === null || window === void 0 ? void 0 : window.localStorage, options);\n}\n//#endregion\n//#region useMagicKeys/aliasMap.ts\nconst DefaultMagicKeysAliasMap = {\n\tctrl: \"control\",\n\tcommand: \"meta\",\n\tcmd: \"meta\",\n\toption: \"alt\",\n\tup: \"arrowup\",\n\tdown: \"arrowdown\",\n\tleft: \"arrowleft\",\n\tright: \"arrowright\"\n};\n//#endregion\n//#region useMagicKeys/index.ts\n/**\n* Reactive keys pressed state, with magical keys combination support.\n*\n* @see https://vueuse.org/useMagicKeys\n*/\nfunction useMagicKeys(options = {}) {\n\tconst { reactive: useReactive = false, target = defaultWindow, aliasMap = DefaultMagicKeysAliasMap, passive = true, onEventFired = noop } = options;\n\tconst current = reactive(/* @__PURE__ */ new Set());\n\tconst obj = {\n\t\ttoJSON() {\n\t\t\treturn {};\n\t\t},\n\t\tcurrent\n\t};\n\tconst refs = useReactive ? reactive(obj) : obj;\n\tconst metaDeps = /* @__PURE__ */ new Set();\n\tconst depsMap = /* @__PURE__ */ new Map([\n\t\t[\"Meta\", metaDeps],\n\t\t[\"Shift\", /* @__PURE__ */ new Set()],\n\t\t[\"Alt\", /* @__PURE__ */ new Set()]\n\t]);\n\tconst usedKeys = /* @__PURE__ */ new Set();\n\tfunction setRefs(key, value) {\n\t\tif (key in refs) if (useReactive) refs[key] = value;\n\t\telse refs[key].value = value;\n\t}\n\tfunction reset() {\n\t\tcurrent.clear();\n\t\tfor (const key of usedKeys) setRefs(key, false);\n\t}\n\tfunction updateDeps(value, e, keys) {\n\t\tif (!value || typeof e.getModifierState !== \"function\") return;\n\t\tfor (const [modifier, depsSet] of depsMap) if (e.getModifierState(modifier)) {\n\t\t\tkeys.forEach((key) => depsSet.add(key));\n\t\t\tbreak;\n\t\t}\n\t}\n\tfunction clearDeps(value, key) {\n\t\tif (value) return;\n\t\tconst depsMapKey = `${key[0].toUpperCase()}${key.slice(1)}`;\n\t\tconst deps = depsMap.get(depsMapKey);\n\t\tif (![\"shift\", \"alt\"].includes(key) || !deps) return;\n\t\tconst depsArray = Array.from(deps);\n\t\tconst depsIndex = depsArray.indexOf(key);\n\t\tdepsArray.forEach((key, index) => {\n\t\t\tif (index >= depsIndex) {\n\t\t\t\tcurrent.delete(key);\n\t\t\t\tsetRefs(key, false);\n\t\t\t}\n\t\t});\n\t\tdeps.clear();\n\t}\n\tfunction updateRefs(e, value) {\n\t\tvar _e$key, _e$code;\n\t\tconst key = (_e$key = e.key) === null || _e$key === void 0 ? void 0 : _e$key.toLowerCase();\n\t\tconst values = [(_e$code = e.code) === null || _e$code === void 0 ? void 0 : _e$code.toLowerCase(), key].filter(Boolean);\n\t\tif (!key) return;\n\t\tif (key) if (value) current.add(key);\n\t\telse current.delete(key);\n\t\tfor (const key of values) {\n\t\t\tusedKeys.add(key);\n\t\t\tsetRefs(key, value);\n\t\t}\n\t\tupdateDeps(value, e, [...current, ...values]);\n\t\tclearDeps(value, key);\n\t\tif (key === \"meta\" && !value) {\n\t\t\tmetaDeps.forEach((key) => {\n\t\t\t\tcurrent.delete(key);\n\t\t\t\tsetRefs(key, false);\n\t\t\t});\n\t\t\tmetaDeps.clear();\n\t\t}\n\t}\n\tuseEventListener(target, \"keydown\", (e) => {\n\t\tupdateRefs(e, true);\n\t\treturn onEventFired(e);\n\t}, { passive });\n\tuseEventListener(target, \"keyup\", (e) => {\n\t\tupdateRefs(e, false);\n\t\treturn onEventFired(e);\n\t}, { passive });\n\tuseEventListener(\"blur\", reset, { passive });\n\tuseEventListener(\"focus\", reset, { passive });\n\tconst proxy = new Proxy(refs, { get(target, prop, rec) {\n\t\tif (typeof prop !== \"string\") return Reflect.get(target, prop, rec);\n\t\tprop = prop.toLowerCase();\n\t\tif (prop in aliasMap) prop = aliasMap[prop];\n\t\tif (!(prop in refs)) if (/[+_-]/.test(prop)) {\n\t\t\tconst keys = prop.split(/[+_-]/g).map((i) => i.trim());\n\t\t\trefs[prop] = computed(() => keys.map((key) => toValue(proxy[key])).every(Boolean));\n\t\t} else refs[prop] = shallowRef(false);\n\t\tconst r = Reflect.get(target, prop, rec);\n\t\treturn useReactive ? toValue(r) : r;\n\t} });\n\treturn proxy;\n}\n//#endregion\n//#region useMediaControls/index.ts\n/**\n* Automatically check if the ref exists and if it does run the cb fn\n*/\nfunction usingElRef(source, cb) {\n\tif (toValue(source)) cb(toValue(source));\n}\n/**\n* Converts a TimeRange object to an array\n*/\nfunction timeRangeToArray(timeRanges) {\n\tlet ranges = [];\n\tfor (let i = 0; i < timeRanges.length; ++i) ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];\n\treturn ranges;\n}\n/**\n* Converts a TextTrackList object to an array of `UseMediaTextTrack`\n*/\nfunction tracksToArray(tracks) {\n\treturn Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({\n\t\tid,\n\t\tlabel,\n\t\tkind,\n\t\tlanguage,\n\t\tmode,\n\t\tactiveCues,\n\t\tcues,\n\t\tinBandMetadataTrackDispatchType\n\t}));\n}\nconst defaultOptions = {\n\tsrc: \"\",\n\ttracks: []\n};\nfunction useMediaControls(target, options = {}) {\n\ttarget = toRef(target);\n\toptions = {\n\t\t...defaultOptions,\n\t\t...options\n\t};\n\tconst { document = defaultDocument } = options;\n\tconst listenerOptions = { passive: true };\n\tconst currentTime = shallowRef(0);\n\tconst duration = shallowRef(0);\n\tconst seeking = shallowRef(false);\n\tconst volume = shallowRef(1);\n\tconst waiting = shallowRef(false);\n\tconst ended = shallowRef(false);\n\tconst playing = shallowRef(false);\n\tconst rate = shallowRef(1);\n\tconst stalled = shallowRef(false);\n\tconst buffered = shallowRef([]);\n\tconst tracks = shallowRef([]);\n\tconst selectedTrack = shallowRef(-1);\n\tconst isPictureInPicture = shallowRef(false);\n\tconst muted = shallowRef(false);\n\tconst supportsPictureInPicture = Boolean(document && \"pictureInPictureEnabled\" in document);\n\tconst sourceErrorEvent = createEventHook();\n\tconst playbackErrorEvent = createEventHook();\n\t/**\n\t* Disables the specified track. If no track is specified then\n\t* all tracks will be disabled\n\t*\n\t* @param track The id of the track to disable\n\t*/\n\tconst disableTrack = (track) => {\n\t\tusingElRef(target, (el) => {\n\t\t\tif (track) {\n\t\t\t\tconst id = typeof track === \"number\" ? track : track.id;\n\t\t\t\tel.textTracks[id].mode = \"disabled\";\n\t\t\t} else for (let i = 0; i < el.textTracks.length; ++i) el.textTracks[i].mode = \"disabled\";\n\t\t\tselectedTrack.value = -1;\n\t\t});\n\t};\n\t/**\n\t* Enables the specified track and disables the\n\t* other tracks unless otherwise specified\n\t*\n\t* @param track The track of the id of the track to enable\n\t* @param disableTracks Disable all other tracks\n\t*/\n\tconst enableTrack = (track, disableTracks = true) => {\n\t\tusingElRef(target, (el) => {\n\t\t\tconst id = typeof track === \"number\" ? track : track.id;\n\t\t\tif (disableTracks) disableTrack();\n\t\t\tel.textTracks[id].mode = \"showing\";\n\t\t\tselectedTrack.value = id;\n\t\t});\n\t};\n\t/**\n\t* Toggle picture in picture mode for the player.\n\t*/\n\tconst togglePictureInPicture = () => {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tusingElRef(target, async (el) => {\n\t\t\t\tif (supportsPictureInPicture) if (!isPictureInPicture.value) el.requestPictureInPicture().then(resolve).catch(reject);\n\t\t\t\telse document.exitPictureInPicture().then(resolve).catch(reject);\n\t\t\t});\n\t\t});\n\t};\n\t/**\n\t* This will automatically inject sources to the media element. The sources will be\n\t* appended as children to the media element as `<source>` elements.\n\t*/\n\twatchEffect(() => {\n\t\tif (!document) return;\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tconst src = toValue(options.src);\n\t\tlet sources = [];\n\t\tif (!src) return;\n\t\tif (typeof src === \"string\") sources = [{ src }];\n\t\telse if (Array.isArray(src)) sources = src;\n\t\telse if (isObject(src)) sources = [src];\n\t\tel.querySelectorAll(\"source\").forEach((e) => {\n\t\t\te.remove();\n\t\t});\n\t\tsources.forEach(({ src, type, media }) => {\n\t\t\tconst source = document.createElement(\"source\");\n\t\t\tsource.setAttribute(\"src\", src);\n\t\t\tsource.setAttribute(\"type\", type || \"\");\n\t\t\tsource.setAttribute(\"media\", media || \"\");\n\t\t\tuseEventListener(source, \"error\", sourceErrorEvent.trigger, listenerOptions);\n\t\t\tel.appendChild(source);\n\t\t});\n\t\tel.load();\n\t});\n\t/**\n\t* Apply composable state to the element, also when element is changed\n\t*/\n\twatch([target, volume], () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tel.volume = volume.value;\n\t});\n\twatch([target, muted], () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tel.muted = muted.value;\n\t});\n\twatch([target, rate], () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tel.playbackRate = rate.value;\n\t});\n\t/**\n\t* Load Tracks\n\t*/\n\twatchEffect(() => {\n\t\tif (!document) return;\n\t\tconst textTracks = toValue(options.tracks);\n\t\tconst el = toValue(target);\n\t\tif (!textTracks || !textTracks.length || !el) return;\n\t\t/**\n\t\t* The MediaAPI provides an API for adding text tracks, but they don't currently\n\t\t* have an API for removing text tracks, so instead we will just create and remove\n\t\t* the tracks manually using the HTML api.\n\t\t*/\n\t\tel.querySelectorAll(\"track\").forEach((e) => e.remove());\n\t\ttextTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => {\n\t\t\tconst track = document.createElement(\"track\");\n\t\t\ttrack.default = isDefault || false;\n\t\t\ttrack.kind = kind;\n\t\t\ttrack.label = label;\n\t\t\ttrack.src = src;\n\t\t\ttrack.srclang = srcLang;\n\t\t\tif (track.default) selectedTrack.value = i;\n\t\t\tel.appendChild(track);\n\t\t});\n\t});\n\t/**\n\t* This will allow us to update the current time from the timeupdate event\n\t* without setting the medias current position, but if the user changes the\n\t* current time via the ref, then the media will seek.\n\t*\n\t* If we did not use an ignorable watch, then the current time update from\n\t* the timeupdate event would cause the media to stutter.\n\t*/\n\tconst { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tel.currentTime = time;\n\t});\n\t/**\n\t* Using an ignorable watch so we can control the play state using a ref and not\n\t* a function\n\t*/\n\tconst { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tif (isPlaying) el.play().catch((e) => {\n\t\t\tplaybackErrorEvent.trigger(e);\n\t\t\tthrow e;\n\t\t});\n\t\telse el.pause();\n\t});\n\tuseEventListener(target, \"timeupdate\", () => ignoreCurrentTimeUpdates(() => currentTime.value = toValue(target).currentTime), listenerOptions);\n\tuseEventListener(target, \"durationchange\", () => duration.value = toValue(target).duration, listenerOptions);\n\tuseEventListener(target, \"progress\", () => buffered.value = timeRangeToArray(toValue(target).buffered), listenerOptions);\n\tuseEventListener(target, \"seeking\", () => seeking.value = true, listenerOptions);\n\tuseEventListener(target, \"seeked\", () => seeking.value = false, listenerOptions);\n\tuseEventListener(target, [\"waiting\", \"loadstart\"], () => {\n\t\twaiting.value = true;\n\t\tignorePlayingUpdates(() => playing.value = false);\n\t}, listenerOptions);\n\tuseEventListener(target, \"loadeddata\", () => waiting.value = false, listenerOptions);\n\tuseEventListener(target, \"playing\", () => {\n\t\twaiting.value = false;\n\t\tended.value = false;\n\t\tignorePlayingUpdates(() => playing.value = true);\n\t}, listenerOptions);\n\tuseEventListener(target, \"ratechange\", () => rate.value = toValue(target).playbackRate, listenerOptions);\n\tuseEventListener(target, \"stalled\", () => stalled.value = true, listenerOptions);\n\tuseEventListener(target, \"ended\", () => ended.value = true, listenerOptions);\n\tuseEventListener(target, \"pause\", () => ignorePlayingUpdates(() => playing.value = false), listenerOptions);\n\tuseEventListener(target, \"play\", () => ignorePlayingUpdates(() => playing.value = true), listenerOptions);\n\tuseEventListener(target, \"enterpictureinpicture\", () => isPictureInPicture.value = true, listenerOptions);\n\tuseEventListener(target, \"leavepictureinpicture\", () => isPictureInPicture.value = false, listenerOptions);\n\tuseEventListener(target, \"volumechange\", () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tvolume.value = el.volume;\n\t\tmuted.value = el.muted;\n\t}, listenerOptions);\n\t/**\n\t* The following listeners need to listen to a nested\n\t* object on the target, so we will have to use a nested\n\t* watch and manually remove the listeners\n\t*/\n\tconst listeners = [];\n\tconst stop = watch([target], () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tstop();\n\t\tlisteners[0] = useEventListener(el.textTracks, \"addtrack\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n\t\tlisteners[1] = useEventListener(el.textTracks, \"removetrack\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n\t\tlisteners[2] = useEventListener(el.textTracks, \"change\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n\t});\n\ttryOnScopeDispose(() => listeners.forEach((listener) => listener()));\n\treturn {\n\t\tcurrentTime,\n\t\tduration,\n\t\twaiting,\n\t\tseeking,\n\t\tended,\n\t\tstalled,\n\t\tbuffered,\n\t\tplaying,\n\t\trate,\n\t\tvolume,\n\t\tmuted,\n\t\ttracks,\n\t\tselectedTrack,\n\t\tenableTrack,\n\t\tdisableTrack,\n\t\tsupportsPictureInPicture,\n\t\ttogglePictureInPicture,\n\t\tisPictureInPicture,\n\t\tonSourceError: sourceErrorEvent.on,\n\t\tonPlaybackError: playbackErrorEvent.on\n\t};\n}\n//#endregion\n//#region useMemoize/index.ts\n/**\n* Reactive function result cache based on arguments\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useMemoize(resolver, options) {\n\tconst initCache = () => {\n\t\tif (options === null || options === void 0 ? void 0 : options.cache) return shallowReactive(options.cache);\n\t\treturn shallowReactive(/* @__PURE__ */ new Map());\n\t};\n\tconst cache = initCache();\n\t/**\n\t* Generate key from args\n\t*/\n\tconst generateKey = (...args) => (options === null || options === void 0 ? void 0 : options.getKey) ? options.getKey(...args) : JSON.stringify(args);\n\t/**\n\t* Load data and save in cache\n\t*/\n\tconst _loadData = (key, ...args) => {\n\t\tcache.set(key, resolver(...args));\n\t\treturn cache.get(key);\n\t};\n\tconst loadData = (...args) => _loadData(generateKey(...args), ...args);\n\t/**\n\t* Delete key from cache\n\t*/\n\tconst deleteData = (...args) => {\n\t\tcache.delete(generateKey(...args));\n\t};\n\t/**\n\t* Clear cached data\n\t*/\n\tconst clearData = () => {\n\t\tcache.clear();\n\t};\n\tconst memoized = (...args) => {\n\t\tconst key = generateKey(...args);\n\t\tif (cache.has(key)) return cache.get(key);\n\t\treturn _loadData(key, ...args);\n\t};\n\tmemoized.load = loadData;\n\tmemoized.delete = deleteData;\n\tmemoized.clear = clearData;\n\tmemoized.generateKey = generateKey;\n\tmemoized.cache = cache;\n\treturn memoized;\n}\n//#endregion\n//#region useMemory/index.ts\nfunction getDefaultScheduler$6(options) {\n\tif (\"interval\" in options || \"immediate\" in options || \"immediateCallback\" in options) {\n\t\tconst { interval = 1e3, immediate, immediateCallback } = options;\n\t\treturn (cb) => useIntervalFn(cb, interval, {\n\t\t\timmediate,\n\t\t\timmediateCallback\n\t\t});\n\t}\n\treturn useIntervalFn;\n}\n/**\n* Reactive Memory Info.\n*\n* @see https://vueuse.org/useMemory\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useMemory(options = {}) {\n\tconst memory = shallowRef();\n\tconst isSupported = /* @__PURE__ */ useSupported(() => typeof performance !== \"undefined\" && \"memory\" in performance);\n\tif (isSupported.value) {\n\t\tconst { scheduler = getDefaultScheduler$6 } = options;\n\t\tscheduler(() => {\n\t\t\tmemory.value = performance.memory;\n\t\t});\n\t}\n\treturn {\n\t\tisSupported,\n\t\tmemory\n\t};\n}\n//#endregion\n//#region useMouse/index.ts\nconst UseMouseBuiltinExtractors = {\n\tpage: (event) => [event.pageX, event.pageY],\n\tclient: (event) => [event.clientX, event.clientY],\n\tscreen: (event) => [event.screenX, event.screenY],\n\tmovement: (event) => event instanceof MouseEvent ? [event.movementX, event.movementY] : null\n};\n/**\n* Reactive mouse position.\n*\n* @see https://vueuse.org/useMouse\n* @param options\n*/\nfunction useMouse(options = {}) {\n\tconst { type = \"page\", touch = true, resetOnTouchEnds = false, initialValue = {\n\t\tx: 0,\n\t\ty: 0\n\t}, window = defaultWindow, target = window, scroll = true, eventFilter } = options;\n\tlet _prevMouseEvent = null;\n\tlet _prevScrollX = 0;\n\tlet _prevScrollY = 0;\n\tconst x = shallowRef(initialValue.x);\n\tconst y = shallowRef(initialValue.y);\n\tconst sourceType = shallowRef(null);\n\tconst extractor = typeof type === \"function\" ? type : UseMouseBuiltinExtractors[type];\n\tconst mouseHandler = (event) => {\n\t\tconst result = extractor(event);\n\t\t_prevMouseEvent = event;\n\t\tif (result) {\n\t\t\t[x.value, y.value] = result;\n\t\t\tsourceType.value = \"mouse\";\n\t\t}\n\t\tif (window) {\n\t\t\t_prevScrollX = window.scrollX;\n\t\t\t_prevScrollY = window.scrollY;\n\t\t}\n\t};\n\tconst touchHandler = (event) => {\n\t\tif (event.touches.length > 0) {\n\t\t\tconst result = extractor(event.touches[0]);\n\t\t\tif (result) {\n\t\t\t\t[x.value, y.value] = result;\n\t\t\t\tsourceType.value = \"touch\";\n\t\t\t}\n\t\t}\n\t};\n\tconst scrollHandler = () => {\n\t\tif (!_prevMouseEvent || !window) return;\n\t\tconst pos = extractor(_prevMouseEvent);\n\t\tif (_prevMouseEvent instanceof MouseEvent && pos) {\n\t\t\tx.value = pos[0] + window.scrollX - _prevScrollX;\n\t\t\ty.value = pos[1] + window.scrollY - _prevScrollY;\n\t\t}\n\t};\n\tconst reset = () => {\n\t\tx.value = initialValue.x;\n\t\ty.value = initialValue.y;\n\t};\n\tconst mouseHandlerWrapper = eventFilter ? (event) => eventFilter(() => mouseHandler(event), {}) : (event) => mouseHandler(event);\n\tconst touchHandlerWrapper = eventFilter ? (event) => eventFilter(() => touchHandler(event), {}) : (event) => touchHandler(event);\n\tconst scrollHandlerWrapper = eventFilter ? () => eventFilter(() => scrollHandler(), {}) : () => scrollHandler();\n\tif (target) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(target, [\"mousemove\", \"dragover\"], mouseHandlerWrapper, listenerOptions);\n\t\tif (touch && type !== \"movement\") {\n\t\t\tuseEventListener(target, [\"touchstart\", \"touchmove\"], touchHandlerWrapper, listenerOptions);\n\t\t\tif (resetOnTouchEnds) useEventListener(target, \"touchend\", reset, listenerOptions);\n\t\t}\n\t\tif (scroll && type === \"page\") useEventListener(window, \"scroll\", scrollHandlerWrapper, listenerOptions);\n\t}\n\treturn {\n\t\tx,\n\t\ty,\n\t\tsourceType\n\t};\n}\n//#endregion\n//#region useMouseInElement/index.ts\n/**\n* Reactive mouse position related to an element.\n*\n* @see https://vueuse.org/useMouseInElement\n* @param target\n* @param options\n*/\nfunction useMouseInElement(target, options = {}) {\n\tconst { windowResize = true, windowScroll = true, handleOutside = true, window = defaultWindow } = options;\n\tconst type = options.type || \"page\";\n\tconst { x, y, sourceType } = useMouse(options);\n\tconst targetRef = shallowRef(target !== null && target !== void 0 ? target : window === null || window === void 0 ? void 0 : window.document.body);\n\tconst elementX = shallowRef(0);\n\tconst elementY = shallowRef(0);\n\tconst elementPositionX = shallowRef(0);\n\tconst elementPositionY = shallowRef(0);\n\tconst elementHeight = shallowRef(0);\n\tconst elementWidth = shallowRef(0);\n\tconst isOutside = shallowRef(true);\n\tfunction update() {\n\t\tif (!window) return;\n\t\tconst el = unrefElement(targetRef);\n\t\tif (!el || !(el instanceof Element)) return;\n\t\tfor (const rect of el.getClientRects()) {\n\t\t\tconst { left, top, width, height } = rect;\n\t\t\telementPositionX.value = left + (type === \"page\" ? window.pageXOffset : 0);\n\t\t\telementPositionY.value = top + (type === \"page\" ? window.pageYOffset : 0);\n\t\t\telementHeight.value = height;\n\t\t\telementWidth.value = width;\n\t\t\tconst elX = x.value - elementPositionX.value;\n\t\t\tconst elY = y.value - elementPositionY.value;\n\t\t\tisOutside.value = width === 0 || height === 0 || elX < 0 || elY < 0 || elX > width || elY > height;\n\t\t\tif (handleOutside || !isOutside.value) {\n\t\t\t\telementX.value = elX;\n\t\t\t\telementY.value = elY;\n\t\t\t}\n\t\t\tif (!isOutside.value) break;\n\t\t}\n\t}\n\tconst stopFnList = [];\n\tfunction stop() {\n\t\tstopFnList.forEach((fn) => fn());\n\t\tstopFnList.length = 0;\n\t}\n\ttryOnMounted(() => {\n\t\tupdate();\n\t});\n\tif (window) {\n\t\tconst { stop: stopResizeObserver } = useResizeObserver(targetRef, update);\n\t\tconst { stop: stopMutationObserver } = useMutationObserver(targetRef, update, { attributeFilter: [\"style\", \"class\"] });\n\t\tconst stopWatch = watch([\n\t\t\ttargetRef,\n\t\t\tx,\n\t\t\ty\n\t\t], update);\n\t\tstopFnList.push(stopResizeObserver, stopMutationObserver, stopWatch);\n\t\tuseEventListener(document, \"mouseleave\", () => isOutside.value = true, { passive: true });\n\t\tif (windowScroll) stopFnList.push(useEventListener(\"scroll\", update, {\n\t\t\tcapture: true,\n\t\t\tpassive: true\n\t\t}));\n\t\tif (windowResize) stopFnList.push(useEventListener(\"resize\", update, { passive: true }));\n\t}\n\treturn {\n\t\tx,\n\t\ty,\n\t\tsourceType,\n\t\telementX,\n\t\telementY,\n\t\telementPositionX,\n\t\telementPositionY,\n\t\telementHeight,\n\t\telementWidth,\n\t\tisOutside,\n\t\tstop\n\t};\n}\n//#endregion\n//#region useMousePressed/index.ts\n/**\n* Reactive mouse pressing state.\n*\n* @see https://vueuse.org/useMousePressed\n* @param options\n*/\nfunction useMousePressed(options = {}) {\n\tconst { touch = true, drag = true, capture = false, initialValue = false, window = defaultWindow } = options;\n\tconst pressed = shallowRef(initialValue);\n\tconst sourceType = shallowRef(null);\n\tif (!window) return {\n\t\tpressed,\n\t\tsourceType\n\t};\n\tconst onPressed = (srcType) => (event) => {\n\t\tvar _options$onPressed;\n\t\tpressed.value = true;\n\t\tsourceType.value = srcType;\n\t\t(_options$onPressed = options.onPressed) === null || _options$onPressed === void 0 || _options$onPressed.call(options, event);\n\t};\n\tconst onReleased = (event) => {\n\t\tvar _options$onReleased;\n\t\tpressed.value = false;\n\t\tsourceType.value = null;\n\t\t(_options$onReleased = options.onReleased) === null || _options$onReleased === void 0 || _options$onReleased.call(options, event);\n\t};\n\tconst target = computed(() => unrefElement(options.target) || window);\n\tconst listenerOptions = {\n\t\tpassive: true,\n\t\tcapture\n\t};\n\tuseEventListener(target, \"mousedown\", onPressed(\"mouse\"), listenerOptions);\n\tuseEventListener(window, \"mouseleave\", onReleased, listenerOptions);\n\tuseEventListener(window, \"mouseup\", onReleased, listenerOptions);\n\tif (drag) {\n\t\tuseEventListener(target, \"dragstart\", onPressed(\"mouse\"), listenerOptions);\n\t\tuseEventListener(window, \"drop\", onReleased, listenerOptions);\n\t\tuseEventListener(window, \"dragend\", onReleased, listenerOptions);\n\t}\n\tif (touch) {\n\t\tuseEventListener(target, \"touchstart\", onPressed(\"touch\"), listenerOptions);\n\t\tuseEventListener(window, \"touchend\", onReleased, listenerOptions);\n\t\tuseEventListener(window, \"touchcancel\", onReleased, listenerOptions);\n\t}\n\treturn {\n\t\tpressed,\n\t\tsourceType\n\t};\n}\n//#endregion\n//#region useNavigatorLanguage/index.ts\n/**\n*\n* Reactive useNavigatorLanguage\n*\n* Detects the currently selected user language and returns a reactive language\n* @see https://vueuse.org/useNavigatorLanguage\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useNavigatorLanguage(options = {}) {\n\tconst { window = defaultWindow } = options;\n\tconst navigator = window === null || window === void 0 ? void 0 : window.navigator;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && \"language\" in navigator);\n\tconst language = shallowRef(navigator === null || navigator === void 0 ? void 0 : navigator.language);\n\tuseEventListener(window, \"languagechange\", () => {\n\t\tif (navigator) language.value = navigator.language;\n\t}, { passive: true });\n\treturn {\n\t\tisSupported,\n\t\tlanguage\n\t};\n}\n//#endregion\n//#region useNetwork/index.ts\n/**\n* Reactive Network status.\n*\n* @see https://vueuse.org/useNetwork\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useNetwork(options = {}) {\n\tconst { window = defaultWindow } = options;\n\tconst navigator = window === null || window === void 0 ? void 0 : window.navigator;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && \"connection\" in navigator);\n\tconst isOnline = shallowRef(true);\n\tconst saveData = shallowRef(false);\n\tconst offlineAt = shallowRef(void 0);\n\tconst onlineAt = shallowRef(void 0);\n\tconst downlink = shallowRef(void 0);\n\tconst downlinkMax = shallowRef(void 0);\n\tconst rtt = shallowRef(void 0);\n\tconst effectiveType = shallowRef(void 0);\n\tconst type = shallowRef(\"unknown\");\n\tconst connection = isSupported.value && navigator.connection;\n\tfunction updateNetworkInformation() {\n\t\tif (!navigator) return;\n\t\tisOnline.value = navigator.onLine;\n\t\tofflineAt.value = isOnline.value ? void 0 : Date.now();\n\t\tonlineAt.value = isOnline.value ? Date.now() : void 0;\n\t\tif (connection) {\n\t\t\tdownlink.value = connection.downlink;\n\t\t\tdownlinkMax.value = connection.downlinkMax;\n\t\t\teffectiveType.value = connection.effectiveType;\n\t\t\trtt.value = connection.rtt;\n\t\t\tsaveData.value = connection.saveData;\n\t\t\ttype.value = connection.type;\n\t\t}\n\t}\n\tconst listenerOptions = { passive: true };\n\tif (window) {\n\t\tuseEventListener(window, \"offline\", () => {\n\t\t\tisOnline.value = false;\n\t\t\tofflineAt.value = Date.now();\n\t\t}, listenerOptions);\n\t\tuseEventListener(window, \"online\", () => {\n\t\t\tisOnline.value = true;\n\t\t\tonlineAt.value = Date.now();\n\t\t}, listenerOptions);\n\t}\n\tif (connection) useEventListener(connection, \"change\", updateNetworkInformation, listenerOptions);\n\tupdateNetworkInformation();\n\treturn {\n\t\tisSupported,\n\t\tisOnline: shallowReadonly(isOnline),\n\t\tsaveData: shallowReadonly(saveData),\n\t\tofflineAt: shallowReadonly(offlineAt),\n\t\tonlineAt: shallowReadonly(onlineAt),\n\t\tdownlink: shallowReadonly(downlink),\n\t\tdownlinkMax: shallowReadonly(downlinkMax),\n\t\teffectiveType: shallowReadonly(effectiveType),\n\t\trtt: shallowReadonly(rtt),\n\t\ttype: shallowReadonly(type)\n\t};\n}\n//#endregion\n//#region useNow/index.ts\nfunction getDefaultScheduler$5(options) {\n\tif (\"interval\" in options || \"immediate\" in options) {\n\t\tconst { interval = \"requestAnimationFrame\", immediate = true } = options;\n\t\treturn interval === \"requestAnimationFrame\" ? (fn) => useRafFn(fn, { immediate }) : (fn) => useIntervalFn(fn, interval, options);\n\t}\n\treturn useRafFn;\n}\n/**\n* Reactive current Date instance.\n*\n* @see https://vueuse.org/useNow\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useNow(options = {}) {\n\tconst { controls: exposeControls = false, scheduler = getDefaultScheduler$5(options) } = options;\n\tconst now = shallowRef(/* @__PURE__ */ new Date());\n\tconst update = () => now.value = /* @__PURE__ */ new Date();\n\tconst controls = scheduler(update);\n\tif (exposeControls) return {\n\t\tnow,\n\t\t...controls\n\t};\n\telse return now;\n}\n//#endregion\n//#region useObjectUrl/index.ts\n/**\n* Reactive URL representing an object.\n*\n* @see https://vueuse.org/useObjectUrl\n* @param object\n*/\nfunction useObjectUrl(object) {\n\tconst url = shallowRef();\n\tconst release = () => {\n\t\tif (url.value) URL.revokeObjectURL(url.value);\n\t\turl.value = void 0;\n\t};\n\twatch(() => toValue(object), (newObject) => {\n\t\trelease();\n\t\tif (newObject) url.value = URL.createObjectURL(newObject);\n\t}, { immediate: true });\n\ttryOnScopeDispose(release);\n\treturn shallowReadonly(url);\n}\n//#endregion\n//#region ../math/useClamp/index.ts\n/**\n* Reactively clamp a value between two other values.\n*\n* @see https://vueuse.org/useClamp\n* @param value number\n* @param min\n* @param max\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useClamp(value, min, max) {\n\tif (typeof value === \"function\" || isReadonly(value)) return computed(() => clamp(toValue(value), toValue(min), toValue(max)));\n\tconst _value = ref(value);\n\treturn computed({\n\t\tget() {\n\t\t\treturn _value.value = clamp(_value.value, toValue(min), toValue(max));\n\t\t},\n\t\tset(value) {\n\t\t\t_value.value = clamp(value, toValue(min), toValue(max));\n\t\t}\n\t});\n}\n//#endregion\n//#region useOffsetPagination/index.ts\nfunction useOffsetPagination(options) {\n\tconst { total = Number.POSITIVE_INFINITY, pageSize = 10, page = 1, onPageChange = noop, onPageSizeChange = noop, onPageCountChange = noop } = options;\n\tconst currentPageSize = useClamp(pageSize, 1, Number.POSITIVE_INFINITY);\n\tconst pageCount = computed(() => Math.max(1, Math.ceil(toValue(total) / toValue(currentPageSize))));\n\tconst currentPage = useClamp(page, 1, pageCount);\n\tconst isFirstPage = computed(() => currentPage.value === 1);\n\tconst isLastPage = computed(() => currentPage.value === pageCount.value);\n\tif (isRef(page)) syncRef(page, currentPage, { direction: isReadonly(page) ? \"ltr\" : \"both\" });\n\tif (isRef(pageSize)) syncRef(pageSize, currentPageSize, { direction: isReadonly(pageSize) ? \"ltr\" : \"both\" });\n\tfunction prev() {\n\t\tcurrentPage.value--;\n\t}\n\tfunction next() {\n\t\tcurrentPage.value++;\n\t}\n\tconst returnValue = {\n\t\tcurrentPage,\n\t\tcurrentPageSize,\n\t\tpageCount,\n\t\tisFirstPage,\n\t\tisLastPage,\n\t\tprev,\n\t\tnext\n\t};\n\twatch(currentPage, () => {\n\t\tonPageChange(reactive(returnValue));\n\t});\n\twatch(currentPageSize, () => {\n\t\tonPageSizeChange(reactive(returnValue));\n\t});\n\twatch(pageCount, () => {\n\t\tonPageCountChange(reactive(returnValue));\n\t});\n\treturn returnValue;\n}\n//#endregion\n//#region useOnline/index.ts\n/**\n* Reactive online state.\n*\n* @see https://vueuse.org/useOnline\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useOnline(options = {}) {\n\tconst { isOnline } = useNetwork(options);\n\treturn isOnline;\n}\n//#endregion\n//#region usePageLeave/index.ts\n/**\n* Reactive state to show whether mouse leaves the page.\n*\n* @see https://vueuse.org/usePageLeave\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePageLeave(options = {}) {\n\tconst { window = defaultWindow } = options;\n\tconst isLeft = shallowRef(false);\n\tconst handler = (event) => {\n\t\tif (!window) return;\n\t\tevent = event || window.event;\n\t\tconst from = event.relatedTarget || event.toElement;\n\t\tisLeft.value = !from;\n\t};\n\tif (window) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(window, \"mouseout\", handler, listenerOptions);\n\t\tuseEventListener(window.document, \"mouseleave\", handler, listenerOptions);\n\t\tuseEventListener(window.document, \"mouseenter\", handler, listenerOptions);\n\t}\n\treturn isLeft;\n}\n//#endregion\n//#region useScreenOrientation/index.ts\n/**\n* Reactive screen orientation\n*\n* @see https://vueuse.org/useScreenOrientation\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useScreenOrientation(options = {}) {\n\tconst { window = defaultWindow } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && \"screen\" in window && \"orientation\" in window.screen);\n\tconst screenOrientation = isSupported.value ? window.screen.orientation : {};\n\tconst orientation = shallowRef(screenOrientation.type);\n\tconst angle = shallowRef(screenOrientation.angle || 0);\n\tif (isSupported.value) useEventListener(window, \"orientationchange\", () => {\n\t\torientation.value = screenOrientation.type;\n\t\tangle.value = screenOrientation.angle;\n\t}, { passive: true });\n\tconst lockOrientation = (type) => {\n\t\tif (isSupported.value && typeof screenOrientation.lock === \"function\") return screenOrientation.lock(type);\n\t\treturn Promise.reject(/* @__PURE__ */ new Error(\"Not supported\"));\n\t};\n\tconst unlockOrientation = () => {\n\t\tif (isSupported.value && typeof screenOrientation.unlock === \"function\") screenOrientation.unlock();\n\t};\n\treturn {\n\t\tisSupported,\n\t\torientation,\n\t\tangle,\n\t\tlockOrientation,\n\t\tunlockOrientation\n\t};\n}\n//#endregion\n//#region useParallax/index.ts\n/**\n* Create parallax effect easily. It uses `useDeviceOrientation` and fallback to `useMouse`\n* if orientation is not supported.\n*\n* @param target\n* @param options\n*/\nfunction useParallax(target, options = {}) {\n\tconst { deviceOrientationTiltAdjust = (i) => i, deviceOrientationRollAdjust = (i) => i, mouseTiltAdjust = (i) => i, mouseRollAdjust = (i) => i, window = defaultWindow } = options;\n\tconst orientation = reactive(useDeviceOrientation({ window }));\n\tconst screenOrientation = reactive(useScreenOrientation({ window }));\n\tconst { elementX: x, elementY: y, elementWidth: width, elementHeight: height } = useMouseInElement(target, {\n\t\thandleOutside: false,\n\t\twindow\n\t});\n\tconst source = computed(() => {\n\t\tif (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0)) return \"deviceOrientation\";\n\t\treturn \"mouse\";\n\t});\n\treturn {\n\t\troll: computed(() => {\n\t\t\tif (source.value === \"deviceOrientation\") {\n\t\t\t\tlet value;\n\t\t\t\tswitch (screenOrientation.orientation) {\n\t\t\t\t\tcase \"landscape-primary\":\n\t\t\t\t\t\tvalue = orientation.gamma / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"landscape-secondary\":\n\t\t\t\t\t\tvalue = -orientation.gamma / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"portrait-primary\":\n\t\t\t\t\t\tvalue = -orientation.beta / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"portrait-secondary\":\n\t\t\t\t\t\tvalue = orientation.beta / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault: value = -orientation.beta / 90;\n\t\t\t\t}\n\t\t\t\treturn deviceOrientationRollAdjust(value);\n\t\t\t} else {\n\t\t\t\tconst value = -(y.value - height.value / 2) / height.value;\n\t\t\t\treturn mouseRollAdjust(value);\n\t\t\t}\n\t\t}),\n\t\ttilt: computed(() => {\n\t\t\tif (source.value === \"deviceOrientation\") {\n\t\t\t\tlet value;\n\t\t\t\tswitch (screenOrientation.orientation) {\n\t\t\t\t\tcase \"landscape-primary\":\n\t\t\t\t\t\tvalue = orientation.beta / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"landscape-secondary\":\n\t\t\t\t\t\tvalue = -orientation.beta / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"portrait-primary\":\n\t\t\t\t\t\tvalue = orientation.gamma / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"portrait-secondary\":\n\t\t\t\t\t\tvalue = -orientation.gamma / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault: value = orientation.gamma / 90;\n\t\t\t\t}\n\t\t\t\treturn deviceOrientationTiltAdjust(value);\n\t\t\t} else {\n\t\t\t\tconst value = (x.value - width.value / 2) / width.value;\n\t\t\t\treturn mouseTiltAdjust(value);\n\t\t\t}\n\t\t}),\n\t\tsource\n\t};\n}\n//#endregion\n//#region useParentElement/index.ts\nfunction useParentElement(element = useCurrentElement()) {\n\tconst parentElement = shallowRef();\n\tconst update = () => {\n\t\tconst el = unrefElement(element);\n\t\tif (el) parentElement.value = el.parentElement;\n\t};\n\ttryOnMounted(update);\n\twatch(() => toValue(element), update);\n\treturn parentElement;\n}\n//#endregion\n//#region usePerformanceObserver/index.ts\n/**\n* Observe performance metrics.\n*\n* @see https://vueuse.org/usePerformanceObserver\n* @param options\n*/\nfunction usePerformanceObserver(options, callback) {\n\tconst { window = defaultWindow, immediate = true, ...performanceOptions } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && \"PerformanceObserver\" in window);\n\tlet observer;\n\tconst stop = () => {\n\t\tobserver === null || observer === void 0 || observer.disconnect();\n\t};\n\tconst start = () => {\n\t\tif (isSupported.value) {\n\t\t\tstop();\n\t\t\tobserver = new PerformanceObserver(callback);\n\t\t\tobserver.observe(performanceOptions);\n\t\t}\n\t};\n\ttryOnScopeDispose(stop);\n\tif (immediate) start();\n\treturn {\n\t\tisSupported,\n\t\tstart,\n\t\tstop\n\t};\n}\n//#endregion\n//#region usePointer/index.ts\nconst defaultState = {\n\tx: 0,\n\ty: 0,\n\tpointerId: 0,\n\tpressure: 0,\n\ttiltX: 0,\n\ttiltY: 0,\n\twidth: 0,\n\theight: 0,\n\ttwist: 0,\n\tpointerType: null\n};\nconst keys = /* #__PURE__ */ Object.keys(defaultState);\n/**\n* Reactive pointer state.\n*\n* @see https://vueuse.org/usePointer\n* @param options\n*/\nfunction usePointer(options = {}) {\n\tconst { target = defaultWindow } = options;\n\tconst isInside = shallowRef(false);\n\tconst state = shallowRef(options.initialValue || {});\n\tObject.assign(state.value, defaultState, state.value);\n\tconst handler = (event) => {\n\t\tisInside.value = true;\n\t\tif (options.pointerTypes && !options.pointerTypes.includes(event.pointerType)) return;\n\t\tstate.value = objectPick(event, keys, false);\n\t};\n\tif (target) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(target, [\n\t\t\t\"pointerdown\",\n\t\t\t\"pointermove\",\n\t\t\t\"pointerup\"\n\t\t], handler, listenerOptions);\n\t\tuseEventListener(target, \"pointerleave\", () => isInside.value = false, listenerOptions);\n\t}\n\treturn {\n\t\t...toRefs(state),\n\t\tisInside\n\t};\n}\n//#endregion\n//#region usePointerLock/index.ts\n/**\n* Reactive pointer lock.\n*\n* @see https://vueuse.org/usePointerLock\n* @param target\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePointerLock(target, options = {}) {\n\tconst { document = defaultDocument } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => document && \"pointerLockElement\" in document);\n\tconst element = shallowRef();\n\tconst triggerElement = shallowRef();\n\tlet targetElement;\n\tif (isSupported.value) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(document, \"pointerlockchange\", () => {\n\t\t\tvar _pointerLockElement;\n\t\t\tconst currentElement = (_pointerLockElement = document.pointerLockElement) !== null && _pointerLockElement !== void 0 ? _pointerLockElement : element.value;\n\t\t\tif (targetElement && currentElement === targetElement) {\n\t\t\t\telement.value = document.pointerLockElement;\n\t\t\t\tif (!element.value) targetElement = triggerElement.value = null;\n\t\t\t}\n\t\t}, listenerOptions);\n\t\tuseEventListener(document, \"pointerlockerror\", () => {\n\t\t\tvar _pointerLockElement2;\n\t\t\tconst currentElement = (_pointerLockElement2 = document.pointerLockElement) !== null && _pointerLockElement2 !== void 0 ? _pointerLockElement2 : element.value;\n\t\t\tif (targetElement && currentElement === targetElement) {\n\t\t\t\tconst action = document.pointerLockElement ? \"release\" : \"acquire\";\n\t\t\t\tthrow new Error(`Failed to ${action} pointer lock.`);\n\t\t\t}\n\t\t}, listenerOptions);\n\t}\n\tasync function lock(e) {\n\t\tvar _unrefElement;\n\t\tif (!isSupported.value) throw new Error(\"Pointer Lock API is not supported by your browser.\");\n\t\ttriggerElement.value = e instanceof Event ? e.currentTarget : null;\n\t\ttargetElement = e instanceof Event ? (_unrefElement = unrefElement(target)) !== null && _unrefElement !== void 0 ? _unrefElement : triggerElement.value : unrefElement(e);\n\t\tif (!targetElement) throw new Error(\"Target element undefined.\");\n\t\ttargetElement.requestPointerLock();\n\t\treturn await until(element).toBe(targetElement);\n\t}\n\tasync function unlock() {\n\t\tif (!element.value) return false;\n\t\tdocument.exitPointerLock();\n\t\tawait until(element).toBeNull();\n\t\treturn true;\n\t}\n\treturn {\n\t\tisSupported,\n\t\telement,\n\t\ttriggerElement,\n\t\tlock,\n\t\tunlock\n\t};\n}\n//#endregion\n//#region usePointerSwipe/index.ts\n/**\n* Reactive swipe detection based on PointerEvents.\n*\n* @see https://vueuse.org/usePointerSwipe\n* @param target\n* @param options\n*/\nfunction usePointerSwipe(target, options = {}) {\n\tconst targetRef = toRef(target);\n\tconst { threshold = 50, onSwipe, onSwipeEnd, onSwipeStart, disableTextSelect = false } = options;\n\tconst posStart = reactive({\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst updatePosStart = (x, y) => {\n\t\tposStart.x = x;\n\t\tposStart.y = y;\n\t};\n\tconst posEnd = reactive({\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst updatePosEnd = (x, y) => {\n\t\tposEnd.x = x;\n\t\tposEnd.y = y;\n\t};\n\tconst distanceX = computed(() => posStart.x - posEnd.x);\n\tconst distanceY = computed(() => posStart.y - posEnd.y);\n\tconst { max, abs } = Math;\n\tconst isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold);\n\tconst isSwiping = shallowRef(false);\n\tconst isPointerDown = shallowRef(false);\n\tconst direction = computed(() => {\n\t\tif (!isThresholdExceeded.value) return \"none\";\n\t\tif (abs(distanceX.value) > abs(distanceY.value)) return distanceX.value > 0 ? \"left\" : \"right\";\n\t\telse return distanceY.value > 0 ? \"up\" : \"down\";\n\t});\n\tconst eventIsAllowed = (e) => {\n\t\tvar _ref, _options$pointerTypes, _options$pointerTypes2;\n\t\tconst isReleasingButton = e.buttons === 0;\n\t\tconst isPrimaryButton = e.buttons === 1;\n\t\treturn (_ref = (_options$pointerTypes = (_options$pointerTypes2 = options.pointerTypes) === null || _options$pointerTypes2 === void 0 ? void 0 : _options$pointerTypes2.includes(e.pointerType)) !== null && _options$pointerTypes !== void 0 ? _options$pointerTypes : isReleasingButton || isPrimaryButton) !== null && _ref !== void 0 ? _ref : true;\n\t};\n\tconst listenerOptions = { passive: true };\n\tconst stops = [\n\t\tuseEventListener(target, \"pointerdown\", (e) => {\n\t\t\tif (!eventIsAllowed(e)) return;\n\t\t\tisPointerDown.value = true;\n\t\t\tconst eventTarget = e.target;\n\t\t\teventTarget === null || eventTarget === void 0 || eventTarget.setPointerCapture(e.pointerId);\n\t\t\tconst { clientX: x, clientY: y } = e;\n\t\t\tupdatePosStart(x, y);\n\t\t\tupdatePosEnd(x, y);\n\t\t\tonSwipeStart === null || onSwipeStart === void 0 || onSwipeStart(e);\n\t\t}, listenerOptions),\n\t\tuseEventListener(target, \"pointermove\", (e) => {\n\t\t\tif (!eventIsAllowed(e)) return;\n\t\t\tif (!isPointerDown.value) return;\n\t\t\tconst { clientX: x, clientY: y } = e;\n\t\t\tupdatePosEnd(x, y);\n\t\t\tif (!isSwiping.value && isThresholdExceeded.value) isSwiping.value = true;\n\t\t\tif (isSwiping.value) onSwipe === null || onSwipe === void 0 || onSwipe(e);\n\t\t}, listenerOptions),\n\t\tuseEventListener(target, [\"pointerup\", \"pointercancel\"], (e) => {\n\t\t\tif (!eventIsAllowed(e)) return;\n\t\t\tif (isSwiping.value) onSwipeEnd === null || onSwipeEnd === void 0 || onSwipeEnd(e, direction.value);\n\t\t\tisPointerDown.value = false;\n\t\t\tisSwiping.value = false;\n\t\t}, listenerOptions)\n\t];\n\ttryOnMounted(() => {\n\t\tvar _targetRef$value;\n\t\t(_targetRef$value = targetRef.value) === null || _targetRef$value === void 0 || (_targetRef$value = _targetRef$value.style) === null || _targetRef$value === void 0 || _targetRef$value.setProperty(\"touch-action\", \"pan-y\");\n\t\tif (disableTextSelect) {\n\t\t\tvar _targetRef$value2, _targetRef$value3, _targetRef$value4;\n\t\t\t(_targetRef$value2 = targetRef.value) === null || _targetRef$value2 === void 0 || (_targetRef$value2 = _targetRef$value2.style) === null || _targetRef$value2 === void 0 || _targetRef$value2.setProperty(\"-webkit-user-select\", \"none\");\n\t\t\t(_targetRef$value3 = targetRef.value) === null || _targetRef$value3 === void 0 || (_targetRef$value3 = _targetRef$value3.style) === null || _targetRef$value3 === void 0 || _targetRef$value3.setProperty(\"-ms-user-select\", \"none\");\n\t\t\t(_targetRef$value4 = targetRef.value) === null || _targetRef$value4 === void 0 || (_targetRef$value4 = _targetRef$value4.style) === null || _targetRef$value4 === void 0 || _targetRef$value4.setProperty(\"user-select\", \"none\");\n\t\t}\n\t});\n\tconst stop = () => stops.forEach((s) => s());\n\treturn {\n\t\tisSwiping: shallowReadonly(isSwiping),\n\t\tdirection: shallowReadonly(direction),\n\t\tposStart: readonly(posStart),\n\t\tposEnd: readonly(posEnd),\n\t\tdistanceX,\n\t\tdistanceY,\n\t\tstop\n\t};\n}\n//#endregion\n//#region usePreferredColorScheme/index.ts\n/**\n* Reactive prefers-color-scheme media query.\n*\n* @see https://vueuse.org/usePreferredColorScheme\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredColorScheme(options) {\n\tconst isLight = useMediaQuery(\"(prefers-color-scheme: light)\", options);\n\tconst isDark = useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n\treturn computed(() => {\n\t\tif (isDark.value) return \"dark\";\n\t\tif (isLight.value) return \"light\";\n\t\treturn \"no-preference\";\n\t});\n}\n//#endregion\n//#region usePreferredContrast/index.ts\n/**\n* Reactive prefers-contrast media query.\n*\n* @see https://vueuse.org/usePreferredContrast\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredContrast(options) {\n\tconst isMore = useMediaQuery(\"(prefers-contrast: more)\", options);\n\tconst isLess = useMediaQuery(\"(prefers-contrast: less)\", options);\n\tconst isCustom = useMediaQuery(\"(prefers-contrast: custom)\", options);\n\treturn computed(() => {\n\t\tif (isMore.value) return \"more\";\n\t\tif (isLess.value) return \"less\";\n\t\tif (isCustom.value) return \"custom\";\n\t\treturn \"no-preference\";\n\t});\n}\n//#endregion\n//#region usePreferredLanguages/index.ts\n/**\n* Reactive Navigator Languages.\n*\n* @see https://vueuse.org/usePreferredLanguages\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredLanguages(options = {}) {\n\tconst { window = defaultWindow } = options;\n\tif (!window) return shallowRef([\"en\"]);\n\tconst navigator = window.navigator;\n\tconst value = shallowRef(navigator.languages);\n\tuseEventListener(window, \"languagechange\", () => {\n\t\tvalue.value = navigator.languages;\n\t}, { passive: true });\n\treturn value;\n}\n//#endregion\n//#region usePreferredReducedMotion/index.ts\n/**\n* Reactive prefers-reduced-motion media query.\n*\n* @see https://vueuse.org/usePreferredReducedMotion\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredReducedMotion(options) {\n\tconst isReduced = useMediaQuery(\"(prefers-reduced-motion: reduce)\", options);\n\treturn computed(() => {\n\t\tif (isReduced.value) return \"reduce\";\n\t\treturn \"no-preference\";\n\t});\n}\n//#endregion\n//#region usePreferredReducedTransparency/index.ts\n/**\n* Reactive prefers-reduced-transparency media query.\n*\n* @see https://vueuse.org/usePreferredReducedTransparency\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredReducedTransparency(options) {\n\tconst isReduced = useMediaQuery(\"(prefers-reduced-transparency: reduce)\", options);\n\treturn computed(() => {\n\t\tif (isReduced.value) return \"reduce\";\n\t\treturn \"no-preference\";\n\t});\n}\n//#endregion\n//#region usePrevious/index.ts\nfunction usePrevious(value, initialValue) {\n\tconst previous = shallowRef(initialValue);\n\twatch(toRef(value), (_, oldValue) => {\n\t\tprevious.value = oldValue;\n\t}, { flush: \"sync\" });\n\treturn readonly(previous);\n}\n//#endregion\n//#region useScreenSafeArea/index.ts\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\n/**\n* Reactive `env(safe-area-inset-*)`\n*\n* @see https://vueuse.org/useScreenSafeArea\n*/\nfunction useScreenSafeArea() {\n\tconst top = shallowRef(\"\");\n\tconst right = shallowRef(\"\");\n\tconst bottom = shallowRef(\"\");\n\tconst left = shallowRef(\"\");\n\tif (isClient) {\n\t\tconst topCssVar = useCssVar(topVarName);\n\t\tconst rightCssVar = useCssVar(rightVarName);\n\t\tconst bottomCssVar = useCssVar(bottomVarName);\n\t\tconst leftCssVar = useCssVar(leftVarName);\n\t\ttopCssVar.value = \"env(safe-area-inset-top, 0px)\";\n\t\trightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n\t\tbottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n\t\tleftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n\t\ttryOnMounted(update);\n\t\tuseEventListener(\"resize\", useDebounceFn(update), { passive: true });\n\t}\n\tfunction update() {\n\t\ttop.value = getValue(topVarName);\n\t\tright.value = getValue(rightVarName);\n\t\tbottom.value = getValue(bottomVarName);\n\t\tleft.value = getValue(leftVarName);\n\t}\n\treturn {\n\t\ttop,\n\t\tright,\n\t\tbottom,\n\t\tleft,\n\t\tupdate\n\t};\n}\nfunction getValue(position) {\n\treturn getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n//#endregion\n//#region useScriptTag/index.ts\n/**\n* Async script tag loading.\n*\n* @see https://vueuse.org/useScriptTag\n* @param src\n* @param onLoaded\n* @param options\n*/\nfunction useScriptTag(src, onLoaded = noop, options = {}) {\n\tconst { immediate = true, manual = false, type = \"text/javascript\", async = true, crossOrigin, referrerPolicy, noModule, defer, document = defaultDocument, attrs = {}, nonce = void 0 } = options;\n\tconst scriptTag = shallowRef(null);\n\tlet _promise = null;\n\t/**\n\t* Load the script specified via `src`.\n\t*\n\t* @param waitForScriptLoad Whether if the Promise should resolve once the \"load\" event is emitted by the <script> attribute, or right after appending it to the DOM.\n\t* @returns Promise<HTMLScriptElement>\n\t*/\n\tconst loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => {\n\t\tconst resolveWithElement = (el) => {\n\t\t\tscriptTag.value = el;\n\t\t\tresolve(el);\n\t\t\treturn el;\n\t\t};\n\t\tif (!document) {\n\t\t\tresolve(false);\n\t\t\treturn;\n\t\t}\n\t\tlet shouldAppend = false;\n\t\tlet el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n\t\tif (!el) {\n\t\t\tel = document.createElement(\"script\");\n\t\t\tel.type = type;\n\t\t\tel.async = async;\n\t\t\tel.src = toValue(src);\n\t\t\tif (defer) el.defer = defer;\n\t\t\tif (crossOrigin) el.crossOrigin = crossOrigin;\n\t\t\tif (noModule) el.noModule = noModule;\n\t\t\tif (referrerPolicy) el.referrerPolicy = referrerPolicy;\n\t\t\tif (nonce) el.nonce = nonce;\n\t\t\tObject.entries(attrs).forEach(([name, value]) => el === null || el === void 0 ? void 0 : el.setAttribute(name, value));\n\t\t\tshouldAppend = true;\n\t\t} else if (el.hasAttribute(\"data-loaded\")) resolveWithElement(el);\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(el, \"error\", (event) => reject(event), listenerOptions);\n\t\tuseEventListener(el, \"abort\", (event) => reject(event), listenerOptions);\n\t\tuseEventListener(el, \"load\", () => {\n\t\t\tel.setAttribute(\"data-loaded\", \"true\");\n\t\t\tonLoaded(el);\n\t\t\tresolveWithElement(el);\n\t\t}, listenerOptions);\n\t\tif (shouldAppend) el = document.head.appendChild(el);\n\t\tif (!waitForScriptLoad) resolveWithElement(el);\n\t});\n\t/**\n\t* Exposed singleton wrapper for `loadScript`, avoiding calling it twice.\n\t*\n\t* @param waitForScriptLoad Whether if the Promise should resolve once the \"load\" event is emitted by the <script> attribute, or right after appending it to the DOM.\n\t* @returns Promise<HTMLScriptElement>\n\t*/\n\tconst load = (waitForScriptLoad = true) => {\n\t\tif (!_promise) _promise = loadScript(waitForScriptLoad);\n\t\treturn _promise;\n\t};\n\t/**\n\t* Unload the script specified by `src`.\n\t*/\n\tconst unload = () => {\n\t\tif (!document) return;\n\t\t_promise = null;\n\t\tif (scriptTag.value) scriptTag.value = null;\n\t\tconst el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n\t\tif (el) document.head.removeChild(el);\n\t};\n\tif (immediate && !manual) tryOnMounted(load);\n\tif (!manual) tryOnUnmounted(unload);\n\treturn {\n\t\tscriptTag,\n\t\tload,\n\t\tunload\n\t};\n}\n//#endregion\n//#region useScrollLock/index.ts\nfunction checkOverflowScroll(ele) {\n\tconst style = window.getComputedStyle(ele);\n\tif (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientWidth < ele.scrollWidth || style.overflowY === \"auto\" && ele.clientHeight < ele.scrollHeight) return true;\n\telse {\n\t\tconst parent = ele.parentNode;\n\t\tif (!parent || parent.tagName === \"BODY\") return false;\n\t\treturn checkOverflowScroll(parent);\n\t}\n}\nfunction preventDefault(rawEvent) {\n\tconst e = rawEvent || window.event;\n\tconst _target = e.target;\n\tif (checkOverflowScroll(_target)) return false;\n\tif (e.touches.length > 1) return true;\n\tif (e.preventDefault) e.preventDefault();\n\treturn false;\n}\nconst elInitialOverflow = /* @__PURE__ */ new WeakMap();\n/**\n* Lock scrolling of the element.\n*\n* @see https://vueuse.org/useScrollLock\n* @param element\n*/\nfunction useScrollLock(element, initialState = false) {\n\tconst isLocked = shallowRef(initialState);\n\tlet stopTouchMoveListener = null;\n\tlet initialOverflow = \"\";\n\twatch(toRef(element), (el) => {\n\t\tconst target = resolveElement(toValue(el));\n\t\tif (target) {\n\t\t\tconst ele = target;\n\t\t\tif (!elInitialOverflow.get(ele)) elInitialOverflow.set(ele, ele.style.overflow);\n\t\t\tif (ele.style.overflow !== \"hidden\") initialOverflow = ele.style.overflow;\n\t\t\tif (ele.style.overflow === \"hidden\") return isLocked.value = true;\n\t\t\tif (isLocked.value) return ele.style.overflow = \"hidden\";\n\t\t}\n\t}, { immediate: true });\n\tconst lock = () => {\n\t\tconst el = resolveElement(toValue(element));\n\t\tif (!el || isLocked.value) return;\n\t\tif (isIOS) stopTouchMoveListener = useEventListener(el, \"touchmove\", (e) => {\n\t\t\tpreventDefault(e);\n\t\t}, { passive: false });\n\t\tel.style.overflow = \"hidden\";\n\t\tisLocked.value = true;\n\t};\n\tconst unlock = () => {\n\t\tconst el = resolveElement(toValue(element));\n\t\tif (!el || !isLocked.value) return;\n\t\tif (isIOS) stopTouchMoveListener === null || stopTouchMoveListener === void 0 || stopTouchMoveListener();\n\t\tel.style.overflow = initialOverflow;\n\t\telInitialOverflow.delete(el);\n\t\tisLocked.value = false;\n\t};\n\ttryOnScopeDispose(unlock);\n\treturn computed({\n\t\tget() {\n\t\t\treturn isLocked.value;\n\t\t},\n\t\tset(v) {\n\t\t\tif (v) lock();\n\t\t\telse unlock();\n\t\t}\n\t});\n}\n//#endregion\n//#region useSessionStorage/index.ts\n/**\n* Reactive SessionStorage.\n*\n* @see https://vueuse.org/useSessionStorage\n* @param key\n* @param initialValue\n* @param options\n*/\nfunction useSessionStorage(key, initialValue, options = {}) {\n\tconst { window = defaultWindow } = options;\n\treturn useStorage(key, initialValue, window === null || window === void 0 ? void 0 : window.sessionStorage, options);\n}\n//#endregion\n//#region useShare/index.ts\n/**\n* Reactive Web Share API.\n*\n* @see https://vueuse.org/useShare\n* @param shareOptions\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useShare(shareOptions = {}, options = {}) {\n\tconst { navigator = defaultNavigator } = options;\n\tconst _navigator = navigator;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => _navigator && \"canShare\" in _navigator);\n\tconst share = async (overrideOptions = {}) => {\n\t\tif (isSupported.value) {\n\t\t\tconst data = {\n\t\t\t\t...toValue(shareOptions),\n\t\t\t\t...toValue(overrideOptions)\n\t\t\t};\n\t\t\tlet granted = false;\n\t\t\tif (_navigator.canShare) granted = _navigator.canShare(data);\n\t\t\tif (granted) return _navigator.share(data);\n\t\t}\n\t};\n\treturn {\n\t\tisSupported,\n\t\tshare\n\t};\n}\n//#endregion\n//#region useSorted/index.ts\nconst defaultSortFn = (source, compareFn) => source.sort(compareFn);\nconst defaultCompare = (a, b) => a - b;\nfunction useSorted(...args) {\n\tconst [source] = args;\n\tlet compareFn = defaultCompare;\n\tlet options = {};\n\tif (args.length === 2) if (typeof args[1] === \"object\") {\n\t\tvar _options$compareFn;\n\t\toptions = args[1];\n\t\tcompareFn = (_options$compareFn = options.compareFn) !== null && _options$compareFn !== void 0 ? _options$compareFn : defaultCompare;\n\t} else {\n\t\tvar _args$;\n\t\tcompareFn = (_args$ = args[1]) !== null && _args$ !== void 0 ? _args$ : defaultCompare;\n\t}\n\telse if (args.length > 2) {\n\t\tvar _args$2, _args$3;\n\t\tcompareFn = (_args$2 = args[1]) !== null && _args$2 !== void 0 ? _args$2 : defaultCompare;\n\t\toptions = (_args$3 = args[2]) !== null && _args$3 !== void 0 ? _args$3 : {};\n\t}\n\tconst { dirty = false, sortFn = defaultSortFn } = options;\n\tif (!dirty) return computed(() => sortFn([...toValue(source)], compareFn));\n\twatchEffect(() => {\n\t\tconst result = sortFn(toValue(source), compareFn);\n\t\tif (isRef(source)) source.value = result;\n\t\telse source.splice(0, source.length, ...result);\n\t});\n\treturn source;\n}\n//#endregion\n//#region useSpeechRecognition/index.ts\n/**\n* Reactive SpeechRecognition.\n*\n* @see https://vueuse.org/useSpeechRecognition\n* @see https://developer.mozilla.org/en-US/docs/Web/API/SpeechRecognition SpeechRecognition\n* @param options\n*/\nfunction useSpeechRecognition(options = {}) {\n\tconst { interimResults = true, continuous = true, maxAlternatives = 1, window = defaultWindow } = options;\n\tconst lang = toRef(options.lang || \"en-US\");\n\tconst isListening = shallowRef(false);\n\tconst isFinal = shallowRef(false);\n\tconst result = shallowRef(\"\");\n\tconst confidence = shallowRef(0);\n\tconst error = shallowRef(void 0);\n\tlet recognition;\n\tconst start = () => {\n\t\tisListening.value = true;\n\t};\n\tconst stop = () => {\n\t\tisListening.value = false;\n\t};\n\tconst toggle = (value = !isListening.value) => {\n\t\tif (value) start();\n\t\telse stop();\n\t};\n\tconst SpeechRecognition = window && (window.SpeechRecognition || window.webkitSpeechRecognition);\n\tconst isSupported = /* @__PURE__ */ useSupported(() => SpeechRecognition);\n\tif (isSupported.value) {\n\t\trecognition = new SpeechRecognition();\n\t\trecognition.continuous = continuous;\n\t\trecognition.interimResults = interimResults;\n\t\trecognition.lang = toValue(lang);\n\t\trecognition.maxAlternatives = maxAlternatives;\n\t\trecognition.onstart = () => {\n\t\t\tisListening.value = true;\n\t\t\tisFinal.value = false;\n\t\t};\n\t\twatch(lang, (lang) => {\n\t\t\tif (recognition && !isListening.value) recognition.lang = lang;\n\t\t});\n\t\trecognition.onresult = (event) => {\n\t\t\tconst currentResult = event.results[event.resultIndex];\n\t\t\tconst { transcript, confidence: alternativeConfidence } = currentResult[0];\n\t\t\tisFinal.value = currentResult.isFinal;\n\t\t\tresult.value = transcript;\n\t\t\tconfidence.value = alternativeConfidence;\n\t\t\terror.value = void 0;\n\t\t};\n\t\trecognition.onerror = (event) => {\n\t\t\terror.value = event;\n\t\t};\n\t\trecognition.onend = () => {\n\t\t\tisListening.value = false;\n\t\t\trecognition.lang = toValue(lang);\n\t\t};\n\t\twatch(isListening, (newValue, oldValue) => {\n\t\t\tif (newValue === oldValue) return;\n\t\t\ttry {\n\t\t\t\tif (newValue) recognition.start();\n\t\t\t\telse recognition.stop();\n\t\t\t} catch (err) {\n\t\t\t\terror.value = err;\n\t\t\t}\n\t\t});\n\t}\n\ttryOnScopeDispose(() => {\n\t\tstop();\n\t});\n\treturn {\n\t\tisSupported,\n\t\tisListening,\n\t\tisFinal: shallowReadonly(isFinal),\n\t\trecognition,\n\t\tresult: shallowReadonly(result),\n\t\tconfidence: shallowReadonly(confidence),\n\t\terror,\n\t\ttoggle,\n\t\tstart,\n\t\tstop\n\t};\n}\n//#endregion\n//#region useSpeechSynthesis/index.ts\n/**\n* Reactive SpeechSynthesis.\n*\n* @see https://vueuse.org/useSpeechSynthesis\n* @see https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesis SpeechSynthesis\n*/\nfunction useSpeechSynthesis(text, options = {}) {\n\tconst { pitch = 1, rate = 1, volume = 1, window = defaultWindow, onBoundary } = options;\n\tconst synth = window && window.speechSynthesis;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => synth);\n\tconst isPlaying = shallowRef(false);\n\tconst status = shallowRef(\"init\");\n\tconst spokenText = toRef(text || \"\");\n\tconst lang = toRef(options.lang || \"en-US\");\n\tconst error = shallowRef(void 0);\n\tconst toggle = (value = !isPlaying.value) => {\n\t\tisPlaying.value = value;\n\t};\n\tconst bindEventsForUtterance = (utterance) => {\n\t\tutterance.lang = toValue(lang);\n\t\tutterance.voice = toValue(options.voice) || null;\n\t\tutterance.pitch = toValue(pitch);\n\t\tutterance.rate = toValue(rate);\n\t\tutterance.volume = toValue(volume);\n\t\tutterance.onstart = () => {\n\t\t\tisPlaying.value = true;\n\t\t\tstatus.value = \"play\";\n\t\t};\n\t\tutterance.onpause = () => {\n\t\t\tisPlaying.value = false;\n\t\t\tstatus.value = \"pause\";\n\t\t};\n\t\tutterance.onresume = () => {\n\t\t\tisPlaying.value = true;\n\t\t\tstatus.value = \"play\";\n\t\t};\n\t\tutterance.onend = () => {\n\t\t\tisPlaying.value = false;\n\t\t\tstatus.value = \"end\";\n\t\t};\n\t\tutterance.onerror = (event) => {\n\t\t\terror.value = event;\n\t\t};\n\t\tutterance.onboundary = (event) => {\n\t\t\tonBoundary === null || onBoundary === void 0 || onBoundary(event);\n\t\t};\n\t};\n\tconst utterance = computed(() => {\n\t\tisPlaying.value = false;\n\t\tstatus.value = \"init\";\n\t\tconst newUtterance = new SpeechSynthesisUtterance(spokenText.value);\n\t\tbindEventsForUtterance(newUtterance);\n\t\treturn newUtterance;\n\t});\n\tconst speak = () => {\n\t\tsynth.cancel();\n\t\tif (utterance) synth.speak(utterance.value);\n\t};\n\tconst stop = () => {\n\t\tsynth.cancel();\n\t\tisPlaying.value = false;\n\t};\n\tif (isSupported.value) {\n\t\tbindEventsForUtterance(utterance.value);\n\t\twatch(lang, (lang) => {\n\t\t\tif (utterance.value && !isPlaying.value) utterance.value.lang = lang;\n\t\t});\n\t\tif (options.voice) watch(options.voice, () => {\n\t\t\tsynth.cancel();\n\t\t});\n\t\twatch(isPlaying, () => {\n\t\t\tif (isPlaying.value) synth.resume();\n\t\t\telse synth.pause();\n\t\t});\n\t}\n\ttryOnScopeDispose(() => {\n\t\tisPlaying.value = false;\n\t});\n\treturn {\n\t\tisSupported,\n\t\tisPlaying,\n\t\tstatus,\n\t\tutterance,\n\t\terror,\n\t\tstop,\n\t\ttoggle,\n\t\tspeak\n\t};\n}\n//#endregion\n//#region useStepper/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useStepper(steps, initialStep) {\n\tconst stepsRef = ref(steps);\n\tconst stepNames = computed(() => Array.isArray(stepsRef.value) ? stepsRef.value : Object.keys(stepsRef.value));\n\tconst index = ref(stepNames.value.indexOf(initialStep !== null && initialStep !== void 0 ? initialStep : stepNames.value[0]));\n\tconst current = computed(() => at(index.value));\n\tconst isFirst = computed(() => index.value === 0);\n\tconst isLast = computed(() => index.value === stepNames.value.length - 1);\n\tconst next = computed(() => stepNames.value[index.value + 1]);\n\tconst previous = computed(() => stepNames.value[index.value - 1]);\n\tfunction at(index) {\n\t\tif (Array.isArray(stepsRef.value)) return stepsRef.value[index];\n\t\treturn stepsRef.value[stepNames.value[index]];\n\t}\n\tfunction get(step) {\n\t\tif (!stepNames.value.includes(step)) return;\n\t\treturn at(stepNames.value.indexOf(step));\n\t}\n\tfunction goTo(step) {\n\t\tif (stepNames.value.includes(step)) index.value = stepNames.value.indexOf(step);\n\t}\n\tfunction goToNext() {\n\t\tif (isLast.value) return;\n\t\tindex.value++;\n\t}\n\tfunction goToPrevious() {\n\t\tif (isFirst.value) return;\n\t\tindex.value--;\n\t}\n\tfunction goBackTo(step) {\n\t\tif (isAfter(step)) goTo(step);\n\t}\n\tfunction isNext(step) {\n\t\treturn stepNames.value.indexOf(step) === index.value + 1;\n\t}\n\tfunction isPrevious(step) {\n\t\treturn stepNames.value.indexOf(step) === index.value - 1;\n\t}\n\tfunction isCurrent(step) {\n\t\treturn stepNames.value.indexOf(step) === index.value;\n\t}\n\tfunction isBefore(step) {\n\t\treturn index.value < stepNames.value.indexOf(step);\n\t}\n\tfunction isAfter(step) {\n\t\treturn index.value > stepNames.value.indexOf(step);\n\t}\n\treturn {\n\t\tsteps: stepsRef,\n\t\tstepNames,\n\t\tindex,\n\t\tcurrent,\n\t\tnext,\n\t\tprevious,\n\t\tisFirst,\n\t\tisLast,\n\t\tat,\n\t\tget,\n\t\tgoTo,\n\t\tgoToNext,\n\t\tgoToPrevious,\n\t\tgoBackTo,\n\t\tisNext,\n\t\tisPrevious,\n\t\tisCurrent,\n\t\tisBefore,\n\t\tisAfter\n\t};\n}\n//#endregion\n//#region useStorageAsync/index.ts\n/**\n* Reactive Storage with async support.\n*\n* @see https://vueuse.org/useStorageAsync\n* @param key\n* @param initialValue\n* @param storage\n* @param options\n*/\nfunction useStorageAsync(key, initialValue, storage, options = {}) {\n\tvar _options$serializer;\n\tconst { flush = \"pre\", deep = true, listenToStorageChanges = true, writeDefaults = true, mergeDefaults = false, shallow, window = defaultWindow, eventFilter, onError = (e) => {\n\t\tconsole.error(e);\n\t}, onReady } = options;\n\tconst rawInit = toValue(initialValue);\n\tconst type = guessSerializerType(rawInit);\n\tconst data = (shallow ? shallowRef : ref)(toValue(initialValue));\n\tconst serializer = (_options$serializer = options.serializer) !== null && _options$serializer !== void 0 ? _options$serializer : StorageSerializers[type];\n\tif (!storage) try {\n\t\tstorage = getSSRHandler(\"getDefaultStorageAsync\", () => defaultWindow === null || defaultWindow === void 0 ? void 0 : defaultWindow.localStorage)();\n\t} catch (e) {\n\t\tonError(e);\n\t}\n\tasync function read(event) {\n\t\tif (!storage || event && event.key !== key) return;\n\t\ttry {\n\t\t\tconst rawValue = event ? event.newValue : await storage.getItem(key);\n\t\t\tif (rawValue == null) {\n\t\t\t\tdata.value = rawInit;\n\t\t\t\tif (writeDefaults && rawInit !== null) await storage.setItem(key, await serializer.write(rawInit));\n\t\t\t} else if (mergeDefaults) {\n\t\t\t\tconst value = await serializer.read(rawValue);\n\t\t\t\tif (typeof mergeDefaults === \"function\") data.value = mergeDefaults(value, rawInit);\n\t\t\t\telse if (type === \"object\" && !Array.isArray(value)) data.value = {\n\t\t\t\t\t...rawInit,\n\t\t\t\t\t...value\n\t\t\t\t};\n\t\t\t\telse data.value = value;\n\t\t\t} else data.value = await serializer.read(rawValue);\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t}\n\tconst promise = new Promise((resolve) => {\n\t\tread().then(() => {\n\t\t\tonReady === null || onReady === void 0 || onReady(data.value);\n\t\t\tresolve(data);\n\t\t});\n\t});\n\tif (window && listenToStorageChanges) useEventListener(window, \"storage\", (e) => Promise.resolve().then(() => read(e)), { passive: true });\n\tif (storage) watchWithFilter(data, async () => {\n\t\ttry {\n\t\t\tif (data.value == null) await storage.removeItem(key);\n\t\t\telse await storage.setItem(key, await serializer.write(data.value));\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t}, {\n\t\tflush,\n\t\tdeep,\n\t\teventFilter\n\t});\n\tObject.assign(data, {\n\t\tthen: promise.then.bind(promise),\n\t\tcatch: promise.catch.bind(promise)\n\t});\n\treturn data;\n}\n//#endregion\n//#region useStyleTag/index.ts\nlet _id = 0;\nconst _refCount = /* @__PURE__ */ new WeakMap();\n/**\n* Inject <style> element in head.\n*\n* Overload: Omitted id\n*\n* @see https://vueuse.org/useStyleTag\n* @param css\n* @param options\n*/\nfunction useStyleTag(css, options = {}) {\n\tconst isLoaded = shallowRef(false);\n\tconst { document = defaultDocument, immediate = true, manual = false, id = `vueuse_styletag_${++_id}` } = options;\n\tconst cssRef = shallowRef(css);\n\tlet stop = () => {};\n\tconst load = () => {\n\t\tvar _refCount$get;\n\t\tif (!document) return;\n\t\tconst el = document.getElementById(id) || document.createElement(\"style\");\n\t\tif (!el.isConnected) {\n\t\t\tel.id = id;\n\t\t\tif (options.nonce) el.nonce = options.nonce;\n\t\t\tif (options.media) el.media = options.media;\n\t\t\tdocument.head.appendChild(el);\n\t\t}\n\t\tif (isLoaded.value) return;\n\t\t_refCount.set(el, ((_refCount$get = _refCount.get(el)) !== null && _refCount$get !== void 0 ? _refCount$get : 0) + 1);\n\t\tstop = watch(cssRef, (value) => {\n\t\t\tel.textContent = value;\n\t\t}, { immediate: true });\n\t\tisLoaded.value = true;\n\t};\n\tconst unload = () => {\n\t\tif (!document || !isLoaded.value) return;\n\t\tstop();\n\t\tconst el = document.getElementById(id);\n\t\tif (el) {\n\t\t\tvar _refCount$get2;\n\t\t\tconst count = ((_refCount$get2 = _refCount.get(el)) !== null && _refCount$get2 !== void 0 ? _refCount$get2 : 1) - 1;\n\t\t\tif (count <= 0) {\n\t\t\t\t_refCount.delete(el);\n\t\t\t\tdocument.head.removeChild(el);\n\t\t\t} else _refCount.set(el, count);\n\t\t}\n\t\tisLoaded.value = false;\n\t};\n\tif (immediate && !manual) tryOnMounted(load);\n\tif (!manual) tryOnScopeDispose(unload);\n\treturn {\n\t\tid,\n\t\tcss: cssRef,\n\t\tunload,\n\t\tload,\n\t\tisLoaded: shallowReadonly(isLoaded)\n\t};\n}\n//#endregion\n//#region useSwipe/index.ts\n/**\n* Reactive swipe detection.\n*\n* @see https://vueuse.org/useSwipe\n* @param target\n* @param options\n*/\nfunction useSwipe(target, options = {}) {\n\tconst { threshold = 50, onSwipe, onSwipeEnd, onSwipeStart, passive = true } = options;\n\tconst coordsStart = reactive({\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst coordsEnd = reactive({\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst diffX = computed(() => coordsStart.x - coordsEnd.x);\n\tconst diffY = computed(() => coordsStart.y - coordsEnd.y);\n\tconst { max, abs } = Math;\n\tconst isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold);\n\tconst isSwiping = shallowRef(false);\n\tconst direction = computed(() => {\n\t\tif (!isThresholdExceeded.value) return \"none\";\n\t\tif (abs(diffX.value) > abs(diffY.value)) return diffX.value > 0 ? \"left\" : \"right\";\n\t\telse return diffY.value > 0 ? \"up\" : \"down\";\n\t});\n\tconst getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY];\n\tconst updateCoordsStart = (x, y) => {\n\t\tcoordsStart.x = x;\n\t\tcoordsStart.y = y;\n\t};\n\tconst updateCoordsEnd = (x, y) => {\n\t\tcoordsEnd.x = x;\n\t\tcoordsEnd.y = y;\n\t};\n\tconst listenerOptions = {\n\t\tpassive,\n\t\tcapture: !passive\n\t};\n\tconst onTouchEnd = (e) => {\n\t\tif (isSwiping.value) onSwipeEnd === null || onSwipeEnd === void 0 || onSwipeEnd(e, direction.value);\n\t\tisSwiping.value = false;\n\t};\n\tconst stops = [\n\t\tuseEventListener(target, \"touchstart\", (e) => {\n\t\t\tif (e.touches.length !== 1) return;\n\t\t\tconst [x, y] = getTouchEventCoords(e);\n\t\t\tupdateCoordsStart(x, y);\n\t\t\tupdateCoordsEnd(x, y);\n\t\t\tonSwipeStart === null || onSwipeStart === void 0 || onSwipeStart(e);\n\t\t}, listenerOptions),\n\t\tuseEventListener(target, \"touchmove\", (e) => {\n\t\t\tif (e.touches.length !== 1) return;\n\t\t\tconst [x, y] = getTouchEventCoords(e);\n\t\t\tupdateCoordsEnd(x, y);\n\t\t\tif (listenerOptions.capture && !listenerOptions.passive && Math.abs(diffX.value) > Math.abs(diffY.value)) e.preventDefault();\n\t\t\tif (!isSwiping.value && isThresholdExceeded.value) isSwiping.value = true;\n\t\t\tif (isSwiping.value) onSwipe === null || onSwipe === void 0 || onSwipe(e);\n\t\t}, listenerOptions),\n\t\tuseEventListener(target, [\"touchend\", \"touchcancel\"], onTouchEnd, listenerOptions)\n\t];\n\tconst stop = () => stops.forEach((s) => s());\n\treturn {\n\t\tisSwiping,\n\t\tdirection,\n\t\tcoordsStart,\n\t\tcoordsEnd,\n\t\tlengthX: diffX,\n\t\tlengthY: diffY,\n\t\tstop\n\t};\n}\n//#endregion\n//#region useTemplateRefsList/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useTemplateRefsList() {\n\tconst refs = ref([]);\n\trefs.value.set = (el) => {\n\t\tif (el) refs.value.push(el);\n\t};\n\tonBeforeUpdate(() => {\n\t\trefs.value.length = 0;\n\t});\n\treturn refs;\n}\n//#endregion\n//#region useTextDirection/index.ts\n/**\n* Reactive dir of the element's text.\n*\n* @see https://vueuse.org/useTextDirection\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useTextDirection(options = {}) {\n\tconst { document = defaultDocument, selector = \"html\", observe = false, initialValue = \"ltr\" } = options;\n\tfunction getValue() {\n\t\tvar _ref, _document$querySelect;\n\t\treturn (_ref = document === null || document === void 0 || (_document$querySelect = document.querySelector(selector)) === null || _document$querySelect === void 0 ? void 0 : _document$querySelect.getAttribute(\"dir\")) !== null && _ref !== void 0 ? _ref : initialValue;\n\t}\n\tconst dir = shallowRef(getValue());\n\ttryOnMounted(() => dir.value = getValue());\n\tif (observe && document) useMutationObserver(document.querySelector(selector), () => dir.value = getValue(), { attributes: true });\n\treturn computed({\n\t\tget() {\n\t\t\treturn dir.value;\n\t\t},\n\t\tset(v) {\n\t\t\tvar _document$querySelect2, _document$querySelect3;\n\t\t\tdir.value = v;\n\t\t\tif (!document) return;\n\t\t\tif (dir.value) (_document$querySelect2 = document.querySelector(selector)) === null || _document$querySelect2 === void 0 || _document$querySelect2.setAttribute(\"dir\", dir.value);\n\t\t\telse (_document$querySelect3 = document.querySelector(selector)) === null || _document$querySelect3 === void 0 || _document$querySelect3.removeAttribute(\"dir\");\n\t\t}\n\t});\n}\n//#endregion\n//#region useTextSelection/index.ts\nfunction getRangesFromSelection(selection) {\n\tvar _selection$rangeCount;\n\tconst rangeCount = (_selection$rangeCount = selection.rangeCount) !== null && _selection$rangeCount !== void 0 ? _selection$rangeCount : 0;\n\treturn Array.from({ length: rangeCount }, (_, i) => selection.getRangeAt(i));\n}\n/**\n* Reactively track user text selection based on [`Window.getSelection`](https://developer.mozilla.org/en-US/docs/Web/API/Window/getSelection).\n*\n* @see https://vueuse.org/useTextSelection\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useTextSelection(options = {}) {\n\tvar _window$getSelection;\n\tconst { window = defaultWindow } = options;\n\tconst selection = shallowRef((_window$getSelection = window === null || window === void 0 ? void 0 : window.getSelection()) !== null && _window$getSelection !== void 0 ? _window$getSelection : null);\n\tconst text = computed(() => {\n\t\tvar _selection$value$toSt, _selection$value;\n\t\treturn (_selection$value$toSt = (_selection$value = selection.value) === null || _selection$value === void 0 ? void 0 : _selection$value.toString()) !== null && _selection$value$toSt !== void 0 ? _selection$value$toSt : \"\";\n\t});\n\tconst ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []);\n\tconst rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect()));\n\tfunction onSelectionChange() {\n\t\tselection.value = null;\n\t\tif (window) selection.value = window.getSelection();\n\t}\n\tif (window) useEventListener(window.document, \"selectionchange\", onSelectionChange, { passive: true });\n\treturn {\n\t\ttext,\n\t\trects,\n\t\tranges,\n\t\tselection\n\t};\n}\n//#endregion\n//#region useTextareaAutosize/index.ts\n/**\n* Call window.requestAnimationFrame(), if not available, just call the function\n*\n* @param window\n* @param fn\n*/\nfunction tryRequestAnimationFrame(window = defaultWindow, fn) {\n\tif (window && typeof window.requestAnimationFrame === \"function\") window.requestAnimationFrame(fn);\n\telse fn();\n}\nfunction useTextareaAutosize(options = {}) {\n\tvar _options$input, _options$styleProp;\n\tconst { window = defaultWindow } = options;\n\tconst textarea = toRef(options === null || options === void 0 ? void 0 : options.element);\n\tconst input = toRef((_options$input = options === null || options === void 0 ? void 0 : options.input) !== null && _options$input !== void 0 ? _options$input : \"\");\n\tconst styleProp = (_options$styleProp = options === null || options === void 0 ? void 0 : options.styleProp) !== null && _options$styleProp !== void 0 ? _options$styleProp : \"height\";\n\tconst textareaScrollHeight = shallowRef(1);\n\tconst textareaOldWidth = shallowRef(0);\n\tfunction triggerResize() {\n\t\tvar _textarea$value;\n\t\tif (!textarea.value) return;\n\t\tlet height = \"\";\n\t\tconst maxHeight = options === null || options === void 0 ? void 0 : options.maxHeight;\n\t\ttextarea.value.style[styleProp] = \"1px\";\n\t\ttextareaScrollHeight.value = (_textarea$value = textarea.value) === null || _textarea$value === void 0 ? void 0 : _textarea$value.scrollHeight;\n\t\tconst _styleTarget = toValue(options === null || options === void 0 ? void 0 : options.styleTarget);\n\t\tconst styleHeight = maxHeight != null ? `${Math.min(textareaScrollHeight.value, maxHeight)}px` : `${textareaScrollHeight.value}px`;\n\t\tif (_styleTarget) _styleTarget.style[styleProp] = styleHeight;\n\t\telse height = styleHeight;\n\t\ttextarea.value.style[styleProp] = height;\n\t}\n\twatch([input, textarea], () => nextTick(triggerResize), { immediate: true });\n\twatch(textareaScrollHeight, () => {\n\t\tvar _options$onResize;\n\t\treturn options === null || options === void 0 || (_options$onResize = options.onResize) === null || _options$onResize === void 0 ? void 0 : _options$onResize.call(options);\n\t});\n\tuseResizeObserver(textarea, ([{ contentRect }]) => {\n\t\tif (textareaOldWidth.value === contentRect.width) return;\n\t\ttryRequestAnimationFrame(window, () => {\n\t\t\ttextareaOldWidth.value = contentRect.width;\n\t\t\ttriggerResize();\n\t\t});\n\t});\n\tif (options === null || options === void 0 ? void 0 : options.watch) watch(options.watch, triggerResize, {\n\t\timmediate: true,\n\t\tdeep: true\n\t});\n\treturn {\n\t\ttextarea,\n\t\tinput,\n\t\ttriggerResize\n\t};\n}\n//#endregion\n//#region useThrottledRefHistory/index.ts\n/**\n* Shorthand for [useRefHistory](https://vueuse.org/useRefHistory) with throttled filter.\n*\n* @see https://vueuse.org/useThrottledRefHistory\n* @param source\n* @param options\n*/\nfunction useThrottledRefHistory(source, options = {}) {\n\tconst { throttle = 200, trailing = true } = options;\n\tconst filter = throttleFilter(throttle, trailing);\n\treturn { ...useRefHistory(source, {\n\t\t...options,\n\t\teventFilter: filter\n\t}) };\n}\n//#endregion\n//#region useTimeAgo/index.ts\nconst DEFAULT_UNITS = [\n\t{\n\t\tmax: 6e4,\n\t\tvalue: 1e3,\n\t\tname: \"second\"\n\t},\n\t{\n\t\tmax: 276e4,\n\t\tvalue: 6e4,\n\t\tname: \"minute\"\n\t},\n\t{\n\t\tmax: 72e6,\n\t\tvalue: 36e5,\n\t\tname: \"hour\"\n\t},\n\t{\n\t\tmax: 5184e5,\n\t\tvalue: 864e5,\n\t\tname: \"day\"\n\t},\n\t{\n\t\tmax: 24192e5,\n\t\tvalue: 6048e5,\n\t\tname: \"week\"\n\t},\n\t{\n\t\tmax: 28512e6,\n\t\tvalue: 2592e6,\n\t\tname: \"month\"\n\t},\n\t{\n\t\tmax: Number.POSITIVE_INFINITY,\n\t\tvalue: 31536e6,\n\t\tname: \"year\"\n\t}\n];\nconst DEFAULT_MESSAGES = {\n\tjustNow: \"just now\",\n\tpast: (n) => /\\d/.test(n) ? `${n} ago` : n,\n\tfuture: (n) => /\\d/.test(n) ? `in ${n}` : n,\n\tmonth: (n, past) => n === 1 ? past ? \"last month\" : \"next month\" : `${n} month${n > 1 ? \"s\" : \"\"}`,\n\tyear: (n, past) => n === 1 ? past ? \"last year\" : \"next year\" : `${n} year${n > 1 ? \"s\" : \"\"}`,\n\tday: (n, past) => n === 1 ? past ? \"yesterday\" : \"tomorrow\" : `${n} day${n > 1 ? \"s\" : \"\"}`,\n\tweek: (n, past) => n === 1 ? past ? \"last week\" : \"next week\" : `${n} week${n > 1 ? \"s\" : \"\"}`,\n\thour: (n) => `${n} hour${n > 1 ? \"s\" : \"\"}`,\n\tminute: (n) => `${n} minute${n > 1 ? \"s\" : \"\"}`,\n\tsecond: (n) => `${n} second${n > 1 ? \"s\" : \"\"}`,\n\tinvalid: \"\"\n};\nfunction DEFAULT_FORMATTER(date) {\n\treturn date.toISOString().slice(0, 10);\n}\nfunction getDefaultScheduler$4(options) {\n\tif (\"updateInterval\" in options) {\n\t\tconst { updateInterval = 3e4 } = options;\n\t\treturn (cb) => useIntervalFn(cb, updateInterval);\n\t}\n\treturn (cb) => useIntervalFn(cb, 3e4);\n}\n/**\n* Reactive time ago formatter.\n*\n* @see https://vueuse.org/useTimeAgo\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useTimeAgo(time, options = {}) {\n\tconst { controls: exposeControls = false, scheduler = getDefaultScheduler$4(options) } = options;\n\tconst { now, ...controls } = useNow({\n\t\tscheduler,\n\t\tcontrols: true\n\t});\n\tconst timeAgo = computed(() => formatTimeAgo(new Date(toValue(time)), options, toValue(now)));\n\tif (exposeControls) return {\n\t\ttimeAgo,\n\t\t...controls\n\t};\n\telse return timeAgo;\n}\nfunction formatTimeAgo(from, options = {}, now = Date.now()) {\n\tconst { max, messages = DEFAULT_MESSAGES, fullDateFormatter = DEFAULT_FORMATTER, units = DEFAULT_UNITS, showSecond = false, rounding = \"round\" } = options;\n\tconst roundFn = typeof rounding === \"number\" ? (n) => +n.toFixed(rounding) : Math[rounding];\n\tconst diff = +now - +from;\n\tconst absDiff = Math.abs(diff);\n\tfunction getValue(diff, unit) {\n\t\treturn roundFn(Math.abs(diff) / unit.value);\n\t}\n\tfunction format(diff, unit) {\n\t\tconst val = getValue(diff, unit);\n\t\tconst past = diff > 0;\n\t\tconst str = applyFormat(unit.name, val, past);\n\t\treturn applyFormat(past ? \"past\" : \"future\", str, past);\n\t}\n\tfunction applyFormat(name, val, isPast) {\n\t\tconst formatter = messages[name];\n\t\tif (typeof formatter === \"function\") return formatter(val, isPast);\n\t\treturn formatter.replace(\"{0}\", val.toString());\n\t}\n\tif (absDiff < 6e4 && !showSecond) return messages.justNow;\n\tif (typeof max === \"number\" && absDiff > max) return fullDateFormatter(new Date(from));\n\tif (typeof max === \"string\") {\n\t\tvar _units$find;\n\t\tconst unitMax = (_units$find = units.find((i) => i.name === max)) === null || _units$find === void 0 ? void 0 : _units$find.max;\n\t\tif (unitMax && absDiff > unitMax) return fullDateFormatter(new Date(from));\n\t}\n\tfor (const [idx, unit] of units.entries()) {\n\t\tif (getValue(diff, unit) <= 0 && units[idx - 1]) return format(diff, units[idx - 1]);\n\t\tif (absDiff < unit.max) return format(diff, unit);\n\t}\n\treturn messages.invalid;\n}\n//#endregion\n//#region useTimeAgoIntl/index.ts\nconst UNITS = [\n\t{\n\t\tname: \"year\",\n\t\tms: 31536e6\n\t},\n\t{\n\t\tname: \"month\",\n\t\tms: 2592e6\n\t},\n\t{\n\t\tname: \"week\",\n\t\tms: 6048e5\n\t},\n\t{\n\t\tname: \"day\",\n\t\tms: 864e5\n\t},\n\t{\n\t\tname: \"hour\",\n\t\tms: 36e5\n\t},\n\t{\n\t\tname: \"minute\",\n\t\tms: 6e4\n\t},\n\t{\n\t\tname: \"second\",\n\t\tms: 1e3\n\t}\n];\nfunction getDefaultScheduler$3(options) {\n\tif (\"updateInterval\" in options) {\n\t\tconst { updateInterval = 3e4 } = options;\n\t\treturn (cb) => useIntervalFn(cb, updateInterval);\n\t}\n\treturn (cb) => useIntervalFn(cb, 3e4);\n}\nfunction useTimeAgoIntl(time, options = {}) {\n\tconst { controls: exposeControls = false, scheduler = getDefaultScheduler$3(options) } = options;\n\tconst { now, ...controls } = useNow({\n\t\tscheduler,\n\t\tcontrols: true\n\t});\n\tconst result = computed(() => getTimeAgoIntlResult(new Date(toValue(time)), options, toValue(now)));\n\tconst parts = computed(() => result.value.parts);\n\tconst timeAgoIntl = computed(() => formatTimeAgoIntlParts(parts.value, {\n\t\t...options,\n\t\tlocale: result.value.resolvedLocale\n\t}));\n\treturn exposeControls ? {\n\t\ttimeAgoIntl,\n\t\tparts,\n\t\t...controls\n\t} : timeAgoIntl;\n}\n/**\n* Non-reactive version of useTimeAgoIntl\n*/\nfunction formatTimeAgoIntl(from, options = {}, now = Date.now()) {\n\tconst { parts, resolvedLocale } = getTimeAgoIntlResult(from, options, now);\n\treturn formatTimeAgoIntlParts(parts, {\n\t\t...options,\n\t\tlocale: resolvedLocale\n\t});\n}\n/**\n* Get parts from `Intl.RelativeTimeFormat.formatToParts`.\n*/\nfunction getTimeAgoIntlResult(from, options = {}, now = Date.now()) {\n\tvar _options$units;\n\tconst { locale, relativeTimeFormatOptions = { numeric: \"auto\" } } = options;\n\tconst rtf = new Intl.RelativeTimeFormat(locale, relativeTimeFormatOptions);\n\tconst { locale: resolvedLocale } = rtf.resolvedOptions();\n\tconst diff = +from - +now;\n\tconst absDiff = Math.abs(diff);\n\tconst units = (_options$units = options.units) !== null && _options$units !== void 0 ? _options$units : UNITS;\n\tfor (const { name, ms } of units) if (absDiff >= ms) return {\n\t\tresolvedLocale,\n\t\tparts: rtf.formatToParts(Math.round(diff / ms), name)\n\t};\n\treturn {\n\t\tresolvedLocale,\n\t\tparts: rtf.formatToParts(0, units[units.length - 1].name)\n\t};\n}\n/**\n* Format parts into a string\n*/\nfunction formatTimeAgoIntlParts(parts, options = {}) {\n\tconst { insertSpace = true, joinParts, locale } = options;\n\tif (typeof joinParts === \"function\") return joinParts(parts, locale);\n\tif (!insertSpace) return parts.map((part) => part.value).join(\"\");\n\treturn parts.map((part) => part.value.trim()).join(\" \");\n}\n//#endregion\n//#region useTimeoutPoll/index.ts\nfunction useTimeoutPoll(fn, interval, options = {}) {\n\tconst { immediate = true, immediateCallback = false } = options;\n\tconst { start } = useTimeoutFn(loop, interval, { immediate });\n\tconst isActive = shallowRef(false);\n\tasync function loop() {\n\t\tif (!isActive.value) return;\n\t\tawait fn();\n\t\tstart();\n\t}\n\tfunction resume() {\n\t\tif (!isActive.value) {\n\t\t\tisActive.value = true;\n\t\t\tif (immediateCallback) fn();\n\t\t\tstart();\n\t\t}\n\t}\n\tfunction pause() {\n\t\tisActive.value = false;\n\t}\n\tif (immediate && isClient) resume();\n\ttryOnScopeDispose(pause);\n\treturn {\n\t\tisActive,\n\t\tpause,\n\t\tresume\n\t};\n}\n//#endregion\n//#region useTimestamp/index.ts\nfunction getDefaultScheduler$2(options) {\n\tif (\"interval\" in options || \"immediate\" in options) {\n\t\tconst { interval = \"requestAnimationFrame\", immediate = true } = options;\n\t\treturn interval === \"requestAnimationFrame\" ? (cb) => useRafFn(cb, { immediate }) : (cb) => useIntervalFn(cb, interval, { immediate });\n\t}\n\treturn useRafFn;\n}\nfunction useTimestamp(options = {}) {\n\tconst { controls: exposeControls = false, offset = 0, scheduler = getDefaultScheduler$2(options), callback } = options;\n\tconst ts = shallowRef(timestamp() + offset);\n\tconst update = () => ts.value = timestamp() + offset;\n\tconst controls = scheduler(callback ? () => {\n\t\tupdate();\n\t\tcallback(ts.value);\n\t} : update);\n\tif (exposeControls) return {\n\t\ttimestamp: ts,\n\t\t...controls\n\t};\n\telse return ts;\n}\n//#endregion\n//#region useTitle/index.ts\nfunction useTitle(newTitle = null, options = {}) {\n\tvar _document$title, _ref;\n\tconst { document = defaultDocument, restoreOnUnmount = (t) => t } = options;\n\tconst originalTitle = (_document$title = document === null || document === void 0 ? void 0 : document.title) !== null && _document$title !== void 0 ? _document$title : \"\";\n\tconst title = toRef((_ref = newTitle !== null && newTitle !== void 0 ? newTitle : document === null || document === void 0 ? void 0 : document.title) !== null && _ref !== void 0 ? _ref : null);\n\tconst isReadonly = !!(newTitle && typeof newTitle === \"function\");\n\tfunction format(t) {\n\t\tif (!(\"titleTemplate\" in options)) return t;\n\t\tconst template = options.titleTemplate || \"%s\";\n\t\treturn typeof template === \"function\" ? template(t) : toValue(template).replace(/%s/g, t);\n\t}\n\twatch(title, (newValue, oldValue) => {\n\t\tif (newValue !== oldValue && document) document.title = format(newValue !== null && newValue !== void 0 ? newValue : \"\");\n\t}, { immediate: true });\n\tif (options.observe && !options.titleTemplate && document && !isReadonly) {\n\t\tvar _document$head;\n\t\tuseMutationObserver((_document$head = document.head) === null || _document$head === void 0 ? void 0 : _document$head.querySelector(\"title\"), () => {\n\t\t\tif (document && document.title !== title.value) title.value = format(document.title);\n\t\t}, { childList: true });\n\t}\n\ttryOnScopeDispose(() => {\n\t\tif (restoreOnUnmount) {\n\t\t\tconst restoredTitle = restoreOnUnmount(originalTitle, title.value || \"\");\n\t\t\tif (restoredTitle != null && document) document.title = restoredTitle;\n\t\t}\n\t});\n\treturn title;\n}\n/**\n* Common transitions\n*\n* @see https://easings.net\n*/\nconst TransitionPresets = /* #__PURE__ */ Object.assign({}, { linear: identity }, {\n\teaseInSine: [\n\t\t.12,\n\t\t0,\n\t\t.39,\n\t\t0\n\t],\n\teaseOutSine: [\n\t\t.61,\n\t\t1,\n\t\t.88,\n\t\t1\n\t],\n\teaseInOutSine: [\n\t\t.37,\n\t\t0,\n\t\t.63,\n\t\t1\n\t],\n\teaseInQuad: [\n\t\t.11,\n\t\t0,\n\t\t.5,\n\t\t0\n\t],\n\teaseOutQuad: [\n\t\t.5,\n\t\t1,\n\t\t.89,\n\t\t1\n\t],\n\teaseInOutQuad: [\n\t\t.45,\n\t\t0,\n\t\t.55,\n\t\t1\n\t],\n\teaseInCubic: [\n\t\t.32,\n\t\t0,\n\t\t.67,\n\t\t0\n\t],\n\teaseOutCubic: [\n\t\t.33,\n\t\t1,\n\t\t.68,\n\t\t1\n\t],\n\teaseInOutCubic: [\n\t\t.65,\n\t\t0,\n\t\t.35,\n\t\t1\n\t],\n\teaseInQuart: [\n\t\t.5,\n\t\t0,\n\t\t.75,\n\t\t0\n\t],\n\teaseOutQuart: [\n\t\t.25,\n\t\t1,\n\t\t.5,\n\t\t1\n\t],\n\teaseInOutQuart: [\n\t\t.76,\n\t\t0,\n\t\t.24,\n\t\t1\n\t],\n\teaseInQuint: [\n\t\t.64,\n\t\t0,\n\t\t.78,\n\t\t0\n\t],\n\teaseOutQuint: [\n\t\t.22,\n\t\t1,\n\t\t.36,\n\t\t1\n\t],\n\teaseInOutQuint: [\n\t\t.83,\n\t\t0,\n\t\t.17,\n\t\t1\n\t],\n\teaseInExpo: [\n\t\t.7,\n\t\t0,\n\t\t.84,\n\t\t0\n\t],\n\teaseOutExpo: [\n\t\t.16,\n\t\t1,\n\t\t.3,\n\t\t1\n\t],\n\teaseInOutExpo: [\n\t\t.87,\n\t\t0,\n\t\t.13,\n\t\t1\n\t],\n\teaseInCirc: [\n\t\t.55,\n\t\t0,\n\t\t1,\n\t\t.45\n\t],\n\teaseOutCirc: [\n\t\t0,\n\t\t.55,\n\t\t.45,\n\t\t1\n\t],\n\teaseInOutCirc: [\n\t\t.85,\n\t\t0,\n\t\t.15,\n\t\t1\n\t],\n\teaseInBack: [\n\t\t.36,\n\t\t0,\n\t\t.66,\n\t\t-.56\n\t],\n\teaseOutBack: [\n\t\t.34,\n\t\t1.56,\n\t\t.64,\n\t\t1\n\t],\n\teaseInOutBack: [\n\t\t.68,\n\t\t-.6,\n\t\t.32,\n\t\t1.6\n\t]\n});\n/**\n* Create an easing function from cubic bezier points.\n*/\nfunction createEasingFunction([p0, p1, p2, p3]) {\n\tconst a = (a1, a2) => 1 - 3 * a2 + 3 * a1;\n\tconst b = (a1, a2) => 3 * a2 - 6 * a1;\n\tconst c = (a1) => 3 * a1;\n\tconst calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t;\n\tconst getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1);\n\tconst getTforX = (x) => {\n\t\tlet aGuessT = x;\n\t\tfor (let i = 0; i < 4; ++i) {\n\t\t\tconst currentSlope = getSlope(aGuessT, p0, p2);\n\t\t\tif (currentSlope === 0) return aGuessT;\n\t\t\tconst currentX = calcBezier(aGuessT, p0, p2) - x;\n\t\t\taGuessT -= currentX / currentSlope;\n\t\t}\n\t\treturn aGuessT;\n\t};\n\treturn (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3);\n}\nfunction lerp(a, b, alpha) {\n\treturn a + alpha * (b - a);\n}\nfunction defaultInterpolation(a, b, t) {\n\tconst aVal = toValue(a);\n\tconst bVal = toValue(b);\n\tif (typeof aVal === \"number\" && typeof bVal === \"number\") return lerp(aVal, bVal, t);\n\tif (Array.isArray(aVal) && Array.isArray(bVal)) return aVal.map((v, i) => lerp(v, toValue(bVal[i]), t));\n\tthrow new TypeError(\"Unknown transition type, specify an interpolation function.\");\n}\nfunction normalizeEasing(easing) {\n\tvar _toValue;\n\treturn typeof easing === \"function\" ? easing : (_toValue = toValue(easing)) !== null && _toValue !== void 0 ? _toValue : identity;\n}\n/**\n* Transition from one value to another.\n*\n* @param source\n* @param from\n* @param to\n* @param options\n*/\nfunction transition(source, from, to, options = {}) {\n\tvar _toValue2;\n\tconst { window = defaultWindow } = options;\n\tconst fromVal = toValue(from);\n\tconst toVal = toValue(to);\n\tconst duration = (_toValue2 = toValue(options.duration)) !== null && _toValue2 !== void 0 ? _toValue2 : 1e3;\n\tconst startedAt = Date.now();\n\tconst endAt = Date.now() + duration;\n\tconst interpolation = typeof options.interpolation === \"function\" ? options.interpolation : defaultInterpolation;\n\tconst trans = typeof options.easing !== \"undefined\" ? normalizeEasing(options.easing) : normalizeEasing(options.transition);\n\tconst ease = typeof trans === \"function\" ? trans : createEasingFunction(trans);\n\treturn new Promise((resolve) => {\n\t\tsource.value = fromVal;\n\t\tconst tick = () => {\n\t\t\tvar _options$abort;\n\t\t\tif ((_options$abort = options.abort) === null || _options$abort === void 0 ? void 0 : _options$abort.call(options)) {\n\t\t\t\tresolve();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst now = Date.now();\n\t\t\tconst alpha = ease((now - startedAt) / duration);\n\t\t\tsource.value = interpolation(fromVal, toVal, alpha);\n\t\t\tif (now < endAt) window === null || window === void 0 || window.requestAnimationFrame(tick);\n\t\t\telse {\n\t\t\t\tsource.value = toVal;\n\t\t\t\tresolve();\n\t\t\t}\n\t\t};\n\t\ttick();\n\t});\n}\n/**\n* Transition from one value to another.\n* @deprecated The `executeTransition` function is deprecated, use `transition` instead.\n*\n* @param source\n* @param from\n* @param to\n* @param options\n*/\nfunction executeTransition(source, from, to, options = {}) {\n\treturn transition(source, from, to, options);\n}\n/**\n* Follow value with a transition.\n*\n* @see https://vueuse.org/useTransition\n* @param source\n* @param options\n*/\nfunction useTransition(source, options = {}) {\n\tlet currentId = 0;\n\tconst sourceVal = () => {\n\t\tconst v = toValue(source);\n\t\treturn typeof options.interpolation === \"undefined\" && Array.isArray(v) ? v.map(toValue) : v;\n\t};\n\tconst outputRef = shallowRef(sourceVal());\n\twatch(sourceVal, async (to) => {\n\t\tvar _options$onStarted, _options$onFinished;\n\t\tif (toValue(options.disabled)) return;\n\t\tconst id = ++currentId;\n\t\tif (options.delay) await promiseTimeout(toValue(options.delay));\n\t\tif (id !== currentId) return;\n\t\t(_options$onStarted = options.onStarted) === null || _options$onStarted === void 0 || _options$onStarted.call(options);\n\t\tawait transition(outputRef, outputRef.value, to, {\n\t\t\t...options,\n\t\t\tabort: () => {\n\t\t\t\tvar _options$abort2;\n\t\t\t\treturn id !== currentId || ((_options$abort2 = options.abort) === null || _options$abort2 === void 0 ? void 0 : _options$abort2.call(options));\n\t\t\t}\n\t\t});\n\t\t(_options$onFinished = options.onFinished) === null || _options$onFinished === void 0 || _options$onFinished.call(options);\n\t}, { deep: true });\n\twatch(() => toValue(options.disabled), (disabled) => {\n\t\tif (disabled) {\n\t\t\tcurrentId++;\n\t\t\toutputRef.value = sourceVal();\n\t\t}\n\t});\n\ttryOnScopeDispose(() => {\n\t\tcurrentId++;\n\t});\n\treturn computed(() => toValue(options.disabled) ? sourceVal() : outputRef.value);\n}\n//#endregion\n//#region useUrlSearchParams/index.ts\n/**\n* Reactive URLSearchParams\n*\n* @see https://vueuse.org/useUrlSearchParams\n* @param mode\n* @param options\n*/\nfunction useUrlSearchParams(mode = \"history\", options = {}) {\n\tconst { initialValue = {}, removeNullishValues = true, removeFalsyValues = false, write: enableWrite = true, writeMode = \"replace\", window = defaultWindow, stringify = (params) => params.toString() } = options;\n\tif (!window) return reactive(initialValue);\n\tconst state = reactive({});\n\tfunction getRawParams() {\n\t\tif (mode === \"history\") return window.location.search || \"\";\n\t\telse if (mode === \"hash\") {\n\t\t\tconst hash = window.location.hash || \"\";\n\t\t\tconst index = hash.indexOf(\"?\");\n\t\t\treturn index > 0 ? hash.slice(index) : \"\";\n\t\t} else return (window.location.hash || \"\").replace(/^#/, \"\");\n\t}\n\tfunction constructQuery(params) {\n\t\tconst stringified = stringify(params);\n\t\tif (mode === \"history\") return `${stringified ? `?${stringified}` : \"\"}${window.location.hash || \"\"}`;\n\t\tif (mode === \"hash-params\") return `${window.location.search || \"\"}${stringified ? `#${stringified}` : \"\"}`;\n\t\tconst hash = window.location.hash || \"#\";\n\t\tconst index = hash.indexOf(\"?\");\n\t\tif (index > 0) return `${window.location.search || \"\"}${hash.slice(0, index)}${stringified ? `?${stringified}` : \"\"}`;\n\t\treturn `${window.location.search || \"\"}${hash}${stringified ? `?${stringified}` : \"\"}`;\n\t}\n\tfunction read() {\n\t\treturn new URLSearchParams(getRawParams());\n\t}\n\tfunction updateState(params) {\n\t\tconst unusedKeys = new Set(Object.keys(state));\n\t\tfor (const key of params.keys()) {\n\t\t\tconst paramsForKey = params.getAll(key);\n\t\t\tstate[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || \"\";\n\t\t\tunusedKeys.delete(key);\n\t\t}\n\t\tArray.from(unusedKeys).forEach((key) => delete state[key]);\n\t}\n\tconst { pause, resume } = watchPausable(state, () => {\n\t\tconst params = new URLSearchParams(\"\");\n\t\tObject.keys(state).forEach((key) => {\n\t\t\tconst mapEntry = state[key];\n\t\t\tif (Array.isArray(mapEntry)) mapEntry.forEach((value) => params.append(key, value));\n\t\t\telse if (removeNullishValues && mapEntry == null) params.delete(key);\n\t\t\telse if (removeFalsyValues && !mapEntry) params.delete(key);\n\t\t\telse params.set(key, mapEntry);\n\t\t});\n\t\twrite(params, false);\n\t}, { deep: true });\n\tfunction write(params, shouldUpdate, shouldWriteHistory = true) {\n\t\tpause();\n\t\tif (shouldUpdate) updateState(params);\n\t\tif (writeMode === \"replace\") window.history.replaceState(window.history.state, window.document.title, window.location.pathname + constructQuery(params));\n\t\telse if (shouldWriteHistory) window.history.pushState(window.history.state, window.document.title, window.location.pathname + constructQuery(params));\n\t\tnextTick(() => resume());\n\t}\n\tfunction onChanged() {\n\t\tif (!enableWrite) return;\n\t\twrite(read(), true, false);\n\t}\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(window, \"popstate\", onChanged, listenerOptions);\n\tif (mode !== \"history\") useEventListener(window, \"hashchange\", onChanged, listenerOptions);\n\tconst initial = read();\n\tif (initial.keys().next().value) updateState(initial);\n\telse Object.assign(state, initialValue);\n\treturn state;\n}\n//#endregion\n//#region useUserMedia/index.ts\n/**\n* Reactive `mediaDevices.getUserMedia` streaming\n*\n* @see https://vueuse.org/useUserMedia\n* @param options\n*/\nfunction useUserMedia(options = {}) {\n\tvar _options$enabled, _options$autoSwitch;\n\tconst enabled = shallowRef((_options$enabled = options.enabled) !== null && _options$enabled !== void 0 ? _options$enabled : false);\n\tconst autoSwitch = shallowRef((_options$autoSwitch = options.autoSwitch) !== null && _options$autoSwitch !== void 0 ? _options$autoSwitch : true);\n\tconst constraints = ref(options.constraints);\n\tconst { navigator = defaultNavigator } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => {\n\t\tvar _navigator$mediaDevic;\n\t\treturn navigator === null || navigator === void 0 || (_navigator$mediaDevic = navigator.mediaDevices) === null || _navigator$mediaDevic === void 0 ? void 0 : _navigator$mediaDevic.getUserMedia;\n\t});\n\tconst stream = shallowRef();\n\tfunction getDeviceOptions(type) {\n\t\tswitch (type) {\n\t\t\tcase \"video\":\n\t\t\t\tif (constraints.value) return constraints.value.video || false;\n\t\t\t\tbreak;\n\t\t\tcase \"audio\":\n\t\t\t\tif (constraints.value) return constraints.value.audio || false;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tasync function _start() {\n\t\tif (!isSupported.value || stream.value) return;\n\t\tstream.value = await navigator.mediaDevices.getUserMedia({\n\t\t\tvideo: getDeviceOptions(\"video\"),\n\t\t\taudio: getDeviceOptions(\"audio\")\n\t\t});\n\t\treturn stream.value;\n\t}\n\tfunction _stop() {\n\t\tvar _stream$value;\n\t\t(_stream$value = stream.value) === null || _stream$value === void 0 || _stream$value.getTracks().forEach((t) => t.stop());\n\t\tstream.value = void 0;\n\t}\n\tfunction stop() {\n\t\t_stop();\n\t\tenabled.value = false;\n\t}\n\tasync function start() {\n\t\tawait _start();\n\t\tif (stream.value) enabled.value = true;\n\t\treturn stream.value;\n\t}\n\tasync function restart() {\n\t\t_stop();\n\t\treturn await start();\n\t}\n\twatch(enabled, (v) => {\n\t\tif (v) _start();\n\t\telse _stop();\n\t}, { immediate: true });\n\twatch(constraints, () => {\n\t\tif (autoSwitch.value && stream.value) restart();\n\t}, {\n\t\timmediate: true,\n\t\tdeep: true\n\t});\n\ttryOnScopeDispose(() => {\n\t\tstop();\n\t});\n\treturn {\n\t\tisSupported,\n\t\tstream,\n\t\tstart,\n\t\tstop,\n\t\trestart,\n\t\tconstraints,\n\t\tenabled,\n\t\tautoSwitch\n\t};\n}\n//#endregion\n//#region useVModel/index.ts\n/**\n* Shorthand for v-model binding, props + emit -> ref\n*\n* @see https://vueuse.org/useVModel\n* @param props\n* @param key (default 'modelValue')\n* @param emit\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useVModel(props, key, emit, options = {}) {\n\tvar _vm$$emit, _vm$proxy;\n\tconst { clone = false, passive = false, eventName, deep = false, defaultValue, shouldEmit } = options;\n\tconst vm = getCurrentInstance();\n\tconst _emit = emit || (vm === null || vm === void 0 ? void 0 : vm.emit) || (vm === null || vm === void 0 || (_vm$$emit = vm.$emit) === null || _vm$$emit === void 0 ? void 0 : _vm$$emit.bind(vm)) || (vm === null || vm === void 0 || (_vm$proxy = vm.proxy) === null || _vm$proxy === void 0 || (_vm$proxy = _vm$proxy.$emit) === null || _vm$proxy === void 0 ? void 0 : _vm$proxy.bind(vm === null || vm === void 0 ? void 0 : vm.proxy));\n\tlet event = eventName;\n\tif (!key) key = \"modelValue\";\n\tevent = event || `update:${key.toString()}`;\n\tconst cloneFn = (val) => !clone ? val : typeof clone === \"function\" ? clone(val) : cloneFnJSON(val);\n\tconst getValue = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue;\n\tconst triggerEmit = (value) => {\n\t\tif (shouldEmit) {\n\t\t\tif (shouldEmit(value)) _emit(event, value);\n\t\t} else _emit(event, value);\n\t};\n\tif (passive) {\n\t\tconst proxy = ref(getValue());\n\t\tlet isUpdating = false;\n\t\twatch(() => props[key], (v) => {\n\t\t\tif (!isUpdating) {\n\t\t\t\tisUpdating = true;\n\t\t\t\tproxy.value = cloneFn(v);\n\t\t\t\tnextTick(() => isUpdating = false);\n\t\t\t}\n\t\t});\n\t\twatch(proxy, (v) => {\n\t\t\tif (!isUpdating && (v !== props[key] || deep)) triggerEmit(v);\n\t\t}, { deep });\n\t\treturn proxy;\n\t} else return computed({\n\t\tget() {\n\t\t\treturn getValue();\n\t\t},\n\t\tset(value) {\n\t\t\ttriggerEmit(value);\n\t\t}\n\t});\n}\n//#endregion\n//#region useVModels/index.ts\n/**\n* Shorthand for props v-model binding. Think like `toRefs(props)` but changes will also emit out.\n*\n* @see https://vueuse.org/useVModels\n* @param props\n* @param emit\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useVModels(props, emit, options = {}) {\n\tconst ret = {};\n\tfor (const key in props) ret[key] = useVModel(props, key, emit, options);\n\treturn ret;\n}\n//#endregion\n//#region useVibrate/index.ts\nfunction getDefaultScheduler$1(options = {}) {\n\tconst { interval = 0 } = options;\n\tif (interval === 0) return;\n\treturn (fn) => useIntervalFn(fn, interval, {\n\t\timmediate: false,\n\t\timmediateCallback: false\n\t});\n}\n/**\n* Reactive vibrate\n*\n* @see https://vueuse.org/useVibrate\n* @see https://developer.mozilla.org/en-US/docs/Web/API/Vibration_API\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useVibrate(options) {\n\tconst { pattern = [], scheduler = getDefaultScheduler$1(options), navigator = defaultNavigator } = options || {};\n\tconst isSupported = /* @__PURE__ */ useSupported(() => typeof navigator !== \"undefined\" && \"vibrate\" in navigator);\n\tconst patternRef = toRef(pattern);\n\tconst vibrate = (pattern = patternRef.value) => {\n\t\tif (isSupported.value) navigator.vibrate(pattern);\n\t};\n\tconst intervalControls = scheduler === null || scheduler === void 0 ? void 0 : scheduler(vibrate);\n\tconst stop = () => {\n\t\tif (isSupported.value) navigator.vibrate(0);\n\t\tintervalControls === null || intervalControls === void 0 || intervalControls.pause();\n\t};\n\treturn {\n\t\tisSupported,\n\t\tpattern,\n\t\tintervalControls,\n\t\tvibrate,\n\t\tstop\n\t};\n}\n//#endregion\n//#region useVirtualList/index.ts\n/**\n* Please consider using [`vue-virtual-scroller`](https://github.com/Akryum/vue-virtual-scroller) if you are looking for more features.\n*/\nfunction useVirtualList(list, options) {\n\tconst { containerStyle, wrapperProps, scrollTo, calculateRange, currentList, containerRef } = \"itemHeight\" in options ? useVerticalVirtualList(options, list) : useHorizontalVirtualList(options, list);\n\treturn {\n\t\tlist: currentList,\n\t\tscrollTo,\n\t\tcontainerProps: {\n\t\t\tref: containerRef,\n\t\t\tonScroll: () => {\n\t\t\t\tcalculateRange();\n\t\t\t},\n\t\t\tstyle: containerStyle\n\t\t},\n\t\twrapperProps\n\t};\n}\nfunction useVirtualListResources(list) {\n\tconst containerRef = shallowRef(null);\n\tconst size = useElementSize(containerRef);\n\tconst currentList = ref([]);\n\tconst source = shallowRef(list);\n\treturn {\n\t\tstate: ref({\n\t\t\tstart: 0,\n\t\t\tend: 10\n\t\t}),\n\t\tsource,\n\t\tcurrentList,\n\t\tsize,\n\t\tcontainerRef\n\t};\n}\nfunction createGetViewCapacity(state, source, itemSize) {\n\treturn (containerSize) => {\n\t\tif (typeof itemSize === \"number\") return Math.ceil(containerSize / itemSize);\n\t\tconst { start = 0 } = state.value;\n\t\tlet sum = 0;\n\t\tlet capacity = 0;\n\t\tfor (let i = start; i < source.value.length; i++) {\n\t\t\tconst size = itemSize(i);\n\t\t\tsum += size;\n\t\t\tcapacity = i;\n\t\t\tif (sum > containerSize) break;\n\t\t}\n\t\treturn capacity - start;\n\t};\n}\nfunction createGetOffset(source, itemSize) {\n\treturn (scrollDirection) => {\n\t\tif (typeof itemSize === \"number\") return Math.floor(scrollDirection / itemSize) + 1;\n\t\tlet sum = 0;\n\t\tlet offset = 0;\n\t\tfor (let i = 0; i < source.value.length; i++) {\n\t\t\tconst size = itemSize(i);\n\t\t\tsum += size;\n\t\t\tif (sum >= scrollDirection) {\n\t\t\t\toffset = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn offset + 1;\n\t};\n}\nfunction createCalculateRange(type, overscan, getOffset, getViewCapacity, { containerRef, state, currentList, source }) {\n\treturn () => {\n\t\tconst element = containerRef.value;\n\t\tif (element) {\n\t\t\tconst offset = getOffset(type === \"vertical\" ? element.scrollTop : element.scrollLeft);\n\t\t\tconst viewCapacity = getViewCapacity(type === \"vertical\" ? element.clientHeight : element.clientWidth);\n\t\t\tconst from = offset - overscan;\n\t\t\tconst to = offset + viewCapacity + overscan;\n\t\t\tstate.value = {\n\t\t\t\tstart: from < 0 ? 0 : from,\n\t\t\t\tend: to > source.value.length ? source.value.length : to\n\t\t\t};\n\t\t\tcurrentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({\n\t\t\t\tdata: ele,\n\t\t\t\tindex: index + state.value.start\n\t\t\t}));\n\t\t}\n\t};\n}\nfunction createGetDistance(itemSize, source) {\n\treturn (index) => {\n\t\tif (typeof itemSize === \"number\") return index * itemSize;\n\t\treturn source.value.slice(0, index).reduce((sum, _, i) => sum + itemSize(i), 0);\n\t};\n}\nfunction useWatchForSizes(size, listRef, totalSize, containerRef, calculateRange) {\n\twatch([\n\t\tsize.width,\n\t\tsize.height,\n\t\tlistRef,\n\t\ttotalSize,\n\t\tcontainerRef\n\t], () => {\n\t\tcalculateRange();\n\t});\n}\nfunction createComputedTotalSize(itemSize, source) {\n\treturn computed(() => {\n\t\tif (typeof itemSize === \"number\") return source.value.length * itemSize;\n\t\treturn source.value.reduce((sum, _, index) => sum + itemSize(index), 0);\n\t});\n}\nconst scrollToDictionaryForElementScrollKey = {\n\thorizontal: \"scrollLeft\",\n\tvertical: \"scrollTop\"\n};\nconst scrollToDictionaryForElementScrollToKey = {\n\thorizontal: \"left\",\n\tvertical: \"top\"\n};\nconst defaultScrollToOptions = {\n\tbehavior: \"auto\",\n\tblock: \"start\",\n\tinline: \"nearest\"\n};\nfunction createScrollTo(type, calculateRange, getDistance, containerRef, itemSize) {\n\treturn (index, options = defaultScrollToOptions) => {\n\t\tif (!containerRef.value) return;\n\t\toptions = {\n\t\t\t...defaultScrollToOptions,\n\t\t\t...options\n\t\t};\n\t\tlet offset = 0;\n\t\tconst axisToCheck = options[type === \"horizontal\" ? \"inline\" : \"block\"];\n\t\tif (axisToCheck) {\n\t\t\tconst containerSize = type === \"horizontal\" ? containerRef.value.clientWidth : containerRef.value.clientHeight;\n\t\t\tconst fullItemSize = typeof itemSize === \"number\" ? itemSize : itemSize(index);\n\t\t\tif (axisToCheck === \"center\") offset = containerSize / 2 - fullItemSize / 2;\n\t\t\telse if (axisToCheck === \"end\") offset = containerSize - fullItemSize;\n\t\t\telse if (axisToCheck === \"nearest\") {\n\t\t\t\tconst containerScrollPosition = containerRef.value[scrollToDictionaryForElementScrollKey[type]];\n\t\t\t\tif (getDistance(index) > containerScrollPosition + containerSize / 2) offset = containerSize - fullItemSize;\n\t\t\t}\n\t\t}\n\t\tcontainerRef.value.scrollTo({\n\t\t\t[scrollToDictionaryForElementScrollToKey[type]]: getDistance(index) - offset,\n\t\t\tbehavior: options.behavior\n\t\t});\n\t\tcalculateRange();\n\t};\n}\nfunction useHorizontalVirtualList(options, list) {\n\tconst resources = useVirtualListResources(list);\n\tconst { state, source, currentList, size, containerRef } = resources;\n\tconst containerStyle = { overflowX: \"auto\" };\n\tconst { itemWidth, overscan = 5 } = options;\n\tconst getViewCapacity = createGetViewCapacity(state, source, itemWidth);\n\tconst calculateRange = createCalculateRange(\"horizontal\", overscan, createGetOffset(source, itemWidth), getViewCapacity, resources);\n\tconst getDistanceLeft = createGetDistance(itemWidth, source);\n\tconst offsetLeft = computed(() => getDistanceLeft(state.value.start));\n\tconst totalWidth = createComputedTotalSize(itemWidth, source);\n\tuseWatchForSizes(size, source, totalWidth, containerRef, calculateRange);\n\treturn {\n\t\tscrollTo: createScrollTo(\"horizontal\", calculateRange, getDistanceLeft, containerRef, itemWidth),\n\t\tcalculateRange,\n\t\twrapperProps: computed(() => {\n\t\t\treturn { style: {\n\t\t\t\theight: \"100%\",\n\t\t\t\twidth: `${totalWidth.value - offsetLeft.value}px`,\n\t\t\t\tmarginLeft: `${offsetLeft.value}px`,\n\t\t\t\tdisplay: \"flex\"\n\t\t\t} };\n\t\t}),\n\t\tcontainerStyle,\n\t\tcurrentList,\n\t\tcontainerRef\n\t};\n}\nfunction useVerticalVirtualList(options, list) {\n\tconst resources = useVirtualListResources(list);\n\tconst { state, source, currentList, size, containerRef } = resources;\n\tconst containerStyle = { overflowY: \"auto\" };\n\tconst { itemHeight, overscan = 5 } = options;\n\tconst getViewCapacity = createGetViewCapacity(state, source, itemHeight);\n\tconst calculateRange = createCalculateRange(\"vertical\", overscan, createGetOffset(source, itemHeight), getViewCapacity, resources);\n\tconst getDistanceTop = createGetDistance(itemHeight, source);\n\tconst offsetTop = computed(() => getDistanceTop(state.value.start));\n\tconst totalHeight = createComputedTotalSize(itemHeight, source);\n\tuseWatchForSizes(size, source, totalHeight, containerRef, calculateRange);\n\treturn {\n\t\tcalculateRange,\n\t\tscrollTo: createScrollTo(\"vertical\", calculateRange, getDistanceTop, containerRef, itemHeight),\n\t\tcontainerStyle,\n\t\twrapperProps: computed(() => {\n\t\t\treturn { style: {\n\t\t\t\twidth: \"100%\",\n\t\t\t\theight: `${totalHeight.value - offsetTop.value}px`,\n\t\t\t\tmarginTop: `${offsetTop.value}px`\n\t\t\t} };\n\t\t}),\n\t\tcurrentList,\n\t\tcontainerRef\n\t};\n}\n//#endregion\n//#region useWakeLock/index.ts\n/**\n* Reactive Screen Wake Lock API.\n*\n* @see https://vueuse.org/useWakeLock\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useWakeLock(options = {}) {\n\tconst { navigator = defaultNavigator, document = defaultDocument } = options;\n\tconst requestedType = shallowRef(false);\n\tconst sentinel = shallowRef(null);\n\tconst documentVisibility = useDocumentVisibility({ document });\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && \"wakeLock\" in navigator);\n\tconst isActive = computed(() => !!sentinel.value && documentVisibility.value === \"visible\");\n\tif (isSupported.value) {\n\t\tuseEventListener(sentinel, \"release\", () => {\n\t\t\tvar _sentinel$value$type, _sentinel$value;\n\t\t\trequestedType.value = (_sentinel$value$type = (_sentinel$value = sentinel.value) === null || _sentinel$value === void 0 ? void 0 : _sentinel$value.type) !== null && _sentinel$value$type !== void 0 ? _sentinel$value$type : false;\n\t\t}, { passive: true });\n\t\twhenever(() => documentVisibility.value === \"visible\" && (document === null || document === void 0 ? void 0 : document.visibilityState) === \"visible\" && requestedType.value, (type) => {\n\t\t\trequestedType.value = false;\n\t\t\tforceRequest(type);\n\t\t});\n\t}\n\tasync function forceRequest(type) {\n\t\tvar _sentinel$value2;\n\t\tawait ((_sentinel$value2 = sentinel.value) === null || _sentinel$value2 === void 0 ? void 0 : _sentinel$value2.release());\n\t\tsentinel.value = isSupported.value ? await navigator.wakeLock.request(type) : null;\n\t}\n\tasync function request(type) {\n\t\tif (documentVisibility.value === \"visible\") await forceRequest(type);\n\t\telse requestedType.value = type;\n\t}\n\tasync function release() {\n\t\trequestedType.value = false;\n\t\tconst s = sentinel.value;\n\t\tsentinel.value = null;\n\t\tawait (s === null || s === void 0 ? void 0 : s.release());\n\t}\n\ttryOnScopeDispose(() => {\n\t\trelease();\n\t});\n\treturn {\n\t\tsentinel,\n\t\tisSupported,\n\t\tisActive,\n\t\trequest,\n\t\tforceRequest,\n\t\trelease\n\t};\n}\n//#endregion\n//#region useWebNotification/index.ts\n/**\n* Reactive useWebNotification\n*\n* @see https://vueuse.org/useWebNotification\n* @see https://developer.mozilla.org/en-US/docs/Web/API/notification\n*/\nfunction useWebNotification(options = {}) {\n\tconst { window = defaultWindow, requestPermissions: _requestForPermissions = true } = options;\n\tconst defaultWebNotificationOptions = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => {\n\t\tif (!window || !(\"Notification\" in window)) return false;\n\t\tif (Notification.permission === \"granted\") return true;\n\t\ttry {\n\t\t\tconst notification = new Notification(\"\");\n\t\t\tnotification.onshow = () => {\n\t\t\t\tnotification.close();\n\t\t\t};\n\t\t} catch (e) {\n\t\t\tif (e.name === \"TypeError\") return false;\n\t\t}\n\t\treturn true;\n\t});\n\tconst permissionGranted = shallowRef(isSupported.value && \"permission\" in Notification && Notification.permission === \"granted\");\n\tconst notification = shallowRef(null);\n\tconst ensurePermissions = async () => {\n\t\tif (!isSupported.value) return;\n\t\tif (!permissionGranted.value && Notification.permission !== \"denied\") {\n\t\t\tif (await Notification.requestPermission() === \"granted\") permissionGranted.value = true;\n\t\t}\n\t\treturn permissionGranted.value;\n\t};\n\tconst { on: onClick, trigger: clickTrigger } = createEventHook();\n\tconst { on: onShow, trigger: showTrigger } = createEventHook();\n\tconst { on: onError, trigger: errorTrigger } = createEventHook();\n\tconst { on: onClose, trigger: closeTrigger } = createEventHook();\n\tconst show = async (overrides) => {\n\t\tif (!isSupported.value || !permissionGranted.value) return;\n\t\tconst options = Object.assign({}, defaultWebNotificationOptions, overrides);\n\t\tnotification.value = new Notification(options.title || \"\", options);\n\t\tnotification.value.onclick = clickTrigger;\n\t\tnotification.value.onshow = showTrigger;\n\t\tnotification.value.onerror = errorTrigger;\n\t\tnotification.value.onclose = closeTrigger;\n\t\treturn notification.value;\n\t};\n\tconst close = () => {\n\t\tif (notification.value) notification.value.close();\n\t\tnotification.value = null;\n\t};\n\tif (_requestForPermissions) tryOnMounted(ensurePermissions);\n\ttryOnScopeDispose(close);\n\tif (isSupported.value && window) {\n\t\tconst document = window.document;\n\t\tuseEventListener(document, \"visibilitychange\", (e) => {\n\t\t\te.preventDefault();\n\t\t\tif (document.visibilityState === \"visible\") close();\n\t\t});\n\t}\n\treturn {\n\t\tisSupported,\n\t\tnotification,\n\t\tensurePermissions,\n\t\tpermissionGranted,\n\t\tshow,\n\t\tclose,\n\t\tonClick,\n\t\tonShow,\n\t\tonError,\n\t\tonClose\n\t};\n}\n//#endregion\n//#region useWebSocket/index.ts\nconst DEFAULT_PING_MESSAGE = \"ping\";\nfunction resolveNestedOptions(options) {\n\tif (options === true) return {};\n\treturn options;\n}\nfunction getDefaultScheduler(options) {\n\tif (\"interval\" in options) {\n\t\tconst { interval = 1e3 } = options;\n\t\treturn (cb) => useIntervalFn(cb, interval, { immediate: false });\n\t}\n\treturn (cb) => useIntervalFn(cb, 1e3, { immediate: false });\n}\n/**\n* Reactive WebSocket client.\n*\n* @see https://vueuse.org/useWebSocket\n* @param url\n*/\nfunction useWebSocket(url, options = {}) {\n\tconst { onConnected, onDisconnected, onError, onMessage, immediate = true, autoConnect = true, autoClose = true, protocols = [] } = options;\n\tconst data = shallowRef(null);\n\tconst status = shallowRef(\"CLOSED\");\n\tconst wsRef = shallowRef();\n\tconst urlRef = toRef(url);\n\tlet heartbeatPause;\n\tlet heartbeatResume;\n\tlet explicitlyClosed = false;\n\tlet retried = 0;\n\tlet bufferedData = [];\n\tlet retryTimeout;\n\tlet pongTimeoutWait;\n\tconst _sendBuffer = () => {\n\t\tif (bufferedData.length && wsRef.value && status.value === \"OPEN\") {\n\t\t\tfor (const buffer of bufferedData) wsRef.value.send(buffer);\n\t\t\tbufferedData = [];\n\t\t}\n\t};\n\tconst resetRetry = () => {\n\t\tif (retryTimeout != null) {\n\t\t\tclearTimeout(retryTimeout);\n\t\t\tretryTimeout = void 0;\n\t\t}\n\t};\n\tconst resetHeartbeat = () => {\n\t\tclearTimeout(pongTimeoutWait);\n\t\tpongTimeoutWait = void 0;\n\t};\n\tconst close = (code = 1e3, reason) => {\n\t\tresetRetry();\n\t\tif (!isClient && !isWorker || !wsRef.value) return;\n\t\texplicitlyClosed = true;\n\t\tresetHeartbeat();\n\t\theartbeatPause === null || heartbeatPause === void 0 || heartbeatPause();\n\t\twsRef.value.close(code, reason);\n\t\twsRef.value = void 0;\n\t\tstatus.value = \"CLOSED\";\n\t};\n\tconst send = (data, useBuffer = true) => {\n\t\tif (!wsRef.value || status.value !== \"OPEN\") {\n\t\t\tif (useBuffer) bufferedData.push(data);\n\t\t\treturn false;\n\t\t}\n\t\t_sendBuffer();\n\t\twsRef.value.send(data);\n\t\treturn true;\n\t};\n\tconst _init = () => {\n\t\tif (explicitlyClosed || typeof urlRef.value === \"undefined\") return;\n\t\tconst ws = new WebSocket(urlRef.value, protocols);\n\t\twsRef.value = ws;\n\t\tstatus.value = \"CONNECTING\";\n\t\tws.onopen = () => {\n\t\t\tif (wsRef.value !== ws) return;\n\t\t\tstatus.value = \"OPEN\";\n\t\t\tretried = 0;\n\t\t\tonConnected === null || onConnected === void 0 || onConnected(ws);\n\t\t\theartbeatResume === null || heartbeatResume === void 0 || heartbeatResume();\n\t\t\t_sendBuffer();\n\t\t};\n\t\tws.onclose = (ev) => {\n\t\t\tif (wsRef.value === ws) status.value = \"CLOSED\";\n\t\t\tresetHeartbeat();\n\t\t\theartbeatPause === null || heartbeatPause === void 0 || heartbeatPause();\n\t\t\tonDisconnected === null || onDisconnected === void 0 || onDisconnected(ws, ev);\n\t\t\tif (!explicitlyClosed && options.autoReconnect && (wsRef.value == null || ws === wsRef.value)) {\n\t\t\t\tconst { retries = -1, delay = 1e3, onFailed } = resolveNestedOptions(options.autoReconnect);\n\t\t\t\tif ((typeof retries === \"function\" ? retries : () => typeof retries === \"number\" && (retries < 0 || retried < retries))(retried)) {\n\t\t\t\t\tretried += 1;\n\t\t\t\t\tconst delayTime = typeof delay === \"function\" ? delay(retried) : delay;\n\t\t\t\t\tretryTimeout = setTimeout(_init, delayTime);\n\t\t\t\t} else onFailed === null || onFailed === void 0 || onFailed();\n\t\t\t}\n\t\t};\n\t\tws.onerror = (e) => {\n\t\t\tonError === null || onError === void 0 || onError(ws, e);\n\t\t};\n\t\tws.onmessage = (e) => {\n\t\t\tif (options.heartbeat) {\n\t\t\t\tresetHeartbeat();\n\t\t\t\tconst { message = DEFAULT_PING_MESSAGE, responseMessage = message } = resolveNestedOptions(options.heartbeat);\n\t\t\t\tif (e.data === toValue(responseMessage)) return;\n\t\t\t}\n\t\t\tdata.value = e.data;\n\t\t\tonMessage === null || onMessage === void 0 || onMessage(ws, e);\n\t\t};\n\t};\n\tif (options.heartbeat) {\n\t\tconst { message = DEFAULT_PING_MESSAGE, scheduler = getDefaultScheduler(resolveNestedOptions(options.heartbeat)), pongTimeout = 1e3 } = resolveNestedOptions(options.heartbeat);\n\t\tconst { pause, resume } = scheduler(() => {\n\t\t\tsend(toValue(message), false);\n\t\t\tif (pongTimeoutWait != null) return;\n\t\t\tpongTimeoutWait = setTimeout(() => {\n\t\t\t\tclose();\n\t\t\t\texplicitlyClosed = false;\n\t\t\t}, pongTimeout);\n\t\t});\n\t\theartbeatPause = pause;\n\t\theartbeatResume = resume;\n\t}\n\tif (autoClose) {\n\t\tif (isClient) useEventListener(\"beforeunload\", () => close(), { passive: true });\n\t\ttryOnScopeDispose(close);\n\t}\n\tconst open = () => {\n\t\tif (!isClient && !isWorker) return;\n\t\tclose();\n\t\texplicitlyClosed = false;\n\t\tretried = 0;\n\t\t_init();\n\t};\n\tif (immediate) open();\n\tif (autoConnect) watch(urlRef, open);\n\treturn {\n\t\tdata,\n\t\tstatus,\n\t\tclose,\n\t\tsend,\n\t\topen,\n\t\tws: wsRef\n\t};\n}\n//#endregion\n//#region useWebWorker/index.ts\nfunction useWebWorker(arg0, workerOptions, options) {\n\tconst { window = defaultWindow } = options !== null && options !== void 0 ? options : {};\n\tconst data = shallowRef(null);\n\tconst worker = shallowRef();\n\tconst post = (...args) => {\n\t\tif (!worker.value) return;\n\t\tworker.value.postMessage(...args);\n\t};\n\tconst terminate = function terminate() {\n\t\tif (!worker.value) return;\n\t\tworker.value.terminate();\n\t};\n\tif (window) {\n\t\tif (typeof arg0 === \"string\") worker.value = new Worker(arg0, workerOptions);\n\t\telse if (typeof arg0 === \"function\") worker.value = arg0();\n\t\telse worker.value = arg0;\n\t\tworker.value.onmessage = (e) => {\n\t\t\tdata.value = e.data;\n\t\t};\n\t\ttryOnScopeDispose(() => {\n\t\t\tif (worker.value) worker.value.terminate();\n\t\t});\n\t}\n\treturn {\n\t\tdata,\n\t\tpost,\n\t\tterminate,\n\t\tworker\n\t};\n}\n//#endregion\n//#region useWebWorkerFn/lib/depsParser.ts\n/**\n*\n* Concatenates the dependencies into a comma separated string.\n* this string will then be passed as an argument to the \"importScripts\" function\n*\n* @param deps array of string\n* @param localDeps array of function\n* @returns a string composed by the concatenation of the array\n* elements \"deps\" and \"importScripts\".\n*\n* @example\n* depsParser(['demo1', 'demo2']) // return importScripts('demo1', 'demo2')\n*/\nfunction depsParser(deps, localDeps) {\n\tif (deps.length === 0 && localDeps.length === 0) return \"\";\n\tconst depsString = deps.map((dep) => `'${dep}'`).toString();\n\tconst depsFunctionString = localDeps.filter((dep) => typeof dep === \"function\").map((fn) => {\n\t\tconst str = fn.toString();\n\t\tif (str.trim().startsWith(\"function\")) return str;\n\t\telse return `const ${fn.name} = ${str}`;\n\t}).join(\";\");\n\tconst importString = `importScripts(${depsString});`;\n\treturn `${depsString.trim() === \"\" ? \"\" : importString} ${depsFunctionString}`;\n}\n//#endregion\n//#region useWebWorkerFn/lib/jobRunner.ts\n/**\n* This function accepts as a parameter a function \"userFunc\"\n* And as a result returns an anonymous function.\n* This anonymous function, accepts as arguments,\n* the parameters to pass to the function \"useArgs\" and returns a Promise\n* This function can be used as a wrapper, only inside a Worker\n* because it depends by \"postMessage\".\n*\n* @param userFunc {Function} fn the function to run with web worker\n*\n* @returns returns a function that accepts the parameters\n* to be passed to the \"userFunc\" function\n*/\nfunction jobRunner(userFunc) {\n\treturn (e) => {\n\t\tconst userFuncArgs = e.data[0];\n\t\treturn Promise.resolve(userFunc.apply(void 0, userFuncArgs)).then((result) => {\n\t\t\tpostMessage([\"SUCCESS\", result]);\n\t\t}).catch((error) => {\n\t\t\tpostMessage([\"ERROR\", error]);\n\t\t});\n\t};\n}\n//#endregion\n//#region useWebWorkerFn/lib/createWorkerBlobUrl.ts\n/**\n* Converts the \"fn\" function into the syntax needed to be executed within a web worker\n*\n* @param fn the function to run with web worker\n* @param deps array of strings, imported into the worker through \"importScripts\"\n* @param localDeps array of function, local dependencies\n*\n* @returns a blob url, containing the code of \"fn\" as a string\n*\n* @example\n* createWorkerBlobUrl((a,b) => a+b, [])\n* // return \"onmessage=return Promise.resolve((a,b) => a + b)\n* .then(postMessage(['SUCCESS', result]))\n* .catch(postMessage(['ERROR', error])\"\n*/\nfunction createWorkerBlobUrl(fn, deps, localDeps) {\n\tconst blobCode = `${depsParser(deps, localDeps)}; onmessage=(${jobRunner})(${fn})`;\n\tconst blob = new Blob([blobCode], { type: \"text/javascript\" });\n\treturn URL.createObjectURL(blob);\n}\n//#endregion\n//#region useWebWorkerFn/index.ts\n/**\n* Run expensive function without blocking the UI, using a simple syntax that makes use of Promise.\n*\n* @see https://vueuse.org/useWebWorkerFn\n* @param fn\n* @param options\n*/\nfunction useWebWorkerFn(fn, options = {}) {\n\tconst { dependencies = [], localDependencies = [], timeout, window = defaultWindow } = options;\n\tlet worker;\n\tconst workerStatus = shallowRef(\"PENDING\");\n\tconst promise = shallowRef({});\n\tconst timeoutId = shallowRef();\n\tconst workerTerminate = (status = \"PENDING\") => {\n\t\tif (worker && worker._url && window) {\n\t\t\tworker.terminate();\n\t\t\tURL.revokeObjectURL(worker._url);\n\t\t\tpromise.value = {};\n\t\t\tworker = void 0;\n\t\t\twindow.clearTimeout(timeoutId.value);\n\t\t\tworkerStatus.value = status;\n\t\t}\n\t};\n\tworkerTerminate();\n\ttryOnScopeDispose(workerTerminate);\n\tconst generateWorker = () => {\n\t\tconst blobUrl = createWorkerBlobUrl(fn, dependencies, localDependencies);\n\t\tconst newWorker = new Worker(blobUrl);\n\t\tnewWorker._url = blobUrl;\n\t\tnewWorker.onmessage = (e) => {\n\t\t\tconst { resolve = () => {}, reject = () => {} } = promise.value;\n\t\t\tconst [status, result] = e.data;\n\t\t\tswitch (status) {\n\t\t\t\tcase \"SUCCESS\":\n\t\t\t\t\tresolve(result);\n\t\t\t\t\tworkerTerminate(status);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treject(result);\n\t\t\t\t\tworkerTerminate(\"ERROR\");\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\t\tnewWorker.onerror = (e) => {\n\t\t\tconst { reject = () => {} } = promise.value;\n\t\t\te.preventDefault();\n\t\t\treject(e);\n\t\t\tworkerTerminate(\"ERROR\");\n\t\t};\n\t\tif (timeout) timeoutId.value = setTimeout(workerTerminate, timeout, \"TIMEOUT_EXPIRED\");\n\t\treturn newWorker;\n\t};\n\tconst callWorker = (...fnArgs) => new Promise((resolve, reject) => {\n\t\tpromise.value = {\n\t\t\tresolve,\n\t\t\treject\n\t\t};\n\t\tworker === null || worker === void 0 || worker.postMessage([[...fnArgs]]);\n\t\tworkerStatus.value = \"RUNNING\";\n\t});\n\tconst workerFn = (...fnArgs) => {\n\t\tif (workerStatus.value === \"RUNNING\") {\n\t\t\tconsole.error(\"[useWebWorkerFn] You can only run one instance of the worker at a time.\");\n\t\t\treturn Promise.reject();\n\t\t}\n\t\tworker = generateWorker();\n\t\treturn callWorker(...fnArgs);\n\t};\n\treturn {\n\t\tworkerFn,\n\t\tworkerStatus,\n\t\tworkerTerminate\n\t};\n}\n//#endregion\n//#region useWindowFocus/index.ts\n/**\n* Reactively track window focus with `window.onfocus` and `window.onblur`.\n*\n* @see https://vueuse.org/useWindowFocus\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useWindowFocus(options = {}) {\n\tconst { window = defaultWindow } = options;\n\tif (!window) return shallowRef(false);\n\tconst focused = shallowRef(window.document.hasFocus());\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(window, \"blur\", () => {\n\t\tfocused.value = false;\n\t}, listenerOptions);\n\tuseEventListener(window, \"focus\", () => {\n\t\tfocused.value = true;\n\t}, listenerOptions);\n\treturn focused;\n}\n//#endregion\n//#region useWindowScroll/index.ts\n/**\n* Reactive window scroll.\n*\n* @see https://vueuse.org/useWindowScroll\n* @param options\n*/\nfunction useWindowScroll(options = {}) {\n\tconst { window = defaultWindow, ...rest } = options;\n\treturn useScroll(window, rest);\n}\n//#endregion\n//#region useWindowSize/index.ts\n/**\n* Reactive window size.\n*\n* @see https://vueuse.org/useWindowSize\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useWindowSize(options = {}) {\n\tconst { window = defaultWindow, initialWidth = Number.POSITIVE_INFINITY, initialHeight = Number.POSITIVE_INFINITY, listenOrientation = true, includeScrollbar = true, type = \"inner\" } = options;\n\tconst width = shallowRef(initialWidth);\n\tconst height = shallowRef(initialHeight);\n\tconst update = () => {\n\t\tif (window) if (type === \"outer\") {\n\t\t\twidth.value = window.outerWidth;\n\t\t\theight.value = window.outerHeight;\n\t\t} else if (type === \"visual\" && window.visualViewport) {\n\t\t\tconst { width: visualViewportWidth, height: visualViewportHeight, scale } = window.visualViewport;\n\t\t\twidth.value = Math.round(visualViewportWidth * scale);\n\t\t\theight.value = Math.round(visualViewportHeight * scale);\n\t\t} else if (includeScrollbar) {\n\t\t\twidth.value = window.innerWidth;\n\t\t\theight.value = window.innerHeight;\n\t\t} else {\n\t\t\twidth.value = window.document.documentElement.clientWidth;\n\t\t\theight.value = window.document.documentElement.clientHeight;\n\t\t}\n\t};\n\tupdate();\n\ttryOnMounted(update);\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(\"resize\", update, listenerOptions);\n\tif (window && type === \"visual\" && window.visualViewport) useEventListener(window.visualViewport, \"resize\", update, listenerOptions);\n\tif (listenOrientation) watch(useMediaQuery(\"(orientation: portrait)\"), () => update());\n\treturn {\n\t\twidth,\n\t\theight\n\t};\n}\n//#endregion\nexport { DefaultMagicKeysAliasMap, StorageSerializers, TransitionPresets, 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, formatTimeAgoIntl, formatTimeAgoIntlParts, getSSRHandler, isFocusedElementEditable, isTypedCharValid, mapGamepadToXbox360Controller, onClickOutside, onElementRemoval, onKeyDown, onKeyPressed, onKeyStroke, onKeyUp, onLongPress, onStartTyping, provideSSRWidth, setSSRHandler, templateRef, transition, unrefElement, useActiveElement, useAnimate, useAsyncQueue, useAsyncState, useBase64, useBattery, useBluetooth, useBreakpoints, useBroadcastChannel, useBrowserLocation, useCached, useClipboard, useClipboardItems, useCloned, useColorMode, useConfirmDialog, useCountdown, useCssSupports, useCssVar, useCurrentElement, useCycleList, useDark, useDebouncedRefHistory, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDisplayMedia, useDocumentVisibility, useDraggable, useDropZone, useElementBounding, useElementByPoint, useElementHover, useElementOverflow, 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, useTimeAgoIntl, useTimeoutPoll, useTimestamp, useTitle, useTransition, useUrlSearchParams, useUserMedia, useVModel, useVModels, useVibrate, useVirtualList, useWakeLock, useWebNotification, useWebSocket, useWebWorker, useWebWorkerFn, useWindowFocus, useWindowScroll, useWindowSize };\n","import { computed } from 'vue'\nimport type { ComputedRef, MaybeRefOrGetter } from 'vue'\nimport { toValue } from 'vue'\nimport { useBreakpoints } from '@vueuse/core'\nimport isString from 'lodash/isString'\n\nimport { BrandMode } from '@/enums'\nimport type { BrandExpansionStyle } from '@/types'\n\n// Intrinsic SVG widths (in user units) for each brand mode, at the reference\n// height of 200. They double as the responsive breakpoints below: a brand\n// wider than the viewport switches to a fluid width.\nconst BRAND_MODE_WIDTH: Readonly<Record<BrandMode, number>> = Object.freeze({\n  [BrandMode.Short]: 401.256,\n  [BrandMode.Medium]: 901.24,\n  [BrandMode.Long]: 1047.01\n})\n\n// The SVG viewBoxes are authored at this height; widths scale proportionally.\nconst REFERENCE_HEIGHT = 200\n\n/**\n * Reactive options for {@link useBrandExpansion}. They mirror the\n * `BrandExpansion` component props that drive its geometry.\n */\nexport interface UseBrandExpansionOptions {\n  /**\n   * Logo height, as a number of pixels or a CSS-like string (e.g. `\"70px\"`).\n   */\n  size: MaybeRefOrGetter<number | string>\n  /**\n   * Which logo variation is displayed, selecting the matching intrinsic width.\n   */\n  mode: MaybeRefOrGetter<BrandMode>\n  /**\n   * Monochromatic logo color, applied through a CSS custom property.\n   */\n  color: MaybeRefOrGetter<string | null>\n  /**\n   * Logo background color.\n   */\n  background: MaybeRefOrGetter<string | null>\n  /**\n   * When true, the logo shrinks to fit a viewport narrower than its intrinsic\n   * width; otherwise it keeps its computed pixel width.\n   */\n  responsive: MaybeRefOrGetter<boolean>\n}\n\n/**\n * Reactive API returned by {@link useBrandExpansion}.\n */\nexport interface UseBrandExpansion {\n  width: ComputedRef<string>\n  height: ComputedRef<string>\n  style: ComputedRef<BrandExpansionStyle>\n}\n\n/**\n * Derives the geometry and inline style for the `BrandExpansion` logo: scales\n * the mode-specific SVG width to the requested height, falls back to a fluid\n * width when responsive mode meets a viewport narrower than the logo, and\n * exposes the color/background custom properties.\n *\n * @param options - Reactive geometry options (see {@link UseBrandExpansionOptions}).\n * @returns The {@link UseBrandExpansion} API: `width` and `height` CSS values\n *   for the SVG, plus the `style` binding for the host element.\n * @example\n * import { toRef } from 'vue'\n * import { useBrandExpansion } from '@/composables/useBrandExpansion'\n *\n * const { width, height, style } = useBrandExpansion({\n *   size: toRef(props, 'size'),\n *   mode: toRef(props, 'mode'),\n *   color: toRef(props, 'color'),\n *   background: toRef(props, 'background'),\n *   responsive: toRef(props, 'responsive')\n * })\n */\nexport function useBrandExpansion(\n  options: UseBrandExpansionOptions\n): UseBrandExpansion {\n  const { size, mode, color, background, responsive } = options\n\n  // The breakpoints match each mode's intrinsic width so we can ask whether the\n  // viewport is too narrow to hold the logo at its natural size.\n  const breakpoints = useBreakpoints(BRAND_MODE_WIDTH)\n\n  const baseWidth = computed((): number => {\n    return BRAND_MODE_WIDTH[toValue(mode)]\n  })\n\n  const sizeAsNumber = computed((): number => {\n    const value = toValue(size)\n    return isString(value) ? parseInt(value) : value\n  })\n\n  // NOTE: `smallerOrEqual` returns a ComputedRef, which is always truthy when\n  // used as a condition. The original component relied on this object directly,\n  // so a responsive brand always reports a fluid width regardless of the actual\n  // breakpoint. Behavior is preserved here on purpose; fixing it (by reading\n  // `.value`) would change the public rendering and belongs in a separate change.\n  const viewportSmallerThanLogo = computed((): boolean => {\n    return Boolean(breakpoints.smallerOrEqual(toValue(mode)))\n  })\n\n  const width = computed((): string => {\n    if (toValue(responsive) && viewportSmallerThanLogo.value) {\n      return '100%'\n    }\n    return `${(baseWidth.value / REFERENCE_HEIGHT) * sizeAsNumber.value}px`\n  })\n\n  const height = computed((): string => {\n    return `${sizeAsNumber.value}px`\n  })\n\n  const style = computed((): BrandExpansionStyle => {\n    return {\n      '--monochrome-color': toValue(color) ?? undefined,\n      'background': toValue(background) ?? undefined\n    }\n  })\n\n  return { width, height, style }\n}\n\nexport default useBrandExpansion\n","<template>\n  <span\n    class=\"brand-expansion\"\n    :style=\"style\"\n    :class=\"{\n      'brand-expansion--dark': dark,\n      'brand-expansion--animated': animated\n    }\"\n  >\n    <component\n      :is=\"modeComponent\"\n      :width=\"width\"\n      :height=\"height\"\n    />\n  </span>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, toRef } from 'vue'\n\nimport BrandExpansionShort from './BrandExpansionShort.vue'\nimport BrandExpansionMedium from './BrandExpansionMedium.vue'\nimport BrandExpansionLong from './BrandExpansionLong.vue'\nimport { BrandMode } from '@/enums'\nimport { useBrandExpansion } from '@/composables/useBrandExpansion'\n\nconst MODE_COMPONENTS = {\n  [BrandMode.Short]: BrandExpansionShort,\n  [BrandMode.Medium]: BrandExpansionMedium,\n  [BrandMode.Long]: BrandExpansionLong\n}\n\n/**\n * A component to create variations of ICIJ logo with text\n */\ndefineOptions({\n  name: 'BrandExpansion'\n})\n\nexport interface BrandExpansionProps {\n  /**\n   * Add a balancing effect to the globe\n   */\n  animated?: boolean\n  /**\n   * Monochromatic logo's color\n   */\n  color?: string\n  /**\n   * Logo's background color\n   */\n  background?: string\n  /**\n   * Logo's size\n   */\n  size?: number | string\n  /**\n   * Brand mode (\"short\", \"medium\", \"long\")\n   */\n  mode?: BrandMode\n  /**\n   * Reverse color of the main text to white if no `color` is given\n   */\n  dark?: boolean\n  /**\n   * If true, it resizes the brand as the display downsize.\n   * If false, the brand keep the same size.\n   */\n  responsive?: boolean\n}\n\nconst props = withDefaults(defineProps<BrandExpansionProps>(), {\n  animated: false,\n  color: undefined,\n  background: undefined,\n  size: '70px',\n  mode: BrandMode.Short,\n  dark: false,\n  responsive: false\n})\n\nconst { width, height, style } = useBrandExpansion({\n  size: toRef(props, 'size'),\n  mode: toRef(props, 'mode'),\n  color: computed(() => props.color ?? null),\n  background: computed(() => props.background ?? null),\n  responsive: toRef(props, 'responsive')\n})\n\nconst modeComponent = computed(() => MODE_COMPONENTS[props.mode])\n</script>\n\n<style scoped lang=\"scss\">\n@keyframes balancing-plate {\n  0% {\n    transform: rotate(0deg);\n  }\n  25% {\n    transform: rotate(7deg);\n  }\n  50% {\n    transform: rotate(-7deg);\n  }\n  75% {\n    transform: rotate(0deg);\n  }\n  100% {\n    transform: rotate(0deg);\n  }\n}\n\n@keyframes balancing-globe {\n  0% {\n    transform: rotate(0deg);\n  }\n  35% {\n    transform: rotate(7deg);\n  }\n  65% {\n    transform: rotate(-7deg);\n  }\n  85% {\n    transform: rotate(3deg);\n  }\n  100% {\n    transform: rotate(0deg);\n  }\n}\n\n.brand-expansion {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n\n  // The SVG markup is rendered by a child component\n  // (BrandExpansionShort/Medium/Long.vue), so these selectors need :deep()\n  // to pierce past that component's own scoped-style boundary.\n  :deep(svg) {\n    .triangle,\n    .globe,\n    .secondary-text {\n      fill: var(--monochrome-color, #f00);\n    }\n\n    .plate {\n      fill: var(--monochrome-color, #999);\n    }\n\n    .main-text {\n      fill: var(--monochrome-color, #000);\n    }\n  }\n\n  &--dark :deep(svg) .main-text {\n    fill: var(--monochrome-color, #fff);\n  }\n\n  &--animated :deep(svg) {\n    .plate {\n      animation: balancing-plate 5s infinite cubic-bezier(0.37, 0, 0.63, 1);\n    }\n    .globe {\n      animation: balancing-globe 5s infinite cubic-bezier(0.37, 0, 0.63, 1);\n    }\n\n    .plate,\n    .globe {\n      transform: rotate(0deg);\n      transform-origin: bottom center;\n      transform-box: fill-box;\n    }\n  }\n}\n</style>\n","<template>\n  <span\n    class=\"brand-expansion\"\n    :style=\"style\"\n    :class=\"{\n      'brand-expansion--dark': dark,\n      'brand-expansion--animated': animated\n    }\"\n  >\n    <component\n      :is=\"modeComponent\"\n      :width=\"width\"\n      :height=\"height\"\n    />\n  </span>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, toRef } from 'vue'\n\nimport BrandExpansionShort from './BrandExpansionShort.vue'\nimport BrandExpansionMedium from './BrandExpansionMedium.vue'\nimport BrandExpansionLong from './BrandExpansionLong.vue'\nimport { BrandMode } from '@/enums'\nimport { useBrandExpansion } from '@/composables/useBrandExpansion'\n\nconst MODE_COMPONENTS = {\n  [BrandMode.Short]: BrandExpansionShort,\n  [BrandMode.Medium]: BrandExpansionMedium,\n  [BrandMode.Long]: BrandExpansionLong\n}\n\n/**\n * A component to create variations of ICIJ logo with text\n */\ndefineOptions({\n  name: 'BrandExpansion'\n})\n\nexport interface BrandExpansionProps {\n  /**\n   * Add a balancing effect to the globe\n   */\n  animated?: boolean\n  /**\n   * Monochromatic logo's color\n   */\n  color?: string\n  /**\n   * Logo's background color\n   */\n  background?: string\n  /**\n   * Logo's size\n   */\n  size?: number | string\n  /**\n   * Brand mode (\"short\", \"medium\", \"long\")\n   */\n  mode?: BrandMode\n  /**\n   * Reverse color of the main text to white if no `color` is given\n   */\n  dark?: boolean\n  /**\n   * If true, it resizes the brand as the display downsize.\n   * If false, the brand keep the same size.\n   */\n  responsive?: boolean\n}\n\nconst props = withDefaults(defineProps<BrandExpansionProps>(), {\n  animated: false,\n  color: undefined,\n  background: undefined,\n  size: '70px',\n  mode: BrandMode.Short,\n  dark: false,\n  responsive: false\n})\n\nconst { width, height, style } = useBrandExpansion({\n  size: toRef(props, 'size'),\n  mode: toRef(props, 'mode'),\n  color: computed(() => props.color ?? null),\n  background: computed(() => props.background ?? null),\n  responsive: toRef(props, 'responsive')\n})\n\nconst modeComponent = computed(() => MODE_COMPONENTS[props.mode])\n</script>\n\n<style scoped lang=\"scss\">\n@keyframes balancing-plate {\n  0% {\n    transform: rotate(0deg);\n  }\n  25% {\n    transform: rotate(7deg);\n  }\n  50% {\n    transform: rotate(-7deg);\n  }\n  75% {\n    transform: rotate(0deg);\n  }\n  100% {\n    transform: rotate(0deg);\n  }\n}\n\n@keyframes balancing-globe {\n  0% {\n    transform: rotate(0deg);\n  }\n  35% {\n    transform: rotate(7deg);\n  }\n  65% {\n    transform: rotate(-7deg);\n  }\n  85% {\n    transform: rotate(3deg);\n  }\n  100% {\n    transform: rotate(0deg);\n  }\n}\n\n.brand-expansion {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n\n  // The SVG markup is rendered by a child component\n  // (BrandExpansionShort/Medium/Long.vue), so these selectors need :deep()\n  // to pierce past that component's own scoped-style boundary.\n  :deep(svg) {\n    .triangle,\n    .globe,\n    .secondary-text {\n      fill: var(--monochrome-color, #f00);\n    }\n\n    .plate {\n      fill: var(--monochrome-color, #999);\n    }\n\n    .main-text {\n      fill: var(--monochrome-color, #000);\n    }\n  }\n\n  &--dark :deep(svg) .main-text {\n    fill: var(--monochrome-color, #fff);\n  }\n\n  &--animated :deep(svg) {\n    .plate {\n      animation: balancing-plate 5s infinite cubic-bezier(0.37, 0, 0.63, 1);\n    }\n    .globe {\n      animation: balancing-globe 5s infinite cubic-bezier(0.37, 0, 0.63, 1);\n    }\n\n    .plate,\n    .globe {\n      transform: rotate(0deg);\n      transform-origin: bottom center;\n      transform-box: fill-box;\n    }\n  }\n}\n</style>\n","import { w as withBvnPrefix } from \"./keys-DU7sQgl3.mjs\";\nimport { computed, toValue, useId } from \"vue\";\n//#region src/composables/useId.ts\nvar useId$1 = (id, suffix) => {\n\tconst genId = useId();\n\treturn computed(() => toValue(id) || withBvnPrefix(genId || \"\", suffix));\n};\n//#endregion\nexport { useId$1 as t };\n\n//# sourceMappingURL=useId-D1sqXtwx.mjs.map","//#region src/utils/classes.ts\nvar BvEvent = class BvEvent {\n\tcancelable = true;\n\tcomponentId = null;\n\t_defaultPrevented = false;\n\teventType = \"\";\n\tnativeEvent = null;\n\t_preventDefault;\n\trelatedTarget = null;\n\ttarget = null;\n\tget defaultPrevented() {\n\t\treturn this._defaultPrevented;\n\t}\n\tset defaultPrevented(prop) {\n\t\tthis._defaultPrevented = prop;\n\t}\n\tget preventDefault() {\n\t\treturn this._preventDefault;\n\t}\n\tset preventDefault(setter) {\n\t\tthis._preventDefault = setter;\n\t}\n\tconstructor(eventType, eventInit = {}) {\n\t\tif (!eventType) throw new TypeError(`Failed to construct '${this.constructor.name}'. 1 argument required, ${arguments.length} given.`);\n\t\tObject.assign(this, BvEvent.Defaults, eventInit, { eventType });\n\t\tthis._preventDefault = function _preventDefault() {\n\t\t\tif (this.cancelable) this.defaultPrevented = true;\n\t\t};\n\t}\n\tstatic get Defaults() {\n\t\treturn {\n\t\t\tcancelable: true,\n\t\t\tcomponentId: null,\n\t\t\teventType: \"\",\n\t\t\tnativeEvent: null,\n\t\t\trelatedTarget: null,\n\t\t\ttarget: null\n\t\t};\n\t}\n};\nvar BvTriggerableEvent = class extends BvEvent {\n\ttrigger = null;\n\tok = void 0;\n\tconstructor(eventType, eventInit = {}) {\n\t\tsuper(eventType, eventInit);\n\t\tObject.assign(this, BvEvent.Defaults, eventInit, { eventType });\n\t}\n\tstatic get Defaults() {\n\t\treturn {\n\t\t\t...super.Defaults,\n\t\t\ttrigger: null,\n\t\t\tok: void 0\n\t\t};\n\t}\n};\nvar BvCarouselEvent = class extends BvEvent {\n\tfrom;\n\tto;\n\tdirection;\n\tconstructor(eventType, eventInit) {\n\t\tsuper(eventType, eventInit);\n\t\tObject.assign(this, BvEvent.Defaults, eventInit, { eventType });\n\t\tconst { from, direction, to } = eventInit;\n\t\tthis.from = from;\n\t\tthis.to = to;\n\t\tthis.direction = direction;\n\t}\n\tstatic get Defaults() {\n\t\treturn { ...super.Defaults };\n\t}\n};\n//#endregion\nexport { BvEvent as n, BvTriggerableEvent as r, BvCarouselEvent as t };\n\n//# sourceMappingURL=classes-B0E5Y78Y.mjs.map","//#region src/utils/functions.ts\nvar noop = () => {};\n//#endregion\nexport { noop as t };\n\n//# sourceMappingURL=functions-BcMenQqL.mjs.map","import { x as showHideRegistryKey } from \"./keys-DU7sQgl3.mjs\";\nimport { L as useThrottleFn, f as useEventListener } from \"./dist-Dk9C_HFS.mjs\";\nimport { r as BvTriggerableEvent } from \"./classes-B0E5Y78Y.mjs\";\nimport { t as noop } from \"./functions-BcMenQqL.mjs\";\nimport { computed, getCurrentInstance, inject, nextTick, onBeforeUnmount, onMounted, onUnmounted, readonly, ref, watch } from \"vue\";\n//#region src/composables/useShowHide.ts\nvar fadeBaseTransitionProps = {\n\tname: \"fade\",\n\tenterActiveClass: \"\",\n\tenterFromClass: \"showing\",\n\tenterToClass: \"\",\n\tleaveActiveClass: \"\",\n\tleaveFromClass: \"\",\n\tleaveToClass: \"showing\",\n\tcss: true\n};\nvar useShowHide = (modelValue, props, emit, element, computedId, options = {\n\ttransitionProps: {},\n\tshowFn: () => {},\n\thideFn: () => {}\n}) => {\n\tlet noAction = false;\n\tconst initialShow = !!modelValue.value && !props.initialAnimation || props.visible || false;\n\tconst showRef = ref(initialShow);\n\tconst renderRef = ref(initialShow);\n\tconst renderBackdropRef = ref(initialShow);\n\tlet isCountdown = typeof modelValue.value !== \"boolean\";\n\twatch(modelValue, () => {\n\t\tisCountdown = typeof modelValue.value !== \"boolean\";\n\t\tif (noAction) {\n\t\t\tnoAction = false;\n\t\t\treturn;\n\t\t}\n\t\tif (modelValue.value) show();\n\t\telse hide(\"modelValue\", true);\n\t});\n\tconst localNoAnimation = ref(initialShow);\n\tconst localTemporaryHide = ref(false);\n\tconst computedNoAnimation = computed(() => props.noAnimation || props.noFade || localNoAnimation.value || false);\n\tlet isMounted = false;\n\tonMounted(() => {\n\t\tisMounted = true;\n\t\tif (!props.show && initialShow) {\n\t\t\tconst event = buildTriggerableEvent(\"show\", { cancelable: true });\n\t\t\temit(\"show\", event);\n\t\t\tif (event.defaultPrevented) {\n\t\t\t\temit(\"show-prevented\", buildTriggerableEvent(\"show-prevented\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlocalNoAnimation.value = true;\n\t\t\tif (!modelValue.value) {\n\t\t\t\tnoAction = true;\n\t\t\t\tmodelValue.value = true;\n\t\t\t}\n\t\t\trenderRef.value = true;\n\t\t\trenderBackdropRef.value = true;\n\t\t\tisVisible.value = true;\n\t\t\tbackdropVisible.value = true;\n\t\t\tbackdropReady.value = true;\n\t\t\tshowRef.value = true;\n\t\t\toptions.showFn?.();\n\t\t} else if (props.show || !!modelValue.value && props.initialAnimation) show();\n\t});\n\twatch(() => props.visible, (newval) => {\n\t\tlocalNoAnimation.value = true;\n\t\tnextTick(() => {\n\t\t\tif (newval) isVisible.value = true;\n\t\t\tif (newval) show();\n\t\t\telse hide(\"visible-prop\", true);\n\t\t});\n\t});\n\twatch(() => props.show, (newval) => {\n\t\tif (newval) show();\n\t\telse hide(\"show-prop\", true);\n\t});\n\tuseEventListener(element, \"bv-toggle\", () => {\n\t\tmodelValue.value = !modelValue.value;\n\t}, { passive: true });\n\tconst buildTriggerableEvent = (type, opts = {}) => new BvTriggerableEvent(type, {\n\t\tcancelable: false,\n\t\ttarget: element?.value || null,\n\t\trelatedTarget: null,\n\t\ttrigger: null,\n\t\t...opts,\n\t\tcomponentId: computedId?.value\n\t});\n\tlet showTimeout;\n\tlet hideTimeout;\n\tlet _Resolve;\n\tlet _Promise;\n\tlet _resolveOnHide;\n\tconst show = (resolveOnHide = false) => {\n\t\tif (showRef.value && !hideTimeout && !_Promise) return Promise.resolve(true);\n\t\t_resolveOnHide = resolveOnHide;\n\t\tif (showRef.value && !hideTimeout && _Promise) return _Promise;\n\t\t_Promise = new Promise((resolve) => {\n\t\t\t_Resolve = resolve;\n\t\t});\n\t\tconst event = buildTriggerableEvent(\"show\", { cancelable: true });\n\t\temit(\"show\", event);\n\t\tif (event.defaultPrevented) {\n\t\t\temit(\"show-prevented\", buildTriggerableEvent(\"show-prevented\"));\n\t\t\tif (isVisible.value) isVisible.value = false;\n\t\t\tif (modelValue.value && !isCountdown) {\n\t\t\t\tnoAction = true;\n\t\t\t\tnextTick(() => {\n\t\t\t\t\tmodelValue.value = false;\n\t\t\t\t});\n\t\t\t}\n\t\t\t_Resolve?.(\"show-prevented\");\n\t\t\treturn _Promise;\n\t\t}\n\t\tif (hideTimeout) {\n\t\t\tclearTimeout(hideTimeout);\n\t\t\thideTimeout = void 0;\n\t\t}\n\t\trenderRef.value = true;\n\t\trenderBackdropRef.value = true;\n\t\trequestAnimationFrame(() => {\n\t\t\tif (localNoAnimation.value || props.delay === void 0) {\n\t\t\t\tif (!isMounted) return;\n\t\t\t\tshowTimeout = void 0;\n\t\t\t\tshowRef.value = true;\n\t\t\t\toptions.showFn?.();\n\t\t\t\tif (!modelValue.value) {\n\t\t\t\t\tnoAction = true;\n\t\t\t\t\tnextTick(() => {\n\t\t\t\t\t\tmodelValue.value = true;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tshowTimeout = setTimeout(() => {\n\t\t\t\tif (!isMounted) return;\n\t\t\t\tshowTimeout = void 0;\n\t\t\t\tshowRef.value = true;\n\t\t\t\toptions.showFn?.();\n\t\t\t\tif (!modelValue.value) {\n\t\t\t\t\tnoAction = true;\n\t\t\t\t\tnextTick(() => {\n\t\t\t\t\t\tmodelValue.value = true;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}, typeof props.delay === \"number\" ? props.delay : props.delay?.show || 0);\n\t\t});\n\t\treturn _Promise;\n\t};\n\tlet leaveTrigger;\n\tconst hide = (trigger, noTriggerEmit) => {\n\t\tif (!showRef.value && !showTimeout && !renderRef.value) return Promise.resolve(\"\");\n\t\tif (!_Promise) _Promise = new Promise((resolve) => {\n\t\t\t_Resolve = resolve;\n\t\t});\n\t\tif (typeof trigger !== \"string\") trigger = void 0;\n\t\tleaveTrigger = trigger;\n\t\tconst event = buildTriggerableEvent(\"hide\", {\n\t\t\tcancelable: true,\n\t\t\ttrigger\n\t\t});\n\t\tconst event2 = buildTriggerableEvent(trigger || \"ignore\", {\n\t\t\tcancelable: true,\n\t\t\ttrigger\n\t\t});\n\t\tif (trigger === \"backdrop\" && props.noCloseOnBackdrop || trigger === \"esc\" && props.noCloseOnEsc) {\n\t\t\temit(\"hide-prevented\", buildTriggerableEvent(\"hide-prevented\", { trigger }));\n\t\t\t_Resolve?.(\"hide-prevented\");\n\t\t\treturn _Promise;\n\t\t}\n\t\tif (showTimeout) {\n\t\t\tclearTimeout(showTimeout);\n\t\t\tshowTimeout = void 0;\n\t\t}\n\t\tif (trigger && !noTriggerEmit) emit(trigger, event2);\n\t\temit(\"hide\", event);\n\t\tif (event.defaultPrevented || event2.defaultPrevented) {\n\t\t\temit(\"hide-prevented\", buildTriggerableEvent(\"hide-prevented\", { trigger }));\n\t\t\tif (!modelValue.value) nextTick(() => {\n\t\t\t\tnoAction = true;\n\t\t\t\tmodelValue.value = true;\n\t\t\t});\n\t\t\t_Resolve?.(\"hide-prevented\");\n\t\t\treturn _Promise;\n\t\t}\n\t\ttrapActive.value = false;\n\t\tif (showTimeout) {\n\t\t\tclearTimeout(showTimeout);\n\t\t\tshowTimeout = void 0;\n\t\t\tif (!localTemporaryHide.value) renderRef.value = false;\n\t\t\trenderBackdropRef.value = false;\n\t\t}\n\t\thideTimeout = setTimeout(() => {\n\t\t\tif (!isMounted) return;\n\t\t\thideTimeout = void 0;\n\t\t\tisLeaving.value = true;\n\t\t\tshowRef.value = false;\n\t\t\toptions.hideFn?.();\n\t\t\tif (modelValue.value) {\n\t\t\t\tnoAction = true;\n\t\t\t\tmodelValue.value = isCountdown ? 0 : false;\n\t\t\t}\n\t\t}, localNoAnimation.value ? 0 : typeof props.delay === \"number\" ? props.delay : props.delay?.hide || 0);\n\t\treturn _Promise;\n\t};\n\tconst throttleHide = useThrottleFn((a) => hide(a), 500);\n\tconst throttleShow = useThrottleFn(() => show(), 500);\n\tconst toggle = (resolveOnHide = false) => {\n\t\tconst e = buildTriggerableEvent(\"toggle\", { cancelable: true });\n\t\temit(\"toggle\", e);\n\t\tif (e.defaultPrevented) {\n\t\t\temit(\"toggle-prevented\", buildTriggerableEvent(\"toggle-prevented\"));\n\t\t\treturn Promise.resolve(\"toggle-prevented\");\n\t\t}\n\t\tif (showRef.value) return hide(\"toggle-function\", true);\n\t\treturn show(resolveOnHide);\n\t};\n\tconst triggerToggle = () => {\n\t\tconst e = buildTriggerableEvent(\"toggle\", { cancelable: true });\n\t\temit(\"toggle\", e);\n\t\tif (e.defaultPrevented) {\n\t\t\temit(\"toggle-prevented\", buildTriggerableEvent(\"toggle-prevented\"));\n\t\t\treturn;\n\t\t}\n\t\tif (showRef.value) hide(\"toggle-trigger\", true);\n\t\telse show();\n\t};\n\tconst triggerRegistry = [];\n\tconst registerTrigger = (trigger, el) => {\n\t\ttriggerRegistry.push({\n\t\t\ttrigger,\n\t\t\tel\n\t\t});\n\t\tel.addEventListener(trigger, triggerToggle);\n\t\tcheckVisibility(el);\n\t};\n\tconst unregisterTrigger = (trigger, el, clean = true) => {\n\t\tconst idx = triggerRegistry.findIndex((t) => t?.trigger === trigger && t.el === el);\n\t\tif (idx > -1) {\n\t\t\ttriggerRegistry.splice(idx, 1);\n\t\t\tel.removeEventListener(trigger, triggerToggle);\n\t\t\tif (clean) {\n\t\t\t\tel.removeAttribute(\"aria-expanded\");\n\t\t\t\tel.classList.remove(\"collapsed\");\n\t\t\t\tel.classList.remove(\"not-collapsed\");\n\t\t\t}\n\t\t}\n\t};\n\tconst appRegistry = inject(showHideRegistryKey, null)?.register({\n\t\tid: computedId.value,\n\t\ttoggle,\n\t\tshow,\n\t\thide,\n\t\tvalue: readonly(showRef),\n\t\tregisterTrigger,\n\t\tunregisterTrigger,\n\t\tcomponent: getCurrentInstance()\n\t});\n\tconst checkVisibility = (el) => {\n\t\tel.setAttribute(\"aria-expanded\", modelValue.value ? \"true\" : \"false\");\n\t\tel.classList.toggle(\"collapsed\", !modelValue.value);\n\t\tel.classList.toggle(\"not-collapsed\", !!modelValue.value);\n\t};\n\twatch(modelValue, () => {\n\t\ttriggerRegistry.forEach((t) => {\n\t\t\tcheckVisibility(t.el);\n\t\t});\n\t});\n\twatch(computedId, (newId, oldId) => {\n\t\tappRegistry?.updateId(newId, oldId);\n\t});\n\tonBeforeUnmount(() => {\n\t\tappRegistry?.unregister();\n\t\ttriggerRegistry.forEach((t) => {\n\t\t\tt.el.removeEventListener(t.trigger, triggerToggle);\n\t\t});\n\t});\n\tonUnmounted(() => {\n\t\tisMounted = false;\n\t\tclearTimeout(showTimeout);\n\t\tclearTimeout(hideTimeout);\n\t\tshowTimeout = void 0;\n\t\thideTimeout = void 0;\n\t});\n\tconst lazyLoadCompleted = ref(false);\n\tconst markLazyLoadCompleted = () => {\n\t\tif (props.lazy === true) lazyLoadCompleted.value = true;\n\t};\n\tconst isLeaving = ref(false);\n\tconst isActive = ref(initialShow);\n\tconst isVisible = ref(initialShow);\n\tconst onBeforeEnter = [...[options.transitionProps?.onBeforeEnter ?? noop, props.transitionProps?.onBeforeEnter ?? noop].flat(), () => {\n\t\tisActive.value = true;\n\t}];\n\tconst onEnter = [() => {\n\t\trequestAnimationFrame(() => {\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tisVisible.value = true;\n\t\t\t});\n\t\t});\n\t}, ...[options.transitionProps?.onEnter ?? noop, props.transitionProps?.onEnter ?? noop].flat()];\n\tconst onAfterEnter = [\n\t\tmarkLazyLoadCompleted,\n\t\t...[options.transitionProps?.onAfterEnter ?? noop, props.transitionProps?.onAfterEnter ?? noop].flat(),\n\t\t() => {\n\t\t\tif (localNoAnimation.value) requestAnimationFrame(() => {\n\t\t\t\tlocalNoAnimation.value = false;\n\t\t\t});\n\t\t\tif (localTemporaryHide.value) localTemporaryHide.value = false;\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\ttrapActive.value = true;\n\t\t\t\tnextTick(() => {\n\t\t\t\t\temit(\"shown\", buildTriggerableEvent(\"shown\", { cancelable: false }));\n\t\t\t\t});\n\t\t\t});\n\t\t\tif (!_resolveOnHide) {\n\t\t\t\t_Resolve?.(true);\n\t\t\t\t_Promise = void 0;\n\t\t\t\t_Resolve = void 0;\n\t\t\t}\n\t\t}\n\t];\n\tconst onBeforeLeave = [\n\t\t() => {\n\t\t\tif (!isLeaving.value) isLeaving.value = true;\n\t\t},\n\t\t...[options.transitionProps?.onBeforeLeave ?? noop, props.transitionProps?.onBeforeLeave ?? noop].flat(),\n\t\t() => {\n\t\t\ttrapActive.value = false;\n\t\t}\n\t];\n\tconst onLeave = [() => {\n\t\tisVisible.value = false;\n\t}, ...[options.transitionProps?.onLeave ?? noop, props.transitionProps?.onLeave ?? noop].flat()];\n\tconst onAfterLeave = [\n\t\t() => {\n\t\t\temit(\"hidden\", buildTriggerableEvent(\"hidden\", {\n\t\t\t\ttrigger: leaveTrigger,\n\t\t\t\tcancelable: false\n\t\t\t}));\n\t\t},\n\t\t...[options.transitionProps?.onAfterLeave ?? noop, props.transitionProps?.onAfterLeave ?? noop].flat(),\n\t\t() => {\n\t\t\tisLeaving.value = false;\n\t\t\tisActive.value = false;\n\t\t\tif (localNoAnimation.value) requestAnimationFrame(() => {\n\t\t\t\tlocalNoAnimation.value = false;\n\t\t\t});\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tif (!localTemporaryHide.value) renderRef.value = false;\n\t\t\t});\n\t\t\t_Resolve?.(leaveTrigger || \"\");\n\t\t\t_Promise = void 0;\n\t\t\t_Resolve = void 0;\n\t\t\tleaveTrigger = void 0;\n\t\t}\n\t];\n\tconst contentShowing = computed(() => localTemporaryHide.value === true || isActive.value === true || props.lazy === false || props.lazy === true && lazyLoadCompleted.value === true && props.unmountLazy === false);\n\tconst trapActive = ref(false);\n\tconst backdropVisible = ref(false);\n\tconst backdropReady = ref(false);\n\tconst transitionFunctions = {\n\t\t...options.transitionProps,\n\t\tonBeforeEnter,\n\t\tonEnter,\n\t\tonAfterEnter,\n\t\tonBeforeLeave,\n\t\tonLeave,\n\t\tonAfterLeave\n\t};\n\treturn {\n\t\tshowRef: readonly(showRef),\n\t\trenderRef: readonly(renderRef),\n\t\trenderBackdropRef: readonly(renderBackdropRef),\n\t\tisVisible: readonly(isVisible),\n\t\tisActive: readonly(isActive),\n\t\ttrapActive: readonly(trapActive),\n\t\tshow,\n\t\thide,\n\t\ttoggle,\n\t\tthrottleHide,\n\t\tthrottleShow,\n\t\tbuildTriggerableEvent,\n\t\tcomputedNoAnimation,\n\t\tlocalNoAnimation: readonly(localNoAnimation),\n\t\tsetLocalNoAnimation: (value) => {\n\t\t\tlocalNoAnimation.value = value;\n\t\t},\n\t\tlocalTemporaryHide: readonly(localTemporaryHide),\n\t\tsetLocalTemporaryHide: (value) => {\n\t\t\tlocalTemporaryHide.value = value;\n\t\t},\n\t\tisLeaving: readonly(isLeaving),\n\t\ttransitionProps: {\n\t\t\t...fadeBaseTransitionProps,\n\t\t\t...props.transitionProps,\n\t\t\t...transitionFunctions\n\t\t},\n\t\tlazyLoadCompleted: readonly(lazyLoadCompleted),\n\t\tmarkLazyLoadCompleted,\n\t\tcontentShowing,\n\t\tbackdropReady: readonly(backdropReady),\n\t\tbackdropVisible: readonly(backdropVisible),\n\t\tbackdropTransitionProps: {\n\t\t\t...fadeBaseTransitionProps,\n\t\t\tonBeforeEnter: () => {\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\tbackdropVisible.value = true;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tbackdropReady.value = false;\n\t\t\t},\n\t\t\tonAfterEnter: () => {\n\t\t\t\tbackdropReady.value = true;\n\t\t\t},\n\t\t\tonBeforeLeave: () => {\n\t\t\t\tbackdropVisible.value = false;\n\t\t\t},\n\t\t\tonAfterLeave: () => {\n\t\t\t\tbackdropReady.value = false;\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\trenderBackdropRef.value = false;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n};\n//#endregion\nexport { useShowHide as t };\n\n//# sourceMappingURL=useShowHide-CBFt1_EW.mjs.map","import { Teleport, defineComponent, h } from \"vue\";\n//#endregion\n//#region src/components/ConditionalTeleport.vue\nvar ConditionalTeleport_default = defineComponent({\n\tname: \"ConditionalTeleport\",\n\tinheritAttrs: false,\n\tprops: {\n\t\tto: {\n\t\t\ttype: [String, Object],\n\t\t\tdefault: null\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true\n\t\t}\n\t},\n\tslots: Object,\n\tsetup(props, { slots }) {\n\t\treturn () => !props.to ? slots.default?.({}) : h(Teleport, {\n\t\t\tto: props.to,\n\t\t\tdisabled: props.disabled || !props.to\n\t\t}, [slots.default?.({})]);\n\t}\n});\n//#endregion\nexport { ConditionalTeleport_default as t };\n\n//# sourceMappingURL=ConditionalTeleport-B4KYZIM6.mjs.map","//#region \\0rolldown/runtime.js\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __exportAll = (all, no_symbols) => {\n\tlet target = {};\n\tfor (var name in all) __defProp(target, name, {\n\t\tget: all[name],\n\t\tenumerable: true\n\t});\n\tif (!no_symbols) __defProp(target, Symbol.toStringTag, { value: \"Module\" });\n\treturn target;\n};\nvar __copyProps = (to, from, except, desc) => {\n\tif (from && typeof from === \"object\" || typeof from === \"function\") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {\n\t\tkey = keys[i];\n\t\tif (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {\n\t\t\tget: ((k) => from[k]).bind(null, key),\n\t\t\tenumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable\n\t\t});\n\t}\n\treturn to;\n};\nvar __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, \"default\"), secondTarget && __copyProps(secondTarget, mod, \"default\"));\n//#endregion\nexport { __reExport as n, __exportAll as t };\n","import { n as __reExport, t as __exportAll } from \"./chunk-D1SwGrFN.mjs\";\nimport * as Vue from \"vue\";\n//#region ../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs\n/**\n* Custom positioning reference element.\n* @see https://floating-ui.com/docs/virtual-elements\n*/\nvar sides = [\n\t\"top\",\n\t\"right\",\n\t\"bottom\",\n\t\"left\"\n];\nvar alignments = [\"start\", \"end\"];\nvar placements = /* @__PURE__ */ sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nvar min = Math.min;\nvar max = Math.max;\nvar round = Math.round;\nvar floor = Math.floor;\nvar createCoords = (v) => ({\n\tx: v,\n\ty: v\n});\nvar oppositeSideMap = {\n\tleft: \"right\",\n\tright: \"left\",\n\tbottom: \"top\",\n\ttop: \"bottom\"\n};\nfunction clamp(start, value, end) {\n\treturn max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n\treturn typeof value === \"function\" ? value(param) : value;\n}\nfunction getSide(placement) {\n\treturn placement.split(\"-\")[0];\n}\nfunction getAlignment(placement) {\n\treturn placement.split(\"-\")[1];\n}\nfunction getOppositeAxis(axis) {\n\treturn axis === \"x\" ? \"y\" : \"x\";\n}\nfunction getAxisLength(axis) {\n\treturn axis === \"y\" ? \"height\" : \"width\";\n}\nfunction getSideAxis(placement) {\n\tconst firstChar = placement[0];\n\treturn firstChar === \"t\" || firstChar === \"b\" ? \"y\" : \"x\";\n}\nfunction getAlignmentAxis(placement) {\n\treturn getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n\tif (rtl === void 0) rtl = false;\n\tconst alignment = getAlignment(placement);\n\tconst alignmentAxis = getAlignmentAxis(placement);\n\tconst length = getAxisLength(alignmentAxis);\n\tlet mainAlignmentSide = alignmentAxis === \"x\" ? alignment === (rtl ? \"end\" : \"start\") ? \"right\" : \"left\" : alignment === \"start\" ? \"bottom\" : \"top\";\n\tif (rects.reference[length] > rects.floating[length]) mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n\treturn [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n\tconst oppositePlacement = getOppositePlacement(placement);\n\treturn [\n\t\tgetOppositeAlignmentPlacement(placement),\n\t\toppositePlacement,\n\t\tgetOppositeAlignmentPlacement(oppositePlacement)\n\t];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n\treturn placement.includes(\"start\") ? placement.replace(\"start\", \"end\") : placement.replace(\"end\", \"start\");\n}\nvar lrPlacement = [\"left\", \"right\"];\nvar rlPlacement = [\"right\", \"left\"];\nvar tbPlacement = [\"top\", \"bottom\"];\nvar btPlacement = [\"bottom\", \"top\"];\nfunction getSideList(side, isStart, rtl) {\n\tswitch (side) {\n\t\tcase \"top\":\n\t\tcase \"bottom\":\n\t\t\tif (rtl) return isStart ? rlPlacement : lrPlacement;\n\t\t\treturn isStart ? lrPlacement : rlPlacement;\n\t\tcase \"left\":\n\t\tcase \"right\": return isStart ? tbPlacement : btPlacement;\n\t\tdefault: return [];\n\t}\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n\tconst alignment = getAlignment(placement);\n\tlet list = getSideList(getSide(placement), direction === \"start\", rtl);\n\tif (alignment) {\n\t\tlist = list.map((side) => side + \"-\" + alignment);\n\t\tif (flipAlignment) list = list.concat(list.map(getOppositeAlignmentPlacement));\n\t}\n\treturn list;\n}\nfunction getOppositePlacement(placement) {\n\tconst side = getSide(placement);\n\treturn oppositeSideMap[side] + placement.slice(side.length);\n}\nfunction expandPaddingObject(padding) {\n\treturn {\n\t\ttop: 0,\n\t\tright: 0,\n\t\tbottom: 0,\n\t\tleft: 0,\n\t\t...padding\n\t};\n}\nfunction getPaddingObject(padding) {\n\treturn typeof padding !== \"number\" ? expandPaddingObject(padding) : {\n\t\ttop: padding,\n\t\tright: padding,\n\t\tbottom: padding,\n\t\tleft: padding\n\t};\n}\nfunction rectToClientRect(rect) {\n\tconst { x, y, width, height } = rect;\n\treturn {\n\t\twidth,\n\t\theight,\n\t\ttop: y,\n\t\tleft: x,\n\t\tright: x + width,\n\t\tbottom: y + height,\n\t\tx,\n\t\ty\n\t};\n}\n//#endregion\n//#region ../../node_modules/.pnpm/@floating-ui+core@1.7.5/node_modules/@floating-ui/core/dist/floating-ui.core.mjs\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n\tlet { reference, floating } = _ref;\n\tconst sideAxis = getSideAxis(placement);\n\tconst alignmentAxis = getAlignmentAxis(placement);\n\tconst alignLength = getAxisLength(alignmentAxis);\n\tconst side = getSide(placement);\n\tconst isVertical = sideAxis === \"y\";\n\tconst commonX = reference.x + reference.width / 2 - floating.width / 2;\n\tconst commonY = reference.y + reference.height / 2 - floating.height / 2;\n\tconst commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n\tlet coords;\n\tswitch (side) {\n\t\tcase \"top\":\n\t\t\tcoords = {\n\t\t\t\tx: commonX,\n\t\t\t\ty: reference.y - floating.height\n\t\t\t};\n\t\t\tbreak;\n\t\tcase \"bottom\":\n\t\t\tcoords = {\n\t\t\t\tx: commonX,\n\t\t\t\ty: reference.y + reference.height\n\t\t\t};\n\t\t\tbreak;\n\t\tcase \"right\":\n\t\t\tcoords = {\n\t\t\t\tx: reference.x + reference.width,\n\t\t\t\ty: commonY\n\t\t\t};\n\t\t\tbreak;\n\t\tcase \"left\":\n\t\t\tcoords = {\n\t\t\t\tx: reference.x - floating.width,\n\t\t\t\ty: commonY\n\t\t\t};\n\t\t\tbreak;\n\t\tdefault: coords = {\n\t\t\tx: reference.x,\n\t\t\ty: reference.y\n\t\t};\n\t}\n\tswitch (getAlignment(placement)) {\n\t\tcase \"start\":\n\t\t\tcoords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n\t\t\tbreak;\n\t\tcase \"end\":\n\t\t\tcoords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n\t\t\tbreak;\n\t}\n\treturn coords;\n}\n/**\n* Resolves with an object of overflow side offsets that determine how much the\n* element is overflowing a given clipping boundary on each side.\n* - positive = overflowing the boundary by that number of pixels\n* - negative = how many pixels left before it will overflow\n* - 0 = lies flush with the boundary\n* @see https://floating-ui.com/docs/detectOverflow\n*/\nasync function detectOverflow(state, options) {\n\tvar _await$platform$isEle;\n\tif (options === void 0) options = {};\n\tconst { x, y, platform, rects, elements, strategy } = state;\n\tconst { boundary = \"clippingAncestors\", rootBoundary = \"viewport\", elementContext = \"floating\", altBoundary = false, padding = 0 } = evaluate(options, state);\n\tconst paddingObject = getPaddingObject(padding);\n\tconst element = elements[altBoundary ? elementContext === \"floating\" ? \"reference\" : \"floating\" : elementContext];\n\tconst clippingClientRect = rectToClientRect(await platform.getClippingRect({\n\t\telement: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating)),\n\t\tboundary,\n\t\trootBoundary,\n\t\tstrategy\n\t}));\n\tconst rect = elementContext === \"floating\" ? {\n\t\tx,\n\t\ty,\n\t\twidth: rects.floating.width,\n\t\theight: rects.floating.height\n\t} : rects.reference;\n\tconst offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n\tconst offsetScale = await (platform.isElement == null ? void 0 : platform.isElement(offsetParent)) ? await (platform.getScale == null ? void 0 : platform.getScale(offsetParent)) || {\n\t\tx: 1,\n\t\ty: 1\n\t} : {\n\t\tx: 1,\n\t\ty: 1\n\t};\n\tconst elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n\t\telements,\n\t\trect,\n\t\toffsetParent,\n\t\tstrategy\n\t}) : rect);\n\treturn {\n\t\ttop: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n\t\tbottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n\t\tleft: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n\t\tright: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n\t};\n}\nvar MAX_RESET_COUNT = 50;\n/**\n* Computes the `x` and `y` coordinates that will place the floating element\n* next to a given reference element.\n*\n* This export does not have any `platform` interface logic. You will need to\n* write one for the platform you are using Floating UI with.\n*/\nvar computePosition$1 = async (reference, floating, config) => {\n\tconst { placement = \"bottom\", strategy = \"absolute\", middleware = [], platform } = config;\n\tconst platformWithDetectOverflow = platform.detectOverflow ? platform : {\n\t\t...platform,\n\t\tdetectOverflow\n\t};\n\tconst rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n\tlet rects = await platform.getElementRects({\n\t\treference,\n\t\tfloating,\n\t\tstrategy\n\t});\n\tlet { x, y } = computeCoordsFromPlacement(rects, placement, rtl);\n\tlet statefulPlacement = placement;\n\tlet resetCount = 0;\n\tconst middlewareData = {};\n\tfor (let i = 0; i < middleware.length; i++) {\n\t\tconst currentMiddleware = middleware[i];\n\t\tif (!currentMiddleware) continue;\n\t\tconst { name, fn } = currentMiddleware;\n\t\tconst { x: nextX, y: nextY, data, reset } = await fn({\n\t\t\tx,\n\t\t\ty,\n\t\t\tinitialPlacement: placement,\n\t\t\tplacement: statefulPlacement,\n\t\t\tstrategy,\n\t\t\tmiddlewareData,\n\t\t\trects,\n\t\t\tplatform: platformWithDetectOverflow,\n\t\t\telements: {\n\t\t\t\treference,\n\t\t\t\tfloating\n\t\t\t}\n\t\t});\n\t\tx = nextX != null ? nextX : x;\n\t\ty = nextY != null ? nextY : y;\n\t\tmiddlewareData[name] = {\n\t\t\t...middlewareData[name],\n\t\t\t...data\n\t\t};\n\t\tif (reset && resetCount < MAX_RESET_COUNT) {\n\t\t\tresetCount++;\n\t\t\tif (typeof reset === \"object\") {\n\t\t\t\tif (reset.placement) statefulPlacement = reset.placement;\n\t\t\t\tif (reset.rects) rects = reset.rects === true ? await platform.getElementRects({\n\t\t\t\t\treference,\n\t\t\t\t\tfloating,\n\t\t\t\t\tstrategy\n\t\t\t\t}) : reset.rects;\n\t\t\t\t({x, y} = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n\t\t\t}\n\t\t\ti = -1;\n\t\t}\n\t}\n\treturn {\n\t\tx,\n\t\ty,\n\t\tplacement: statefulPlacement,\n\t\tstrategy,\n\t\tmiddlewareData\n\t};\n};\n/**\n* Provides data to position an inner element of the floating element so that it\n* appears centered to the reference element.\n* @see https://floating-ui.com/docs/arrow\n*/\nvar arrow$2 = (options) => ({\n\tname: \"arrow\",\n\toptions,\n\tasync fn(state) {\n\t\tconst { x, y, placement, rects, platform, elements, middlewareData } = state;\n\t\tconst { element, padding = 0 } = evaluate(options, state) || {};\n\t\tif (element == null) return {};\n\t\tconst paddingObject = getPaddingObject(padding);\n\t\tconst coords = {\n\t\t\tx,\n\t\t\ty\n\t\t};\n\t\tconst axis = getAlignmentAxis(placement);\n\t\tconst length = getAxisLength(axis);\n\t\tconst arrowDimensions = await platform.getDimensions(element);\n\t\tconst isYAxis = axis === \"y\";\n\t\tconst minProp = isYAxis ? \"top\" : \"left\";\n\t\tconst maxProp = isYAxis ? \"bottom\" : \"right\";\n\t\tconst clientProp = isYAxis ? \"clientHeight\" : \"clientWidth\";\n\t\tconst endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n\t\tconst startDiff = coords[axis] - rects.reference[axis];\n\t\tconst arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n\t\tlet clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\t\tif (!clientSize || !await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent))) clientSize = elements.floating[clientProp] || rects.floating[length];\n\t\tconst centerToReference = endDiff / 2 - startDiff / 2;\n\t\tconst largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n\t\tconst minPadding = min(paddingObject[minProp], largestPossiblePadding);\n\t\tconst maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\t\tconst min$1 = minPadding;\n\t\tconst max = clientSize - arrowDimensions[length] - maxPadding;\n\t\tconst center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n\t\tconst offset = clamp(min$1, center, max);\n\t\tconst shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n\t\tconst alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n\t\treturn {\n\t\t\t[axis]: coords[axis] + alignmentOffset,\n\t\t\tdata: {\n\t\t\t\t[axis]: offset,\n\t\t\t\tcenterOffset: center - offset - alignmentOffset,\n\t\t\t\t...shouldAddOffset && { alignmentOffset }\n\t\t\t},\n\t\t\treset: shouldAddOffset\n\t\t};\n\t}\n});\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n\treturn (alignment ? [...allowedPlacements.filter((placement) => getAlignment(placement) === alignment), ...allowedPlacements.filter((placement) => getAlignment(placement) !== alignment)] : allowedPlacements.filter((placement) => getSide(placement) === placement)).filter((placement) => {\n\t\tif (alignment) return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n\t\treturn true;\n\t});\n}\n/**\n* Optimizes the visibility of the floating element by choosing the placement\n* that has the most space available automatically, without needing to specify a\n* preferred placement. Alternative to `flip`.\n* @see https://floating-ui.com/docs/autoPlacement\n*/\nvar autoPlacement$1 = function(options) {\n\tif (options === void 0) options = {};\n\treturn {\n\t\tname: \"autoPlacement\",\n\t\toptions,\n\t\tasync fn(state) {\n\t\t\tvar _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n\t\t\tconst { rects, middlewareData, placement, platform, elements } = state;\n\t\t\tconst { crossAxis = false, alignment, allowedPlacements = placements, autoAlignment = true, ...detectOverflowOptions } = evaluate(options, state);\n\t\t\tconst placements$1 = alignment !== void 0 || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n\t\t\tconst overflow = await platform.detectOverflow(state, detectOverflowOptions);\n\t\t\tconst currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n\t\t\tconst currentPlacement = placements$1[currentIndex];\n\t\t\tif (currentPlacement == null) return {};\n\t\t\tconst alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\t\t\tif (placement !== currentPlacement) return { reset: { placement: placements$1[0] } };\n\t\t\tconst currentOverflows = [\n\t\t\t\toverflow[getSide(currentPlacement)],\n\t\t\t\toverflow[alignmentSides[0]],\n\t\t\t\toverflow[alignmentSides[1]]\n\t\t\t];\n\t\t\tconst allOverflows = [...((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || [], {\n\t\t\t\tplacement: currentPlacement,\n\t\t\t\toverflows: currentOverflows\n\t\t\t}];\n\t\t\tconst nextPlacement = placements$1[currentIndex + 1];\n\t\t\tif (nextPlacement) return {\n\t\t\t\tdata: {\n\t\t\t\t\tindex: currentIndex + 1,\n\t\t\t\t\toverflows: allOverflows\n\t\t\t\t},\n\t\t\t\treset: { placement: nextPlacement }\n\t\t\t};\n\t\t\tconst placementsSortedByMostSpace = allOverflows.map((d) => {\n\t\t\t\tconst alignment = getAlignment(d.placement);\n\t\t\t\treturn [\n\t\t\t\t\td.placement,\n\t\t\t\t\talignment && crossAxis ? d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) : d.overflows[0],\n\t\t\t\t\td.overflows\n\t\t\t\t];\n\t\t\t}).sort((a, b) => a[1] - b[1]);\n\t\t\tconst resetPlacement = ((_placementsThatFitOnE = placementsSortedByMostSpace.filter((d) => d[2].slice(0, getAlignment(d[0]) ? 2 : 3).every((v) => v <= 0))[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n\t\t\tif (resetPlacement !== placement) return {\n\t\t\t\tdata: {\n\t\t\t\t\tindex: currentIndex + 1,\n\t\t\t\t\toverflows: allOverflows\n\t\t\t\t},\n\t\t\t\treset: { placement: resetPlacement }\n\t\t\t};\n\t\t\treturn {};\n\t\t}\n\t};\n};\n/**\n* Optimizes the visibility of the floating element by flipping the `placement`\n* in order to keep it in view when the preferred placement(s) will overflow the\n* clipping boundary. Alternative to `autoPlacement`.\n* @see https://floating-ui.com/docs/flip\n*/\nvar flip$1 = function(options) {\n\tif (options === void 0) options = {};\n\treturn {\n\t\tname: \"flip\",\n\t\toptions,\n\t\tasync fn(state) {\n\t\t\tvar _middlewareData$arrow, _middlewareData$flip;\n\t\t\tconst { placement, middlewareData, rects, initialPlacement, platform, elements } = state;\n\t\t\tconst { mainAxis: checkMainAxis = true, crossAxis: checkCrossAxis = true, fallbackPlacements: specifiedFallbackPlacements, fallbackStrategy = \"bestFit\", fallbackAxisSideDirection = \"none\", flipAlignment = true, ...detectOverflowOptions } = evaluate(options, state);\n\t\t\tif ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) return {};\n\t\t\tconst side = getSide(placement);\n\t\t\tconst initialSideAxis = getSideAxis(initialPlacement);\n\t\t\tconst isBasePlacement = getSide(initialPlacement) === initialPlacement;\n\t\t\tconst rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n\t\t\tconst fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n\t\t\tconst hasFallbackAxisSideDirection = fallbackAxisSideDirection !== \"none\";\n\t\t\tif (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n\t\t\tconst placements = [initialPlacement, ...fallbackPlacements];\n\t\t\tconst overflow = await platform.detectOverflow(state, detectOverflowOptions);\n\t\t\tconst overflows = [];\n\t\t\tlet overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n\t\t\tif (checkMainAxis) overflows.push(overflow[side]);\n\t\t\tif (checkCrossAxis) {\n\t\t\t\tconst sides = getAlignmentSides(placement, rects, rtl);\n\t\t\t\toverflows.push(overflow[sides[0]], overflow[sides[1]]);\n\t\t\t}\n\t\t\toverflowsData = [...overflowsData, {\n\t\t\t\tplacement,\n\t\t\t\toverflows\n\t\t\t}];\n\t\t\tif (!overflows.every((side) => side <= 0)) {\n\t\t\t\tvar _middlewareData$flip2, _overflowsData$filter;\n\t\t\t\tconst nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n\t\t\t\tconst nextPlacement = placements[nextIndex];\n\t\t\t\tif (nextPlacement) {\n\t\t\t\t\tif (!(checkCrossAxis === \"alignment\" ? initialSideAxis !== getSideAxis(nextPlacement) : false) || overflowsData.every((d) => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) return {\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tindex: nextIndex,\n\t\t\t\t\t\t\toverflows: overflowsData\n\t\t\t\t\t\t},\n\t\t\t\t\t\treset: { placement: nextPlacement }\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tlet resetPlacement = (_overflowsData$filter = overflowsData.filter((d) => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\t\t\t\tif (!resetPlacement) switch (fallbackStrategy) {\n\t\t\t\t\tcase \"bestFit\": {\n\t\t\t\t\t\tvar _overflowsData$filter2;\n\t\t\t\t\t\tconst placement = (_overflowsData$filter2 = overflowsData.filter((d) => {\n\t\t\t\t\t\t\tif (hasFallbackAxisSideDirection) {\n\t\t\t\t\t\t\t\tconst currentSideAxis = getSideAxis(d.placement);\n\t\t\t\t\t\t\t\treturn currentSideAxis === initialSideAxis || currentSideAxis === \"y\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}).map((d) => [d.placement, d.overflows.filter((overflow) => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n\t\t\t\t\t\tif (placement) resetPlacement = placement;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"initialPlacement\":\n\t\t\t\t\t\tresetPlacement = initialPlacement;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (placement !== resetPlacement) return { reset: { placement: resetPlacement } };\n\t\t\t}\n\t\t\treturn {};\n\t\t}\n\t};\n};\nfunction getSideOffsets(overflow, rect) {\n\treturn {\n\t\ttop: overflow.top - rect.height,\n\t\tright: overflow.right - rect.width,\n\t\tbottom: overflow.bottom - rect.height,\n\t\tleft: overflow.left - rect.width\n\t};\n}\nfunction isAnySideFullyClipped(overflow) {\n\treturn sides.some((side) => overflow[side] >= 0);\n}\n/**\n* Provides data to hide the floating element in applicable situations, such as\n* when it is not in the same clipping context as the reference element.\n* @see https://floating-ui.com/docs/hide\n*/\nvar hide$1 = function(options) {\n\tif (options === void 0) options = {};\n\treturn {\n\t\tname: \"hide\",\n\t\toptions,\n\t\tasync fn(state) {\n\t\t\tconst { rects, platform } = state;\n\t\t\tconst { strategy = \"referenceHidden\", ...detectOverflowOptions } = evaluate(options, state);\n\t\t\tswitch (strategy) {\n\t\t\t\tcase \"referenceHidden\": {\n\t\t\t\t\tconst offsets = getSideOffsets(await platform.detectOverflow(state, {\n\t\t\t\t\t\t...detectOverflowOptions,\n\t\t\t\t\t\telementContext: \"reference\"\n\t\t\t\t\t}), rects.reference);\n\t\t\t\t\treturn { data: {\n\t\t\t\t\t\treferenceHiddenOffsets: offsets,\n\t\t\t\t\t\treferenceHidden: isAnySideFullyClipped(offsets)\n\t\t\t\t\t} };\n\t\t\t\t}\n\t\t\t\tcase \"escaped\": {\n\t\t\t\t\tconst offsets = getSideOffsets(await platform.detectOverflow(state, {\n\t\t\t\t\t\t...detectOverflowOptions,\n\t\t\t\t\t\taltBoundary: true\n\t\t\t\t\t}), rects.floating);\n\t\t\t\t\treturn { data: {\n\t\t\t\t\t\tescapedOffsets: offsets,\n\t\t\t\t\t\tescaped: isAnySideFullyClipped(offsets)\n\t\t\t\t\t} };\n\t\t\t\t}\n\t\t\t\tdefault: return {};\n\t\t\t}\n\t\t}\n\t};\n};\nfunction getBoundingRect(rects) {\n\tconst minX = min(...rects.map((rect) => rect.left));\n\tconst minY = min(...rects.map((rect) => rect.top));\n\tconst maxX = max(...rects.map((rect) => rect.right));\n\tconst maxY = max(...rects.map((rect) => rect.bottom));\n\treturn {\n\t\tx: minX,\n\t\ty: minY,\n\t\twidth: maxX - minX,\n\t\theight: maxY - minY\n\t};\n}\nfunction getRectsByLine(rects) {\n\tconst sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n\tconst groups = [];\n\tlet prevRect = null;\n\tfor (let i = 0; i < sortedRects.length; i++) {\n\t\tconst rect = sortedRects[i];\n\t\tif (!prevRect || rect.y - prevRect.y > prevRect.height / 2) groups.push([rect]);\n\t\telse groups[groups.length - 1].push(rect);\n\t\tprevRect = rect;\n\t}\n\treturn groups.map((rect) => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n* Provides improved positioning for inline reference elements that can span\n* over multiple lines, such as hyperlinks or range selections.\n* @see https://floating-ui.com/docs/inline\n*/\nvar inline$1 = function(options) {\n\tif (options === void 0) options = {};\n\treturn {\n\t\tname: \"inline\",\n\t\toptions,\n\t\tasync fn(state) {\n\t\t\tconst { placement, elements, rects, platform, strategy } = state;\n\t\t\tconst { padding = 2, x, y } = evaluate(options, state);\n\t\t\tconst nativeClientRects = Array.from(await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference)) || []);\n\t\t\tconst clientRects = getRectsByLine(nativeClientRects);\n\t\t\tconst fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n\t\t\tconst paddingObject = getPaddingObject(padding);\n\t\t\tfunction getBoundingClientRect() {\n\t\t\t\tif (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) return clientRects.find((rect) => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n\t\t\t\tif (clientRects.length >= 2) {\n\t\t\t\t\tif (getSideAxis(placement) === \"y\") {\n\t\t\t\t\t\tconst firstRect = clientRects[0];\n\t\t\t\t\t\tconst lastRect = clientRects[clientRects.length - 1];\n\t\t\t\t\t\tconst isTop = getSide(placement) === \"top\";\n\t\t\t\t\t\tconst top = firstRect.top;\n\t\t\t\t\t\tconst bottom = lastRect.bottom;\n\t\t\t\t\t\tconst left = isTop ? firstRect.left : lastRect.left;\n\t\t\t\t\t\tconst right = isTop ? firstRect.right : lastRect.right;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttop,\n\t\t\t\t\t\t\tbottom,\n\t\t\t\t\t\t\tleft,\n\t\t\t\t\t\t\tright,\n\t\t\t\t\t\t\twidth: right - left,\n\t\t\t\t\t\t\theight: bottom - top,\n\t\t\t\t\t\t\tx: left,\n\t\t\t\t\t\t\ty: top\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tconst isLeftSide = getSide(placement) === \"left\";\n\t\t\t\t\tconst maxRight = max(...clientRects.map((rect) => rect.right));\n\t\t\t\t\tconst minLeft = min(...clientRects.map((rect) => rect.left));\n\t\t\t\t\tconst measureRects = clientRects.filter((rect) => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n\t\t\t\t\tconst top = measureRects[0].top;\n\t\t\t\t\tconst bottom = measureRects[measureRects.length - 1].bottom;\n\t\t\t\t\tconst left = minLeft;\n\t\t\t\t\tconst right = maxRight;\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttop,\n\t\t\t\t\t\tbottom,\n\t\t\t\t\t\tleft,\n\t\t\t\t\t\tright,\n\t\t\t\t\t\twidth: right - left,\n\t\t\t\t\t\theight: bottom - top,\n\t\t\t\t\t\tx: left,\n\t\t\t\t\t\ty: top\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn fallback;\n\t\t\t}\n\t\t\tconst resetRects = await platform.getElementRects({\n\t\t\t\treference: { getBoundingClientRect },\n\t\t\t\tfloating: elements.floating,\n\t\t\t\tstrategy\n\t\t\t});\n\t\t\tif (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) return { reset: { rects: resetRects } };\n\t\t\treturn {};\n\t\t}\n\t};\n};\nvar originSides = /* @__PURE__ */ new Set([\"left\", \"top\"]);\nasync function convertValueToCoords(state, options) {\n\tconst { placement, platform, elements } = state;\n\tconst rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n\tconst side = getSide(placement);\n\tconst alignment = getAlignment(placement);\n\tconst isVertical = getSideAxis(placement) === \"y\";\n\tconst mainAxisMulti = originSides.has(side) ? -1 : 1;\n\tconst crossAxisMulti = rtl && isVertical ? -1 : 1;\n\tconst rawValue = evaluate(options, state);\n\tlet { mainAxis, crossAxis, alignmentAxis } = typeof rawValue === \"number\" ? {\n\t\tmainAxis: rawValue,\n\t\tcrossAxis: 0,\n\t\talignmentAxis: null\n\t} : {\n\t\tmainAxis: rawValue.mainAxis || 0,\n\t\tcrossAxis: rawValue.crossAxis || 0,\n\t\talignmentAxis: rawValue.alignmentAxis\n\t};\n\tif (alignment && typeof alignmentAxis === \"number\") crossAxis = alignment === \"end\" ? alignmentAxis * -1 : alignmentAxis;\n\treturn isVertical ? {\n\t\tx: crossAxis * crossAxisMulti,\n\t\ty: mainAxis * mainAxisMulti\n\t} : {\n\t\tx: mainAxis * mainAxisMulti,\n\t\ty: crossAxis * crossAxisMulti\n\t};\n}\n/**\n* Modifies the placement by translating the floating element along the\n* specified axes.\n* A number (shorthand for `mainAxis` or distance), or an axes configuration\n* object may be passed.\n* @see https://floating-ui.com/docs/offset\n*/\nvar offset$1 = function(options) {\n\tif (options === void 0) options = 0;\n\treturn {\n\t\tname: \"offset\",\n\t\toptions,\n\t\tasync fn(state) {\n\t\t\tvar _middlewareData$offse, _middlewareData$arrow;\n\t\t\tconst { x, y, placement, middlewareData } = state;\n\t\t\tconst diffCoords = await convertValueToCoords(state, options);\n\t\t\tif (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) return {};\n\t\t\treturn {\n\t\t\t\tx: x + diffCoords.x,\n\t\t\t\ty: y + diffCoords.y,\n\t\t\t\tdata: {\n\t\t\t\t\t...diffCoords,\n\t\t\t\t\tplacement\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t};\n};\n/**\n* Optimizes the visibility of the floating element by shifting it in order to\n* keep it in view when it will overflow the clipping boundary.\n* @see https://floating-ui.com/docs/shift\n*/\nvar shift$1 = function(options) {\n\tif (options === void 0) options = {};\n\treturn {\n\t\tname: \"shift\",\n\t\toptions,\n\t\tasync fn(state) {\n\t\t\tconst { x, y, placement, platform } = state;\n\t\t\tconst { mainAxis: checkMainAxis = true, crossAxis: checkCrossAxis = false, limiter = { fn: (_ref) => {\n\t\t\t\tlet { x, y } = _ref;\n\t\t\t\treturn {\n\t\t\t\t\tx,\n\t\t\t\t\ty\n\t\t\t\t};\n\t\t\t} }, ...detectOverflowOptions } = evaluate(options, state);\n\t\t\tconst coords = {\n\t\t\t\tx,\n\t\t\t\ty\n\t\t\t};\n\t\t\tconst overflow = await platform.detectOverflow(state, detectOverflowOptions);\n\t\t\tconst crossAxis = getSideAxis(getSide(placement));\n\t\t\tconst mainAxis = getOppositeAxis(crossAxis);\n\t\t\tlet mainAxisCoord = coords[mainAxis];\n\t\t\tlet crossAxisCoord = coords[crossAxis];\n\t\t\tif (checkMainAxis) {\n\t\t\t\tconst minSide = mainAxis === \"y\" ? \"top\" : \"left\";\n\t\t\t\tconst maxSide = mainAxis === \"y\" ? \"bottom\" : \"right\";\n\t\t\t\tconst min = mainAxisCoord + overflow[minSide];\n\t\t\t\tconst max = mainAxisCoord - overflow[maxSide];\n\t\t\t\tmainAxisCoord = clamp(min, mainAxisCoord, max);\n\t\t\t}\n\t\t\tif (checkCrossAxis) {\n\t\t\t\tconst minSide = crossAxis === \"y\" ? \"top\" : \"left\";\n\t\t\t\tconst maxSide = crossAxis === \"y\" ? \"bottom\" : \"right\";\n\t\t\t\tconst min = crossAxisCoord + overflow[minSide];\n\t\t\t\tconst max = crossAxisCoord - overflow[maxSide];\n\t\t\t\tcrossAxisCoord = clamp(min, crossAxisCoord, max);\n\t\t\t}\n\t\t\tconst limitedCoords = limiter.fn({\n\t\t\t\t...state,\n\t\t\t\t[mainAxis]: mainAxisCoord,\n\t\t\t\t[crossAxis]: crossAxisCoord\n\t\t\t});\n\t\t\treturn {\n\t\t\t\t...limitedCoords,\n\t\t\t\tdata: {\n\t\t\t\t\tx: limitedCoords.x - x,\n\t\t\t\t\ty: limitedCoords.y - y,\n\t\t\t\t\tenabled: {\n\t\t\t\t\t\t[mainAxis]: checkMainAxis,\n\t\t\t\t\t\t[crossAxis]: checkCrossAxis\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t};\n};\n/**\n* Built-in `limiter` that will stop `shift()` at a certain point.\n*/\nvar limitShift$1 = function(options) {\n\tif (options === void 0) options = {};\n\treturn {\n\t\toptions,\n\t\tfn(state) {\n\t\t\tconst { x, y, placement, rects, middlewareData } = state;\n\t\t\tconst { offset = 0, mainAxis: checkMainAxis = true, crossAxis: checkCrossAxis = true } = evaluate(options, state);\n\t\t\tconst coords = {\n\t\t\t\tx,\n\t\t\t\ty\n\t\t\t};\n\t\t\tconst crossAxis = getSideAxis(placement);\n\t\t\tconst mainAxis = getOppositeAxis(crossAxis);\n\t\t\tlet mainAxisCoord = coords[mainAxis];\n\t\t\tlet crossAxisCoord = coords[crossAxis];\n\t\t\tconst rawOffset = evaluate(offset, state);\n\t\t\tconst computedOffset = typeof rawOffset === \"number\" ? {\n\t\t\t\tmainAxis: rawOffset,\n\t\t\t\tcrossAxis: 0\n\t\t\t} : {\n\t\t\t\tmainAxis: 0,\n\t\t\t\tcrossAxis: 0,\n\t\t\t\t...rawOffset\n\t\t\t};\n\t\t\tif (checkMainAxis) {\n\t\t\t\tconst len = mainAxis === \"y\" ? \"height\" : \"width\";\n\t\t\t\tconst limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n\t\t\t\tconst limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n\t\t\t\tif (mainAxisCoord < limitMin) mainAxisCoord = limitMin;\n\t\t\t\telse if (mainAxisCoord > limitMax) mainAxisCoord = limitMax;\n\t\t\t}\n\t\t\tif (checkCrossAxis) {\n\t\t\t\tvar _middlewareData$offse, _middlewareData$offse2;\n\t\t\t\tconst len = mainAxis === \"y\" ? \"width\" : \"height\";\n\t\t\t\tconst isOriginSide = originSides.has(getSide(placement));\n\t\t\t\tconst limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n\t\t\t\tconst limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n\t\t\t\tif (crossAxisCoord < limitMin) crossAxisCoord = limitMin;\n\t\t\t\telse if (crossAxisCoord > limitMax) crossAxisCoord = limitMax;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t[mainAxis]: mainAxisCoord,\n\t\t\t\t[crossAxis]: crossAxisCoord\n\t\t\t};\n\t\t}\n\t};\n};\n/**\n* Provides data that allows you to change the size of the floating element —\n* for instance, prevent it from overflowing the clipping boundary or match the\n* width of the reference element.\n* @see https://floating-ui.com/docs/size\n*/\nvar size$1 = function(options) {\n\tif (options === void 0) options = {};\n\treturn {\n\t\tname: \"size\",\n\t\toptions,\n\t\tasync fn(state) {\n\t\t\tvar _state$middlewareData, _state$middlewareData2;\n\t\t\tconst { placement, rects, platform, elements } = state;\n\t\t\tconst { apply = () => {}, ...detectOverflowOptions } = evaluate(options, state);\n\t\t\tconst overflow = await platform.detectOverflow(state, detectOverflowOptions);\n\t\t\tconst side = getSide(placement);\n\t\t\tconst alignment = getAlignment(placement);\n\t\t\tconst isYAxis = getSideAxis(placement) === \"y\";\n\t\t\tconst { width, height } = rects.floating;\n\t\t\tlet heightSide;\n\t\t\tlet widthSide;\n\t\t\tif (side === \"top\" || side === \"bottom\") {\n\t\t\t\theightSide = side;\n\t\t\t\twidthSide = alignment === (await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)) ? \"start\" : \"end\") ? \"left\" : \"right\";\n\t\t\t} else {\n\t\t\t\twidthSide = side;\n\t\t\t\theightSide = alignment === \"end\" ? \"top\" : \"bottom\";\n\t\t\t}\n\t\t\tconst maximumClippingHeight = height - overflow.top - overflow.bottom;\n\t\t\tconst maximumClippingWidth = width - overflow.left - overflow.right;\n\t\t\tconst overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n\t\t\tconst overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n\t\t\tconst noShift = !state.middlewareData.shift;\n\t\t\tlet availableHeight = overflowAvailableHeight;\n\t\t\tlet availableWidth = overflowAvailableWidth;\n\t\t\tif ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) availableWidth = maximumClippingWidth;\n\t\t\tif ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) availableHeight = maximumClippingHeight;\n\t\t\tif (noShift && !alignment) {\n\t\t\t\tconst xMin = max(overflow.left, 0);\n\t\t\t\tconst xMax = max(overflow.right, 0);\n\t\t\t\tconst yMin = max(overflow.top, 0);\n\t\t\t\tconst yMax = max(overflow.bottom, 0);\n\t\t\t\tif (isYAxis) availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n\t\t\t\telse availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n\t\t\t}\n\t\t\tawait apply({\n\t\t\t\t...state,\n\t\t\t\tavailableWidth,\n\t\t\t\tavailableHeight\n\t\t\t});\n\t\t\tconst nextDimensions = await platform.getDimensions(elements.floating);\n\t\t\tif (width !== nextDimensions.width || height !== nextDimensions.height) return { reset: { rects: true } };\n\t\t\treturn {};\n\t\t}\n\t};\n};\n//#endregion\n//#region ../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs\nfunction hasWindow() {\n\treturn typeof window !== \"undefined\";\n}\nfunction getNodeName(node) {\n\tif (isNode(node)) return (node.nodeName || \"\").toLowerCase();\n\treturn \"#document\";\n}\nfunction getWindow(node) {\n\tvar _node$ownerDocument;\n\treturn (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n\tvar _ref;\n\treturn (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n\tif (!hasWindow()) return false;\n\treturn value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n\tif (!hasWindow()) return false;\n\treturn value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n\tif (!hasWindow()) return false;\n\treturn value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n\tif (!hasWindow() || typeof ShadowRoot === \"undefined\") return false;\n\treturn value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n\tconst { overflow, overflowX, overflowY, display } = getComputedStyle$1(element);\n\treturn /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== \"inline\" && display !== \"contents\";\n}\nfunction isTableElement(element) {\n\treturn /^(table|td|th)$/.test(getNodeName(element));\n}\nfunction isTopLayer(element) {\n\ttry {\n\t\tif (element.matches(\":popover-open\")) return true;\n\t} catch (_e) {}\n\ttry {\n\t\treturn element.matches(\":modal\");\n\t} catch (_e) {\n\t\treturn false;\n\t}\n}\nvar willChangeRe = /transform|translate|scale|rotate|perspective|filter/;\nvar containRe = /paint|layout|strict|content/;\nvar isNotNone = (value) => !!value && value !== \"none\";\nvar isWebKitValue;\nfunction isContainingBlock(elementOrCss) {\n\tconst css = isElement(elementOrCss) ? getComputedStyle$1(elementOrCss) : elementOrCss;\n\treturn isNotNone(css.transform) || isNotNone(css.translate) || isNotNone(css.scale) || isNotNone(css.rotate) || isNotNone(css.perspective) || !isWebKit() && (isNotNone(css.backdropFilter) || isNotNone(css.filter)) || willChangeRe.test(css.willChange || \"\") || containRe.test(css.contain || \"\");\n}\nfunction getContainingBlock(element) {\n\tlet currentNode = getParentNode(element);\n\twhile (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n\t\tif (isContainingBlock(currentNode)) return currentNode;\n\t\telse if (isTopLayer(currentNode)) return null;\n\t\tcurrentNode = getParentNode(currentNode);\n\t}\n\treturn null;\n}\nfunction isWebKit() {\n\tif (isWebKitValue == null) isWebKitValue = typeof CSS !== \"undefined\" && CSS.supports && CSS.supports(\"-webkit-backdrop-filter\", \"none\");\n\treturn isWebKitValue;\n}\nfunction isLastTraversableNode(node) {\n\treturn /^(html|body|#document)$/.test(getNodeName(node));\n}\nfunction getComputedStyle$1(element) {\n\treturn getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n\tif (isElement(element)) return {\n\t\tscrollLeft: element.scrollLeft,\n\t\tscrollTop: element.scrollTop\n\t};\n\treturn {\n\t\tscrollLeft: element.scrollX,\n\t\tscrollTop: element.scrollY\n\t};\n}\nfunction getParentNode(node) {\n\tif (getNodeName(node) === \"html\") return node;\n\tconst result = node.assignedSlot || node.parentNode || isShadowRoot(node) && node.host || getDocumentElement(node);\n\treturn isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n\tconst parentNode = getParentNode(node);\n\tif (isLastTraversableNode(parentNode)) return node.ownerDocument ? node.ownerDocument.body : node.body;\n\tif (isHTMLElement(parentNode) && isOverflowElement(parentNode)) return parentNode;\n\treturn getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n\tvar _node$ownerDocument2;\n\tif (list === void 0) list = [];\n\tif (traverseIframes === void 0) traverseIframes = true;\n\tconst scrollableAncestor = getNearestOverflowAncestor(node);\n\tconst isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n\tconst win = getWindow(scrollableAncestor);\n\tif (isBody) {\n\t\tconst frameElement = getFrameElement(win);\n\t\treturn list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n\t} else return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\nfunction getFrameElement(win) {\n\treturn win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n//#endregion\n//#region ../../node_modules/.pnpm/@floating-ui+dom@1.7.6/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs\nfunction getCssDimensions(element) {\n\tconst css = getComputedStyle$1(element);\n\tlet width = parseFloat(css.width) || 0;\n\tlet height = parseFloat(css.height) || 0;\n\tconst hasOffset = isHTMLElement(element);\n\tconst offsetWidth = hasOffset ? element.offsetWidth : width;\n\tconst offsetHeight = hasOffset ? element.offsetHeight : height;\n\tconst shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n\tif (shouldFallback) {\n\t\twidth = offsetWidth;\n\t\theight = offsetHeight;\n\t}\n\treturn {\n\t\twidth,\n\t\theight,\n\t\t$: shouldFallback\n\t};\n}\nfunction unwrapElement$1(element) {\n\treturn !isElement(element) ? element.contextElement : element;\n}\nfunction getScale(element) {\n\tconst domElement = unwrapElement$1(element);\n\tif (!isHTMLElement(domElement)) return createCoords(1);\n\tconst rect = domElement.getBoundingClientRect();\n\tconst { width, height, $ } = getCssDimensions(domElement);\n\tlet x = ($ ? round(rect.width) : rect.width) / width;\n\tlet y = ($ ? round(rect.height) : rect.height) / height;\n\tif (!x || !Number.isFinite(x)) x = 1;\n\tif (!y || !Number.isFinite(y)) y = 1;\n\treturn {\n\t\tx,\n\t\ty\n\t};\n}\nvar noOffsets = /* @__PURE__ */ createCoords(0);\nfunction getVisualOffsets(element) {\n\tconst win = getWindow(element);\n\tif (!isWebKit() || !win.visualViewport) return noOffsets;\n\treturn {\n\t\tx: win.visualViewport.offsetLeft,\n\t\ty: win.visualViewport.offsetTop\n\t};\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n\tif (isFixed === void 0) isFixed = false;\n\tif (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) return false;\n\treturn isFixed;\n}\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n\tif (includeScale === void 0) includeScale = false;\n\tif (isFixedStrategy === void 0) isFixedStrategy = false;\n\tconst clientRect = element.getBoundingClientRect();\n\tconst domElement = unwrapElement$1(element);\n\tlet scale = createCoords(1);\n\tif (includeScale) if (offsetParent) {\n\t\tif (isElement(offsetParent)) scale = getScale(offsetParent);\n\t} else scale = getScale(element);\n\tconst visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n\tlet x = (clientRect.left + visualOffsets.x) / scale.x;\n\tlet y = (clientRect.top + visualOffsets.y) / scale.y;\n\tlet width = clientRect.width / scale.x;\n\tlet height = clientRect.height / scale.y;\n\tif (domElement) {\n\t\tconst win = getWindow(domElement);\n\t\tconst offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n\t\tlet currentWin = win;\n\t\tlet currentIFrame = getFrameElement(currentWin);\n\t\twhile (currentIFrame && offsetParent && offsetWin !== currentWin) {\n\t\t\tconst iframeScale = getScale(currentIFrame);\n\t\t\tconst iframeRect = currentIFrame.getBoundingClientRect();\n\t\t\tconst css = getComputedStyle$1(currentIFrame);\n\t\t\tconst left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n\t\t\tconst top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n\t\t\tx *= iframeScale.x;\n\t\t\ty *= iframeScale.y;\n\t\t\twidth *= iframeScale.x;\n\t\t\theight *= iframeScale.y;\n\t\t\tx += left;\n\t\t\ty += top;\n\t\t\tcurrentWin = getWindow(currentIFrame);\n\t\t\tcurrentIFrame = getFrameElement(currentWin);\n\t\t}\n\t}\n\treturn rectToClientRect({\n\t\twidth,\n\t\theight,\n\t\tx,\n\t\ty\n\t});\n}\nfunction getWindowScrollBarX(element, rect) {\n\tconst leftScroll = getNodeScroll(element).scrollLeft;\n\tif (!rect) return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n\treturn rect.left + leftScroll;\n}\nfunction getHTMLOffset(documentElement, scroll) {\n\tconst htmlRect = documentElement.getBoundingClientRect();\n\treturn {\n\t\tx: htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect),\n\t\ty: htmlRect.top + scroll.scrollTop\n\t};\n}\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n\tlet { elements, rect, offsetParent, strategy } = _ref;\n\tconst isFixed = strategy === \"fixed\";\n\tconst documentElement = getDocumentElement(offsetParent);\n\tconst topLayer = elements ? isTopLayer(elements.floating) : false;\n\tif (offsetParent === documentElement || topLayer && isFixed) return rect;\n\tlet scroll = {\n\t\tscrollLeft: 0,\n\t\tscrollTop: 0\n\t};\n\tlet scale = createCoords(1);\n\tconst offsets = createCoords(0);\n\tconst isOffsetParentAnElement = isHTMLElement(offsetParent);\n\tif (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n\t\tif (getNodeName(offsetParent) !== \"body\" || isOverflowElement(documentElement)) scroll = getNodeScroll(offsetParent);\n\t\tif (isOffsetParentAnElement) {\n\t\t\tconst offsetRect = getBoundingClientRect(offsetParent);\n\t\t\tscale = getScale(offsetParent);\n\t\t\toffsets.x = offsetRect.x + offsetParent.clientLeft;\n\t\t\toffsets.y = offsetRect.y + offsetParent.clientTop;\n\t\t}\n\t}\n\tconst htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n\treturn {\n\t\twidth: rect.width * scale.x,\n\t\theight: rect.height * scale.y,\n\t\tx: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n\t\ty: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n\t};\n}\nfunction getClientRects(element) {\n\treturn Array.from(element.getClientRects());\n}\nfunction getDocumentRect(element) {\n\tconst html = getDocumentElement(element);\n\tconst scroll = getNodeScroll(element);\n\tconst body = element.ownerDocument.body;\n\tconst width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n\tconst height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n\tlet x = -scroll.scrollLeft + getWindowScrollBarX(element);\n\tconst y = -scroll.scrollTop;\n\tif (getComputedStyle$1(body).direction === \"rtl\") x += max(html.clientWidth, body.clientWidth) - width;\n\treturn {\n\t\twidth,\n\t\theight,\n\t\tx,\n\t\ty\n\t};\n}\nvar SCROLLBAR_MAX = 25;\nfunction getViewportRect(element, strategy) {\n\tconst win = getWindow(element);\n\tconst html = getDocumentElement(element);\n\tconst visualViewport = win.visualViewport;\n\tlet width = html.clientWidth;\n\tlet height = html.clientHeight;\n\tlet x = 0;\n\tlet y = 0;\n\tif (visualViewport) {\n\t\twidth = visualViewport.width;\n\t\theight = visualViewport.height;\n\t\tconst visualViewportBased = isWebKit();\n\t\tif (!visualViewportBased || visualViewportBased && strategy === \"fixed\") {\n\t\t\tx = visualViewport.offsetLeft;\n\t\t\ty = visualViewport.offsetTop;\n\t\t}\n\t}\n\tconst windowScrollbarX = getWindowScrollBarX(html);\n\tif (windowScrollbarX <= 0) {\n\t\tconst doc = html.ownerDocument;\n\t\tconst body = doc.body;\n\t\tconst bodyStyles = getComputedStyle(body);\n\t\tconst bodyMarginInline = doc.compatMode === \"CSS1Compat\" ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n\t\tconst clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n\t\tif (clippingStableScrollbarWidth <= SCROLLBAR_MAX) width -= clippingStableScrollbarWidth;\n\t} else if (windowScrollbarX <= SCROLLBAR_MAX) width += windowScrollbarX;\n\treturn {\n\t\twidth,\n\t\theight,\n\t\tx,\n\t\ty\n\t};\n}\nfunction getInnerBoundingClientRect(element, strategy) {\n\tconst clientRect = getBoundingClientRect(element, true, strategy === \"fixed\");\n\tconst top = clientRect.top + element.clientTop;\n\tconst left = clientRect.left + element.clientLeft;\n\tconst scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n\treturn {\n\t\twidth: element.clientWidth * scale.x,\n\t\theight: element.clientHeight * scale.y,\n\t\tx: left * scale.x,\n\t\ty: top * scale.y\n\t};\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n\tlet rect;\n\tif (clippingAncestor === \"viewport\") rect = getViewportRect(element, strategy);\n\telse if (clippingAncestor === \"document\") rect = getDocumentRect(getDocumentElement(element));\n\telse if (isElement(clippingAncestor)) rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n\telse {\n\t\tconst visualOffsets = getVisualOffsets(element);\n\t\trect = {\n\t\t\tx: clippingAncestor.x - visualOffsets.x,\n\t\t\ty: clippingAncestor.y - visualOffsets.y,\n\t\t\twidth: clippingAncestor.width,\n\t\t\theight: clippingAncestor.height\n\t\t};\n\t}\n\treturn rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n\tconst parentNode = getParentNode(element);\n\tif (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) return false;\n\treturn getComputedStyle$1(parentNode).position === \"fixed\" || hasFixedPositionAncestor(parentNode, stopNode);\n}\nfunction getClippingElementAncestors(element, cache) {\n\tconst cachedResult = cache.get(element);\n\tif (cachedResult) return cachedResult;\n\tlet result = getOverflowAncestors(element, [], false).filter((el) => isElement(el) && getNodeName(el) !== \"body\");\n\tlet currentContainingBlockComputedStyle = null;\n\tconst elementIsFixed = getComputedStyle$1(element).position === \"fixed\";\n\tlet currentNode = elementIsFixed ? getParentNode(element) : element;\n\twhile (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n\t\tconst computedStyle = getComputedStyle$1(currentNode);\n\t\tconst currentNodeIsContaining = isContainingBlock(currentNode);\n\t\tif (!currentNodeIsContaining && computedStyle.position === \"fixed\") currentContainingBlockComputedStyle = null;\n\t\tif (elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === \"static\" && !!currentContainingBlockComputedStyle && (currentContainingBlockComputedStyle.position === \"absolute\" || currentContainingBlockComputedStyle.position === \"fixed\") || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode)) result = result.filter((ancestor) => ancestor !== currentNode);\n\t\telse currentContainingBlockComputedStyle = computedStyle;\n\t\tcurrentNode = getParentNode(currentNode);\n\t}\n\tcache.set(element, result);\n\treturn result;\n}\nfunction getClippingRect(_ref) {\n\tlet { element, boundary, rootBoundary, strategy } = _ref;\n\tconst clippingAncestors = [...boundary === \"clippingAncestors\" ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary), rootBoundary];\n\tconst firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy);\n\tlet top = firstRect.top;\n\tlet right = firstRect.right;\n\tlet bottom = firstRect.bottom;\n\tlet left = firstRect.left;\n\tfor (let i = 1; i < clippingAncestors.length; i++) {\n\t\tconst rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy);\n\t\ttop = max(rect.top, top);\n\t\tright = min(rect.right, right);\n\t\tbottom = min(rect.bottom, bottom);\n\t\tleft = max(rect.left, left);\n\t}\n\treturn {\n\t\twidth: right - left,\n\t\theight: bottom - top,\n\t\tx: left,\n\t\ty: top\n\t};\n}\nfunction getDimensions(element) {\n\tconst { width, height } = getCssDimensions(element);\n\treturn {\n\t\twidth,\n\t\theight\n\t};\n}\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n\tconst isOffsetParentAnElement = isHTMLElement(offsetParent);\n\tconst documentElement = getDocumentElement(offsetParent);\n\tconst isFixed = strategy === \"fixed\";\n\tconst rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n\tlet scroll = {\n\t\tscrollLeft: 0,\n\t\tscrollTop: 0\n\t};\n\tconst offsets = createCoords(0);\n\tfunction setLeftRTLScrollbarOffset() {\n\t\toffsets.x = getWindowScrollBarX(documentElement);\n\t}\n\tif (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n\t\tif (getNodeName(offsetParent) !== \"body\" || isOverflowElement(documentElement)) scroll = getNodeScroll(offsetParent);\n\t\tif (isOffsetParentAnElement) {\n\t\t\tconst offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n\t\t\toffsets.x = offsetRect.x + offsetParent.clientLeft;\n\t\t\toffsets.y = offsetRect.y + offsetParent.clientTop;\n\t\t} else if (documentElement) setLeftRTLScrollbarOffset();\n\t}\n\tif (isFixed && !isOffsetParentAnElement && documentElement) setLeftRTLScrollbarOffset();\n\tconst htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n\treturn {\n\t\tx: rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x,\n\t\ty: rect.top + scroll.scrollTop - offsets.y - htmlOffset.y,\n\t\twidth: rect.width,\n\t\theight: rect.height\n\t};\n}\nfunction isStaticPositioned(element) {\n\treturn getComputedStyle$1(element).position === \"static\";\n}\nfunction getTrueOffsetParent(element, polyfill) {\n\tif (!isHTMLElement(element) || getComputedStyle$1(element).position === \"fixed\") return null;\n\tif (polyfill) return polyfill(element);\n\tlet rawOffsetParent = element.offsetParent;\n\tif (getDocumentElement(element) === rawOffsetParent) rawOffsetParent = rawOffsetParent.ownerDocument.body;\n\treturn rawOffsetParent;\n}\nfunction getOffsetParent(element, polyfill) {\n\tconst win = getWindow(element);\n\tif (isTopLayer(element)) return win;\n\tif (!isHTMLElement(element)) {\n\t\tlet svgOffsetParent = getParentNode(element);\n\t\twhile (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n\t\t\tif (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) return svgOffsetParent;\n\t\t\tsvgOffsetParent = getParentNode(svgOffsetParent);\n\t\t}\n\t\treturn win;\n\t}\n\tlet offsetParent = getTrueOffsetParent(element, polyfill);\n\twhile (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n\tif (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) return win;\n\treturn offsetParent || getContainingBlock(element) || win;\n}\nvar getElementRects = async function(data) {\n\tconst getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n\tconst getDimensionsFn = this.getDimensions;\n\tconst floatingDimensions = await getDimensionsFn(data.floating);\n\treturn {\n\t\treference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n\t\tfloating: {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth: floatingDimensions.width,\n\t\t\theight: floatingDimensions.height\n\t\t}\n\t};\n};\nfunction isRTL(element) {\n\treturn getComputedStyle$1(element).direction === \"rtl\";\n}\nvar platform = {\n\tconvertOffsetParentRelativeRectToViewportRelativeRect,\n\tgetDocumentElement,\n\tgetClippingRect,\n\tgetOffsetParent,\n\tgetElementRects,\n\tgetClientRects,\n\tgetDimensions,\n\tgetScale,\n\tisElement,\n\tisRTL\n};\nfunction rectsAreEqual(a, b) {\n\treturn a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\nfunction observeMove(element, onMove) {\n\tlet io = null;\n\tlet timeoutId;\n\tconst root = getDocumentElement(element);\n\tfunction cleanup() {\n\t\tvar _io;\n\t\tclearTimeout(timeoutId);\n\t\t(_io = io) == null || _io.disconnect();\n\t\tio = null;\n\t}\n\tfunction refresh(skip, threshold) {\n\t\tif (skip === void 0) skip = false;\n\t\tif (threshold === void 0) threshold = 1;\n\t\tcleanup();\n\t\tconst elementRectForRootMargin = element.getBoundingClientRect();\n\t\tconst { left, top, width, height } = elementRectForRootMargin;\n\t\tif (!skip) onMove();\n\t\tif (!width || !height) return;\n\t\tconst insetTop = floor(top);\n\t\tconst insetRight = floor(root.clientWidth - (left + width));\n\t\tconst insetBottom = floor(root.clientHeight - (top + height));\n\t\tconst insetLeft = floor(left);\n\t\tconst options = {\n\t\t\trootMargin: -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\",\n\t\t\tthreshold: max(0, min(1, threshold)) || 1\n\t\t};\n\t\tlet isFirstUpdate = true;\n\t\tfunction handleObserve(entries) {\n\t\t\tconst ratio = entries[0].intersectionRatio;\n\t\t\tif (ratio !== threshold) {\n\t\t\t\tif (!isFirstUpdate) return refresh();\n\t\t\t\tif (!ratio) timeoutId = setTimeout(() => {\n\t\t\t\t\trefresh(false, 1e-7);\n\t\t\t\t}, 1e3);\n\t\t\t\telse refresh(false, ratio);\n\t\t\t}\n\t\t\tif (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) refresh();\n\t\t\tisFirstUpdate = false;\n\t\t}\n\t\ttry {\n\t\t\tio = new IntersectionObserver(handleObserve, {\n\t\t\t\t...options,\n\t\t\t\troot: root.ownerDocument\n\t\t\t});\n\t\t} catch (_e) {\n\t\t\tio = new IntersectionObserver(handleObserve, options);\n\t\t}\n\t\tio.observe(element);\n\t}\n\trefresh(true);\n\treturn cleanup;\n}\n/**\n* Automatically updates the position of the floating element when necessary.\n* Should only be called when the floating element is mounted on the DOM or\n* visible on the screen.\n* @returns cleanup function that should be invoked when the floating element is\n* removed from the DOM or hidden from the screen.\n* @see https://floating-ui.com/docs/autoUpdate\n*/\nfunction autoUpdate(reference, floating, update, options) {\n\tif (options === void 0) options = {};\n\tconst { ancestorScroll = true, ancestorResize = true, elementResize = typeof ResizeObserver === \"function\", layoutShift = typeof IntersectionObserver === \"function\", animationFrame = false } = options;\n\tconst referenceEl = unwrapElement$1(reference);\n\tconst ancestors = ancestorScroll || ancestorResize ? [...referenceEl ? getOverflowAncestors(referenceEl) : [], ...floating ? getOverflowAncestors(floating) : []] : [];\n\tancestors.forEach((ancestor) => {\n\t\tancestorScroll && ancestor.addEventListener(\"scroll\", update, { passive: true });\n\t\tancestorResize && ancestor.addEventListener(\"resize\", update);\n\t});\n\tconst cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n\tlet reobserveFrame = -1;\n\tlet resizeObserver = null;\n\tif (elementResize) {\n\t\tresizeObserver = new ResizeObserver((_ref) => {\n\t\t\tlet [firstEntry] = _ref;\n\t\t\tif (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) {\n\t\t\t\tresizeObserver.unobserve(floating);\n\t\t\t\tcancelAnimationFrame(reobserveFrame);\n\t\t\t\treobserveFrame = requestAnimationFrame(() => {\n\t\t\t\t\tvar _resizeObserver;\n\t\t\t\t\t(_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n\t\t\t\t});\n\t\t\t}\n\t\t\tupdate();\n\t\t});\n\t\tif (referenceEl && !animationFrame) resizeObserver.observe(referenceEl);\n\t\tif (floating) resizeObserver.observe(floating);\n\t}\n\tlet frameId;\n\tlet prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n\tif (animationFrame) frameLoop();\n\tfunction frameLoop() {\n\t\tconst nextRefRect = getBoundingClientRect(reference);\n\t\tif (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) update();\n\t\tprevRefRect = nextRefRect;\n\t\tframeId = requestAnimationFrame(frameLoop);\n\t}\n\tupdate();\n\treturn () => {\n\t\tvar _resizeObserver2;\n\t\tancestors.forEach((ancestor) => {\n\t\t\tancestorScroll && ancestor.removeEventListener(\"scroll\", update);\n\t\t\tancestorResize && ancestor.removeEventListener(\"resize\", update);\n\t\t});\n\t\tcleanupIo?.();\n\t\t(_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n\t\tresizeObserver = null;\n\t\tif (animationFrame) cancelAnimationFrame(frameId);\n\t};\n}\n/**\n* Modifies the placement by translating the floating element along the\n* specified axes.\n* A number (shorthand for `mainAxis` or distance), or an axes configuration\n* object may be passed.\n* @see https://floating-ui.com/docs/offset\n*/\nvar offset = offset$1;\n/**\n* Optimizes the visibility of the floating element by choosing the placement\n* that has the most space available automatically, without needing to specify a\n* preferred placement. Alternative to `flip`.\n* @see https://floating-ui.com/docs/autoPlacement\n*/\nvar autoPlacement = autoPlacement$1;\n/**\n* Optimizes the visibility of the floating element by shifting it in order to\n* keep it in view when it will overflow the clipping boundary.\n* @see https://floating-ui.com/docs/shift\n*/\nvar shift = shift$1;\n/**\n* Optimizes the visibility of the floating element by flipping the `placement`\n* in order to keep it in view when the preferred placement(s) will overflow the\n* clipping boundary. Alternative to `autoPlacement`.\n* @see https://floating-ui.com/docs/flip\n*/\nvar flip = flip$1;\n/**\n* Provides data that allows you to change the size of the floating element —\n* for instance, prevent it from overflowing the clipping boundary or match the\n* width of the reference element.\n* @see https://floating-ui.com/docs/size\n*/\nvar size = size$1;\n/**\n* Provides data to hide the floating element in applicable situations, such as\n* when it is not in the same clipping context as the reference element.\n* @see https://floating-ui.com/docs/hide\n*/\nvar hide = hide$1;\n/**\n* Provides data to position an inner element of the floating element so that it\n* appears centered to the reference element.\n* @see https://floating-ui.com/docs/arrow\n*/\nvar arrow$1 = arrow$2;\n/**\n* Provides improved positioning for inline reference elements that can span\n* over multiple lines, such as hyperlinks or range selections.\n* @see https://floating-ui.com/docs/inline\n*/\nvar inline = inline$1;\n/**\n* Built-in `limiter` that will stop `shift()` at a certain point.\n*/\nvar limitShift = limitShift$1;\n/**\n* Computes the `x` and `y` coordinates that will place the floating element\n* next to a given reference element.\n*/\nvar computePosition = (reference, floating, options) => {\n\tconst cache = /* @__PURE__ */ new Map();\n\tconst mergedOptions = {\n\t\tplatform,\n\t\t...options\n\t};\n\tconst platformWithCache = {\n\t\t...mergedOptions.platform,\n\t\t_c: cache\n\t};\n\treturn computePosition$1(reference, floating, {\n\t\t...mergedOptions,\n\t\tplatform: platformWithCache\n\t});\n};\n//#endregion\n//#region ../../node_modules/.pnpm/vue-demi@0.14.10_vue@3.5.31_typescript@5.9.3_/node_modules/vue-demi/lib/index.mjs\nvar lib_exports = /* @__PURE__ */ __exportAll({\n\tVue: () => Vue,\n\tVue2: () => void 0,\n\tdel: () => del,\n\tinstall: () => install,\n\tisVue2: () => false,\n\tisVue3: () => true,\n\tset: () => set\n});\nimport * as import_vue from \"vue\";\n__reExport(lib_exports, import_vue);\nfunction install() {}\nfunction set(target, key, val) {\n\tif (Array.isArray(target)) {\n\t\ttarget.length = Math.max(target.length, key);\n\t\ttarget.splice(key, 1, val);\n\t\treturn val;\n\t}\n\ttarget[key] = val;\n\treturn val;\n}\nfunction del(target, key) {\n\tif (Array.isArray(target)) {\n\t\ttarget.splice(key, 1);\n\t\treturn;\n\t}\n\tdelete target[key];\n}\n//#endregion\n//#region ../../node_modules/.pnpm/@floating-ui+vue@1.1.11_vue@3.5.31_typescript@5.9.3_/node_modules/@floating-ui/vue/dist/floating-ui.vue.mjs\nfunction isComponentPublicInstance(target) {\n\treturn target != null && typeof target === \"object\" && \"$el\" in target;\n}\nfunction unwrapElement(target) {\n\tif (isComponentPublicInstance(target)) {\n\t\tconst element = target.$el;\n\t\treturn isNode(element) && getNodeName(element) === \"#comment\" ? null : element;\n\t}\n\treturn target;\n}\nfunction toValue$1(source) {\n\treturn typeof source === \"function\" ? source() : (0, lib_exports.unref)(source);\n}\n/**\n* Positions an inner element of the floating element such that it is centered to the reference element.\n* @param options The arrow options.\n* @see https://floating-ui.com/docs/arrow\n*/\nfunction arrow(options) {\n\treturn {\n\t\tname: \"arrow\",\n\t\toptions,\n\t\tfn(args) {\n\t\t\tconst element = unwrapElement(toValue$1(options.element));\n\t\t\tif (element == null) return {};\n\t\t\treturn arrow$1({\n\t\t\t\telement,\n\t\t\t\tpadding: options.padding\n\t\t\t}).fn(args);\n\t\t}\n\t};\n}\nfunction getDPR(element) {\n\tif (typeof window === \"undefined\") return 1;\n\treturn (element.ownerDocument.defaultView || window).devicePixelRatio || 1;\n}\nfunction roundByDPR(element, value) {\n\tconst dpr = getDPR(element);\n\treturn Math.round(value * dpr) / dpr;\n}\n/**\n* Computes the `x` and `y` coordinates that will place the floating element next to a reference element when it is given a certain CSS positioning strategy.\n* @param reference The reference template ref.\n* @param floating The floating template ref.\n* @param options The floating options.\n* @see https://floating-ui.com/docs/vue\n*/\nfunction useFloating(reference, floating, options) {\n\tif (options === void 0) options = {};\n\tconst whileElementsMountedOption = options.whileElementsMounted;\n\tconst openOption = (0, lib_exports.computed)(() => {\n\t\tvar _toValue;\n\t\treturn (_toValue = toValue$1(options.open)) != null ? _toValue : true;\n\t});\n\tconst middlewareOption = (0, lib_exports.computed)(() => toValue$1(options.middleware));\n\tconst placementOption = (0, lib_exports.computed)(() => {\n\t\tvar _toValue2;\n\t\treturn (_toValue2 = toValue$1(options.placement)) != null ? _toValue2 : \"bottom\";\n\t});\n\tconst strategyOption = (0, lib_exports.computed)(() => {\n\t\tvar _toValue3;\n\t\treturn (_toValue3 = toValue$1(options.strategy)) != null ? _toValue3 : \"absolute\";\n\t});\n\tconst transformOption = (0, lib_exports.computed)(() => {\n\t\tvar _toValue4;\n\t\treturn (_toValue4 = toValue$1(options.transform)) != null ? _toValue4 : true;\n\t});\n\tconst referenceElement = (0, lib_exports.computed)(() => unwrapElement(reference.value));\n\tconst floatingElement = (0, lib_exports.computed)(() => unwrapElement(floating.value));\n\tconst x = (0, lib_exports.ref)(0);\n\tconst y = (0, lib_exports.ref)(0);\n\tconst strategy = (0, lib_exports.ref)(strategyOption.value);\n\tconst placement = (0, lib_exports.ref)(placementOption.value);\n\tconst middlewareData = (0, lib_exports.shallowRef)({});\n\tconst isPositioned = (0, lib_exports.ref)(false);\n\tconst floatingStyles = (0, lib_exports.computed)(() => {\n\t\tconst initialStyles = {\n\t\t\tposition: strategy.value,\n\t\t\tleft: \"0\",\n\t\t\ttop: \"0\"\n\t\t};\n\t\tif (!floatingElement.value) return initialStyles;\n\t\tconst xVal = roundByDPR(floatingElement.value, x.value);\n\t\tconst yVal = roundByDPR(floatingElement.value, y.value);\n\t\tif (transformOption.value) return {\n\t\t\t...initialStyles,\n\t\t\ttransform: \"translate(\" + xVal + \"px, \" + yVal + \"px)\",\n\t\t\t...getDPR(floatingElement.value) >= 1.5 && { willChange: \"transform\" }\n\t\t};\n\t\treturn {\n\t\t\tposition: strategy.value,\n\t\t\tleft: xVal + \"px\",\n\t\t\ttop: yVal + \"px\"\n\t\t};\n\t});\n\tlet whileElementsMountedCleanup;\n\tfunction update() {\n\t\tif (referenceElement.value == null || floatingElement.value == null) return;\n\t\tconst open = openOption.value;\n\t\tcomputePosition(referenceElement.value, floatingElement.value, {\n\t\t\tmiddleware: middlewareOption.value,\n\t\t\tplacement: placementOption.value,\n\t\t\tstrategy: strategyOption.value\n\t\t}).then((position) => {\n\t\t\tx.value = position.x;\n\t\t\ty.value = position.y;\n\t\t\tstrategy.value = position.strategy;\n\t\t\tplacement.value = position.placement;\n\t\t\tmiddlewareData.value = position.middlewareData;\n\t\t\t/**\n\t\t\t* The floating element's position may be recomputed while it's closed\n\t\t\t* but still mounted (such as when transitioning out). To ensure\n\t\t\t* `isPositioned` will be `false` initially on the next open, avoid\n\t\t\t* setting it to `true` when `open === false` (must be specified).\n\t\t\t*/\n\t\t\tisPositioned.value = open !== false;\n\t\t});\n\t}\n\tfunction cleanup() {\n\t\tif (typeof whileElementsMountedCleanup === \"function\") {\n\t\t\twhileElementsMountedCleanup();\n\t\t\twhileElementsMountedCleanup = void 0;\n\t\t}\n\t}\n\tfunction attach() {\n\t\tcleanup();\n\t\tif (whileElementsMountedOption === void 0) {\n\t\t\tupdate();\n\t\t\treturn;\n\t\t}\n\t\tif (referenceElement.value != null && floatingElement.value != null) {\n\t\t\twhileElementsMountedCleanup = whileElementsMountedOption(referenceElement.value, floatingElement.value, update);\n\t\t\treturn;\n\t\t}\n\t}\n\tfunction reset() {\n\t\tif (!openOption.value) isPositioned.value = false;\n\t}\n\t(0, lib_exports.watch)([\n\t\tmiddlewareOption,\n\t\tplacementOption,\n\t\tstrategyOption,\n\t\topenOption\n\t], update, { flush: \"sync\" });\n\t(0, lib_exports.watch)([referenceElement, floatingElement], attach, { flush: \"sync\" });\n\t(0, lib_exports.watch)(openOption, reset, { flush: \"sync\" });\n\tif ((0, lib_exports.getCurrentScope)()) (0, lib_exports.onScopeDispose)(cleanup);\n\treturn {\n\t\tx: (0, lib_exports.shallowReadonly)(x),\n\t\ty: (0, lib_exports.shallowReadonly)(y),\n\t\tstrategy: (0, lib_exports.shallowReadonly)(strategy),\n\t\tplacement: (0, lib_exports.shallowReadonly)(placement),\n\t\tmiddlewareData: (0, lib_exports.shallowReadonly)(middlewareData),\n\t\tisPositioned: (0, lib_exports.shallowReadonly)(isPositioned),\n\t\tfloatingStyles,\n\t\tupdate\n\t};\n}\n//#endregion\nexport { flip as a, limitShift as c, size as d, autoUpdate as i, offset as l, useFloating as n, hide as o, autoPlacement as r, inline as s, arrow as t, shift as u };\n\n//# sourceMappingURL=floating-ui.vue-CH2o_mZU.mjs.map","import { i as getSafeDocument } from \"./dom-AhkaSoh8.mjs\";\n//#region src/utils/getElement.ts\nvar getElement = (element, root = getSafeDocument()) => {\n\tif (!element) return void 0;\n\tif (typeof element === \"string\") {\n\t\tif (root === null) return void 0;\n\t\treturn getSafeDocument()?.getElementById(element) ?? root.querySelector(element) ?? void 0;\n\t}\n\treturn element.$el ?? element;\n};\n//#endregion\nexport { getElement as t };\n\n//# sourceMappingURL=getElement-D2Jr1cbp.mjs.map","import { E as createSharedComposable, R as useToNumber, _ as useMouse$1, i as onClickOutside } from \"./dist-Dk9C_HFS.mjs\";\nimport { a as getSafeWindow, i as getSafeDocument } from \"./dom-AhkaSoh8.mjs\";\nimport { t as useDefaults } from \"./useDefaults-DseelK6y.mjs\";\nimport { t as useId$1 } from \"./useId-D1sqXtwx.mjs\";\nimport { t as useShowHide } from \"./useShowHide-CBFt1_EW.mjs\";\nimport { t as ConditionalTeleport_default } from \"./ConditionalTeleport-B4KYZIM6.mjs\";\nimport { a as flip, d as size, i as autoUpdate, l as offset, n as useFloating, o as hide, r as autoPlacement, s as inline, t as arrow, u as shift } from \"./floating-ui.vue-CH2o_mZU.mjs\";\nimport { t as getElement } from \"./getElement-D2Jr1cbp.mjs\";\nimport { Fragment, Transition, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, guardReactiveProps, h, mergeModels, mergeProps, nextTick, normalizeClass, normalizeProps, normalizeStyle, onBeforeUnmount, onMounted, openBlock, ref, render, renderSlot, toDisplayString, toRef, toValue, unref, useAttrs, useModel, useSlots, useTemplateRef, vShow, watch, withCtx, withDirectives } from \"vue\";\n//#region src/composables/useMouse.ts\nvar useMouse = createSharedComposable(useMouse$1);\n//#endregion\n//#region src/components/BPopover/BPopover.vue?vue&type=script&setup=true&lang.ts\nvar _hoisted_1 = [\"id\"];\nvar _hoisted_2 = [\"id\"];\n//#endregion\n//#region src/components/BPopover/BPopover.vue\nvar BPopover_default = /* @__PURE__ */ defineComponent({\n\tinheritAttrs: false,\n\t__name: \"BPopover\",\n\tprops: /* @__PURE__ */ mergeModels({\n\t\tbody: { default: void 0 },\n\t\tbodyClass: { default: void 0 },\n\t\tboundary: { default: \"clippingAncestors\" },\n\t\tboundaryPadding: { default: void 0 },\n\t\tclick: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\tcloseOnHide: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tfocus: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\thover: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\tdelay: { default: () => ({\n\t\t\tshow: 100,\n\t\t\thide: 300\n\t\t}) },\n\t\tfloatingMiddleware: { default: void 0 },\n\t\thideMargin: { default: 2 },\n\t\tid: { default: void 0 },\n\t\tinline: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tmanual: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tnoAutoClose: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tnoFlip: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tnoHide: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tnoShift: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tnoSize: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tnoninteractive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\toffset: { default: null },\n\t\tplacement: { default: \"top\" },\n\t\trealtime: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\treference: {\n\t\t\ttype: [\n\t\t\t\tString,\n\t\t\t\tObject,\n\t\t\t\tnull,\n\t\t\t\tFunction\n\t\t\t],\n\t\t\tdefault: null\n\t\t},\n\t\tstrategy: { default: \"absolute\" },\n\t\ttarget: {\n\t\t\ttype: [\n\t\t\t\tString,\n\t\t\t\tObject,\n\t\t\t\tnull,\n\t\t\t\tFunction\n\t\t\t],\n\t\t\tdefault: null\n\t\t},\n\t\ttitle: { default: void 0 },\n\t\ttitleClass: { default: void 0 },\n\t\ttooltip: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tteleportDisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tteleportTo: { default: void 0 },\n\t\tinitialAnimation: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tnoAnimation: { type: Boolean },\n\t\tnoFade: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tlazy: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tunmountLazy: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tshow: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\ttransProps: {},\n\t\tvisible: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t}, {\n\t\t\"modelValue\": {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t\"modelModifiers\": {}\n\t}),\n\temits: /* @__PURE__ */ mergeModels([\n\t\t\"click\",\n\t\t\"pointerleave\",\n\t\t\"blur\",\n\t\t\"click-outside\",\n\t\t\"close-on-hide\",\n\t\t\"hide\",\n\t\t\"hide-prevented\",\n\t\t\"hidden\",\n\t\t\"show\",\n\t\t\"show-prevented\",\n\t\t\"shown\",\n\t\t\"toggle\",\n\t\t\"toggle-prevented\"\n\t], [\"update:modelValue\"]),\n\tsetup(__props, { expose: __expose, emit: __emit }) {\n\t\tconst props = useDefaults(__props, \"BPopover\");\n\t\tconst emit = __emit;\n\t\tconst slots = useSlots();\n\t\tconst attrs = useAttrs();\n\t\tconst modelValue = useModel(__props, \"modelValue\");\n\t\tconst computedId = useId$1(() => props.id, \"popover\");\n\t\tconst hidden = ref(false);\n\t\tconst floatingElement = useTemplateRef(\"_element\");\n\t\tconst content = useTemplateRef(\"_content\");\n\t\tconst arrow$1 = useTemplateRef(\"_arrow\");\n\t\tconst placeholder = useTemplateRef(\"_placeholder\");\n\t\tconst referenceElement = ref(null);\n\t\tconst triggerElement = ref(null);\n\t\tconst isAutoPlacement = computed(() => props.placement.startsWith(\"auto\"));\n\t\tconst offsetNumber = useToNumber(() => props.offset ?? NaN);\n\t\tconst boundary = computed(() => isBoundary(props.boundary) ? props.boundary : void 0);\n\t\tconst rootBoundary = computed(() => isRootBoundary(props.boundary) ? props.boundary : void 0);\n\t\tconst sizeStyles = ref({});\n\t\tconst floatingMiddleware = computed(() => {\n\t\t\tif (props.floatingMiddleware !== void 0) return props.floatingMiddleware;\n\t\t\tconst arr = [offset(props.offset !== null ? offsetNumber.value : props.tooltip ? 6 : 8)];\n\t\t\tif (!props.noFlip && !isAutoPlacement.value) arr.push(flip({\n\t\t\t\tboundary: boundary.value,\n\t\t\t\trootBoundary: rootBoundary.value,\n\t\t\t\tpadding: props.boundaryPadding\n\t\t\t}));\n\t\t\tif (isAutoPlacement.value) arr.push(autoPlacement({\n\t\t\t\talignment: props.placement.split(\"-\")[1] || void 0,\n\t\t\t\tboundary: boundary.value,\n\t\t\t\trootBoundary: rootBoundary.value,\n\t\t\t\tpadding: props.boundaryPadding\n\t\t\t}));\n\t\t\tif (!props.noShift) arr.push(shift({\n\t\t\t\tboundary: boundary.value,\n\t\t\t\trootBoundary: rootBoundary.value,\n\t\t\t\tpadding: props.boundaryPadding\n\t\t\t}));\n\t\t\tif (!props.noHide) arr.push(hide({\n\t\t\t\tboundary: boundary.value,\n\t\t\t\trootBoundary: rootBoundary.value,\n\t\t\t\tpadding: props.boundaryPadding\n\t\t\t}));\n\t\t\tif (props.inline) arr.push(inline());\n\t\t\tarr.push(arrow({\n\t\t\t\telement: arrow$1,\n\t\t\t\tpadding: 10\n\t\t\t}));\n\t\t\tif (!props.noSize) arr.push(size({\n\t\t\t\tboundary: boundary.value,\n\t\t\t\trootBoundary: rootBoundary.value,\n\t\t\t\tpadding: props.boundaryPadding,\n\t\t\t\tapply({ availableWidth, availableHeight }) {\n\t\t\t\t\tsizeStyles.value = {\n\t\t\t\t\t\t\"--bv-floating-max-height\": availableHeight >= (content.value?.scrollHeight ?? 0) ? void 0 : availableHeight ? `${Math.max(0, availableHeight)}px` : void 0,\n\t\t\t\t\t\t\"--bv-floating-max-width\": availableWidth >= (content.value?.scrollWidth ?? 0) ? void 0 : availableWidth ? `${Math.max(0, availableWidth)}px` : void 0\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}));\n\t\t\treturn arr;\n\t\t});\n\t\tconst { floatingStyles, middlewareData, placement, update } = useFloating(referenceElement, floatingElement, {\n\t\t\tplacement: computed(() => isAutoPlacement.value ? void 0 : props.placement),\n\t\t\tmiddleware: floatingMiddleware,\n\t\t\tstrategy: toRef(() => props.strategy)\n\t\t});\n\t\tconst arrowStyle = ref({ position: \"absolute\" });\n\t\tlet cleanup;\n\t\tconst { showRef, hide: hide$1, show, toggle, throttleHide, computedNoAnimation, transitionProps, contentShowing, isVisible, isActive, renderRef, localTemporaryHide, setLocalTemporaryHide } = useShowHide(modelValue, props, emit, floatingElement, computedId, {\n\t\t\tshowFn: () => {\n\t\t\t\tupdate();\n\t\t\t\tnextTick(() => {\n\t\t\t\t\tcleanup = autoUpdate(referenceElement.value, floatingElement.value, update, { animationFrame: props.realtime });\n\t\t\t\t});\n\t\t\t},\n\t\t\thideFn: () => {\n\t\t\t\tif (cleanup) {\n\t\t\t\t\tcleanup();\n\t\t\t\t\tcleanup = void 0;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\twatch(middlewareData, (newValue) => {\n\t\t\tif (!props.noHide) {\n\t\t\t\tif (newValue.hide?.referenceHidden && !hidden.value && showRef.value) if (props.closeOnHide && !props.noAutoClose && !props.manual) throttleHide(\"close-on-hide\");\n\t\t\t\telse {\n\t\t\t\t\tsetLocalTemporaryHide(true);\n\t\t\t\t\thidden.value = true;\n\t\t\t\t}\n\t\t\t\telse if (localTemporaryHide.value && !newValue.hide?.referenceHidden) {\n\t\t\t\t\tsetLocalTemporaryHide(false);\n\t\t\t\t\thidden.value = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (newValue.arrow) {\n\t\t\t\tconst { x, y } = newValue.arrow;\n\t\t\t\tarrowStyle.value = {\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\ttop: y ? `${y}px` : \"\",\n\t\t\t\t\tleft: x ? `${x}px` : \"\"\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\t\tconst computedClasses = computed(() => {\n\t\t\tconst type = props.tooltip ? \"tooltip\" : \"popover\";\n\t\t\treturn [\n\t\t\t\ttype,\n\t\t\t\t`b-${type}`,\n\t\t\t\t{\n\t\t\t\t\tshow: isVisible.value && !hidden.value,\n\t\t\t\t\tfade: !computedNoAnimation.value,\n\t\t\t\t\t[`bs-${type}-${resolveBootstrapPlacement(placement.value)}`]: placement.value !== void 0\n\t\t\t\t}\n\t\t\t];\n\t\t});\n\t\tconst { x, y } = useMouse();\n\t\tconst isElementAndTriggerOutside = () => {\n\t\t\tconst triggerRect = triggerElement.value?.getBoundingClientRect();\n\t\t\tconst elementRect = floatingElement.value?.getBoundingClientRect();\n\t\t\tconst margin = Number.parseInt(props.hideMargin, 10) || 0;\n\t\t\tconst offsetX = getSafeWindow()?.scrollX || 0;\n\t\t\tconst offsetY = getSafeWindow()?.scrollY || 0;\n\t\t\treturn {\n\t\t\t\ttriggerIsOutside: !triggerRect || x.value < triggerRect.left + offsetX - margin || x.value > triggerRect.right + offsetX + margin || y.value < triggerRect.top + offsetY - margin || y.value > triggerRect.bottom + offsetY + margin,\n\t\t\t\tisOutside: !elementRect || x.value < elementRect.left + offsetX - margin || x.value > elementRect.right + offsetX + margin || y.value < elementRect.top + offsetY - margin || y.value > elementRect.bottom + offsetY + margin\n\t\t\t};\n\t\t};\n\t\tlet looptimeout;\n\t\tconst tryHide = (e) => {\n\t\t\tconst { triggerIsOutside, isOutside } = isElementAndTriggerOutside();\n\t\t\tconst doc = getSafeDocument();\n\t\t\tif (!props.noninteractive && isOutside && triggerIsOutside && doc && !floatingElement.value?.contains(doc.activeElement) && (!computedTriggers.value.focus || !triggerElement.value?.contains(doc.activeElement)) || props.noninteractive && triggerIsOutside) hide$1(e?.type);\n\t\t\telse {\n\t\t\t\tif (looptimeout) clearTimeout(looptimeout);\n\t\t\t\tlooptimeout = setTimeout(() => {\n\t\t\t\t\ttryHide(e);\n\t\t\t\t}, 50);\n\t\t\t}\n\t\t};\n\t\twatch(isVisible, () => {\n\t\t\tupdate();\n\t\t});\n\t\t__expose({\n\t\t\thide: hide$1,\n\t\t\tshow,\n\t\t\ttoggle\n\t\t});\n\t\tconst localToggle = (e) => {\n\t\t\tif (showRef.value) hide$1(e.type === \"click\" ? \"click\" : \"toggle\");\n\t\t\telse show();\n\t\t};\n\t\tconst localShow = () => {\n\t\t\tshow();\n\t\t};\n\t\tconst computedTriggers = computed(() => {\n\t\t\tif (props.manual) return {\n\t\t\t\thover: false,\n\t\t\t\tfocus: false,\n\t\t\t\tclick: false\n\t\t\t};\n\t\t\tif (props.hover !== void 0 || props.focus !== void 0 || props.click !== void 0) return {\n\t\t\t\thover: props.hover ?? false,\n\t\t\t\tfocus: props.focus ?? false,\n\t\t\t\tclick: props.click ?? false\n\t\t\t};\n\t\t\treturn {\n\t\t\t\thover: true,\n\t\t\t\tfocus: true,\n\t\t\t\tclick: false\n\t\t\t};\n\t\t});\n\t\tconst bind = () => {\n\t\t\tif (props.target) {\n\t\t\t\tconst elem = getElement(toValue(props.target));\n\t\t\t\tif (elem) triggerElement.value = elem;\n\t\t\t\telse console.warn(\"Target element not found\", props.target);\n\t\t\t} else triggerElement.value = placeholder.value?.nextElementSibling;\n\t\t\tif (props.reference) {\n\t\t\t\tconst elem = getElement(toValue(props.reference));\n\t\t\t\tif (elem) referenceElement.value = elem;\n\t\t\t\telse console.warn(\"Reference element not found\", props.reference);\n\t\t\t} else referenceElement.value = triggerElement.value;\n\t\t\tif (!triggerElement.value || props.manual) return;\n\t\t\tconst triggers = computedTriggers.value;\n\t\t\tif (triggers.click) triggerElement.value.addEventListener(\"click\", localToggle);\n\t\t\tif (triggers.hover) {\n\t\t\t\ttriggerElement.value.addEventListener(\"pointerenter\", localShow);\n\t\t\t\ttriggerElement.value.addEventListener(\"pointerleave\", tryHide);\n\t\t\t}\n\t\t\tif (triggers.focus) {\n\t\t\t\ttriggerElement.value.addEventListener(\"focus\", localShow);\n\t\t\t\ttriggerElement.value.addEventListener(\"blur\", tryHide);\n\t\t\t}\n\t\t};\n\t\tconst unbind = () => {\n\t\t\tif (triggerElement.value) {\n\t\t\t\ttriggerElement.value.removeEventListener(\"click\", localToggle);\n\t\t\t\ttriggerElement.value.removeEventListener(\"pointerenter\", localShow);\n\t\t\t\ttriggerElement.value.removeEventListener(\"pointerleave\", tryHide);\n\t\t\t\ttriggerElement.value.removeEventListener(\"focus\", localShow);\n\t\t\t\ttriggerElement.value.removeEventListener(\"blur\", tryHide);\n\t\t\t}\n\t\t};\n\t\tonClickOutside(floatingElement, () => {\n\t\t\tif (showRef.value && computedTriggers.value.click && !props.noAutoClose && !props.manual) hide$1(\"click-outside\");\n\t\t}, { ignore: [triggerElement] });\n\t\twatch([\n\t\t\t() => props.click,\n\t\t\t() => props.hover,\n\t\t\t() => props.focus,\n\t\t\t() => props.manual,\n\t\t\t() => props.target,\n\t\t\t() => props.reference\n\t\t], () => {\n\t\t\tunbind();\n\t\t\tbind();\n\t\t});\n\t\tconst sharedSlots = computed(() => ({\n\t\t\ttoggle,\n\t\t\tshow,\n\t\t\thide: hide$1,\n\t\t\tid: computedId.value,\n\t\t\tvisible: isVisible.value,\n\t\t\tactive: isActive.value\n\t\t}));\n\t\tonMounted(() => {\n\t\t\tbind();\n\t\t\tnextTick(() => {\n\t\t\t\tupdate();\n\t\t\t});\n\t\t});\n\t\tonBeforeUnmount(unbind);\n\t\treturn (_ctx, _cache) => {\n\t\t\treturn openBlock(), createElementBlock(Fragment, null, [\n\t\t\t\tcreateElementVNode(\"span\", {\n\t\t\t\t\tid: unref(computedId) + \"_placeholder\",\n\t\t\t\t\tref: \"_placeholder\",\n\t\t\t\t\tstyle: { \"display\": \"none\" }\n\t\t\t\t}, null, 8, _hoisted_1),\n\t\t\t\trenderSlot(_ctx.$slots, \"target\", normalizeProps(guardReactiveProps(sharedSlots.value))),\n\t\t\t\tcreateVNode(ConditionalTeleport_default, {\n\t\t\t\t\tto: unref(props).teleportTo,\n\t\t\t\t\tdisabled: !unref(props).teleportTo || unref(props).teleportDisabled\n\t\t\t\t}, {\n\t\t\t\t\tdefault: withCtx(() => [unref(renderRef) || unref(contentShowing) ? (openBlock(), createBlock(Transition, mergeProps({ key: 0 }, unref(transitionProps), { appear: modelValue.value || unref(props).visible }), {\n\t\t\t\t\t\tdefault: withCtx(() => [withDirectives(createElementVNode(\"div\", mergeProps({ id: unref(computedId) }, unref(attrs), {\n\t\t\t\t\t\t\tref: \"_element\",\n\t\t\t\t\t\t\tclass: computedClasses.value,\n\t\t\t\t\t\t\trole: \"tooltip\",\n\t\t\t\t\t\t\ttabindex: \"-1\",\n\t\t\t\t\t\t\tstyle: unref(floatingStyles)\n\t\t\t\t\t\t}), [createElementVNode(\"div\", {\n\t\t\t\t\t\t\tref: \"_arrow\",\n\t\t\t\t\t\t\tclass: normalizeClass(`${unref(props).tooltip ? \"tooltip\" : \"popover\"}-arrow`),\n\t\t\t\t\t\t\tstyle: normalizeStyle(arrowStyle.value),\n\t\t\t\t\t\t\t\"data-popper-arrow\": \"\"\n\t\t\t\t\t\t}, null, 6), createElementVNode(\"div\", {\n\t\t\t\t\t\t\tref: \"_content\",\n\t\t\t\t\t\t\tclass: \"overflow-auto b-floating-size\",\n\t\t\t\t\t\t\tstyle: normalizeStyle(sizeStyles.value)\n\t\t\t\t\t\t}, [unref(props).title || slots.title ? (openBlock(), createElementBlock(\"div\", {\n\t\t\t\t\t\t\tkey: 0,\n\t\t\t\t\t\t\tclass: normalizeClass([\"position-sticky top-0\", [unref(props).tooltip ? \"tooltip-inner\" : \"popover-header\", unref(props).titleClass]])\n\t\t\t\t\t\t}, [renderSlot(_ctx.$slots, \"title\", normalizeProps(guardReactiveProps(sharedSlots.value)), () => [createTextVNode(toDisplayString(unref(props).title), 1)])], 2)) : createCommentVNode(\"\", true), unref(props).tooltip && !slots.title && !unref(props).title || !unref(props).tooltip ? (openBlock(), createElementBlock(\"div\", {\n\t\t\t\t\t\t\tkey: 1,\n\t\t\t\t\t\t\tclass: normalizeClass([unref(props).tooltip ? \"tooltip-inner\" : \"popover-body\", unref(props).bodyClass])\n\t\t\t\t\t\t}, [renderSlot(_ctx.$slots, \"default\", normalizeProps(guardReactiveProps(sharedSlots.value)), () => [createTextVNode(toDisplayString(unref(props).body) + toDisplayString(unref(attrs).content), 1)])], 2)) : createCommentVNode(\"\", true)], 4)], 16, _hoisted_2), [[vShow, unref(showRef) && !hidden.value]])]),\n\t\t\t\t\t\t_: 3\n\t\t\t\t\t}, 16, [\"appear\"])) : createCommentVNode(\"\", true)]),\n\t\t\t\t\t_: 3\n\t\t\t\t}, 8, [\"to\", \"disabled\"])\n\t\t\t], 64);\n\t\t};\n\t}\n});\n//#endregion\n//#region src/utils/floatingUi.ts\nvar resolveBootstrapPlacement = (placement) => {\n\tconst [_placement] = placement.split(\"-\");\n\tswitch (_placement) {\n\t\tcase \"left\": return \"start\";\n\t\tcase \"right\": return \"end\";\n\t\tdefault: return _placement || \"start\";\n\t}\n};\nvar resolveBootstrapCaret = (placement) => {\n\tconst [_placement] = placement.split(\"-\");\n\tswitch (_placement) {\n\t\tcase \"left\": return \"start\";\n\t\tcase \"right\": return \"end\";\n\t\tcase \"top\": return \"up\";\n\t\tcase \"bottom\": return \"down\";\n\t\tdefault: return _placement || \"start\";\n\t}\n};\nvar resolveActiveStatus = (values) => typeof values !== \"object\" || values.active !== false;\nvar resolveContent = (values, el) => {\n\tif (!resolveActiveStatus(values)) return {};\n\tconst missingBindingValue = typeof values === \"undefined\" || typeof values === \"object\" && !values.title && !values.content && !values.body;\n\tif (getSafeDocument() !== null) {\n\t\tconst titleAttr = el.getAttribute(\"title\") || el.getAttribute(\"data-original-title\");\n\t\tif (titleAttr) {\n\t\t\tel.removeAttribute(\"title\");\n\t\t\tel.setAttribute(\"data-original-title\", titleAttr);\n\t\t}\n\t\tif (missingBindingValue) {\n\t\t\tif (titleAttr) return { body: titleAttr };\n\t\t\treturn {};\n\t\t}\n\t\tif (typeof values === \"string\") return {\n\t\t\ttitle: titleAttr || void 0,\n\t\t\tbody: values\n\t\t};\n\t} else if (missingBindingValue) return {};\n\tif (typeof values === \"string\") return { body: values };\n\tif (values?.content) console.warn(\"v-b-popover/v-b-tooltip: `content` is deprecated, use `body` instead\");\n\treturn {\n\t\ttitle: values?.title ? values?.title : void 0,\n\t\tbody: values?.body ? values?.body : values?.content ? values?.content : void 0\n\t};\n};\nvar resolveDirectiveProps = (binding, el) => ({\n\ttarget: el,\n\tmodelValue: binding.modifiers.show,\n\tinline: binding.modifiers.inline,\n\tclick: binding.modifiers.click,\n\thover: binding.modifiers.hover,\n\tfocus: binding.modifiers.focus,\n\tmanual: binding.modifiers.manual,\n\trealtime: binding.modifiers.realtime,\n\tlazy: binding.modifiers.lazy,\n\tplacement: binding.modifiers.left ? \"left\" : binding.modifiers.right ? \"right\" : binding.modifiers.bottom ? \"bottom\" : binding.modifiers.top ? \"top\" : void 0,\n\t...typeof binding.value === \"object\" ? binding.value : void 0,\n\t...binding.modifiers.interactive ? { noninteractive: false } : void 0,\n\ttitle: null,\n\tbody: null\n});\nvar bind = (el, binding, props) => {\n\tconst doc = getSafeDocument();\n\tif (doc === null) return;\n\tconst div = doc.createElement(\"span\");\n\tif (binding.modifiers.body) doc.body.appendChild(div);\n\telse if (binding.modifiers.child) el.appendChild(div);\n\telse el.parentNode?.insertBefore(div, el.nextSibling);\n\trender(h(BPopover_default, props), div);\n\tel.$__element = div;\n};\nvar updateBind = (el, binding, props) => {\n\tconst div = el.$__element;\n\tif (!div) {\n\t\tbind(el, binding, props);\n\t\treturn;\n\t}\n\trender(h(BPopover_default, props), div);\n};\nvar unbind = (el) => {\n\tconst div = el.$__element;\n\tif (!div) return;\n\trender(null, div);\n\tif (getSafeDocument() !== null) {\n\t\tdelete el.$__element;\n\t\treturn;\n\t}\n\tqueueMicrotask(() => {\n\t\tdiv.remove();\n\t\tif (el.$__element === div) delete el.$__element;\n\t});\n};\nvar isBoundary = (input) => input === \"clippingAncestors\" || input instanceof Element || Array.isArray(input);\nvar isRootBoundary = (input) => !isBoundary(input);\n//#endregion\nexport { resolveBootstrapCaret as a, unbind as c, resolveActiveStatus as i, updateBind as l, isBoundary as n, resolveContent as o, isRootBoundary as r, resolveDirectiveProps as s, bind as t, BPopover_default as u };\n\n//# sourceMappingURL=floatingUi-62aeQtAb.mjs.map","import { l as defaultsKey } from \"./keys-DU7sQgl3.mjs\";\nimport { c as unbind, i as resolveActiveStatus, l as updateBind, o as resolveContent, s as resolveDirectiveProps, t as bind } from \"./floatingUi-62aeQtAb.mjs\";\n//#region src/directives/utils.ts\n/**\n* Gets the component instance UID from a directive binding\n* @throws Error if binding.instance is not available\n*/\nfunction getDirectiveUid(binding) {\n\tif (!binding.instance) throw new Error(\"[Bootstrap-Vue-Next] Directive binding.instance is not available\");\n\treturn binding.instance.$.uid;\n}\n/**\n* Initializes UID-namespaced storage on an element for a directive\n* @param el - The HTML element\n* @param propertyName - The property name (e.g., '$__tooltip', '$__popover')\n* @param uid - The component instance UID\n* @param binding - The directive binding value to cache\n* @returns The initialized instance state\n*/\nfunction initDirectiveInstance(el, propertyName, uid, binding) {\n\tconst elWithProps = el;\n\telWithProps[propertyName] = elWithProps[propertyName] ?? Object.create(null);\n\tconst state = {\n\t\tbinding: JSON.stringify([binding.modifiers, binding.value]),\n\t\tdestroying: false\n\t};\n\telWithProps[propertyName][uid] = state;\n\treturn state;\n}\n/**\n* Gets the instance state for a directive, if it exists\n* @param el - The HTML element\n* @param propertyName - The property name (e.g., '$__tooltip', '$__popover')\n* @param uid - The component instance UID\n* @returns The instance state or undefined if not found\n*/\nfunction getDirectiveInstance(el, propertyName, uid) {\n\treturn el[propertyName]?.[uid];\n}\n/**\n* Checks if the directive binding has changed for this instance\n* @param instance - The directive instance state\n* @param binding - The current directive binding\n* @returns true if the binding has changed, false otherwise\n*/\nfunction hasBindingChanged(instance, binding) {\n\tconst newBinding = JSON.stringify([binding.modifiers, binding.value]);\n\treturn instance.binding !== newBinding;\n}\n/**\n* Updates the cached binding value for a directive instance\n* @param instance - The directive instance state\n* @param binding - The new directive binding\n*/\nfunction updateBindingCache(instance, binding) {\n\tinstance.binding = JSON.stringify([binding.modifiers, binding.value]);\n}\n/**\n* Cleans up a directive instance\n* @param el - The HTML element\n* @param propertyName - The property name (e.g., '$__tooltip', '$__popover')\n* @param uid - The component instance UID\n*/\nfunction cleanupDirectiveInstance(el, propertyName, uid) {\n\tconst elWithProps = el;\n\tconst instance = elWithProps[propertyName]?.[uid];\n\tif (instance) {\n\t\tinstance.destroying = true;\n\t\tdelete elWithProps[propertyName][uid];\n\t}\n}\nfunction findProvides(binding, vnode, suppressParentNotFoundError = false) {\n\treturn (vnode.ctx === binding.instance.$ ? findComponentParent(vnode, binding.instance.$, suppressParentNotFoundError)?.provides : vnode.ctx?.provides) ?? binding.instance.$.provides;\n}\nfunction findComponentParent(vnode, root, suppressNotFoundError = false) {\n\tconst stack = /* @__PURE__ */ new Set();\n\tconst walk = (children) => {\n\t\tfor (const child of children) {\n\t\t\tif (!child) continue;\n\t\t\tif (child === vnode || child.el && vnode.el && child.el === vnode.el) return true;\n\t\t\tstack.add(child);\n\t\t\tlet result;\n\t\t\tif (child.suspense) result = walk([child.ssContent]);\n\t\t\telse if (Array.isArray(child.children)) result = walk(child.children);\n\t\t\telse if (child.component?.vnode) result = walk([child.component?.subTree]);\n\t\t\tif (result) return result;\n\t\t\tstack.delete(child);\n\t\t}\n\t\treturn false;\n\t};\n\tif (!walk([root.subTree])) {\n\t\tif (!suppressNotFoundError) console.error(\"Could not find original vnode, will not inherit provides\");\n\t\treturn root;\n\t}\n\tconst result = Array.from(stack).reverse();\n\tfor (const child of result) if (child.component) return child.component;\n\treturn root;\n}\n/**\n* Creates a floating UI directive (tooltip or popover) with UID-namespaced state management\n* @param propertyName - The property name for storing state (e.g., '$__tooltip', '$__popover')\n* @param componentDefaultsKey - The key for accessing component defaults (e.g., 'BTooltip', 'BPopover')\n* @param buildProps - Optional function to customize the props passed to bind()\n* @returns A Vue directive object\n*/\nfunction createFloatingDirective(propertyName, componentDefaultsKey, buildProps) {\n\treturn {\n\t\tmounted(el, binding, vnode) {\n\t\t\tconst uid = getDirectiveUid(binding);\n\t\t\tconst defaultsMap = findProvides(binding, vnode)[defaultsKey]?.value;\n\t\t\tif (!resolveActiveStatus(binding.value)) return;\n\t\t\tconst text = resolveContent(binding.value, el);\n\t\t\tif (!text.body && !text.title) return;\n\t\t\tinitDirectiveInstance(el, propertyName, uid, binding);\n\t\t\tbind(el, binding, buildProps ? buildProps(text, defaultsMap?.[componentDefaultsKey], binding, el) : {\n\t\t\t\t...defaultsMap?.[componentDefaultsKey] || void 0,\n\t\t\t\t...resolveDirectiveProps(binding, el),\n\t\t\t\t...text\n\t\t\t});\n\t\t},\n\t\tupdated(el, binding, vnode) {\n\t\t\tconst uid = getDirectiveUid(binding);\n\t\t\tlet instance = getDirectiveInstance(el, propertyName, uid);\n\t\t\tconst defaultsMap = findProvides(binding, vnode)[defaultsKey]?.value;\n\t\t\tif (!resolveActiveStatus(binding.value)) {\n\t\t\t\tif (instance && el.$__element) {\n\t\t\t\t\tunbind(el);\n\t\t\t\t\tcleanupDirectiveInstance(el, propertyName, uid);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst text = resolveContent(binding.value, el);\n\t\t\tif (!text.body && !text.title) {\n\t\t\t\tif (instance && el.$__element) {\n\t\t\t\t\tunbind(el);\n\t\t\t\t\tcleanupDirectiveInstance(el, propertyName, uid);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!instance) {\n\t\t\t\tinstance = initDirectiveInstance(el, propertyName, uid, binding);\n\t\t\t\tbind(el, binding, buildProps ? buildProps(text, defaultsMap?.[componentDefaultsKey], binding, el) : {\n\t\t\t\t\t...defaultsMap?.[componentDefaultsKey] || void 0,\n\t\t\t\t\t...resolveDirectiveProps(binding, el),\n\t\t\t\t\t...text\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!hasBindingChanged(instance, binding)) return;\n\t\t\tif (instance.destroying) return;\n\t\t\tupdateBind(el, binding, buildProps ? buildProps(text, defaultsMap?.[componentDefaultsKey], binding, el) : {\n\t\t\t\t...defaultsMap?.[componentDefaultsKey] || void 0,\n\t\t\t\t...resolveDirectiveProps(binding, el),\n\t\t\t\t...text\n\t\t\t});\n\t\t\tupdateBindingCache(instance, binding);\n\t\t},\n\t\tbeforeUnmount(el, binding) {\n\t\t\tconst uid = getDirectiveUid(binding);\n\t\t\tif (!getDirectiveInstance(el, propertyName, uid)) return;\n\t\t\tunbind(el);\n\t\t\tcleanupDirectiveInstance(el, propertyName, uid);\n\t\t}\n\t};\n}\n//#endregion\nexport { findProvides as n, getDirectiveUid as r, createFloatingDirective as t };\n\n//# sourceMappingURL=utils-CWvndqPg.mjs.map","import { s as resolveDirectiveProps } from \"../../../floatingUi-62aeQtAb.mjs\";\nimport { t as createFloatingDirective } from \"../../../utils-CWvndqPg.mjs\";\nimport \"vue\";\n//#region src/directives/BTooltip/index.ts\nvar vBTooltip = createFloatingDirective(\"$__tooltip\", \"BTooltip\", (text, defaults, binding, el) => ({\n\tnoninteractive: true,\n\t...defaults || void 0,\n\t...resolveDirectiveProps(binding, el),\n\ttitle: text.title ?? text.body ?? \"\",\n\ttooltip: true\n}));\n//#endregion\nexport { vBTooltip };\n\n//# sourceMappingURL=index.mjs.map","import { t as useDefaults } from \"./useDefaults-DseelK6y.mjs\";\nimport { u as BPopover_default } from \"./floatingUi-62aeQtAb.mjs\";\nimport { computed, createBlock, createSlots, defineComponent, guardReactiveProps, mergeModels, mergeProps, normalizeProps, openBlock, renderSlot, useModel, useSlots, useTemplateRef, withCtx } from \"vue\";\n//#endregion\n//#region src/components/BTooltip/BTooltip.vue\nvar BTooltip_default = /* @__PURE__ */ defineComponent({\n\t__name: \"BTooltip\",\n\tprops: /* @__PURE__ */ mergeModels({\n\t\tinteractive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\tbody: {},\n\t\tbodyClass: { default: void 0 },\n\t\tboundary: {},\n\t\tboundaryPadding: {},\n\t\tclick: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\tcloseOnHide: { type: Boolean },\n\t\tfocus: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\thover: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\tdelay: { default: 0 },\n\t\tfloatingMiddleware: { default: void 0 },\n\t\thideMargin: { default: 0 },\n\t\tid: { default: void 0 },\n\t\tinline: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\tmanual: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\tnoAutoClose: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\tnoFlip: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\tnoHide: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\tnoShift: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\tnoSize: { type: Boolean },\n\t\tnoninteractive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\toffset: { default: void 0 },\n\t\tplacement: { default: void 0 },\n\t\trealtime: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\treference: {\n\t\t\ttype: [\n\t\t\t\tString,\n\t\t\t\tObject,\n\t\t\t\tnull,\n\t\t\t\tFunction\n\t\t\t],\n\t\t\tdefault: void 0\n\t\t},\n\t\tstrategy: { default: void 0 },\n\t\ttarget: {\n\t\t\ttype: [\n\t\t\t\tString,\n\t\t\t\tObject,\n\t\t\t\tnull,\n\t\t\t\tFunction\n\t\t\t],\n\t\t\tdefault: void 0\n\t\t},\n\t\ttitle: { default: void 0 },\n\t\ttitleClass: { default: void 0 },\n\t\tteleportDisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\tteleportTo: { default: void 0 },\n\t\tinitialAnimation: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tnoAnimation: { type: Boolean },\n\t\tnoFade: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\tlazy: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\tunmountLazy: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\tshow: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\ttransProps: {},\n\t\tvisible: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t}\n\t}, {\n\t\t\"modelValue\": {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t\"modelModifiers\": {}\n\t}),\n\temits: /* @__PURE__ */ mergeModels([\n\t\t\"click\",\n\t\t\"pointerleave\",\n\t\t\"blur\",\n\t\t\"click-outside\",\n\t\t\"close-on-hide\",\n\t\t\"hide\",\n\t\t\"hide-prevented\",\n\t\t\"hidden\",\n\t\t\"show\",\n\t\t\"show-prevented\",\n\t\t\"shown\",\n\t\t\"toggle\",\n\t\t\"toggle-prevented\"\n\t], [\"update:modelValue\"]),\n\tsetup(__props, { expose: __expose, emit: __emit }) {\n\t\tconst props = useDefaults(__props, \"BTooltip\");\n\t\tconst emit = __emit;\n\t\tconst slots = useSlots();\n\t\tconst modelValue = useModel(__props, \"modelValue\");\n\t\tconst computedProps = computed(() => {\n\t\t\tconst { interactive, noninteractive, ...rest } = props;\n\t\t\treturn {\n\t\t\t\tnoninteractive: noninteractive !== void 0 ? noninteractive : !interactive,\n\t\t\t\t...rest\n\t\t\t};\n\t\t});\n\t\tconst popover = useTemplateRef(\"_popover\");\n\t\t__expose({\n\t\t\thide: () => {\n\t\t\t\tpopover.value?.hide();\n\t\t\t},\n\t\t\tshow: () => {\n\t\t\t\tpopover.value?.show();\n\t\t\t},\n\t\t\ttoggle: () => {\n\t\t\t\tpopover.value?.toggle();\n\t\t\t}\n\t\t});\n\t\treturn (_ctx, _cache) => {\n\t\t\treturn openBlock(), createBlock(BPopover_default, mergeProps({ ref: \"_popover\" }, computedProps.value, {\n\t\t\t\tmodelValue: modelValue.value,\n\t\t\t\t\"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event),\n\t\t\t\ttooltip: \"\",\n\t\t\t\tonShow: _cache[1] || (_cache[1] = ($event) => emit(\"show\", $event)),\n\t\t\t\tonShown: _cache[2] || (_cache[2] = ($event) => emit(\"shown\", $event)),\n\t\t\t\tonHide: _cache[3] || (_cache[3] = ($event) => emit(\"hide\", $event)),\n\t\t\t\tonHidden: _cache[4] || (_cache[4] = ($event) => emit(\"hidden\", $event)),\n\t\t\t\tonHidePrevented: _cache[5] || (_cache[5] = ($event) => emit(\"hide-prevented\", $event)),\n\t\t\t\tonShowPrevented: _cache[6] || (_cache[6] = ($event) => emit(\"show-prevented\", $event)),\n\t\t\t\tonTogglePrevented: _cache[7] || (_cache[7] = ($event) => emit(\"toggle-prevented\", $event)),\n\t\t\t\tonToggle: _cache[8] || (_cache[8] = ($event) => emit(\"toggle\", $event)),\n\t\t\t\tonPointerleave: _cache[9] || (_cache[9] = ($event) => emit(\"pointerleave\", $event)),\n\t\t\t\tonBlur: _cache[10] || (_cache[10] = ($event) => emit(\"blur\", $event)),\n\t\t\t\tonClickOutside: _cache[11] || (_cache[11] = ($event) => emit(\"click-outside\", $event)),\n\t\t\t\tonCloseOnHide: _cache[12] || (_cache[12] = ($event) => emit(\"close-on-hide\", $event))\n\t\t\t}), createSlots({ _: 2 }, [\n\t\t\t\tslots.default ? {\n\t\t\t\t\tname: \"default\",\n\t\t\t\t\tfn: withCtx((scope) => [renderSlot(_ctx.$slots, \"default\", normalizeProps(guardReactiveProps(scope)))]),\n\t\t\t\t\tkey: \"0\"\n\t\t\t\t} : void 0,\n\t\t\t\tslots.target ? {\n\t\t\t\t\tname: \"target\",\n\t\t\t\t\tfn: withCtx((scope) => [renderSlot(_ctx.$slots, \"target\", normalizeProps(guardReactiveProps(scope)))]),\n\t\t\t\t\tkey: \"1\"\n\t\t\t\t} : void 0,\n\t\t\t\tslots.title ? {\n\t\t\t\t\tname: \"title\",\n\t\t\t\t\tfn: withCtx((scope) => [renderSlot(_ctx.$slots, \"title\", normalizeProps(guardReactiveProps(scope)))]),\n\t\t\t\t\tkey: \"2\"\n\t\t\t\t} : void 0\n\t\t\t]), 1040, [\"modelValue\"]);\n\t\t};\n\t}\n});\n//#endregion\nexport { BTooltip_default as t };\n\n//# sourceMappingURL=BTooltip-CVP8HdkU.mjs.map","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\nmodule.exports = arrayMap;\n","var Symbol = require('./_Symbol'),\n    arrayMap = require('./_arrayMap'),\n    isArray = require('./isArray'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isArray(value)) {\n    // Recursively convert values (susceptible to call stack limits).\n    return arrayMap(value, baseToString) + '';\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var toString = require('./toString');\n\n/** Used to generate unique IDs. */\nvar idCounter = 0;\n\n/**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\nfunction uniqueId(prefix) {\n  var id = ++idCounter;\n  return toString(prefix) + id;\n}\n\nmodule.exports = uniqueId;\n","import { computed, ref, toValue, watch } from 'vue'\nimport type { ComputedRef, MaybeRefOrGetter, Ref } from 'vue'\n\nimport type { IconSize, TextColorVariant } from '@/types'\n\n// Preset size keys shared by the icon components. Any other string size is\n// treated as a raw CSS value (or a percentage, handled separately).\nconst PRESET_SIZES: readonly string[] = Object.freeze([\n  '2xs',\n  'xs',\n  'sm',\n  'md',\n  'lg',\n  'xl',\n  '2xl'\n])\n\n/**\n * Reactive options for {@link useAppIcon}. They mirror the `AppIcon` component\n * props that drive its color, sizing and hover state.\n */\nexport interface UseAppIconOptions {\n  /**\n   * Requested icon size: a preset key, a raw CSS value or a percentage.\n   */\n  size: MaybeRefOrGetter<IconSize | string | undefined>\n  /**\n   * Scale factor applied to the icon size through a CSS custom property.\n   */\n  scale: MaybeRefOrGetter<number>\n  /**\n   * Bootstrap color variant for the icon.\n   */\n  variant: MaybeRefOrGetter<TextColorVariant | undefined>\n  /**\n   * Bootstrap color variant applied while hovered.\n   */\n  hoverVariant: MaybeRefOrGetter<TextColorVariant | undefined>\n  /**\n   * Forces the icon into its hover state when true.\n   */\n  hover: MaybeRefOrGetter<boolean | undefined>\n  /**\n   * Duration of the spin animation.\n   */\n  spinDuration: MaybeRefOrGetter<string>\n  /**\n   * Duration of the beat animation.\n   */\n  beatDuration: MaybeRefOrGetter<string>\n  /**\n   * Duration of the fade animation.\n   */\n  fadeDuration: MaybeRefOrGetter<string>\n  /**\n   * Enable spinning animation.\n   */\n  spin: MaybeRefOrGetter<boolean | undefined>\n  /**\n   * Reverse the direction of the spin animation.\n   */\n  spinReverse: MaybeRefOrGetter<boolean | undefined>\n  /**\n   * Enable pulsing beat animation.\n   */\n  beat: MaybeRefOrGetter<boolean | undefined>\n  /**\n   * Enable fade in/out animation.\n   */\n  fade: MaybeRefOrGetter<boolean | undefined>\n}\n\n/**\n * Reactive API returned by {@link useAppIcon}.\n */\nexport interface UseAppIcon {\n  currentHover: Ref<boolean>\n  color: ComputedRef<string>\n  isPercentSize: ComputedRef<boolean>\n  isRawSize: ComputedRef<boolean>\n  hasSize: ComputedRef<boolean>\n  style: ComputedRef<Record<string, string | number | undefined>>\n  classList: ComputedRef<Record<string, boolean | undefined>>\n}\n\n/**\n * Derives the inline style and class list for the `AppIcon` component: tracks\n * the hover state (driven by both the `hover` prop and mouse events),\n * classifies the requested size (preset / raw CSS / percentage) and resolves\n * the active color variant.\n *\n * Internal building block for `AppIcon`; not exported from `@icij/murmur-next`.\n *\n * @param options - Reactive icon options (see {@link UseAppIconOptions}).\n * @returns The {@link UseAppIcon} API: the mutable `currentHover` flag plus the\n *   `style` and `classList` bindings (and the size predicates they rely on).\n * @example\n * import { toRef } from 'vue'\n * import { useAppIcon } from '@/composables/useAppIcon'\n *\n * const { currentHover, style, classList } = useAppIcon({\n *   size: toRef(props, 'size'),\n *   scale: toRef(props, 'scale'),\n *   variant: toRef(props, 'variant'),\n *   hoverVariant: toRef(props, 'hoverVariant'),\n *   hover: toRef(props, 'hover'),\n *   spinDuration: toRef(props, 'spinDuration'),\n *   beatDuration: toRef(props, 'beatDuration'),\n *   fadeDuration: toRef(props, 'fadeDuration'),\n *   spin: toRef(props, 'spin'),\n *   spinReverse: toRef(props, 'spinReverse'),\n *   beat: toRef(props, 'beat'),\n *   fade: toRef(props, 'fade')\n * })\n */\nexport function useAppIcon(options: UseAppIconOptions): UseAppIcon {\n  const {\n    size,\n    scale,\n    variant,\n    hoverVariant,\n    hover,\n    spinDuration,\n    beatDuration,\n    fadeDuration,\n    spin,\n    spinReverse,\n    beat,\n    fade\n  } = options\n\n  // Hover state is seeded from the `hover` prop and then driven by mouse events;\n  // the immediate watcher keeps it in sync when the prop changes.\n  const currentHover = ref(false)\n  watch(() => toValue(hover), () => (currentHover.value = toValue(hover) as boolean), { immediate: true })\n\n  const color = computed((): string => {\n    let colorVariant = 'currentColor'\n\n    if (toValue(variant)) {\n      colorVariant = `var(--bs-${toValue(variant)}, currentColor)`\n    }\n\n    if (currentHover.value && toValue(hoverVariant)) {\n      colorVariant = `var(--bs-${toValue(hoverVariant)}, ${colorVariant})`\n    }\n\n    return colorVariant\n  })\n\n  const isPercentSize = computed((): boolean => {\n    const value = toValue(size)\n    return typeof value === 'string' && value.endsWith('%')\n  })\n\n  const isRawSize = computed((): boolean => {\n    const value = toValue(size)\n    return !PRESET_SIZES.includes(value as string) && value !== undefined && !isPercentSize.value\n  })\n\n  const hasSize = computed((): boolean => {\n    return PRESET_SIZES.includes(toValue(size) ?? '')\n  })\n\n  const style = computed(() => {\n    return {\n      '--app-icon-color': color.value,\n      '--app-icon-raw-size': isRawSize.value ? toValue(size) : undefined,\n      '--app-icon-percent-size': isPercentSize.value ? toValue(size) : undefined,\n      '--app-icon-size': hasSize.value ? toValue(size) : undefined,\n      '--app-icon-scale': toValue(scale) ?? 1,\n      '--app-icon-spin-duration': toValue(spinDuration),\n      '--app-icon-beat-duration': toValue(beatDuration),\n      '--app-icon-fade-duration': toValue(fadeDuration)\n    }\n  })\n\n  const classList = computed(() => {\n    return {\n      [`app-icon--size-${toValue(size)}`]: hasSize.value,\n      [`app-icon--has-size`]: hasSize.value,\n      [`app-icon--raw-size`]: isRawSize.value,\n      [`app-icon--percent-size`]: isPercentSize.value,\n      [`app-icon--hover`]: currentHover.value,\n      [`app-icon--spin`]: toValue(spin),\n      [`app-icon--spin-reverse`]: toValue(spinReverse),\n      [`app-icon--beat`]: toValue(beat),\n      [`app-icon--fade`]: toValue(fade)\n    }\n  })\n\n  return { currentHover, color, isPercentSize, isRawSize, hasSize, style, classList }\n}\n\nexport default useAppIcon\n","<template>\n  <span\n    class=\"app-icon\"\n    :class=\"classList\"\n    :style=\"style\"\n    @mouseenter=\"currentHover = true\"\n    @mouseleave=\"currentHover = hover ?? false\"\n  >\n    <component\n      :is=\"name\"\n      v-if=\"name\"\n    />\n    <slot v-else />\n  </span>\n</template>\n\n<script setup lang=\"ts\">\nimport { toRef, type Component } from 'vue'\n\nimport { useAppIcon } from '@/composables/useAppIcon'\nimport type { IconSize, TextColorVariant } from '@/types'\n\nexport interface AppIconProps {\n  /**\n   * Icon component or registered component name to render.\n   */\n  name?: string | Component\n  /**\n   * Size of the icon. Can be a preset ('2xs', 'xs', 'sm', 'md', 'lg', 'xl', '2xl') or a CSS value.\n   */\n  size?: IconSize | string\n  /**\n   * Scale factor to apply to the icon size.\n   */\n  scale?: number\n  /**\n   * Bootstrap color variant for the icon.\n   */\n  variant?: TextColorVariant\n  /**\n   * Bootstrap color variant to apply on hover.\n   */\n  hoverVariant?: TextColorVariant\n  /**\n   * Enable pulsing beat animation.\n   */\n  beat?: boolean\n  /**\n   * Duration of the beat animation.\n   */\n  beatDuration?: string\n  /**\n   * Enable fade in/out animation.\n   */\n  fade?: boolean\n  /**\n   * Duration of the fade animation.\n   */\n  fadeDuration?: string\n  /**\n   * Enable spinning animation.\n   */\n  spin?: boolean\n  /**\n   * Reverse the direction of the spin animation.\n   */\n  spinReverse?: boolean\n  /**\n   * Duration of the spin animation.\n   */\n  spinDuration?: string\n  /**\n   * Set the icon to its hover state.\n   */\n  hover?: boolean\n}\n\nconst props = withDefaults(defineProps<AppIconProps>(), {\n  scale: 1,\n  beatDuration: '1s',\n  fadeDuration: '1s',\n  spinDuration: '1s'\n})\n\n// Size classification, color resolution and hover tracking live in useAppIcon.\nconst { currentHover, style, classList } = useAppIcon({\n  size: toRef(props, 'size'),\n  scale: toRef(props, 'scale'),\n  variant: toRef(props, 'variant'),\n  hoverVariant: toRef(props, 'hoverVariant'),\n  hover: toRef(props, 'hover'),\n  spinDuration: toRef(props, 'spinDuration'),\n  beatDuration: toRef(props, 'beatDuration'),\n  fadeDuration: toRef(props, 'fadeDuration'),\n  spin: toRef(props, 'spin'),\n  spinReverse: toRef(props, 'spinReverse'),\n  beat: toRef(props, 'beat'),\n  fade: toRef(props, 'fade')\n})\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../../styles/mixins';\n\n@keyframes app-icon-spin {\n  from { transform: rotate(0deg); }\n  to { transform: rotate(360deg); }\n}\n\n@keyframes app-icon-spin-reverse {\n  from { transform: rotate(360deg); }\n  to { transform: rotate(0deg); }\n}\n\n@keyframes app-icon-beat {\n  0%, 100% { transform: scale(0.8); }\n  50% { transform: scale(1.2); }\n}\n\n@keyframes app-icon-fade {\n  0%, 100% { opacity: 1; }\n  50% { opacity: 0; }\n}\n\n.app-icon {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  color: var(--app-icon-color, currentColor);\n  @include app-icon-size($app-icon-size-scale-base, var(--app-icon-scale, 1));\n\n  @each $size, $value in $app-icon-sizes {\n    &--size-#{$size} {\n      @include app-icon-size($value, var(--app-icon-scale));\n    }\n  }\n\n  &--raw-size {\n    font-size: var(--app-icon-raw-size);\n  }\n\n  &--percent-size {\n    width: var(--app-icon-percent-size);\n    height: auto;\n\n    :deep(svg) {\n      width: 100%;\n      height: auto;\n    }\n  }\n\n  &--spin :deep(svg) {\n    animation: app-icon-spin var(--app-icon-spin-duration, 1s) linear infinite;\n  }\n\n  &--spin-reverse :deep(svg) {\n    animation: app-icon-spin-reverse var(--app-icon-spin-duration, 1s) linear infinite;\n  }\n\n  &--beat :deep(svg) {\n    animation: app-icon-beat var(--app-icon-beat-duration, 1s) ease-in-out infinite;\n  }\n\n  &--fade :deep(svg) {\n    animation: app-icon-fade var(--app-icon-fade-duration, 1s) ease-in-out infinite;\n  }\n}\n</style>\n","<template>\n  <span\n    class=\"app-icon\"\n    :class=\"classList\"\n    :style=\"style\"\n    @mouseenter=\"currentHover = true\"\n    @mouseleave=\"currentHover = hover ?? false\"\n  >\n    <component\n      :is=\"name\"\n      v-if=\"name\"\n    />\n    <slot v-else />\n  </span>\n</template>\n\n<script setup lang=\"ts\">\nimport { toRef, type Component } from 'vue'\n\nimport { useAppIcon } from '@/composables/useAppIcon'\nimport type { IconSize, TextColorVariant } from '@/types'\n\nexport interface AppIconProps {\n  /**\n   * Icon component or registered component name to render.\n   */\n  name?: string | Component\n  /**\n   * Size of the icon. Can be a preset ('2xs', 'xs', 'sm', 'md', 'lg', 'xl', '2xl') or a CSS value.\n   */\n  size?: IconSize | string\n  /**\n   * Scale factor to apply to the icon size.\n   */\n  scale?: number\n  /**\n   * Bootstrap color variant for the icon.\n   */\n  variant?: TextColorVariant\n  /**\n   * Bootstrap color variant to apply on hover.\n   */\n  hoverVariant?: TextColorVariant\n  /**\n   * Enable pulsing beat animation.\n   */\n  beat?: boolean\n  /**\n   * Duration of the beat animation.\n   */\n  beatDuration?: string\n  /**\n   * Enable fade in/out animation.\n   */\n  fade?: boolean\n  /**\n   * Duration of the fade animation.\n   */\n  fadeDuration?: string\n  /**\n   * Enable spinning animation.\n   */\n  spin?: boolean\n  /**\n   * Reverse the direction of the spin animation.\n   */\n  spinReverse?: boolean\n  /**\n   * Duration of the spin animation.\n   */\n  spinDuration?: string\n  /**\n   * Set the icon to its hover state.\n   */\n  hover?: boolean\n}\n\nconst props = withDefaults(defineProps<AppIconProps>(), {\n  scale: 1,\n  beatDuration: '1s',\n  fadeDuration: '1s',\n  spinDuration: '1s'\n})\n\n// Size classification, color resolution and hover tracking live in useAppIcon.\nconst { currentHover, style, classList } = useAppIcon({\n  size: toRef(props, 'size'),\n  scale: toRef(props, 'scale'),\n  variant: toRef(props, 'variant'),\n  hoverVariant: toRef(props, 'hoverVariant'),\n  hover: toRef(props, 'hover'),\n  spinDuration: toRef(props, 'spinDuration'),\n  beatDuration: toRef(props, 'beatDuration'),\n  fadeDuration: toRef(props, 'fadeDuration'),\n  spin: toRef(props, 'spin'),\n  spinReverse: toRef(props, 'spinReverse'),\n  beat: toRef(props, 'beat'),\n  fade: toRef(props, 'fade')\n})\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../../styles/mixins';\n\n@keyframes app-icon-spin {\n  from { transform: rotate(0deg); }\n  to { transform: rotate(360deg); }\n}\n\n@keyframes app-icon-spin-reverse {\n  from { transform: rotate(360deg); }\n  to { transform: rotate(0deg); }\n}\n\n@keyframes app-icon-beat {\n  0%, 100% { transform: scale(0.8); }\n  50% { transform: scale(1.2); }\n}\n\n@keyframes app-icon-fade {\n  0%, 100% { opacity: 1; }\n  50% { opacity: 0; }\n}\n\n.app-icon {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  color: var(--app-icon-color, currentColor);\n  @include app-icon-size($app-icon-size-scale-base, var(--app-icon-scale, 1));\n\n  @each $size, $value in $app-icon-sizes {\n    &--size-#{$size} {\n      @include app-icon-size($value, var(--app-icon-scale));\n    }\n  }\n\n  &--raw-size {\n    font-size: var(--app-icon-raw-size);\n  }\n\n  &--percent-size {\n    width: var(--app-icon-percent-size);\n    height: auto;\n\n    :deep(svg) {\n      width: 100%;\n      height: auto;\n    }\n  }\n\n  &--spin :deep(svg) {\n    animation: app-icon-spin var(--app-icon-spin-duration, 1s) linear infinite;\n  }\n\n  &--spin-reverse :deep(svg) {\n    animation: app-icon-spin-reverse var(--app-icon-spin-duration, 1s) linear infinite;\n  }\n\n  &--beat :deep(svg) {\n    animation: app-icon-beat var(--app-icon-beat-duration, 1s) ease-in-out infinite;\n  }\n\n  &--fade :deep(svg) {\n    animation: app-icon-fade var(--app-icon-fade-duration, 1s) ease-in-out infinite;\n  }\n}\n</style>\n","import { defineComponent, h } from \"vue\";\n//#endregion\n//#region src/components/ConditionalWrapper.vue\nvar ConditionalWrapper_default = defineComponent({\n\tname: \"ConditionalWrapper\",\n\tinheritAttrs: false,\n\tprops: {\n\t\ttag: {\n\t\t\ttype: String,\n\t\t\tdefault: \"div\"\n\t\t},\n\t\tskip: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true\n\t\t}\n\t},\n\tslots: Object,\n\tsetup(props, { slots, attrs }) {\n\t\treturn () => props.skip ? slots.default?.({}) : h(props.tag, { ...attrs }, [slots.default?.({})]);\n\t}\n});\n//#endregion\nexport { ConditionalWrapper_default as t };\n\n//# sourceMappingURL=ConditionalWrapper-Dbc_O6qe.mjs.map","import { t as useDefaults } from \"./useDefaults-DseelK6y.mjs\";\nimport { r as useBLinkHelper, t as BLink_default } from \"./BLink-Dfgte6dQ.mjs\";\nimport { t as useColorVariantClasses } from \"./useColorVariantClasses-CqeXHjRh.mjs\";\nimport { t as ConditionalWrapper_default } from \"./ConditionalWrapper-Dbc_O6qe.mjs\";\nimport { computed, createBlock, createVNode, defineComponent, mergeProps, openBlock, renderSlot, resolveDynamicComponent, unref, withCtx } from \"vue\";\n//#endregion\n//#region src/components/BBadge/BBadge.vue\nvar BBadge_default = /* @__PURE__ */ defineComponent({\n\t__name: \"BBadge\",\n\tprops: {\n\t\tdotIndicator: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tpill: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tplacement: { default: void 0 },\n\t\ttag: { default: \"span\" },\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\tactiveClass: { default: void 0 },\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\texactActiveClass: { default: void 0 },\n\t\thref: { default: void 0 },\n\t\ticon: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\tnoRel: { type: Boolean },\n\t\topacity: { default: void 0 },\n\t\topacityHover: { default: void 0 },\n\t\tprefetch: { type: Boolean },\n\t\tprefetchOn: {},\n\t\tnoPrefetch: { type: Boolean },\n\t\tprefetchedClass: {},\n\t\trel: { default: void 0 },\n\t\treplace: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\trouterComponentName: { default: void 0 },\n\t\tstretched: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\ttarget: { default: void 0 },\n\t\tto: { default: void 0 },\n\t\tunderlineOffset: { default: void 0 },\n\t\tunderlineOffsetHover: { default: void 0 },\n\t\tunderlineOpacity: { default: void 0 },\n\t\tunderlineOpacityHover: { default: void 0 },\n\t\tunderlineVariant: { default: void 0 },\n\t\tvariant: { default: \"secondary\" },\n\t\tbgVariant: { default: null },\n\t\ttextVariant: { default: null }\n\t},\n\tsetup(__props) {\n\t\tconst props = useDefaults(__props, \"BBadge\");\n\t\tconst { computedLink, computedLinkProps } = useBLinkHelper(props, [\n\t\t\t\"active\",\n\t\t\t\"activeClass\",\n\t\t\t\"disabled\",\n\t\t\t\"exactActiveClass\",\n\t\t\t\"href\",\n\t\t\t\"icon\",\n\t\t\t\"noRel\",\n\t\t\t\"opacity\",\n\t\t\t\"opacityHover\",\n\t\t\t\"noPrefetch\",\n\t\t\t\"prefetch\",\n\t\t\t\"prefetchOn\",\n\t\t\t\"prefetchedClass\",\n\t\t\t\"rel\",\n\t\t\t\"replace\",\n\t\t\t\"routerComponentName\",\n\t\t\t\"stretched\",\n\t\t\t\"target\",\n\t\t\t\"to\",\n\t\t\t\"underlineOffset\",\n\t\t\t\"underlineOffsetHover\",\n\t\t\t\"underlineOpacity\",\n\t\t\t\"underlineOpacityHover\",\n\t\t\t\"underlineVariant\"\n\t\t]);\n\t\tconst computedTag = computed(() => computedLink.value ? BLink_default : props.tag);\n\t\tconst placementClasses = computed(() => {\n\t\t\tconst pos = props.placement ?? (props.dotIndicator ? \"top-end\" : void 0);\n\t\t\treturn [\n\t\t\t\t\"position-absolute\",\n\t\t\t\t\"translate-middle\",\n\t\t\t\t{\n\t\t\t\t\t\"start-0 top-0\": pos === \"top-start\",\n\t\t\t\t\t\"start-0 top-50\": pos === \"start\",\n\t\t\t\t\t\"start-0 top-100\": pos === \"bottom-start\",\n\t\t\t\t\t\"start-50 top-0\": pos === \"top\",\n\t\t\t\t\t\"start-50 top-100\": pos === \"bottom\",\n\t\t\t\t\t\"start-100 top-0\": pos === \"top-end\",\n\t\t\t\t\t\"start-100 top-50\": pos === \"end\",\n\t\t\t\t\t\"start-100 top-100\": pos === \"bottom-end\"\n\t\t\t\t}\n\t\t\t];\n\t\t});\n\t\tconst colorClasses = useColorVariantClasses(props);\n\t\tconst computedClasses = computed(() => [\n\t\t\tcolorClasses.value,\n\t\t\tprops.placement !== void 0 || props.dotIndicator ? placementClasses.value : void 0,\n\t\t\t{\n\t\t\t\t\"active\": props.active,\n\t\t\t\t\"disabled\": props.disabled,\n\t\t\t\t\"rounded-pill\": props.pill,\n\t\t\t\t\"p-2 border border-light rounded-circle\": props.dotIndicator,\n\t\t\t\t\"text-decoration-none\": computedLink.value\n\t\t\t}\n\t\t]);\n\t\treturn (_ctx, _cache) => {\n\t\t\treturn openBlock(), createBlock(resolveDynamicComponent(computedTag.value), mergeProps({ class: [\"badge\", computedClasses.value] }, unref(computedLinkProps)), {\n\t\t\t\tdefault: withCtx(() => [createVNode(ConditionalWrapper_default, mergeProps({\n\t\t\t\t\tskip: unref(props).dotIndicator !== true,\n\t\t\t\t\ttag: \"span\"\n\t\t\t\t}, unref(props).dotIndicator ? { class: \"visually-hidden\" } : {}), {\n\t\t\t\t\tdefault: withCtx(() => [renderSlot(_ctx.$slots, \"default\")]),\n\t\t\t\t\t_: 3\n\t\t\t\t}, 16, [\"skip\"])]),\n\t\t\t\t_: 3\n\t\t\t}, 16, [\"class\"]);\n\t\t};\n\t}\n});\n//#endregion\nexport { BBadge_default as t };\n\n//# sourceMappingURL=BBadge-Cx_CdauK.mjs.map","<script setup lang=\"ts\">\nimport type { ColorVariant } from 'bootstrap-vue-next'\n\nexport interface ButtonIconCounterProps {\n  /**\n   * The counter value to display\n   */\n  counter?: number | null\n  /**\n   * The badge color variant\n   */\n  variant?: ColorVariant\n}\n\nwithDefaults(defineProps<ButtonIconCounterProps>(), {\n  counter: null,\n  variant: 'secondary'\n})\n</script>\n\n<template>\n  <b-badge\n    v-if=\"counter != null\"\n    :variant=\"variant\"\n    class=\"button-icon-counter text-nowrap\"\n    pill\n  >\n    <slot>{{ counter }}</slot>\n  </b-badge>\n</template>\n\n<style lang=\"scss\">\n\n.button-icon-counter {\n  // Override negative top position done by\n  // .badge when used inside a button.\n  .btn &.badge {\n    top: 0;\n  }\n\n  @each $variant, $value in $theme-colors {\n    &.text-bg-outline-#{$variant} {\n      border: var(--bs-#{$variant}-border-subtle) 1px solid;\n      color: var(--bs-#{$variant}-text-emphasis);\n      background: var(--bs-body-bg);\n    }\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { ColorVariant } from 'bootstrap-vue-next'\n\nexport interface ButtonIconCounterProps {\n  /**\n   * The counter value to display\n   */\n  counter?: number | null\n  /**\n   * The badge color variant\n   */\n  variant?: ColorVariant\n}\n\nwithDefaults(defineProps<ButtonIconCounterProps>(), {\n  counter: null,\n  variant: 'secondary'\n})\n</script>\n\n<template>\n  <b-badge\n    v-if=\"counter != null\"\n    :variant=\"variant\"\n    class=\"button-icon-counter text-nowrap\"\n    pill\n  >\n    <slot>{{ counter }}</slot>\n  </b-badge>\n</template>\n\n<style lang=\"scss\">\n\n.button-icon-counter {\n  // Override negative top position done by\n  // .badge when used inside a button.\n  .btn &.badge {\n    top: 0;\n  }\n\n  @each $variant, $value in $theme-colors {\n    &.text-bg-outline-#{$variant} {\n      border: var(--bs-#{$variant}-border-subtle) 1px solid;\n      color: var(--bs-#{$variant}-text-emphasis);\n      background: var(--bs-body-bg);\n    }\n  }\n}\n</style>\n","import type { Size } from 'bootstrap-vue-next'\n\nimport { SIZE } from '@/enums'\n\n/**\n * bootstrap-vue-next's own `Size` type only covers `'sm' | 'lg'` (the classes\n * it actually applies). `'md'` is murmur's own sentinel for \"no size class\",\n * used throughout its components alongside `sm`/`lg`.\n */\nexport type SizeWithMd = Size | SIZE.md\n\n/**\n * Resolves a size that may be murmur's `'md'` sentinel to what\n * bootstrap-vue-next components actually accept, mapping `'md'` to\n * `undefined` (no size class) and passing `sm`/`lg`/`undefined` through.\n *\n * @param size - The size to resolve, possibly `'md'`.\n * @returns The size to forward to a bootstrap-vue-next component.\n * @example\n * resolveSize(SIZE.md) // undefined\n * resolveSize('sm') // 'sm'\n */\nexport function resolveSize(size?: SizeWithMd): Size | undefined {\n  return size === SIZE.md ? undefined : size\n}\n","<template>\n  <!--\n    NOTE: `@mousenter` is a typo for `@mouseenter`, so the hover-in state never\n    fires and `currentHover` only ever resets on mouse leave. Preserved as-is;\n    fixing it changes rendered behavior and belongs in a separate change.\n  -->\n  <b-button\n    v-bind=\"buttonProps\"\n    :id=\"buttonId\"\n    ref=\"element\"\n    :to=\"to\"\n    class=\"button-icon\"\n    :class=\"classList\"\n    :aria-label=\"tooltipText\"\n    @mousenter=\"currentHover = true\"\n    @mouseleave=\"currentHover = false\"\n  >\n    <slot name=\"start\" />\n    <app-icon\n      v-if=\"iconLeft || (!iconLeft && !iconRight && loading)\"\n      v-b-tooltip.top.body=\"{\n        title: iconLeftLabel,\n        offset: iconLeftLabelOffset,\n        delay: tooltipDelay\n      }\"\n      :name=\"iconLeftOrSpinner\"\n      :size=\"iconLeftSize\"\n      :spin=\"loading\"\n      :spin-duration=\"loadingDuration\"\n      :variant=\"iconLeftVariant\"\n      :hover-variant=\"iconLeftHoverVariant\"\n      :hover=\"currentHover\"\n      class=\"button-icon__icon-left\"\n    />\n    <span\n      v-if=\"!hideLabel\"\n      class=\"button-icon__label\"\n    >\n      <slot v-bind=\"{ labelOrLoadingText }\">{{ labelOrLoadingText }}</slot>\n    </span>\n    <app-icon\n      v-if=\"iconRight\"\n      v-b-tooltip.top.body=\"{\n        title: iconRightLabel,\n        offset: iconRightLabelOffset,\n        delay: tooltipDelay\n      }\"\n      :name=\"iconRightOrSpinner\"\n      :size=\"iconRightSize\"\n      :spin=\"loading\"\n      :spin-duration=\"loadingDuration\"\n      :variant=\"iconRightVariant\"\n      :hover-variant=\"iconRightHoverVariant\"\n      :hover=\"currentHover\"\n      class=\"button-icon__icon-right\"\n      @click=\"emitIconRightClick\"\n    />\n    <button-icon-counter\n      v-if=\"counter !== null\"\n      :counter=\"counter\"\n      :variant=\"counterVariant\"\n      :style=\"counterStyle\"\n    />\n    <slot name=\"end\" />\n    <b-tooltip\n      v-if=\"hasTooltip\"\n      teleport-to=\"body\"\n      :delay=\"tooltipDelay\"\n      :boundary-padding=\"20\"\n      :placement=\"tooltipPlacement\"\n      :target=\"elementRef\"\n      :title=\"tooltipText\"\n    />\n  </b-button>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, inject, useTemplateRef, type Component } from 'vue'\nimport uniqueId from 'lodash/uniqueId'\nimport IPhCircleNotch from '~icons/ph/circle-notch'\nimport type {\n  TextColorVariant,\n  ButtonVariant,\n  PopoverPlacement,\n  ButtonType,\n  ColorVariant\n} from 'bootstrap-vue-next'\n\nimport AppIcon from '@/components/App/AppIcon.vue'\nimport ButtonIconCounter from '@/components/Button/ButtonIconCounter.vue'\nimport { SIZE } from '@/enums'\nimport { resolveSize, type SizeWithMd } from '@/utils/size'\ndefineOptions({\n  name: 'ButtonIcon'\n})\n\nexport interface ButtonIconProps {\n  /**\n   * Custom ID for the button element\n   */\n  id?: string\n  /**\n   * Icon component or name to display on the left side\n   */\n  iconLeft?: string | Component\n  /**\n   * Color variant for the left icon\n   */\n  iconLeftVariant?: TextColorVariant\n  /**\n   * Color variant for the left icon on hover\n   */\n  iconLeftHoverVariant?: TextColorVariant\n  /**\n   * Size of the left icon. Can be a preset ('2xs', 'xs', 'sm', 'md', 'lg', 'xl', '2xl') or a CSS value (e.g., '16px', '1rem').\n   */\n  iconLeftSize?: string\n  /**\n   * Tooltip label for the left icon\n   */\n  iconLeftLabel?: string\n  /**\n   * Offset for the left icon tooltip\n   */\n  iconLeftLabelOffset?: number\n  /**\n   * Icon component or name to display on the right side\n   */\n  iconRight?: string | Component\n  /**\n   * Color variant for the right icon\n   */\n  iconRightVariant?: TextColorVariant\n  /**\n   * Color variant for the right icon on hover\n   */\n  iconRightHoverVariant?: TextColorVariant\n  /**\n   * Size of the right icon. Can be a preset ('2xs', 'xs', 'sm', 'md', 'lg', 'xl', '2xl') or a CSS value (e.g., '16px', '1rem').\n   */\n  iconRightSize?: string\n  /**\n   * Tooltip label for the right icon\n   */\n  iconRightLabel?: string\n  /**\n   * Offset for the right icon tooltip\n   */\n  iconRightLabelOffset?: number\n  /**\n   * Icon component to display during loading state\n   */\n  iconSpinner?: string | Component\n  /**\n   * Hide the button label text\n   */\n  hideLabel?: boolean\n  /**\n   * Hide the button tooltip\n   */\n  hideTooltip?: boolean\n  /**\n   * Button label text\n   */\n  label?: string\n  /**\n   * Make the button square (equal width and height)\n   */\n  square?: boolean\n  /**\n   * Router link destination (vue-router)\n   */\n  to?: any\n  /**\n   * Button color variant\n   */\n  variant?: ButtonVariant\n  /**\n   * Button size\n   */\n  size?: SizeWithMd\n  /**\n   * Make the button full-width block element\n   */\n  block?: boolean\n  /**\n   * Apply pill styling (fully rounded corners)\n   */\n  pill?: boolean\n  /**\n   * Toggle pressed state for toggle buttons\n   */\n  pressed?: boolean\n  /**\n   * HTML tag to render the button as\n   */\n  tag?: string\n  /**\n   * Button type attribute\n   */\n  type?: ButtonType\n  /**\n   * Show loading spinner and disable interactions\n   */\n  loading?: boolean\n  /**\n   * Duration of the loading spinner animation\n   */\n  loadingDuration?: string\n  /**\n   * Text to display while loading\n   */\n  loadingText?: string\n  /**\n   * Custom tooltip text (defaults to label)\n   */\n  tooltipLabel?: string\n  /**\n   * Tooltip placement position\n   */\n  tooltipPlacement?: PopoverPlacement\n  /**\n   * Delay before showing/hiding the tooltip\n   */\n  tooltipDelay?: { show: number, hide: number }\n  /**\n   * Force showing the tooltip even when label is visible\n   */\n  showTooltipForce?: boolean\n  /**\n   * Manual hover state control\n   *\n   * NOTE: this prop is part of the public API but is currently never consumed\n   * by the component; hover is tracked internally via `currentHover`. Kept for\n   * API compatibility; wiring it up is a follow-up.\n   */\n  hover?: boolean\n  /**\n   * Truncate label text with ellipsis when too long\n   */\n  truncate?: boolean\n  /**\n   * Counter badge value to display\n   */\n  counter?: number\n  /**\n   * Color variant for the counter badge\n   */\n  counterVariant?: ColorVariant\n  /**\n   * Custom styles for the counter badge\n   */\n  counterStyle?: string | object\n}\n\nconst props = withDefaults(defineProps<ButtonIconProps>(), {\n  square: false,\n  iconLeftLabelOffset: 19,\n  iconLeftSize: '1.25em',\n  iconRightSize: '1.25em',\n  iconSpinner: () => IPhCircleNotch as Component,\n  hideLabel: false,\n  hideTooltip: false,\n  tag: 'button',\n  type: 'button',\n  loadingDuration: '1s',\n  tooltipPlacement: 'top',\n  tooltipDelay: () => ({ show: 0, hide: 0 })\n})\n\nconst emit = defineEmits(['click:icon-right'])\n\nfunction emitIconRightClick() {\n  emit('click:icon-right')\n}\n\n// Fall back to the variant and size provided by an ancestor (e.g. a button\n// group) whenever the component does not set them explicitly.\nconst injectedVariant = inject('variant', 'action')\nconst injectedSize = inject<SizeWithMd>('size', SIZE.md)\nconst elementRef = useTemplateRef<HTMLElement>('element')\n\nconst currentHover = ref(false)\n\nconst buttonId = computed(() => props.id ?? uniqueId('button-icon-'))\n\nconst classList = computed(() => {\n  return {\n    'button-icon--square': props.square,\n    'button-icon--loading': props.loading,\n    'button-icon--truncate': props.truncate,\n    'button-icon--hover': currentHover.value,\n    'button-icon--use-injected-variant': !props.variant,\n    'button-icon--use-injected-size': !props.size\n  }\n})\n\nconst iconLeftOrSpinner = computed(() => {\n  return props.loading ? props.iconSpinner : props.iconLeft\n})\n\nconst iconRightOrSpinner = computed(() => {\n  return props.loading ? props.iconSpinner : props.iconRight\n})\n\nconst labelOrLoadingText = computed(() => {\n  return props.loading && props.loadingText ? props.loadingText : props.label\n})\n\nconst tooltipText = computed(() => {\n  return props.tooltipLabel ?? props.label\n})\n\nconst hasTooltip = computed(() => {\n  return (\n    !!tooltipText.value\n    && !props.hideTooltip\n    && (props.showTooltipForce || props.hideLabel)\n  )\n})\n\nconst resolvedSize = computed(() => resolveSize(props.size ?? injectedSize))\n\nconst buttonProps = computed(() => ({\n  block: props.block,\n  pill: props.pill,\n  pressed: props.pressed,\n  size: resolvedSize.value,\n  tag: props.tag,\n  type: props.type,\n  variant: props.variant ?? injectedVariant\n}))\n</script>\n\n<style lang=\"scss\" scoped>\n.button-icon {\n  &:deep(.app-icon) {\n    font-size: 1.25em;\n  }\n\n  &.btn {\n    // force overriding display-block from bootstrap\n    display: inline-flex;\n    flex-shrink: 0;\n    align-items: center;\n    min-width: 0;\n\n    .button-icon-counter {\n      margin: -0.5em 0 -0.5em $spacer-xs;\n    }\n  }\n\n  --button-icon-square-size: calc(\n    var(--bs-btn-line-height) * var(--bs-btn-font-size) +\n      var(--bs-btn-padding-y) * 2 + var(--bs-btn-border-width) * 2\n  );\n\n  &--truncate.btn {\n    max-width: 100%;\n\n    .button-icon__label {\n      white-space: nowrap;\n      overflow: hidden;\n      text-overflow: ellipsis;\n      flex: 1 0 0;\n    }\n  }\n\n  &--square.btn {\n    padding: 0;\n    align-items: center;\n    justify-content: center;\n    width: var(--button-icon-square-size);\n    height: var(--button-icon-square-size);\n    position: relative;\n    flex-shrink: 0;\n\n    .button-icon-counter {\n      margin: 0;\n      position: absolute;\n      bottom: auto;\n      left: auto;\n      right: 0;\n      top: 0;\n      transform: translate(50%, -50%);\n    }\n  }\n\n  &__icon-left ~ &__label,\n  &__label ~ &__icon-right {\n    margin-left: $spacer-xs;\n  }\n}\n</style>\n","<template>\n  <!--\n    NOTE: `@mousenter` is a typo for `@mouseenter`, so the hover-in state never\n    fires and `currentHover` only ever resets on mouse leave. Preserved as-is;\n    fixing it changes rendered behavior and belongs in a separate change.\n  -->\n  <b-button\n    v-bind=\"buttonProps\"\n    :id=\"buttonId\"\n    ref=\"element\"\n    :to=\"to\"\n    class=\"button-icon\"\n    :class=\"classList\"\n    :aria-label=\"tooltipText\"\n    @mousenter=\"currentHover = true\"\n    @mouseleave=\"currentHover = false\"\n  >\n    <slot name=\"start\" />\n    <app-icon\n      v-if=\"iconLeft || (!iconLeft && !iconRight && loading)\"\n      v-b-tooltip.top.body=\"{\n        title: iconLeftLabel,\n        offset: iconLeftLabelOffset,\n        delay: tooltipDelay\n      }\"\n      :name=\"iconLeftOrSpinner\"\n      :size=\"iconLeftSize\"\n      :spin=\"loading\"\n      :spin-duration=\"loadingDuration\"\n      :variant=\"iconLeftVariant\"\n      :hover-variant=\"iconLeftHoverVariant\"\n      :hover=\"currentHover\"\n      class=\"button-icon__icon-left\"\n    />\n    <span\n      v-if=\"!hideLabel\"\n      class=\"button-icon__label\"\n    >\n      <slot v-bind=\"{ labelOrLoadingText }\">{{ labelOrLoadingText }}</slot>\n    </span>\n    <app-icon\n      v-if=\"iconRight\"\n      v-b-tooltip.top.body=\"{\n        title: iconRightLabel,\n        offset: iconRightLabelOffset,\n        delay: tooltipDelay\n      }\"\n      :name=\"iconRightOrSpinner\"\n      :size=\"iconRightSize\"\n      :spin=\"loading\"\n      :spin-duration=\"loadingDuration\"\n      :variant=\"iconRightVariant\"\n      :hover-variant=\"iconRightHoverVariant\"\n      :hover=\"currentHover\"\n      class=\"button-icon__icon-right\"\n      @click=\"emitIconRightClick\"\n    />\n    <button-icon-counter\n      v-if=\"counter !== null\"\n      :counter=\"counter\"\n      :variant=\"counterVariant\"\n      :style=\"counterStyle\"\n    />\n    <slot name=\"end\" />\n    <b-tooltip\n      v-if=\"hasTooltip\"\n      teleport-to=\"body\"\n      :delay=\"tooltipDelay\"\n      :boundary-padding=\"20\"\n      :placement=\"tooltipPlacement\"\n      :target=\"elementRef\"\n      :title=\"tooltipText\"\n    />\n  </b-button>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, inject, useTemplateRef, type Component } from 'vue'\nimport uniqueId from 'lodash/uniqueId'\nimport IPhCircleNotch from '~icons/ph/circle-notch'\nimport type {\n  TextColorVariant,\n  ButtonVariant,\n  PopoverPlacement,\n  ButtonType,\n  ColorVariant\n} from 'bootstrap-vue-next'\n\nimport AppIcon from '@/components/App/AppIcon.vue'\nimport ButtonIconCounter from '@/components/Button/ButtonIconCounter.vue'\nimport { SIZE } from '@/enums'\nimport { resolveSize, type SizeWithMd } from '@/utils/size'\ndefineOptions({\n  name: 'ButtonIcon'\n})\n\nexport interface ButtonIconProps {\n  /**\n   * Custom ID for the button element\n   */\n  id?: string\n  /**\n   * Icon component or name to display on the left side\n   */\n  iconLeft?: string | Component\n  /**\n   * Color variant for the left icon\n   */\n  iconLeftVariant?: TextColorVariant\n  /**\n   * Color variant for the left icon on hover\n   */\n  iconLeftHoverVariant?: TextColorVariant\n  /**\n   * Size of the left icon. Can be a preset ('2xs', 'xs', 'sm', 'md', 'lg', 'xl', '2xl') or a CSS value (e.g., '16px', '1rem').\n   */\n  iconLeftSize?: string\n  /**\n   * Tooltip label for the left icon\n   */\n  iconLeftLabel?: string\n  /**\n   * Offset for the left icon tooltip\n   */\n  iconLeftLabelOffset?: number\n  /**\n   * Icon component or name to display on the right side\n   */\n  iconRight?: string | Component\n  /**\n   * Color variant for the right icon\n   */\n  iconRightVariant?: TextColorVariant\n  /**\n   * Color variant for the right icon on hover\n   */\n  iconRightHoverVariant?: TextColorVariant\n  /**\n   * Size of the right icon. Can be a preset ('2xs', 'xs', 'sm', 'md', 'lg', 'xl', '2xl') or a CSS value (e.g., '16px', '1rem').\n   */\n  iconRightSize?: string\n  /**\n   * Tooltip label for the right icon\n   */\n  iconRightLabel?: string\n  /**\n   * Offset for the right icon tooltip\n   */\n  iconRightLabelOffset?: number\n  /**\n   * Icon component to display during loading state\n   */\n  iconSpinner?: string | Component\n  /**\n   * Hide the button label text\n   */\n  hideLabel?: boolean\n  /**\n   * Hide the button tooltip\n   */\n  hideTooltip?: boolean\n  /**\n   * Button label text\n   */\n  label?: string\n  /**\n   * Make the button square (equal width and height)\n   */\n  square?: boolean\n  /**\n   * Router link destination (vue-router)\n   */\n  to?: any\n  /**\n   * Button color variant\n   */\n  variant?: ButtonVariant\n  /**\n   * Button size\n   */\n  size?: SizeWithMd\n  /**\n   * Make the button full-width block element\n   */\n  block?: boolean\n  /**\n   * Apply pill styling (fully rounded corners)\n   */\n  pill?: boolean\n  /**\n   * Toggle pressed state for toggle buttons\n   */\n  pressed?: boolean\n  /**\n   * HTML tag to render the button as\n   */\n  tag?: string\n  /**\n   * Button type attribute\n   */\n  type?: ButtonType\n  /**\n   * Show loading spinner and disable interactions\n   */\n  loading?: boolean\n  /**\n   * Duration of the loading spinner animation\n   */\n  loadingDuration?: string\n  /**\n   * Text to display while loading\n   */\n  loadingText?: string\n  /**\n   * Custom tooltip text (defaults to label)\n   */\n  tooltipLabel?: string\n  /**\n   * Tooltip placement position\n   */\n  tooltipPlacement?: PopoverPlacement\n  /**\n   * Delay before showing/hiding the tooltip\n   */\n  tooltipDelay?: { show: number, hide: number }\n  /**\n   * Force showing the tooltip even when label is visible\n   */\n  showTooltipForce?: boolean\n  /**\n   * Manual hover state control\n   *\n   * NOTE: this prop is part of the public API but is currently never consumed\n   * by the component; hover is tracked internally via `currentHover`. Kept for\n   * API compatibility; wiring it up is a follow-up.\n   */\n  hover?: boolean\n  /**\n   * Truncate label text with ellipsis when too long\n   */\n  truncate?: boolean\n  /**\n   * Counter badge value to display\n   */\n  counter?: number\n  /**\n   * Color variant for the counter badge\n   */\n  counterVariant?: ColorVariant\n  /**\n   * Custom styles for the counter badge\n   */\n  counterStyle?: string | object\n}\n\nconst props = withDefaults(defineProps<ButtonIconProps>(), {\n  square: false,\n  iconLeftLabelOffset: 19,\n  iconLeftSize: '1.25em',\n  iconRightSize: '1.25em',\n  iconSpinner: () => IPhCircleNotch as Component,\n  hideLabel: false,\n  hideTooltip: false,\n  tag: 'button',\n  type: 'button',\n  loadingDuration: '1s',\n  tooltipPlacement: 'top',\n  tooltipDelay: () => ({ show: 0, hide: 0 })\n})\n\nconst emit = defineEmits(['click:icon-right'])\n\nfunction emitIconRightClick() {\n  emit('click:icon-right')\n}\n\n// Fall back to the variant and size provided by an ancestor (e.g. a button\n// group) whenever the component does not set them explicitly.\nconst injectedVariant = inject('variant', 'action')\nconst injectedSize = inject<SizeWithMd>('size', SIZE.md)\nconst elementRef = useTemplateRef<HTMLElement>('element')\n\nconst currentHover = ref(false)\n\nconst buttonId = computed(() => props.id ?? uniqueId('button-icon-'))\n\nconst classList = computed(() => {\n  return {\n    'button-icon--square': props.square,\n    'button-icon--loading': props.loading,\n    'button-icon--truncate': props.truncate,\n    'button-icon--hover': currentHover.value,\n    'button-icon--use-injected-variant': !props.variant,\n    'button-icon--use-injected-size': !props.size\n  }\n})\n\nconst iconLeftOrSpinner = computed(() => {\n  return props.loading ? props.iconSpinner : props.iconLeft\n})\n\nconst iconRightOrSpinner = computed(() => {\n  return props.loading ? props.iconSpinner : props.iconRight\n})\n\nconst labelOrLoadingText = computed(() => {\n  return props.loading && props.loadingText ? props.loadingText : props.label\n})\n\nconst tooltipText = computed(() => {\n  return props.tooltipLabel ?? props.label\n})\n\nconst hasTooltip = computed(() => {\n  return (\n    !!tooltipText.value\n    && !props.hideTooltip\n    && (props.showTooltipForce || props.hideLabel)\n  )\n})\n\nconst resolvedSize = computed(() => resolveSize(props.size ?? injectedSize))\n\nconst buttonProps = computed(() => ({\n  block: props.block,\n  pill: props.pill,\n  pressed: props.pressed,\n  size: resolvedSize.value,\n  tag: props.tag,\n  type: props.type,\n  variant: props.variant ?? injectedVariant\n}))\n</script>\n\n<style lang=\"scss\" scoped>\n.button-icon {\n  &:deep(.app-icon) {\n    font-size: 1.25em;\n  }\n\n  &.btn {\n    // force overriding display-block from bootstrap\n    display: inline-flex;\n    flex-shrink: 0;\n    align-items: center;\n    min-width: 0;\n\n    .button-icon-counter {\n      margin: -0.5em 0 -0.5em $spacer-xs;\n    }\n  }\n\n  --button-icon-square-size: calc(\n    var(--bs-btn-line-height) * var(--bs-btn-font-size) +\n      var(--bs-btn-padding-y) * 2 + var(--bs-btn-border-width) * 2\n  );\n\n  &--truncate.btn {\n    max-width: 100%;\n\n    .button-icon__label {\n      white-space: nowrap;\n      overflow: hidden;\n      text-overflow: ellipsis;\n      flex: 1 0 0;\n    }\n  }\n\n  &--square.btn {\n    padding: 0;\n    align-items: center;\n    justify-content: center;\n    width: var(--button-icon-square-size);\n    height: var(--button-icon-square-size);\n    position: relative;\n    flex-shrink: 0;\n\n    .button-icon-counter {\n      margin: 0;\n      position: absolute;\n      bottom: auto;\n      left: auto;\n      right: 0;\n      top: 0;\n      transform: translate(50%, -50%);\n    }\n  }\n\n  &__icon-left ~ &__label,\n  &__label ~ &__icon-right {\n    margin-left: $spacer-xs;\n  }\n}\n</style>\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n  // No operation performed.\n}\n\nmodule.exports = noop;\n","import { ref } from 'vue'\nimport type { Ref } from 'vue'\n\n/**\n * Event names emitted by the `ButtonConfirm` component, in the order the\n * composable may trigger them.\n */\nexport type ConfirmButtonEvent = 'toggled' | 'cancelled' | 'confirmed'\n\n/**\n * Minimal emit signature accepted by {@link useConfirmButton}. It matches the\n * `defineEmits` return of the host component so the composable can forward the\n * confirmation lifecycle events without owning the component instance.\n */\nexport type ConfirmButtonEmit = (event: ConfirmButtonEvent, ...args: unknown[]) => void\n\n/**\n * Optional callbacks invoked alongside the emitted events, mirroring the\n * `confirmed`/`cancelled` props of the `ButtonConfirm` component.\n */\nexport interface UseConfirmButtonOptions {\n  /**\n   * Called when the user confirms, before the `confirmed` event is emitted.\n   */\n  onConfirmed?: () => void\n  /**\n   * Called when the user cancels, before the `cancelled` event is emitted.\n   */\n  onCancelled?: () => void\n}\n\n/**\n * Reactive API returned by {@link useConfirmButton}.\n */\nexport interface UseConfirmButton {\n  /**\n   * Whether the confirmation tooltip is currently visible.\n   */\n  showTooltip: Ref<boolean>\n  /**\n   * Flip the tooltip visibility and emit the resulting state.\n   */\n  toggle: () => void\n  /**\n   * Hide the tooltip, run the cancellation callback, then emit `cancelled`.\n   */\n  cancel: () => void\n  /**\n   * Hide the tooltip, run the confirmation callback, then emit `confirmed`.\n   */\n  confirm: () => void\n}\n\n/**\n * Owns the show/hide state of a confirmation tooltip and the cancel/confirm\n * lifecycle. Hiding always emits `toggled(false)` so listeners stay in sync,\n * and the matching callback runs before its event is emitted.\n *\n * @param emit - The host component's emit function for the confirmation events.\n * @param options - Optional confirm/cancel callbacks (see {@link UseConfirmButtonOptions}).\n * @returns The {@link UseConfirmButton} API: the `showTooltip` state plus the\n *   `toggle`, `cancel`, and `confirm` handlers.\n * @example\n * const emit = defineEmits(['toggled', 'cancelled', 'confirmed'])\n * const { showTooltip, toggle, cancel, confirm } = useConfirmButton(emit, {\n *   onConfirmed: () => props.confirmed?.(),\n *   onCancelled: () => props.cancelled?.()\n * })\n */\nexport function useConfirmButton(\n  emit: ConfirmButtonEmit,\n  options: UseConfirmButtonOptions = {}\n): UseConfirmButton {\n  const { onConfirmed, onCancelled } = options\n\n  const showTooltip = ref<boolean>(false)\n\n  function toggle(): void {\n    showTooltip.value = !showTooltip.value\n    emit('toggled', showTooltip.value)\n  }\n\n  // Collapsing the tooltip is shared by cancel and confirm, and always reports\n  // the closed state so external listeners mirror the component.\n  function hide(): void {\n    showTooltip.value = false\n    emit('toggled', false)\n  }\n\n  function cancel(): void {\n    hide()\n    onCancelled?.()\n    emit('cancelled')\n  }\n\n  function confirm(): void {\n    hide()\n    onConfirmed?.()\n    emit('confirmed')\n  }\n\n  return { showTooltip, toggle, cancel, confirm }\n}\n\nexport default useConfirmButton\n","<template>\n  <component\n    :is=\"tag\"\n    :id=\"uniqComponentId\"\n    class=\"confirm-button\"\n    @click.stop=\"toggle\"\n  >\n    <!-- @slot Main content of the button -->\n    <slot>-</slot>\n    <b-tooltip\n      ref=\"confirmationTooltip\"\n      :model-value=\"showTooltip\"\n      :placement=\"placement\"\n      :target=\"uniqComponentId\"\n      teleport-to=\"body\"\n      manual\n    >\n      <div class=\"confirm-button__tooltip\">\n        <button\n          v-if=\"!noCloseButton\"\n          class=\"confirm-button__tooltip__cancel btn btn-sm btn-link text-light p-0 float-end\"\n          @click=\"cancel\"\n        >\n          <app-icon\n            size=\"0.75em\"\n            variant=\"action\"\n          >\n            <i-ph-x />\n          </app-icon>\n        </button>\n        <p class=\"confirm-button__tooltip__label mb-2\">\n          {{ label }}\n        </p>\n        <p\n          v-if=\"description\"\n          class=\"confirm-button__tooltip__description mb-2\"\n        >\n          {{ description }}\n        </p>\n        <div class=\"confirm-button__tooltip__actions text-end\">\n          <button\n            class=\"confirm-button__tooltip__actions__cancel btn btn-sm btn-link text-light\"\n            @click=\"cancel\"\n          >\n            {{ no }}\n          </button>\n          <button\n            class=\"confirm-button__tooltip__actions__confirm btn btn-sm btn-link text-light fw-bold\"\n            @click=\"confirm\"\n          >\n            {{ yes }}\n          </button>\n        </div>\n      </div>\n    </b-tooltip>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport noop from 'lodash/noop'\nimport uniqueId from 'lodash/uniqueId'\nimport { BTooltip } from 'bootstrap-vue-next'\nimport type { PopoverPlacement } from 'bootstrap-vue-next'\nimport { ref } from 'vue'\nimport type { ComponentPublicInstance } from 'vue'\n\nimport AppIcon from '@/components/App/AppIcon.vue'\nimport { useConfirmButton } from '@/composables/useConfirmButton'\n\n/**\n * ConfirmButton\n */\ndefineOptions({\n  name: 'ConfirmButton'\n})\n\nexport interface ButtonConfirmProps {\n  /**\n   * Confirmation message visible in the tooltip upon user's click\n   */\n  label?: string\n  /**\n   * A description text to show under the confirmation label\n   */\n  description?: string | null\n  /**\n   * Disable the closing button\n   */\n  noCloseButton?: boolean\n  /**\n   * The confirmation callback\n   */\n  confirmed?: () => void\n  /**\n   * The cancellation callback\n   */\n  cancelled?: () => void\n  /**\n   * Label for 'Yes' button\n   */\n  yes?: string\n  /**\n   * Label for 'No' button\n   */\n  no?: string\n  /**\n   * Tooltip position\n   */\n  placement?: PopoverPlacement\n  /**\n   * HTML tag to render this component to.\n   */\n  tag?: string\n}\n\nconst props = withDefaults(defineProps<ButtonConfirmProps>(), {\n  label: 'Are you sure?',\n  description: null,\n  noCloseButton: false,\n  confirmed: noop,\n  cancelled: noop,\n  yes: 'Yes',\n  no: 'No',\n  placement: 'top',\n  tag: 'button'\n})\n\n/**\n * @event toggled Emitted when the confirmation tooltip is toggled. Payload is\n *   `true` when the tooltip becomes visible.\n * @event cancelled Emitted when the confirmation is cancelled.\n * @event confirmed Emitted when the confirmation is confirmed.\n */\nconst emit = defineEmits(['toggled', 'cancelled', 'confirmed'])\n\nconst uniqComponentId = uniqueId('murmur-confirm-button-')\nconst confirmationTooltip = ref<ComponentPublicInstance | null>(null)\n\n// The confirmation lifecycle (show/hide state plus cancel/confirm handlers) is\n// owned by the composable; the callback props are forwarded so they still run.\nconst { showTooltip, toggle, cancel, confirm } = useConfirmButton(emit, {\n  onConfirmed: () => props.confirmed?.(),\n  onCancelled: () => props.cancelled?.()\n})\n</script>\n\n<style lang=\"scss\">\n\n.confirm-button {\n  &__tooltip {\n    min-width: calc(#{$tooltip-max-width} - #{$tooltip-padding-x * 2});\n    text-align: left;\n\n    &__label,\n    &__cancel {\n      font-weight: bold;\n      font-size: 1.2em;\n    }\n\n    &__actions {\n      margin-bottom: $tooltip-padding-x - $tooltip-padding-y;\n\n      &__confirm,\n      &__cancel {\n        text-transform: uppercase;\n      }\n    }\n  }\n}\n</style>\n","<template>\n  <component\n    :is=\"tag\"\n    :id=\"uniqComponentId\"\n    class=\"confirm-button\"\n    @click.stop=\"toggle\"\n  >\n    <!-- @slot Main content of the button -->\n    <slot>-</slot>\n    <b-tooltip\n      ref=\"confirmationTooltip\"\n      :model-value=\"showTooltip\"\n      :placement=\"placement\"\n      :target=\"uniqComponentId\"\n      teleport-to=\"body\"\n      manual\n    >\n      <div class=\"confirm-button__tooltip\">\n        <button\n          v-if=\"!noCloseButton\"\n          class=\"confirm-button__tooltip__cancel btn btn-sm btn-link text-light p-0 float-end\"\n          @click=\"cancel\"\n        >\n          <app-icon\n            size=\"0.75em\"\n            variant=\"action\"\n          >\n            <i-ph-x />\n          </app-icon>\n        </button>\n        <p class=\"confirm-button__tooltip__label mb-2\">\n          {{ label }}\n        </p>\n        <p\n          v-if=\"description\"\n          class=\"confirm-button__tooltip__description mb-2\"\n        >\n          {{ description }}\n        </p>\n        <div class=\"confirm-button__tooltip__actions text-end\">\n          <button\n            class=\"confirm-button__tooltip__actions__cancel btn btn-sm btn-link text-light\"\n            @click=\"cancel\"\n          >\n            {{ no }}\n          </button>\n          <button\n            class=\"confirm-button__tooltip__actions__confirm btn btn-sm btn-link text-light fw-bold\"\n            @click=\"confirm\"\n          >\n            {{ yes }}\n          </button>\n        </div>\n      </div>\n    </b-tooltip>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport noop from 'lodash/noop'\nimport uniqueId from 'lodash/uniqueId'\nimport { BTooltip } from 'bootstrap-vue-next'\nimport type { PopoverPlacement } from 'bootstrap-vue-next'\nimport { ref } from 'vue'\nimport type { ComponentPublicInstance } from 'vue'\n\nimport AppIcon from '@/components/App/AppIcon.vue'\nimport { useConfirmButton } from '@/composables/useConfirmButton'\n\n/**\n * ConfirmButton\n */\ndefineOptions({\n  name: 'ConfirmButton'\n})\n\nexport interface ButtonConfirmProps {\n  /**\n   * Confirmation message visible in the tooltip upon user's click\n   */\n  label?: string\n  /**\n   * A description text to show under the confirmation label\n   */\n  description?: string | null\n  /**\n   * Disable the closing button\n   */\n  noCloseButton?: boolean\n  /**\n   * The confirmation callback\n   */\n  confirmed?: () => void\n  /**\n   * The cancellation callback\n   */\n  cancelled?: () => void\n  /**\n   * Label for 'Yes' button\n   */\n  yes?: string\n  /**\n   * Label for 'No' button\n   */\n  no?: string\n  /**\n   * Tooltip position\n   */\n  placement?: PopoverPlacement\n  /**\n   * HTML tag to render this component to.\n   */\n  tag?: string\n}\n\nconst props = withDefaults(defineProps<ButtonConfirmProps>(), {\n  label: 'Are you sure?',\n  description: null,\n  noCloseButton: false,\n  confirmed: noop,\n  cancelled: noop,\n  yes: 'Yes',\n  no: 'No',\n  placement: 'top',\n  tag: 'button'\n})\n\n/**\n * @event toggled Emitted when the confirmation tooltip is toggled. Payload is\n *   `true` when the tooltip becomes visible.\n * @event cancelled Emitted when the confirmation is cancelled.\n * @event confirmed Emitted when the confirmation is confirmed.\n */\nconst emit = defineEmits(['toggled', 'cancelled', 'confirmed'])\n\nconst uniqComponentId = uniqueId('murmur-confirm-button-')\nconst confirmationTooltip = ref<ComponentPublicInstance | null>(null)\n\n// The confirmation lifecycle (show/hide state plus cancel/confirm handlers) is\n// owned by the composable; the callback props are forwarded so they still run.\nconst { showTooltip, toggle, cancel, confirm } = useConfirmButton(emit, {\n  onConfirmed: () => props.confirmed?.(),\n  onCancelled: () => props.cancelled?.()\n})\n</script>\n\n<style lang=\"scss\">\n\n.confirm-button {\n  &__tooltip {\n    min-width: calc(#{$tooltip-max-width} - #{$tooltip-padding-x * 2});\n    text-align: left;\n\n    &__label,\n    &__cancel {\n      font-weight: bold;\n      font-size: 1.2em;\n    }\n\n    &__actions {\n      margin-bottom: $tooltip-padding-x - $tooltip-padding-y;\n\n      &__confirm,\n      &__cancel {\n        text-transform: uppercase;\n      }\n    }\n  }\n}\n</style>\n","var isArray = require('./isArray'),\n    isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n  if (isArray(value)) {\n    return false;\n  }\n  var type = typeof value;\n  if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n      value == null || isSymbol(value)) {\n    return true;\n  }\n  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n    (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","var baseGetTag = require('./_baseGetTag'),\n    isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\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 a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nmodule.exports = toSource;\n","var isFunction = require('./isFunction'),\n    isMasked = require('./_isMasked'),\n    isObject = require('./isObject'),\n    toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var baseIsNative = require('./_baseIsNative'),\n    getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\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 * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\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 * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\nmodule.exports = hashSet;\n","var hashClear = require('./_hashClear'),\n    hashDelete = require('./_hashDelete'),\n    hashGet = require('./_hashGet'),\n    hashHas = require('./_hashHas'),\n    hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nmodule.exports = listCacheSet;\n","var listCacheClear = require('./_listCacheClear'),\n    listCacheDelete = require('./_listCacheDelete'),\n    listCacheGet = require('./_listCacheGet'),\n    listCacheHas = require('./_listCacheHas'),\n    listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var Hash = require('./_Hash'),\n    ListCache = require('./_ListCache'),\n    Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\nmodule.exports = mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\nmodule.exports = getMapData;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nmodule.exports = mapCacheSet;\n","var mapCacheClear = require('./_mapCacheClear'),\n    mapCacheDelete = require('./_mapCacheDelete'),\n    mapCacheGet = require('./_mapCacheGet'),\n    mapCacheHas = require('./_mapCacheHas'),\n    mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n  if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  var memoized = function() {\n    var args = arguments,\n        key = resolver ? resolver.apply(this, args) : args[0],\n        cache = memoized.cache;\n\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    var result = func.apply(this, args);\n    memoized.cache = cache.set(key, result) || cache;\n    return result;\n  };\n  memoized.cache = new (memoize.Cache || MapCache);\n  return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n  var result = memoize(func, function(key) {\n    if (cache.size === MAX_MEMOIZE_SIZE) {\n      cache.clear();\n    }\n    return key;\n  });\n\n  var cache = result.cache;\n  return result;\n}\n\nmodule.exports = memoizeCapped;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n  var result = [];\n  if (string.charCodeAt(0) === 46 /* . */) {\n    result.push('');\n  }\n  string.replace(rePropName, function(match, number, quote, subString) {\n    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n});\n\nmodule.exports = stringToPath;\n","var isArray = require('./isArray'),\n    isKey = require('./_isKey'),\n    stringToPath = require('./_stringToPath'),\n    toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n  if (isArray(value)) {\n    return value;\n  }\n  return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n  if (typeof value == 'string' || isSymbol(value)) {\n    return value;\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","var castPath = require('./_castPath'),\n    toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n  path = castPath(path, object);\n\n  var index = 0,\n      length = path.length;\n\n  while (object != null && index < length) {\n    object = object[toKey(path[index++])];\n  }\n  return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n  var result = object == null ? undefined : baseGet(object, path);\n  return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\nmodule.exports = arrayEach;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1,\n        iterable = Object(object),\n        props = keysFunc(object),\n        length = props.length;\n\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\nmodule.exports = createBaseFor;\n","var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nmodule.exports = baseTimes;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsArguments = require('./_baseIsArguments'),\n    isObjectLike = require('./isObjectLike');\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/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\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 `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nmodule.exports = stubFalse;\n","var root = require('./_root'),\n    stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\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 valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var baseGetTag = require('./_baseGetTag'),\n    isLength = require('./isLength'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nmodule.exports = baseUnary;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var baseTimes = require('./_baseTimes'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isIndex = require('./_isIndex'),\n    isTypedArray = require('./isTypedArray');\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 * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\nmodule.exports = isPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nmodule.exports = overArg;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","var isPrototype = require('./_isPrototype'),\n    nativeKeys = require('./_nativeKeys');\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 * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeys;\n","var isFunction = require('./isFunction'),\n    isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\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 array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeys = require('./_baseKeys'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var baseFor = require('./_baseFor'),\n    keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n","var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n  return function(collection, iteratee) {\n    if (collection == null) {\n      return collection;\n    }\n    if (!isArrayLike(collection)) {\n      return eachFunc(collection, iteratee);\n    }\n    var length = collection.length,\n        index = fromRight ? length : -1,\n        iterable = Object(collection);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (iteratee(iterable[index], index, iterable) === false) {\n        break;\n      }\n    }\n    return collection;\n  };\n}\n\nmodule.exports = createBaseEach;\n","var baseForOwn = require('./_baseForOwn'),\n    createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nmodule.exports = identity;\n","var identity = require('./identity');\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n  return typeof value == 'function' ? value : identity;\n}\n\nmodule.exports = castFunction;\n","var arrayEach = require('./_arrayEach'),\n    baseEach = require('./_baseEach'),\n    castFunction = require('./_castFunction'),\n    isArray = require('./isArray');\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n *   console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n *   console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n  var func = isArray(collection) ? arrayEach : baseEach;\n  return func(collection, castFunction(iteratee));\n}\n\nmodule.exports = forEach;\n","module.exports = require('./forEach');\n","export default {\n  'imddb-header.dropdown.items': [\n    { label: 'Graphics', href: '#/' },\n    { label: 'Overview', href: '#/' },\n    { label: 'Visual overview', href: '#/' },\n    { label: 'Backgrounder', href: '#/' },\n    { label: 'About this project', href: '#/', active: true }\n  ],\n  'project.name': 'Secret Papers',\n  'app.name': 'Awesome App',\n  'app.home': './',\n  'app.donate-url': 'https://www.icij.org/donate/',\n  'contact-email': 'contact@icij.org',\n  'content-placeholder.rows': [\n    {\n      height: '1em',\n      boxes: [\n        [0, '50%'],\n        ['5%', '30%'],\n        ['5%', '10%']\n      ]\n    }\n  ],\n  'donate-form.tracker': null,\n  'sharing-options.url': null,\n  'sharing-options.title': 'Awesome App by ICIJ',\n  'sharing-options.description': 'null',\n  'sharing-options.media': null,\n  'signup-form.tracker': 'EXTERNAL',\n  'signup-form.action':\n    'https://icij.us15.list-manage.com/subscribe/post?u=0d48a33b1c24d257734cc2a79&id=992ecfdbb2',\n  'signup-form.email-field': 'EMAIL',\n  'signup-form.default-groups': ['group[9][1]'],\n  'textured-deck.background-base-url': 'https://icij.github.io/murmur',\n  'map.topojson.world-countries-sans-antarctica':\n    'https://icij.github.io/murmur/assets/topojson/world-countries-sans-antarctica.json',\n  'map.topojson.france-departements':\n    'https://icij.github.io/murmur/assets/topojson/france-departements.json'\n}\n","import get from 'lodash/get'\nimport each from 'lodash/each'\nimport { ref } from 'vue'\nimport type { Ref } from 'vue'\nimport defaultValues from './config.default'\n\n/**\n * Supported config value types\n */\nexport type ConfigValue\n  = | string\n    | number\n    | boolean\n    | null\n    | object\n    | ConfigValue[]\n    | { [key: string]: ConfigValue }\n\ntype ConfigValues = Record<string, ConfigValue>\ntype ConfigScopes = Record<string, Config>\n\nexport class Config {\n  _VALUES: Ref<ConfigValues>\n  _SCOPES: Ref<ConfigScopes>\n\n  constructor(values: ConfigValues = {}) {\n    this._VALUES = ref<ConfigValues>({})\n    this._SCOPES = ref<ConfigScopes>({})\n    this.merge(values)\n    return this\n  }\n\n  merge(values: ConfigValues = {}): void {\n    each(values, (value, key) => {\n      this.set(key, value)\n    })\n  }\n\n  set(key: string, value: ConfigValue): ConfigValue {\n    const levels = key.split('.')\n    this._VALUES.value = this._VALUES.value ?? {}\n\n    if (levels.length > 1) {\n      const scope = this.scope(levels.shift() as string)\n      this._VALUES.value[key] = scope.set(levels.join('.'), value)\n    }\n    else {\n      this._VALUES.value[key] = value\n    }\n    return value\n  }\n\n  get<T extends ConfigValue = ConfigValue>(key: string, defaultValue: T): T\n  get<T extends ConfigValue = ConfigValue>(key: string, defaultValue?: null): T | null\n  get<T extends ConfigValue = ConfigValue>(key: string, defaultValue?: T | null): T | null {\n    // lodash's `get` only substitutes `defaultValue` when the resolved value is\n    // `undefined`, so a deliberately stored `null` (e.g. config.default.ts's\n    // `donate-form.tracker`) is returned as-is instead of falling back.\n    return get(this._VALUES.value, key, defaultValue) as T | null\n  }\n\n  is(key: string): boolean {\n    const value = this.get(key)\n    switch (value) {\n      case 1:\n        return true\n      case true:\n        return true\n      case '1':\n        return true\n      case 'true':\n        return true\n      case 0:\n        return false\n      case false:\n        return false\n      case '0':\n        return false\n      case 'false':\n        return false\n      default:\n        return !!value\n    }\n  }\n\n  isnt(key: string): boolean {\n    return !this.is(key)\n  }\n\n  scope(name: string): Config {\n    this.scopes[name] = this.scopes[name] ?? new Config()\n    return this.scopes[name]\n  }\n\n  get values(): ConfigValues {\n    return this._VALUES.value\n  }\n\n  get scopes(): ConfigScopes {\n    this._SCOPES.value = this._SCOPES.value ?? {}\n    return this._SCOPES.value\n  }\n}\n\nexport default new Config(defaultValues)\n","import type {\n  BoxStyle,\n  ContentPlaceholderRow,\n  ContentPlaceholderRows,\n  ContentPlaceholderStyledRow,\n  ContentPlaceholderStyledRows\n} from '@/types'\n\nconst CSS_WIDTH_SUFFIXES = ['px', '%', 'em', 'rem']\n\n/**\n * Tell whether a value is a unitless flex-basis number (e.g. `2` or `'2'`).\n *\n * @param value - The candidate box size.\n * @returns `true` when the value is purely numeric.\n * @example\n * isFlexBasis(2) // true\n * isFlexBasis('20px') // false\n */\nfunction isFlexBasis(value: string | number): boolean {\n  return Number(value).toString() === value.toString()\n}\n\n/**\n * Tell whether a value is a CSS width with a supported unit (px, %, em, rem).\n *\n * @param value - The candidate box size.\n * @returns `true` when the value is a number followed by a supported unit.\n * @example\n * isWidth('20px') // true\n * isWidth(20) // false\n */\nfunction isWidth(value: string | number): boolean {\n  const valueAsStr = String(value)\n  return CSS_WIDTH_SUFFIXES.some((suffix) => {\n    const segments = valueAsStr.split(suffix)\n    return (\n      Number(segments[0])\n      && segments[1] === ''\n      && segments.length === 2\n    )\n  })\n}\n\n/**\n * Build the flexbox style declarations for a single placeholder box.\n *\n * @param left - The leading spacer size; `0` means no spacer.\n * @param width - The box size, either a flex-grow factor or a CSS width.\n * @param isLast - Whether this box is the last in its row.\n * @param subClass - The CSS sub-class applied to spacer boxes.\n * @returns The ordered list of box styles for the spacer, the box, and the trailing filler.\n */\nfunction getBoxStyle(\n  left: number,\n  width: number,\n  isLast: boolean,\n  subClass = 'box'\n): BoxStyle[] {\n  const boxStyles: BoxStyle[] = []\n\n  // Prepend a leading spacer when the box does not start at the row's edge.\n  if (left !== 0) {\n    if (isFlexBasis(left)) {\n      boxStyles.push({\n        style: `flex-grow: ${left}; flex-shrink: 0; flex-basis: 0;`,\n        subClass\n      })\n    }\n    else if (isWidth(left)) {\n      boxStyles.push({\n        style: `flex-grow: 0; flex-shrink: 0; flex-basis: ${left};`,\n        subClass\n      })\n    }\n  }\n  if (isFlexBasis(width)) {\n    boxStyles.push({ style: `flex-grow: ${width}; flex-shrink: 0; flex-basis: 0;` })\n  }\n  else if (isWidth(width)) {\n    boxStyles.push({ style: `flex-grow: 0; flex-shrink: 0; flex-basis: ${width};` })\n  }\n  // Fill the remaining row space after the last box.\n  if (isLast) {\n    boxStyles.push({\n      style: 'flex-grow: 1; flex-shrink: 0; flex-basis: 0;',\n      subClass\n    })\n  }\n  return boxStyles\n}\n\n/**\n * Turn placeholder rows of raw box sizes into rows of computed flexbox styles.\n *\n * @param rows - The placeholder rows, each box expressed as `[left, width]`.\n * @param subClass - The CSS sub-class applied to spacer boxes.\n * @returns The rows with their boxes converted to style declarations.\n */\nfunction formatRows(\n  rows: ContentPlaceholderRows,\n  subClass = 'box'\n): ContentPlaceholderStyledRows {\n  return rows.map((row: ContentPlaceholderRow) => {\n    const rowBoxes: BoxStyle[] = []\n    const styledRow: ContentPlaceholderStyledRow = {\n      height: row.height,\n      boxes: []\n    }\n    row.boxes.forEach((box: (number | string)[], index: number) => {\n      const isLast: boolean = index === row.boxes.length - 1\n      rowBoxes.push(...getBoxStyle(box[0] as number, box[1] as number, isLast, subClass))\n    })\n    styledRow.boxes = rowBoxes\n    return styledRow\n  })\n}\n\nexport {\n  isFlexBasis,\n  isWidth,\n  getBoxStyle,\n  formatRows\n}\n","import { computed, toValue } from 'vue'\nimport type { ComputedRef, MaybeRefOrGetter } from 'vue'\n\nimport { formatRows } from '@/utils/placeholder'\nimport type {\n  ContentPlaceholderRows,\n  ContentPlaceholderStyledRows\n} from '@/types'\n\n/**\n * Reactive API returned by {@link useContentPlaceholder}.\n */\nexport interface UseContentPlaceholder {\n  /**\n   * The placeholder rows with every box converted to its flexbox style\n   * declarations, ready to bind in the template.\n   */\n  formattedRows: ComputedRef<ContentPlaceholderStyledRows>\n}\n\n/**\n * Derives the styled placeholder rows for the `ContentPlaceholder` component.\n *\n * Wraps the pure {@link formatRows} geometry helper in a `computed` so the\n * styled rows recompute whenever the source rows change. The geometry itself is\n * deterministic: identical inputs always produce identical styles.\n *\n * This composable is internal to the library and not exported from the public\n * entry point; consume it from a relative path.\n *\n * @param rows - The placeholder rows, each box expressed as `[left, width]`.\n *   May be a plain value, a ref or a getter.\n * @param subClass - The CSS sub-class applied to spacer boxes.\n * @returns The {@link UseContentPlaceholder} API exposing `formattedRows`.\n * @example\n * import { useContentPlaceholder } from '@/composables/useContentPlaceholder'\n *\n * const { formattedRows } = useContentPlaceholder(\n *   () => props.rows,\n *   'content-placeholder__wrapper__row__box'\n * )\n */\nexport function useContentPlaceholder(\n  rows: MaybeRefOrGetter<ContentPlaceholderRows | undefined>,\n  subClass = 'box'\n): UseContentPlaceholder {\n  const formattedRows = computed((): ContentPlaceholderStyledRows => {\n    const sourceRows = toValue(rows)\n    // A placeholder without rows renders nothing rather than throwing.\n    return sourceRows ? formatRows(sourceRows, subClass) : []\n  })\n\n  return { formattedRows }\n}\n\nexport default useContentPlaceholder\n","<template>\n  <div\n    v-once\n    class=\"content-placeholder\"\n  >\n    <div\n      class=\"content-placeholder__wrapper\"\n      :style=\"{ backgroundSize: size }\"\n    >\n      <div\n        v-for=\"(row, r) in formattedRows\"\n        :key=\"r\"\n        class=\"content-placeholder__wrapper__row\"\n        :style=\"{ height: row.height }\"\n      >\n        <div\n          v-for=\"(box, b) in row.boxes\"\n          :key=\"b\"\n          :style=\"box.style\"\n        >\n          <div\n            v-if=\"box.subClass\"\n            :class=\"box.subClass\"\n          />\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport config from '@/config'\nimport configDefaults from '@/config.default'\nimport { useContentPlaceholder } from '@/composables/useContentPlaceholder'\nimport type { ContentPlaceholderRows } from '@/types'\n\n/**\n * A component to fill empty spaces with animated placeholders until content is loaded.\n */\ndefineOptions({\n  name: 'ContentPlaceholder'\n})\n\n// CSS sub-class applied to the spacer boxes the geometry helper inserts\n// between content boxes (leading spacers and the trailing filler).\nconst BOX_SUB_CLASS = 'content-placeholder__wrapper__row__box'\n\nexport interface ContentPlaceholderProps {\n  /**\n   * An array of lines describing a series of cell sizes and margin sizes.\n   */\n  rows?: ContentPlaceholderRows\n  /**\n   * The size of the background gradient with the elapsing effect.\n   */\n  size?: string\n}\n\nconst props = withDefaults(defineProps<ContentPlaceholderProps>(), {\n  rows: () => config.get('content-placeholder.rows', configDefaults['content-placeholder.rows']),\n  size: '250%'\n})\n\nconst { formattedRows } = useContentPlaceholder(() => props.rows, BOX_SUB_CLASS)\n</script>\n\n<style scoped lang=\"scss\">\n\n@keyframes placeHolderShimmer {\n  0% {\n    background-position: 100% 0;\n  }\n  100% {\n    background-position: -100% 0;\n  }\n}\n\n.content-placeholder {\n  overflow: hidden;\n\n  &__wrapper {\n    animation-duration: 1s;\n    animation-fill-mode: forwards;\n    animation-iteration-count: infinite;\n    animation-name: placeHolderShimmer;\n    animation-timing-function: linear;\n    background: #f6f7f8;\n    background: linear-gradient(to right, #eeeeee 8%, #dddddd 18%, #eeeeee 33%);\n    position: relative;\n\n    &__row {\n      width: 100%;\n      box-sizing: border-box;\n      display: flex;\n      flex: 0 1 auto;\n      flex-direction: row;\n      flex-wrap: wrap;\n\n      &__box {\n        box-sizing: border-box;\n        position: relative;\n        height: 100%;\n        margin-bottom: 0;\n        background-color: white;\n        overflow: hidden;\n      }\n    }\n  }\n}\n</style>\n","<template>\n  <div\n    v-once\n    class=\"content-placeholder\"\n  >\n    <div\n      class=\"content-placeholder__wrapper\"\n      :style=\"{ backgroundSize: size }\"\n    >\n      <div\n        v-for=\"(row, r) in formattedRows\"\n        :key=\"r\"\n        class=\"content-placeholder__wrapper__row\"\n        :style=\"{ height: row.height }\"\n      >\n        <div\n          v-for=\"(box, b) in row.boxes\"\n          :key=\"b\"\n          :style=\"box.style\"\n        >\n          <div\n            v-if=\"box.subClass\"\n            :class=\"box.subClass\"\n          />\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport config from '@/config'\nimport configDefaults from '@/config.default'\nimport { useContentPlaceholder } from '@/composables/useContentPlaceholder'\nimport type { ContentPlaceholderRows } from '@/types'\n\n/**\n * A component to fill empty spaces with animated placeholders until content is loaded.\n */\ndefineOptions({\n  name: 'ContentPlaceholder'\n})\n\n// CSS sub-class applied to the spacer boxes the geometry helper inserts\n// between content boxes (leading spacers and the trailing filler).\nconst BOX_SUB_CLASS = 'content-placeholder__wrapper__row__box'\n\nexport interface ContentPlaceholderProps {\n  /**\n   * An array of lines describing a series of cell sizes and margin sizes.\n   */\n  rows?: ContentPlaceholderRows\n  /**\n   * The size of the background gradient with the elapsing effect.\n   */\n  size?: string\n}\n\nconst props = withDefaults(defineProps<ContentPlaceholderProps>(), {\n  rows: () => config.get('content-placeholder.rows', configDefaults['content-placeholder.rows']),\n  size: '250%'\n})\n\nconst { formattedRows } = useContentPlaceholder(() => props.rows, BOX_SUB_CLASS)\n</script>\n\n<style scoped lang=\"scss\">\n\n@keyframes placeHolderShimmer {\n  0% {\n    background-position: 100% 0;\n  }\n  100% {\n    background-position: -100% 0;\n  }\n}\n\n.content-placeholder {\n  overflow: hidden;\n\n  &__wrapper {\n    animation-duration: 1s;\n    animation-fill-mode: forwards;\n    animation-iteration-count: infinite;\n    animation-name: placeHolderShimmer;\n    animation-timing-function: linear;\n    background: #f6f7f8;\n    background: linear-gradient(to right, #eeeeee 8%, #dddddd 18%, #eeeeee 33%);\n    position: relative;\n\n    &__row {\n      width: 100%;\n      box-sizing: border-box;\n      display: flex;\n      flex: 0 1 auto;\n      flex-direction: row;\n      flex-wrap: wrap;\n\n      &__box {\n        box-sizing: border-box;\n        position: relative;\n        height: 100%;\n        margin-bottom: 0;\n        background-color: white;\n        overflow: hidden;\n      }\n    }\n  }\n}\n</style>\n","/*!\n  * shared v11.4.2\n  * (c) 2026 kazuya kawaguchi\n  * Released under the MIT License.\n  */\nfunction warn(msg, err) {\n    if (typeof console !== 'undefined') {\n        console.warn(`[intlify] ` + msg);\n        /* istanbul ignore if */\n        if (err) {\n            console.warn(err.stack);\n        }\n    }\n}\nconst hasWarned = {};\nfunction warnOnce(msg) {\n    if (!hasWarned[msg]) {\n        hasWarned[msg] = true;\n        warn(msg);\n    }\n}\n\n/**\n * Original Utilities\n * written by kazuya kawaguchi\n */\nconst inBrowser = typeof window !== 'undefined';\nlet mark;\nlet measure;\nif ((process.env.NODE_ENV !== 'production')) {\n    const perf = inBrowser && window.performance;\n    if (perf &&\n        perf.mark &&\n        perf.measure &&\n        perf.clearMarks &&\n        // @ts-ignore browser compat\n        perf.clearMeasures) {\n        mark = (tag) => {\n            perf.mark(tag);\n        };\n        measure = (name, startTag, endTag) => {\n            perf.measure(name, startTag, endTag);\n            perf.clearMarks(startTag);\n            perf.clearMarks(endTag);\n        };\n    }\n}\nconst RE_ARGS = /\\{([0-9a-zA-Z]+)\\}/g;\n/* eslint-disable */\nfunction format(message, ...args) {\n    if (args.length === 1 && isObject(args[0])) {\n        args = args[0];\n    }\n    if (!args || !args.hasOwnProperty) {\n        args = {};\n    }\n    return message.replace(RE_ARGS, (match, identifier) => {\n        return args.hasOwnProperty(identifier) ? args[identifier] : '';\n    });\n}\nconst makeSymbol = (name, shareable = false) => !shareable ? Symbol(name) : Symbol.for(name);\nconst generateFormatCacheKey = (locale, key, source) => friendlyJSONstringify({ l: locale, k: key, s: source });\nconst friendlyJSONstringify = (json) => JSON.stringify(json)\n    .replace(/\\u2028/g, '\\\\u2028')\n    .replace(/\\u2029/g, '\\\\u2029')\n    .replace(/\\u0027/g, '\\\\u0027');\nconst isNumber = (val) => typeof val === 'number' && isFinite(val);\nconst isDate = (val) => toTypeString(val) === '[object Date]';\nconst isRegExp = (val) => toTypeString(val) === '[object RegExp]';\nconst isEmptyObject = (val) => isPlainObject(val) && Object.keys(val).length === 0;\nconst assign = Object.assign;\nconst _create = Object.create;\nconst create = (obj = null) => _create(obj);\nlet _globalThis;\nconst getGlobalThis = () => {\n    // prettier-ignore\n    return (_globalThis ||\n        (_globalThis =\n            typeof globalThis !== 'undefined'\n                ? globalThis\n                : typeof self !== 'undefined'\n                    ? self\n                    : typeof window !== 'undefined'\n                        ? window\n                        : typeof global !== 'undefined'\n                            ? global\n                            : create()));\n};\nfunction escapeHtml(rawText) {\n    return rawText\n        .replace(/&/g, '&amp;') // escape `&` first to avoid double escaping\n        .replace(/</g, '&lt;')\n        .replace(/>/g, '&gt;')\n        .replace(/\"/g, '&quot;')\n        .replace(/'/g, '&apos;')\n        .replace(/\\//g, '&#x2F;') // escape `/` to prevent closing tags or JavaScript URLs\n        .replace(/=/g, '&#x3D;'); // escape `=` to prevent attribute injection\n}\nfunction escapeAttributeValue(value) {\n    return value\n        .replace(/&(?![a-zA-Z0-9#]{2,6};)/g, '&amp;') // escape unescaped `&`\n        .replace(/\"/g, '&quot;')\n        .replace(/'/g, '&apos;')\n        .replace(/</g, '&lt;')\n        .replace(/>/g, '&gt;');\n}\nfunction sanitizeTranslatedHtml(html) {\n    // Escape dangerous characters in attribute values\n    // Process attributes with double quotes\n    html = html.replace(/(\\w+)\\s*=\\s*\"([^\"]*)\"/g, (_, attrName, attrValue) => `${attrName}=\"${escapeAttributeValue(attrValue)}\"`);\n    // Process attributes with single quotes\n    html = html.replace(/(\\w+)\\s*=\\s*'([^']*)'/g, (_, attrName, attrValue) => `${attrName}='${escapeAttributeValue(attrValue)}'`);\n    // Detect and neutralize event handler attributes\n    const eventHandlerPattern = /\\s*on\\w+\\s*=\\s*[\"']?[^\"'>]+[\"']?/gi;\n    if (eventHandlerPattern.test(html)) {\n        if ((process.env.NODE_ENV !== 'production')) {\n            warn('Potentially dangerous event handlers detected in translation. ' +\n                'Consider removing onclick, onerror, etc. from your translation messages.');\n        }\n        // Neutralize event handler attributes by escaping 'on'\n        html = html.replace(/(\\s+)(on)(\\w+\\s*=)/gi, '$1&#111;n$3');\n    }\n    // Disable javascript: URLs in various contexts\n    const javascriptUrlPattern = [\n        // In href, src, action, formaction attributes\n        /(\\s+(?:href|src|action|formaction)\\s*=\\s*[\"']?)\\s*javascript:/gi,\n        // In style attributes within url()\n        /(style\\s*=\\s*[\"'][^\"']*url\\s*\\(\\s*)javascript:/gi\n    ];\n    javascriptUrlPattern.forEach(pattern => {\n        html = html.replace(pattern, '$1javascript&#58;');\n    });\n    return html;\n}\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn(obj, key) {\n    return hasOwnProperty.call(obj, key);\n}\n/* eslint-enable */\n/**\n * Useful Utilities By Evan you\n * Modified by kazuya kawaguchi\n * MIT License\n * https://github.com/vuejs/vue-next/blob/master/packages/shared/src/index.ts\n * https://github.com/vuejs/vue-next/blob/master/packages/shared/src/codeframe.ts\n */\nconst isArray = Array.isArray;\nconst isFunction = (val) => typeof val === 'function';\nconst isString = (val) => typeof val === 'string';\nconst isBoolean = (val) => typeof val === 'boolean';\nconst isSymbol = (val) => typeof val === 'symbol';\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst isObject = (val) => val !== null && typeof val === 'object';\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst isPromise = (val) => {\n    return isObject(val) && isFunction(val.then) && isFunction(val.catch);\n};\nconst objectToString = Object.prototype.toString;\nconst toTypeString = (value) => objectToString.call(value);\nconst isPlainObject = (val) => toTypeString(val) === '[object Object]';\n// for converting list and named values to displayed strings.\nconst toDisplayString = (val) => {\n    return val == null\n        ? ''\n        : isArray(val) || (isPlainObject(val) && val.toString === objectToString)\n            ? JSON.stringify(val, null, 2)\n            : String(val);\n};\nfunction join(items, separator = '') {\n    return items.reduce((str, item, index) => (index === 0 ? str + item : str + separator + item), '');\n}\nconst RANGE = 2;\nfunction generateCodeFrame(source, start = 0, end = source.length) {\n    const lines = source.split(/\\r?\\n/);\n    let count = 0;\n    const res = [];\n    for (let i = 0; i < lines.length; i++) {\n        count += lines[i].length + 1;\n        if (count >= start) {\n            for (let j = i - RANGE; j <= i + RANGE || end > count; j++) {\n                if (j < 0 || j >= lines.length)\n                    continue;\n                const line = j + 1;\n                res.push(`${line}${' '.repeat(3 - String(line).length)}|  ${lines[j]}`);\n                const lineLength = lines[j].length;\n                if (j === i) {\n                    // push underline\n                    const pad = start - (count - lineLength) + 1;\n                    const length = Math.max(1, end > count ? lineLength - pad : end - start);\n                    res.push(`   |  ` + ' '.repeat(pad) + '^'.repeat(length));\n                }\n                else if (j > i) {\n                    if (end > count) {\n                        const length = Math.max(Math.min(end - count, lineLength), 1);\n                        res.push(`   |  ` + '^'.repeat(length));\n                    }\n                    count += lineLength + 1;\n                }\n            }\n            break;\n        }\n    }\n    return res.join('\\n');\n}\n\n/**\n * Event emitter, forked from the below:\n * - original repository url: https://github.com/developit/mitt\n * - code url: https://github.com/developit/mitt/blob/master/src/index.ts\n * - author: Jason Miller (https://github.com/developit)\n * - license: MIT\n */\n/**\n * Create a event emitter\n *\n * @returns An event emitter\n */\nfunction createEmitter() {\n    const events = new Map();\n    const emitter = {\n        events,\n        on(event, handler) {\n            const handlers = events.get(event);\n            const added = handlers && handlers.push(handler);\n            if (!added) {\n                events.set(event, [handler]);\n            }\n        },\n        off(event, handler) {\n            const handlers = events.get(event);\n            if (handlers) {\n                handlers.splice(handlers.indexOf(handler) >>> 0, 1);\n            }\n        },\n        emit(event, payload) {\n            (events.get(event) || [])\n                .slice()\n                .map(handler => handler(payload));\n            (events.get('*') || [])\n                .slice()\n                .map(handler => handler(event, payload));\n        }\n    };\n    return emitter;\n}\n\nconst isNotObjectOrIsArray = (val) => !isObject(val) || isArray(val);\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction deepCopy(src, des) {\n    // src and des should both be objects, and none of them can be a array\n    if (isNotObjectOrIsArray(src) || isNotObjectOrIsArray(des)) {\n        throw new Error('Invalid value');\n    }\n    const stack = [{ src, des }];\n    while (stack.length) {\n        const { src, des } = stack.pop();\n        // using `Object.keys` which skips prototype properties\n        Object.keys(src).forEach(key => {\n            if (key === '__proto__') {\n                return;\n            }\n            // if src[key] is an object/array, set des[key]\n            // to empty object/array to prevent setting by reference\n            if (isObject(src[key]) && !isObject(des[key])) {\n                des[key] = Array.isArray(src[key]) ? [] : create();\n            }\n            if (isNotObjectOrIsArray(des[key]) || isNotObjectOrIsArray(src[key])) {\n                // replace with src[key] when:\n                // src[key] or des[key] is not an object, or\n                // src[key] or des[key] is an array\n                des[key] = src[key];\n            }\n            else {\n                // src[key] and des[key] are both objects, merge them\n                stack.push({ src: src[key], des: des[key] });\n            }\n        });\n    }\n}\n\nexport { assign, create, createEmitter, deepCopy, escapeHtml, format, friendlyJSONstringify, generateCodeFrame, generateFormatCacheKey, getGlobalThis, hasOwn, inBrowser, isArray, isBoolean, isDate, isEmptyObject, isFunction, isNumber, isObject, isPlainObject, isPromise, isRegExp, isString, isSymbol, join, makeSymbol, mark, measure, objectToString, sanitizeTranslatedHtml, toDisplayString, toTypeString, warn, warnOnce };\n","/*!\n  * message-compiler v11.4.2\n  * (c) 2026 kazuya kawaguchi\n  * Released under the MIT License.\n  */\nimport { format, assign, join, isString } from '@intlify/shared';\n\nconst LOCATION_STUB = {\n    start: { line: 1, column: 1, offset: 0 },\n    end: { line: 1, column: 1, offset: 0 }\n};\nfunction createPosition(line, column, offset) {\n    return { line, column, offset };\n}\nfunction createLocation(start, end, source) {\n    const loc = { start, end };\n    if (source != null) {\n        loc.source = source;\n    }\n    return loc;\n}\n\nconst CompileErrorCodes = {\n    // tokenizer error codes\n    EXPECTED_TOKEN: 1,\n    INVALID_TOKEN_IN_PLACEHOLDER: 2,\n    UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER: 3,\n    UNKNOWN_ESCAPE_SEQUENCE: 4,\n    INVALID_UNICODE_ESCAPE_SEQUENCE: 5,\n    UNBALANCED_CLOSING_BRACE: 6,\n    UNTERMINATED_CLOSING_BRACE: 7,\n    EMPTY_PLACEHOLDER: 8,\n    NOT_ALLOW_NEST_PLACEHOLDER: 9,\n    INVALID_LINKED_FORMAT: 10,\n    // parser error codes\n    MUST_HAVE_MESSAGES_IN_PLURAL: 11,\n    UNEXPECTED_EMPTY_LINKED_MODIFIER: 12,\n    UNEXPECTED_EMPTY_LINKED_KEY: 13,\n    UNEXPECTED_LEXICAL_ANALYSIS: 14,\n    // generator error codes\n    UNHANDLED_CODEGEN_NODE_TYPE: 15,\n    // minifier error codes\n    UNHANDLED_MINIFIER_NODE_TYPE: 16\n};\n// Special value for higher-order compilers to pick up the last code\n// to avoid collision of error codes.\n// This should always be kept as the last item.\nconst COMPILE_ERROR_CODES_EXTEND_POINT = 17;\n/** @internal */\nconst errorMessages = {\n    // tokenizer error messages\n    [CompileErrorCodes.EXPECTED_TOKEN]: `Expected token: '{0}'`,\n    [CompileErrorCodes.INVALID_TOKEN_IN_PLACEHOLDER]: `Invalid token in placeholder: '{0}'`,\n    [CompileErrorCodes.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER]: `Unterminated single quote in placeholder`,\n    [CompileErrorCodes.UNKNOWN_ESCAPE_SEQUENCE]: `Unknown escape sequence: \\\\{0}`,\n    [CompileErrorCodes.INVALID_UNICODE_ESCAPE_SEQUENCE]: `Invalid unicode escape sequence: {0}`,\n    [CompileErrorCodes.UNBALANCED_CLOSING_BRACE]: `Unbalanced closing brace`,\n    [CompileErrorCodes.UNTERMINATED_CLOSING_BRACE]: `Unterminated closing brace`,\n    [CompileErrorCodes.EMPTY_PLACEHOLDER]: `Empty placeholder`,\n    [CompileErrorCodes.NOT_ALLOW_NEST_PLACEHOLDER]: `Not allowed nest placeholder`,\n    [CompileErrorCodes.INVALID_LINKED_FORMAT]: `Invalid linked format`,\n    // parser error messages\n    [CompileErrorCodes.MUST_HAVE_MESSAGES_IN_PLURAL]: `Plural must have messages`,\n    [CompileErrorCodes.UNEXPECTED_EMPTY_LINKED_MODIFIER]: `Unexpected empty linked modifier`,\n    [CompileErrorCodes.UNEXPECTED_EMPTY_LINKED_KEY]: `Unexpected empty linked key`,\n    [CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS]: `Unexpected lexical analysis in token: '{0}'`,\n    // generator error messages\n    [CompileErrorCodes.UNHANDLED_CODEGEN_NODE_TYPE]: `unhandled codegen node type: '{0}'`,\n    // minimizer error messages\n    [CompileErrorCodes.UNHANDLED_MINIFIER_NODE_TYPE]: `unhandled mimifier node type: '{0}'`\n};\nfunction createCompileError(code, loc, options = {}) {\n    const { domain, messages, args } = options;\n    const msg = (process.env.NODE_ENV !== 'production')\n        ? format((messages || errorMessages)[code] || '', ...(args || []))\n        : code;\n    const error = new SyntaxError(String(msg));\n    error.code = code;\n    if (loc) {\n        error.location = loc;\n    }\n    error.domain = domain;\n    return error;\n}\n/** @internal */\nfunction defaultOnError(error) {\n    throw error;\n}\n\n// eslint-disable-next-line no-useless-escape\nconst RE_HTML_TAG = /<\\/?[\\w\\s=\"/.':;#-\\/]+>/;\nconst detectHtmlTag = (source) => RE_HTML_TAG.test(source);\n\nconst CHAR_SP = ' ';\nconst CHAR_CR = '\\r';\nconst CHAR_LF = '\\n';\nconst CHAR_LS = String.fromCharCode(0x2028);\nconst CHAR_PS = String.fromCharCode(0x2029);\nfunction createScanner(str) {\n    const _buf = str;\n    let _index = 0;\n    let _line = 1;\n    let _column = 1;\n    let _peekOffset = 0;\n    const isCRLF = (index) => _buf[index] === CHAR_CR && _buf[index + 1] === CHAR_LF;\n    const isLF = (index) => _buf[index] === CHAR_LF;\n    const isPS = (index) => _buf[index] === CHAR_PS;\n    const isLS = (index) => _buf[index] === CHAR_LS;\n    const isLineEnd = (index) => isCRLF(index) || isLF(index) || isPS(index) || isLS(index);\n    const index = () => _index;\n    const line = () => _line;\n    const column = () => _column;\n    const peekOffset = () => _peekOffset;\n    const charAt = (offset) => isCRLF(offset) || isPS(offset) || isLS(offset) ? CHAR_LF : _buf[offset];\n    const currentChar = () => charAt(_index);\n    const currentPeek = () => charAt(_index + _peekOffset);\n    function next() {\n        _peekOffset = 0;\n        if (isLineEnd(_index)) {\n            _line++;\n            _column = 0;\n        }\n        if (isCRLF(_index)) {\n            _index++;\n        }\n        _index++;\n        _column++;\n        return _buf[_index];\n    }\n    function peek() {\n        if (isCRLF(_index + _peekOffset)) {\n            _peekOffset++;\n        }\n        _peekOffset++;\n        return _buf[_index + _peekOffset];\n    }\n    function reset() {\n        _index = 0;\n        _line = 1;\n        _column = 1;\n        _peekOffset = 0;\n    }\n    function resetPeek(offset = 0) {\n        _peekOffset = offset;\n    }\n    function skipToPeek() {\n        const target = _index + _peekOffset;\n        while (target !== _index) {\n            next();\n        }\n        _peekOffset = 0;\n    }\n    return {\n        index,\n        line,\n        column,\n        peekOffset,\n        charAt,\n        currentChar,\n        currentPeek,\n        next,\n        peek,\n        reset,\n        resetPeek,\n        skipToPeek\n    };\n}\n\nconst EOF = undefined;\nconst DOT = '.';\nconst LITERAL_DELIMITER = \"'\";\nconst ERROR_DOMAIN$3 = 'tokenizer';\nfunction createTokenizer(source, options = {}) {\n    const location = options.location !== false;\n    const _scnr = createScanner(source);\n    const currentOffset = () => _scnr.index();\n    const currentPosition = () => createPosition(_scnr.line(), _scnr.column(), _scnr.index());\n    const _initLoc = currentPosition();\n    const _initOffset = currentOffset();\n    const _context = {\n        currentType: 13 /* TokenTypes.EOF */,\n        offset: _initOffset,\n        startLoc: _initLoc,\n        endLoc: _initLoc,\n        lastType: 13 /* TokenTypes.EOF */,\n        lastOffset: _initOffset,\n        lastStartLoc: _initLoc,\n        lastEndLoc: _initLoc,\n        braceNest: 0,\n        inLinked: false,\n        text: ''\n    };\n    const context = () => _context;\n    const { onError } = options;\n    function emitError(code, pos, offset, ...args) {\n        const ctx = context();\n        pos.column += offset;\n        pos.offset += offset;\n        if (onError) {\n            const loc = location ? createLocation(ctx.startLoc, pos) : null;\n            const err = createCompileError(code, loc, {\n                domain: ERROR_DOMAIN$3,\n                args\n            });\n            onError(err);\n        }\n    }\n    function getToken(context, type, value) {\n        context.endLoc = currentPosition();\n        context.currentType = type;\n        const token = { type };\n        if (location) {\n            token.loc = createLocation(context.startLoc, context.endLoc);\n        }\n        if (value != null) {\n            token.value = value;\n        }\n        return token;\n    }\n    const getEndToken = (context) => getToken(context, 13 /* TokenTypes.EOF */);\n    function eat(scnr, ch) {\n        if (scnr.currentChar() === ch) {\n            scnr.next();\n            return ch;\n        }\n        else {\n            emitError(CompileErrorCodes.EXPECTED_TOKEN, currentPosition(), 0, ch);\n            return '';\n        }\n    }\n    function peekSpaces(scnr) {\n        let buf = '';\n        while (scnr.currentPeek() === CHAR_SP || scnr.currentPeek() === CHAR_LF) {\n            buf += scnr.currentPeek();\n            scnr.peek();\n        }\n        return buf;\n    }\n    function skipSpaces(scnr) {\n        const buf = peekSpaces(scnr);\n        scnr.skipToPeek();\n        return buf;\n    }\n    function isIdentifierStart(ch) {\n        if (ch === EOF) {\n            return false;\n        }\n        const cc = ch.charCodeAt(0);\n        return ((cc >= 97 && cc <= 122) || // a-z\n            (cc >= 65 && cc <= 90) || // A-Z\n            cc === 95 // _\n        );\n    }\n    function isNumberStart(ch) {\n        if (ch === EOF) {\n            return false;\n        }\n        const cc = ch.charCodeAt(0);\n        return cc >= 48 && cc <= 57; // 0-9\n    }\n    function isNamedIdentifierStart(scnr, context) {\n        const { currentType } = context;\n        if (currentType !== 2 /* TokenTypes.BraceLeft */) {\n            return false;\n        }\n        peekSpaces(scnr);\n        const ret = isIdentifierStart(scnr.currentPeek());\n        scnr.resetPeek();\n        return ret;\n    }\n    function isListIdentifierStart(scnr, context) {\n        const { currentType } = context;\n        if (currentType !== 2 /* TokenTypes.BraceLeft */) {\n            return false;\n        }\n        peekSpaces(scnr);\n        const ch = scnr.currentPeek() === '-' ? scnr.peek() : scnr.currentPeek();\n        const ret = isNumberStart(ch);\n        scnr.resetPeek();\n        return ret;\n    }\n    function isLiteralStart(scnr, context) {\n        const { currentType } = context;\n        if (currentType !== 2 /* TokenTypes.BraceLeft */) {\n            return false;\n        }\n        peekSpaces(scnr);\n        const ret = scnr.currentPeek() === LITERAL_DELIMITER;\n        scnr.resetPeek();\n        return ret;\n    }\n    function isLinkedDotStart(scnr, context) {\n        const { currentType } = context;\n        if (currentType !== 7 /* TokenTypes.LinkedAlias */) {\n            return false;\n        }\n        peekSpaces(scnr);\n        const ret = scnr.currentPeek() === \".\" /* TokenChars.LinkedDot */;\n        scnr.resetPeek();\n        return ret;\n    }\n    function isLinkedModifierStart(scnr, context) {\n        const { currentType } = context;\n        if (currentType !== 8 /* TokenTypes.LinkedDot */) {\n            return false;\n        }\n        peekSpaces(scnr);\n        const ret = isIdentifierStart(scnr.currentPeek());\n        scnr.resetPeek();\n        return ret;\n    }\n    function isLinkedDelimiterStart(scnr, context) {\n        const { currentType } = context;\n        if (!(currentType === 7 /* TokenTypes.LinkedAlias */ ||\n            currentType === 11 /* TokenTypes.LinkedModifier */)) {\n            return false;\n        }\n        peekSpaces(scnr);\n        const ret = scnr.currentPeek() === \":\" /* TokenChars.LinkedDelimiter */;\n        scnr.resetPeek();\n        return ret;\n    }\n    function isLinkedReferStart(scnr, context) {\n        const { currentType } = context;\n        if (currentType !== 9 /* TokenTypes.LinkedDelimiter */) {\n            return false;\n        }\n        const fn = () => {\n            const ch = scnr.currentPeek();\n            if (ch === \"{\" /* TokenChars.BraceLeft */) {\n                return isIdentifierStart(scnr.peek());\n            }\n            else if (ch === \"@\" /* TokenChars.LinkedAlias */ ||\n                ch === \"|\" /* TokenChars.Pipe */ ||\n                ch === \":\" /* TokenChars.LinkedDelimiter */ ||\n                ch === \".\" /* TokenChars.LinkedDot */ ||\n                ch === CHAR_SP ||\n                !ch) {\n                return false;\n            }\n            else if (ch === CHAR_LF) {\n                scnr.peek();\n                return fn();\n            }\n            else {\n                // other characters\n                return isTextStart(scnr, false);\n            }\n        };\n        const ret = fn();\n        scnr.resetPeek();\n        return ret;\n    }\n    function isPluralStart(scnr) {\n        peekSpaces(scnr);\n        const ret = scnr.currentPeek() === \"|\" /* TokenChars.Pipe */;\n        scnr.resetPeek();\n        return ret;\n    }\n    function isTextStart(scnr, reset = true) {\n        const fn = (hasSpace = false, prev = '') => {\n            const ch = scnr.currentPeek();\n            if (ch === \"{\" /* TokenChars.BraceLeft */) {\n                return hasSpace;\n            }\n            else if (ch === \"@\" /* TokenChars.LinkedAlias */ || !ch) {\n                return hasSpace;\n            }\n            else if (ch === \"|\" /* TokenChars.Pipe */) {\n                return !(prev === CHAR_SP || prev === CHAR_LF);\n            }\n            else if (ch === CHAR_SP) {\n                scnr.peek();\n                return fn(true, CHAR_SP);\n            }\n            else if (ch === CHAR_LF) {\n                scnr.peek();\n                return fn(true, CHAR_LF);\n            }\n            else {\n                return true;\n            }\n        };\n        const ret = fn();\n        reset && scnr.resetPeek();\n        return ret;\n    }\n    function takeChar(scnr, fn) {\n        const ch = scnr.currentChar();\n        if (ch === EOF) {\n            return EOF;\n        }\n        if (fn(ch)) {\n            scnr.next();\n            return ch;\n        }\n        return null;\n    }\n    function isIdentifier(ch) {\n        const cc = ch.charCodeAt(0);\n        return ((cc >= 97 && cc <= 122) || // a-z\n            (cc >= 65 && cc <= 90) || // A-Z\n            (cc >= 48 && cc <= 57) || // 0-9\n            cc === 95 || // _\n            cc === 36 // $\n        );\n    }\n    function takeIdentifierChar(scnr) {\n        return takeChar(scnr, isIdentifier);\n    }\n    function isNamedIdentifier(ch) {\n        const cc = ch.charCodeAt(0);\n        return ((cc >= 97 && cc <= 122) || // a-z\n            (cc >= 65 && cc <= 90) || // A-Z\n            (cc >= 48 && cc <= 57) || // 0-9\n            cc === 95 || // _\n            cc === 36 || // $\n            cc === 45 // -\n        );\n    }\n    function takeNamedIdentifierChar(scnr) {\n        return takeChar(scnr, isNamedIdentifier);\n    }\n    function isDigit(ch) {\n        const cc = ch.charCodeAt(0);\n        return cc >= 48 && cc <= 57; // 0-9\n    }\n    function takeDigit(scnr) {\n        return takeChar(scnr, isDigit);\n    }\n    function isHexDigit(ch) {\n        const cc = ch.charCodeAt(0);\n        return ((cc >= 48 && cc <= 57) || // 0-9\n            (cc >= 65 && cc <= 70) || // A-F\n            (cc >= 97 && cc <= 102)); // a-f\n    }\n    function takeHexDigit(scnr) {\n        return takeChar(scnr, isHexDigit);\n    }\n    function getDigits(scnr) {\n        let ch = '';\n        let num = '';\n        while ((ch = takeDigit(scnr))) {\n            num += ch;\n        }\n        return num;\n    }\n    function readText(scnr) {\n        let buf = '';\n        while (true) {\n            const ch = scnr.currentChar();\n            if (ch === '\\\\') {\n                const nextCh = scnr.peek();\n                if (nextCh === \"{\" /* TokenChars.BraceLeft */ ||\n                    nextCh === \"}\" /* TokenChars.BraceRight */ ||\n                    nextCh === \"@\" /* TokenChars.LinkedAlias */ ||\n                    nextCh === \"|\" /* TokenChars.Pipe */ ||\n                    nextCh === '\\\\') {\n                    buf += ch + nextCh;\n                    scnr.next();\n                    scnr.next();\n                }\n                else {\n                    scnr.resetPeek();\n                    buf += ch;\n                    scnr.next();\n                }\n            }\n            else if (ch === \"{\" /* TokenChars.BraceLeft */ ||\n                ch === \"}\" /* TokenChars.BraceRight */ ||\n                ch === \"@\" /* TokenChars.LinkedAlias */ ||\n                ch === \"|\" /* TokenChars.Pipe */ ||\n                !ch) {\n                break;\n            }\n            else if (ch === CHAR_SP || ch === CHAR_LF) {\n                if (isTextStart(scnr)) {\n                    buf += ch;\n                    scnr.next();\n                }\n                else if (isPluralStart(scnr)) {\n                    break;\n                }\n                else {\n                    buf += ch;\n                    scnr.next();\n                }\n            }\n            else {\n                buf += ch;\n                scnr.next();\n            }\n        }\n        return buf;\n    }\n    function readNamedIdentifier(scnr) {\n        skipSpaces(scnr);\n        let ch = '';\n        let name = '';\n        while ((ch = takeNamedIdentifierChar(scnr))) {\n            name += ch;\n        }\n        // Check if takeNamedIdentifierChar stoped because of invalid characters\n        const currentChar = scnr.currentChar();\n        if (currentChar &&\n            currentChar !== '}' &&\n            currentChar !== EOF &&\n            currentChar !== CHAR_SP &&\n            currentChar !== CHAR_LF &&\n            currentChar !== '\\u3000') {\n            const invalidPart = readInvalidIdentifier(scnr);\n            emitError(CompileErrorCodes.INVALID_TOKEN_IN_PLACEHOLDER, currentPosition(), 0, name + invalidPart);\n            return name + invalidPart;\n        }\n        if (scnr.currentChar() === EOF) {\n            emitError(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE, currentPosition(), 0);\n        }\n        return name;\n    }\n    function readListIdentifier(scnr) {\n        skipSpaces(scnr);\n        let value = '';\n        if (scnr.currentChar() === '-') {\n            scnr.next();\n            value += `-${getDigits(scnr)}`;\n        }\n        else {\n            value += getDigits(scnr);\n        }\n        if (scnr.currentChar() === EOF) {\n            emitError(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE, currentPosition(), 0);\n        }\n        return value;\n    }\n    function isLiteral(ch) {\n        return ch !== LITERAL_DELIMITER && ch !== CHAR_LF;\n    }\n    function readLiteral(scnr) {\n        skipSpaces(scnr);\n        // eslint-disable-next-line no-useless-escape\n        eat(scnr, `\\'`);\n        let ch = '';\n        let literal = '';\n        while ((ch = takeChar(scnr, isLiteral))) {\n            if (ch === '\\\\') {\n                literal += readEscapeSequence(scnr);\n            }\n            else {\n                literal += ch;\n            }\n        }\n        const current = scnr.currentChar();\n        if (current === CHAR_LF || current === EOF) {\n            emitError(CompileErrorCodes.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER, currentPosition(), 0);\n            // TODO: Is it correct really?\n            if (current === CHAR_LF) {\n                scnr.next();\n                // eslint-disable-next-line no-useless-escape\n                eat(scnr, `\\'`);\n            }\n            return literal;\n        }\n        // eslint-disable-next-line no-useless-escape\n        eat(scnr, `\\'`);\n        return literal;\n    }\n    function readEscapeSequence(scnr) {\n        const ch = scnr.currentChar();\n        switch (ch) {\n            case '\\\\':\n            case `\\'`: // eslint-disable-line no-useless-escape\n                scnr.next();\n                return `\\\\${ch}`;\n            case 'u':\n                return readUnicodeEscapeSequence(scnr, ch, 4);\n            case 'U':\n                return readUnicodeEscapeSequence(scnr, ch, 6);\n            default:\n                emitError(CompileErrorCodes.UNKNOWN_ESCAPE_SEQUENCE, currentPosition(), 0, ch);\n                return '';\n        }\n    }\n    function readUnicodeEscapeSequence(scnr, unicode, digits) {\n        eat(scnr, unicode);\n        let sequence = '';\n        for (let i = 0; i < digits; i++) {\n            const ch = takeHexDigit(scnr);\n            if (!ch) {\n                emitError(CompileErrorCodes.INVALID_UNICODE_ESCAPE_SEQUENCE, currentPosition(), 0, `\\\\${unicode}${sequence}${scnr.currentChar()}`);\n                break;\n            }\n            sequence += ch;\n        }\n        return `\\\\${unicode}${sequence}`;\n    }\n    function isInvalidIdentifier(ch) {\n        return (ch !== \"{\" /* TokenChars.BraceLeft */ &&\n            ch !== \"}\" /* TokenChars.BraceRight */ &&\n            ch !== CHAR_SP &&\n            ch !== CHAR_LF);\n    }\n    function readInvalidIdentifier(scnr) {\n        skipSpaces(scnr);\n        let ch = '';\n        let identifiers = '';\n        while ((ch = takeChar(scnr, isInvalidIdentifier))) {\n            identifiers += ch;\n        }\n        return identifiers;\n    }\n    function readLinkedModifier(scnr) {\n        let ch = '';\n        let name = '';\n        while ((ch = takeIdentifierChar(scnr))) {\n            name += ch;\n        }\n        return name;\n    }\n    function readLinkedRefer(scnr) {\n        const fn = (buf) => {\n            const ch = scnr.currentChar();\n            if (ch === \"{\" /* TokenChars.BraceLeft */ ||\n                ch === \"@\" /* TokenChars.LinkedAlias */ ||\n                ch === \"|\" /* TokenChars.Pipe */ ||\n                ch === \"(\" /* TokenChars.ParenLeft */ ||\n                ch === \")\" /* TokenChars.ParenRight */ ||\n                !ch) {\n                return buf;\n            }\n            else if (ch === CHAR_SP) {\n                return buf;\n            }\n            else if (ch === CHAR_LF || ch === DOT) {\n                buf += ch;\n                scnr.next();\n                return fn(buf);\n            }\n            else {\n                buf += ch;\n                scnr.next();\n                return fn(buf);\n            }\n        };\n        return fn('');\n    }\n    function readPlural(scnr) {\n        skipSpaces(scnr);\n        const plural = eat(scnr, \"|\" /* TokenChars.Pipe */);\n        skipSpaces(scnr);\n        return plural;\n    }\n    // TODO: We need refactoring of token parsing ...\n    function readTokenInPlaceholder(scnr, context) {\n        let token = null;\n        const ch = scnr.currentChar();\n        switch (ch) {\n            case \"{\" /* TokenChars.BraceLeft */:\n                if (context.braceNest >= 1) {\n                    emitError(CompileErrorCodes.NOT_ALLOW_NEST_PLACEHOLDER, currentPosition(), 0);\n                }\n                scnr.next();\n                token = getToken(context, 2 /* TokenTypes.BraceLeft */, \"{\" /* TokenChars.BraceLeft */);\n                skipSpaces(scnr);\n                context.braceNest++;\n                return token;\n            case \"}\" /* TokenChars.BraceRight */:\n                if (context.braceNest > 0 &&\n                    context.currentType === 2 /* TokenTypes.BraceLeft */) {\n                    emitError(CompileErrorCodes.EMPTY_PLACEHOLDER, currentPosition(), 0);\n                }\n                scnr.next();\n                token = getToken(context, 3 /* TokenTypes.BraceRight */, \"}\" /* TokenChars.BraceRight */);\n                context.braceNest--;\n                context.braceNest > 0 && skipSpaces(scnr);\n                if (context.inLinked && context.braceNest === 0) {\n                    context.inLinked = false;\n                }\n                return token;\n            case \"@\" /* TokenChars.LinkedAlias */:\n                if (context.braceNest > 0) {\n                    emitError(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE, currentPosition(), 0);\n                }\n                token = readTokenInLinked(scnr, context) || getEndToken(context);\n                context.braceNest = 0;\n                return token;\n            default: {\n                let validNamedIdentifier = true;\n                let validListIdentifier = true;\n                let validLiteral = true;\n                if (isPluralStart(scnr)) {\n                    if (context.braceNest > 0) {\n                        emitError(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE, currentPosition(), 0);\n                    }\n                    token = getToken(context, 1 /* TokenTypes.Pipe */, readPlural(scnr));\n                    // reset\n                    context.braceNest = 0;\n                    context.inLinked = false;\n                    return token;\n                }\n                if (context.braceNest > 0 &&\n                    (context.currentType === 4 /* TokenTypes.Named */ ||\n                        context.currentType === 5 /* TokenTypes.List */ ||\n                        context.currentType === 6 /* TokenTypes.Literal */)) {\n                    emitError(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE, currentPosition(), 0);\n                    context.braceNest = 0;\n                    return readToken(scnr, context);\n                }\n                if ((validNamedIdentifier = isNamedIdentifierStart(scnr, context))) {\n                    token = getToken(context, 4 /* TokenTypes.Named */, readNamedIdentifier(scnr));\n                    skipSpaces(scnr);\n                    return token;\n                }\n                if ((validListIdentifier = isListIdentifierStart(scnr, context))) {\n                    token = getToken(context, 5 /* TokenTypes.List */, readListIdentifier(scnr));\n                    skipSpaces(scnr);\n                    return token;\n                }\n                if ((validLiteral = isLiteralStart(scnr, context))) {\n                    token = getToken(context, 6 /* TokenTypes.Literal */, readLiteral(scnr));\n                    skipSpaces(scnr);\n                    return token;\n                }\n                if (!validNamedIdentifier && !validListIdentifier && !validLiteral) {\n                    // TODO: we should be re-designed invalid cases, when we will extend message syntax near the future ...\n                    token = getToken(context, 12 /* TokenTypes.InvalidPlace */, readInvalidIdentifier(scnr));\n                    emitError(CompileErrorCodes.INVALID_TOKEN_IN_PLACEHOLDER, currentPosition(), 0, token.value);\n                    skipSpaces(scnr);\n                    return token;\n                }\n                break;\n            }\n        }\n        return token;\n    }\n    // TODO: We need refactoring of token parsing ...\n    function readTokenInLinked(scnr, context) {\n        const { currentType } = context;\n        let token = null;\n        const ch = scnr.currentChar();\n        if ((currentType === 7 /* TokenTypes.LinkedAlias */ ||\n            currentType === 8 /* TokenTypes.LinkedDot */ ||\n            currentType === 11 /* TokenTypes.LinkedModifier */ ||\n            currentType === 9 /* TokenTypes.LinkedDelimiter */) &&\n            (ch === CHAR_LF || ch === CHAR_SP)) {\n            emitError(CompileErrorCodes.INVALID_LINKED_FORMAT, currentPosition(), 0);\n        }\n        switch (ch) {\n            case \"@\" /* TokenChars.LinkedAlias */:\n                scnr.next();\n                token = getToken(context, 7 /* TokenTypes.LinkedAlias */, \"@\" /* TokenChars.LinkedAlias */);\n                context.inLinked = true;\n                return token;\n            case \".\" /* TokenChars.LinkedDot */:\n                skipSpaces(scnr);\n                scnr.next();\n                return getToken(context, 8 /* TokenTypes.LinkedDot */, \".\" /* TokenChars.LinkedDot */);\n            case \":\" /* TokenChars.LinkedDelimiter */:\n                skipSpaces(scnr);\n                scnr.next();\n                return getToken(context, 9 /* TokenTypes.LinkedDelimiter */, \":\" /* TokenChars.LinkedDelimiter */);\n            default:\n                if (isPluralStart(scnr)) {\n                    token = getToken(context, 1 /* TokenTypes.Pipe */, readPlural(scnr));\n                    // reset\n                    context.braceNest = 0;\n                    context.inLinked = false;\n                    return token;\n                }\n                if (isLinkedDotStart(scnr, context) ||\n                    isLinkedDelimiterStart(scnr, context)) {\n                    skipSpaces(scnr);\n                    return readTokenInLinked(scnr, context);\n                }\n                if (isLinkedModifierStart(scnr, context)) {\n                    skipSpaces(scnr);\n                    return getToken(context, 11 /* TokenTypes.LinkedModifier */, readLinkedModifier(scnr));\n                }\n                if (isLinkedReferStart(scnr, context)) {\n                    skipSpaces(scnr);\n                    if (ch === \"{\" /* TokenChars.BraceLeft */) {\n                        // scan the placeholder\n                        return readTokenInPlaceholder(scnr, context) || token;\n                    }\n                    else {\n                        return getToken(context, 10 /* TokenTypes.LinkedKey */, readLinkedRefer(scnr));\n                    }\n                }\n                if (currentType === 7 /* TokenTypes.LinkedAlias */) {\n                    emitError(CompileErrorCodes.INVALID_LINKED_FORMAT, currentPosition(), 0);\n                }\n                context.braceNest = 0;\n                context.inLinked = false;\n                return readToken(scnr, context);\n        }\n    }\n    // TODO: We need refactoring of token parsing ...\n    function readToken(scnr, context) {\n        let token = { type: 13 /* TokenTypes.EOF */ };\n        if (context.braceNest > 0) {\n            return readTokenInPlaceholder(scnr, context) || getEndToken(context);\n        }\n        if (context.inLinked) {\n            return readTokenInLinked(scnr, context) || getEndToken(context);\n        }\n        const ch = scnr.currentChar();\n        switch (ch) {\n            case \"{\" /* TokenChars.BraceLeft */:\n                return readTokenInPlaceholder(scnr, context) || getEndToken(context);\n            case \"}\" /* TokenChars.BraceRight */:\n                emitError(CompileErrorCodes.UNBALANCED_CLOSING_BRACE, currentPosition(), 0);\n                scnr.next();\n                return getToken(context, 3 /* TokenTypes.BraceRight */, \"}\" /* TokenChars.BraceRight */);\n            case \"@\" /* TokenChars.LinkedAlias */:\n                return readTokenInLinked(scnr, context) || getEndToken(context);\n            default: {\n                if (isPluralStart(scnr)) {\n                    token = getToken(context, 1 /* TokenTypes.Pipe */, readPlural(scnr));\n                    // reset\n                    context.braceNest = 0;\n                    context.inLinked = false;\n                    return token;\n                }\n                if (isTextStart(scnr)) {\n                    return getToken(context, 0 /* TokenTypes.Text */, readText(scnr));\n                }\n                break;\n            }\n        }\n        return token;\n    }\n    function nextToken() {\n        const { currentType, offset, startLoc, endLoc } = _context;\n        _context.lastType = currentType;\n        _context.lastOffset = offset;\n        _context.lastStartLoc = startLoc;\n        _context.lastEndLoc = endLoc;\n        _context.offset = currentOffset();\n        _context.startLoc = currentPosition();\n        if (_scnr.currentChar() === EOF) {\n            return getToken(_context, 13 /* TokenTypes.EOF */);\n        }\n        return readToken(_scnr, _context);\n    }\n    return {\n        nextToken,\n        currentOffset,\n        currentPosition,\n        context\n    };\n}\n\nconst ERROR_DOMAIN$2 = 'parser';\n// Backslash backslash, backslash quote, uHHHH, UHHHHHH.\nconst KNOWN_ESCAPES = /(?:\\\\\\\\|\\\\'|\\\\u([0-9a-fA-F]{4})|\\\\U([0-9a-fA-F]{6}))/g;\n// Text context escape sequences: \\\\, \\@, \\{, \\}, \\|\nconst TEXT_ESCAPES = /\\\\([\\\\@{}|])/g;\nfunction fromTextEscapeSequence(_match, char) {\n    return char;\n}\nfunction fromEscapeSequence(match, codePoint4, codePoint6) {\n    switch (match) {\n        case `\\\\\\\\`:\n            return `\\\\`;\n        // eslint-disable-next-line no-useless-escape\n        case `\\\\\\'`:\n            // eslint-disable-next-line no-useless-escape\n            return `\\'`;\n        default: {\n            const codePoint = parseInt(codePoint4 || codePoint6, 16);\n            if (codePoint <= 0xd7ff || codePoint >= 0xe000) {\n                return String.fromCodePoint(codePoint);\n            }\n            // invalid ...\n            // Replace them with U+FFFD REPLACEMENT CHARACTER.\n            return '�';\n        }\n    }\n}\nfunction createParser(options = {}) {\n    const location = options.location !== false;\n    const { onError } = options;\n    function emitError(tokenzer, code, start, offset, ...args) {\n        const end = tokenzer.currentPosition();\n        end.offset += offset;\n        end.column += offset;\n        if (onError) {\n            const loc = location ? createLocation(start, end) : null;\n            const err = createCompileError(code, loc, {\n                domain: ERROR_DOMAIN$2,\n                args\n            });\n            onError(err);\n        }\n    }\n    function startNode(type, offset, loc) {\n        const node = { type };\n        if (location) {\n            node.start = offset;\n            node.end = offset;\n            node.loc = { start: loc, end: loc };\n        }\n        return node;\n    }\n    function endNode(node, offset, pos, type) {\n        if (location) {\n            node.end = offset;\n            if (node.loc) {\n                node.loc.end = pos;\n            }\n        }\n    }\n    function parseText(tokenizer, value) {\n        const context = tokenizer.context();\n        const node = startNode(3 /* NodeTypes.Text */, context.offset, context.startLoc);\n        node.value = value.replace(TEXT_ESCAPES, fromTextEscapeSequence);\n        endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\n        return node;\n    }\n    function parseList(tokenizer, index) {\n        const context = tokenizer.context();\n        const { lastOffset: offset, lastStartLoc: loc } = context; // get brace left loc\n        const node = startNode(5 /* NodeTypes.List */, offset, loc);\n        node.index = parseInt(index, 10);\n        tokenizer.nextToken(); // skip brach right\n        endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\n        return node;\n    }\n    function parseNamed(tokenizer, key) {\n        const context = tokenizer.context();\n        const { lastOffset: offset, lastStartLoc: loc } = context; // get brace left loc\n        const node = startNode(4 /* NodeTypes.Named */, offset, loc);\n        node.key = key;\n        tokenizer.nextToken(); // skip brach right\n        endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\n        return node;\n    }\n    function parseLiteral(tokenizer, value) {\n        const context = tokenizer.context();\n        const { lastOffset: offset, lastStartLoc: loc } = context; // get brace left loc\n        const node = startNode(9 /* NodeTypes.Literal */, offset, loc);\n        node.value = value.replace(KNOWN_ESCAPES, fromEscapeSequence);\n        tokenizer.nextToken(); // skip brach right\n        endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\n        return node;\n    }\n    function parseLinkedModifier(tokenizer) {\n        const token = tokenizer.nextToken();\n        const context = tokenizer.context();\n        const { lastOffset: offset, lastStartLoc: loc } = context; // get linked dot loc\n        const node = startNode(8 /* NodeTypes.LinkedModifier */, offset, loc);\n        if (token.type !== 11 /* TokenTypes.LinkedModifier */) {\n            // empty modifier\n            emitError(tokenizer, CompileErrorCodes.UNEXPECTED_EMPTY_LINKED_MODIFIER, context.lastStartLoc, 0);\n            node.value = '';\n            endNode(node, offset, loc);\n            return {\n                nextConsumeToken: token,\n                node\n            };\n        }\n        // check token\n        if (token.value == null) {\n            emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\n        }\n        node.value = token.value || '';\n        endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\n        return {\n            node\n        };\n    }\n    function parseLinkedKey(tokenizer, value) {\n        const context = tokenizer.context();\n        const node = startNode(7 /* NodeTypes.LinkedKey */, context.offset, context.startLoc);\n        node.value = value;\n        endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\n        return node;\n    }\n    function parseLinked(tokenizer) {\n        const context = tokenizer.context();\n        const linkedNode = startNode(6 /* NodeTypes.Linked */, context.offset, context.startLoc);\n        let token = tokenizer.nextToken();\n        if (token.type === 8 /* TokenTypes.LinkedDot */) {\n            const parsed = parseLinkedModifier(tokenizer);\n            linkedNode.modifier = parsed.node;\n            token = parsed.nextConsumeToken || tokenizer.nextToken();\n        }\n        // asset check token\n        if (token.type !== 9 /* TokenTypes.LinkedDelimiter */) {\n            emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\n        }\n        token = tokenizer.nextToken();\n        // skip brace left\n        if (token.type === 2 /* TokenTypes.BraceLeft */) {\n            token = tokenizer.nextToken();\n        }\n        switch (token.type) {\n            case 10 /* TokenTypes.LinkedKey */:\n                if (token.value == null) {\n                    emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\n                }\n                linkedNode.key = parseLinkedKey(tokenizer, token.value || '');\n                break;\n            case 4 /* TokenTypes.Named */:\n                if (token.value == null) {\n                    emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\n                }\n                linkedNode.key = parseNamed(tokenizer, token.value || '');\n                break;\n            case 5 /* TokenTypes.List */:\n                if (token.value == null) {\n                    emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\n                }\n                linkedNode.key = parseList(tokenizer, token.value || '');\n                break;\n            case 6 /* TokenTypes.Literal */:\n                if (token.value == null) {\n                    emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\n                }\n                linkedNode.key = parseLiteral(tokenizer, token.value || '');\n                break;\n            default: {\n                // empty key\n                emitError(tokenizer, CompileErrorCodes.UNEXPECTED_EMPTY_LINKED_KEY, context.lastStartLoc, 0);\n                const nextContext = tokenizer.context();\n                const emptyLinkedKeyNode = startNode(7 /* NodeTypes.LinkedKey */, nextContext.offset, nextContext.startLoc);\n                emptyLinkedKeyNode.value = '';\n                endNode(emptyLinkedKeyNode, nextContext.offset, nextContext.startLoc);\n                linkedNode.key = emptyLinkedKeyNode;\n                endNode(linkedNode, nextContext.offset, nextContext.startLoc);\n                return {\n                    nextConsumeToken: token,\n                    node: linkedNode\n                };\n            }\n        }\n        endNode(linkedNode, tokenizer.currentOffset(), tokenizer.currentPosition());\n        return {\n            node: linkedNode\n        };\n    }\n    function parseMessage(tokenizer) {\n        const context = tokenizer.context();\n        const startOffset = context.currentType === 1 /* TokenTypes.Pipe */\n            ? tokenizer.currentOffset()\n            : context.offset;\n        const startLoc = context.currentType === 1 /* TokenTypes.Pipe */\n            ? context.endLoc\n            : context.startLoc;\n        const node = startNode(2 /* NodeTypes.Message */, startOffset, startLoc);\n        node.items = [];\n        let nextToken = null;\n        do {\n            const token = nextToken || tokenizer.nextToken();\n            nextToken = null;\n            switch (token.type) {\n                case 0 /* TokenTypes.Text */:\n                    if (token.value == null) {\n                        emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\n                    }\n                    node.items.push(parseText(tokenizer, token.value || ''));\n                    break;\n                case 5 /* TokenTypes.List */:\n                    if (token.value == null) {\n                        emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\n                    }\n                    node.items.push(parseList(tokenizer, token.value || ''));\n                    break;\n                case 4 /* TokenTypes.Named */:\n                    if (token.value == null) {\n                        emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\n                    }\n                    node.items.push(parseNamed(tokenizer, token.value || ''));\n                    break;\n                case 6 /* TokenTypes.Literal */:\n                    if (token.value == null) {\n                        emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\n                    }\n                    node.items.push(parseLiteral(tokenizer, token.value || ''));\n                    break;\n                case 7 /* TokenTypes.LinkedAlias */: {\n                    const parsed = parseLinked(tokenizer);\n                    node.items.push(parsed.node);\n                    nextToken = parsed.nextConsumeToken || null;\n                    break;\n                }\n            }\n        } while (context.currentType !== 13 /* TokenTypes.EOF */ &&\n            context.currentType !== 1 /* TokenTypes.Pipe */);\n        // adjust message node loc\n        const endOffset = context.currentType === 1 /* TokenTypes.Pipe */\n            ? context.lastOffset\n            : tokenizer.currentOffset();\n        const endLoc = context.currentType === 1 /* TokenTypes.Pipe */\n            ? context.lastEndLoc\n            : tokenizer.currentPosition();\n        endNode(node, endOffset, endLoc);\n        return node;\n    }\n    function parsePlural(tokenizer, offset, loc, msgNode) {\n        const context = tokenizer.context();\n        let hasEmptyMessage = msgNode.items.length === 0;\n        const node = startNode(1 /* NodeTypes.Plural */, offset, loc);\n        node.cases = [];\n        node.cases.push(msgNode);\n        do {\n            const msg = parseMessage(tokenizer);\n            if (!hasEmptyMessage) {\n                hasEmptyMessage = msg.items.length === 0;\n            }\n            node.cases.push(msg);\n        } while (context.currentType !== 13 /* TokenTypes.EOF */);\n        if (hasEmptyMessage) {\n            emitError(tokenizer, CompileErrorCodes.MUST_HAVE_MESSAGES_IN_PLURAL, loc, 0);\n        }\n        endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\n        return node;\n    }\n    function parseResource(tokenizer) {\n        const context = tokenizer.context();\n        const { offset, startLoc } = context;\n        const msgNode = parseMessage(tokenizer);\n        if (context.currentType === 13 /* TokenTypes.EOF */) {\n            return msgNode;\n        }\n        else {\n            return parsePlural(tokenizer, offset, startLoc, msgNode);\n        }\n    }\n    function parse(source) {\n        const tokenizer = createTokenizer(source, assign({}, options));\n        const context = tokenizer.context();\n        const node = startNode(0 /* NodeTypes.Resource */, context.offset, context.startLoc);\n        if (location && node.loc) {\n            node.loc.source = source;\n        }\n        node.body = parseResource(tokenizer);\n        if (options.onCacheKey) {\n            node.cacheKey = options.onCacheKey(source);\n        }\n        // assert whether achieved to EOF\n        if (context.currentType !== 13 /* TokenTypes.EOF */) {\n            emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, source[context.offset] || '');\n        }\n        endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\n        return node;\n    }\n    return { parse };\n}\nfunction getTokenCaption(token) {\n    if (token.type === 13 /* TokenTypes.EOF */) {\n        return 'EOF';\n    }\n    const name = (token.value || '').replace(/\\r?\\n/gu, '\\\\n');\n    return name.length > 10 ? name.slice(0, 9) + '…' : name;\n}\n\nfunction createTransformer(ast, options = {} // eslint-disable-line\n) {\n    const _context = {\n        ast,\n        helpers: new Set()\n    };\n    const context = () => _context;\n    const helper = (name) => {\n        _context.helpers.add(name);\n        return name;\n    };\n    return { context, helper };\n}\nfunction traverseNodes(nodes, transformer) {\n    for (let i = 0; i < nodes.length; i++) {\n        traverseNode(nodes[i], transformer);\n    }\n}\nfunction traverseNode(node, transformer) {\n    // TODO: if we need pre-hook of transform, should be implemented to here\n    switch (node.type) {\n        case 1 /* NodeTypes.Plural */:\n            traverseNodes(node.cases, transformer);\n            transformer.helper(\"plural\" /* HelperNameMap.PLURAL */);\n            break;\n        case 2 /* NodeTypes.Message */:\n            traverseNodes(node.items, transformer);\n            break;\n        case 6 /* NodeTypes.Linked */: {\n            const linked = node;\n            traverseNode(linked.key, transformer);\n            transformer.helper(\"linked\" /* HelperNameMap.LINKED */);\n            transformer.helper(\"type\" /* HelperNameMap.TYPE */);\n            break;\n        }\n        case 5 /* NodeTypes.List */:\n            transformer.helper(\"interpolate\" /* HelperNameMap.INTERPOLATE */);\n            transformer.helper(\"list\" /* HelperNameMap.LIST */);\n            break;\n        case 4 /* NodeTypes.Named */:\n            transformer.helper(\"interpolate\" /* HelperNameMap.INTERPOLATE */);\n            transformer.helper(\"named\" /* HelperNameMap.NAMED */);\n            break;\n    }\n    // TODO: if we need post-hook of transform, should be implemented to here\n}\n// transform AST\nfunction transform(ast, options = {} // eslint-disable-line\n) {\n    const transformer = createTransformer(ast);\n    transformer.helper(\"normalize\" /* HelperNameMap.NORMALIZE */);\n    // traverse\n    ast.body && traverseNode(ast.body, transformer);\n    // set meta information\n    const context = transformer.context();\n    ast.helpers = Array.from(context.helpers);\n}\n\nfunction optimize(ast) {\n    const body = ast.body;\n    if (body.type === 2 /* NodeTypes.Message */) {\n        optimizeMessageNode(body);\n    }\n    else {\n        body.cases.forEach(c => optimizeMessageNode(c));\n    }\n    return ast;\n}\nfunction optimizeMessageNode(message) {\n    if (message.items.length === 1) {\n        const item = message.items[0];\n        if (item.type === 3 /* NodeTypes.Text */ || item.type === 9 /* NodeTypes.Literal */) {\n            message.static = item.value;\n            delete item.value; // optimization for size\n        }\n    }\n    else {\n        const values = [];\n        for (let i = 0; i < message.items.length; i++) {\n            const item = message.items[i];\n            if (!(item.type === 3 /* NodeTypes.Text */ || item.type === 9 /* NodeTypes.Literal */)) {\n                break;\n            }\n            if (item.value == null) {\n                break;\n            }\n            values.push(item.value);\n        }\n        if (values.length === message.items.length) {\n            message.static = join(values);\n            for (let i = 0; i < message.items.length; i++) {\n                const item = message.items[i];\n                if (item.type === 3 /* NodeTypes.Text */ || item.type === 9 /* NodeTypes.Literal */) {\n                    delete item.value; // optimization for size\n                }\n            }\n        }\n    }\n}\n\nconst ERROR_DOMAIN$1 = 'minifier';\n/* eslint-disable @typescript-eslint/no-explicit-any */\nfunction minify(node) {\n    node.t = node.type;\n    switch (node.type) {\n        case 0 /* NodeTypes.Resource */: {\n            const resource = node;\n            minify(resource.body);\n            resource.b = resource.body;\n            delete resource.body;\n            break;\n        }\n        case 1 /* NodeTypes.Plural */: {\n            const plural = node;\n            const cases = plural.cases;\n            for (let i = 0; i < cases.length; i++) {\n                minify(cases[i]);\n            }\n            plural.c = cases;\n            delete plural.cases;\n            break;\n        }\n        case 2 /* NodeTypes.Message */: {\n            const message = node;\n            const items = message.items;\n            for (let i = 0; i < items.length; i++) {\n                minify(items[i]);\n            }\n            message.i = items;\n            delete message.items;\n            if (message.static) {\n                message.s = message.static;\n                delete message.static;\n            }\n            break;\n        }\n        case 3 /* NodeTypes.Text */:\n        case 9 /* NodeTypes.Literal */:\n        case 8 /* NodeTypes.LinkedModifier */:\n        case 7 /* NodeTypes.LinkedKey */: {\n            const valueNode = node;\n            if (valueNode.value) {\n                valueNode.v = valueNode.value;\n                delete valueNode.value;\n            }\n            break;\n        }\n        case 6 /* NodeTypes.Linked */: {\n            const linked = node;\n            minify(linked.key);\n            linked.k = linked.key;\n            delete linked.key;\n            if (linked.modifier) {\n                minify(linked.modifier);\n                linked.m = linked.modifier;\n                delete linked.modifier;\n            }\n            break;\n        }\n        case 5 /* NodeTypes.List */: {\n            const list = node;\n            list.i = list.index;\n            delete list.index;\n            break;\n        }\n        case 4 /* NodeTypes.Named */: {\n            const named = node;\n            named.k = named.key;\n            delete named.key;\n            break;\n        }\n        default:\n            if ((process.env.NODE_ENV !== 'production')) {\n                throw createCompileError(CompileErrorCodes.UNHANDLED_MINIFIER_NODE_TYPE, null, {\n                    domain: ERROR_DOMAIN$1,\n                    args: [node.type]\n                });\n            }\n    }\n    delete node.type;\n}\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// <reference types=\"source-map-js\" />\nconst ERROR_DOMAIN = 'parser';\nfunction createCodeGenerator(ast, options) {\n    const { sourceMap, filename, breakLineCode, needIndent: _needIndent } = options;\n    const location = options.location !== false;\n    const _context = {\n        filename,\n        code: '',\n        column: 1,\n        line: 1,\n        offset: 0,\n        map: undefined,\n        breakLineCode,\n        needIndent: _needIndent,\n        indentLevel: 0\n    };\n    if (location && ast.loc) {\n        _context.source = ast.loc.source;\n    }\n    const context = () => _context;\n    function push(code, node) {\n        _context.code += code;\n    }\n    function _newline(n, withBreakLine = true) {\n        const _breakLineCode = withBreakLine ? breakLineCode : '';\n        push(_needIndent ? _breakLineCode + `  `.repeat(n) : _breakLineCode);\n    }\n    function indent(withNewLine = true) {\n        const level = ++_context.indentLevel;\n        withNewLine && _newline(level);\n    }\n    function deindent(withNewLine = true) {\n        const level = --_context.indentLevel;\n        withNewLine && _newline(level);\n    }\n    function newline() {\n        _newline(_context.indentLevel);\n    }\n    const helper = (key) => `_${key}`;\n    const needIndent = () => _context.needIndent;\n    return {\n        context,\n        push,\n        indent,\n        deindent,\n        newline,\n        helper,\n        needIndent\n    };\n}\nfunction generateLinkedNode(generator, node) {\n    const { helper } = generator;\n    generator.push(`${helper(\"linked\" /* HelperNameMap.LINKED */)}(`);\n    generateNode(generator, node.key);\n    if (node.modifier) {\n        generator.push(`, `);\n        generateNode(generator, node.modifier);\n        generator.push(`, _type`);\n    }\n    else {\n        generator.push(`, undefined, _type`);\n    }\n    generator.push(`)`);\n}\nfunction generateMessageNode(generator, node) {\n    const { helper, needIndent } = generator;\n    generator.push(`${helper(\"normalize\" /* HelperNameMap.NORMALIZE */)}([`);\n    generator.indent(needIndent());\n    const length = node.items.length;\n    for (let i = 0; i < length; i++) {\n        generateNode(generator, node.items[i]);\n        if (i === length - 1) {\n            break;\n        }\n        generator.push(', ');\n    }\n    generator.deindent(needIndent());\n    generator.push('])');\n}\nfunction generatePluralNode(generator, node) {\n    const { helper, needIndent } = generator;\n    if (node.cases.length > 1) {\n        generator.push(`${helper(\"plural\" /* HelperNameMap.PLURAL */)}([`);\n        generator.indent(needIndent());\n        const length = node.cases.length;\n        for (let i = 0; i < length; i++) {\n            generateNode(generator, node.cases[i]);\n            if (i === length - 1) {\n                break;\n            }\n            generator.push(', ');\n        }\n        generator.deindent(needIndent());\n        generator.push(`])`);\n    }\n}\nfunction generateResource(generator, node) {\n    if (node.body) {\n        generateNode(generator, node.body);\n    }\n    else {\n        generator.push('null');\n    }\n}\nfunction generateNode(generator, node) {\n    const { helper } = generator;\n    switch (node.type) {\n        case 0 /* NodeTypes.Resource */:\n            generateResource(generator, node);\n            break;\n        case 1 /* NodeTypes.Plural */:\n            generatePluralNode(generator, node);\n            break;\n        case 2 /* NodeTypes.Message */:\n            generateMessageNode(generator, node);\n            break;\n        case 6 /* NodeTypes.Linked */:\n            generateLinkedNode(generator, node);\n            break;\n        case 8 /* NodeTypes.LinkedModifier */:\n            generator.push(JSON.stringify(node.value), node);\n            break;\n        case 7 /* NodeTypes.LinkedKey */:\n            generator.push(JSON.stringify(node.value), node);\n            break;\n        case 5 /* NodeTypes.List */:\n            generator.push(`${helper(\"interpolate\" /* HelperNameMap.INTERPOLATE */)}(${helper(\"list\" /* HelperNameMap.LIST */)}(${node.index}))`, node);\n            break;\n        case 4 /* NodeTypes.Named */:\n            generator.push(`${helper(\"interpolate\" /* HelperNameMap.INTERPOLATE */)}(${helper(\"named\" /* HelperNameMap.NAMED */)}(${JSON.stringify(node.key)}))`, node);\n            break;\n        case 9 /* NodeTypes.Literal */:\n            generator.push(JSON.stringify(node.value), node);\n            break;\n        case 3 /* NodeTypes.Text */:\n            generator.push(JSON.stringify(node.value), node);\n            break;\n        default:\n            if ((process.env.NODE_ENV !== 'production')) {\n                throw createCompileError(CompileErrorCodes.UNHANDLED_CODEGEN_NODE_TYPE, null, {\n                    domain: ERROR_DOMAIN,\n                    args: [node.type]\n                });\n            }\n    }\n}\n// generate code from AST\nconst generate = (ast, options = {}) => {\n    const mode = isString(options.mode) ? options.mode : 'normal';\n    const filename = isString(options.filename)\n        ? options.filename\n        : 'message.intl';\n    const sourceMap = !!options.sourceMap;\n    // prettier-ignore\n    const breakLineCode = options.breakLineCode != null\n        ? options.breakLineCode\n        : mode === 'arrow'\n            ? ';'\n            : '\\n';\n    const needIndent = options.needIndent ? options.needIndent : mode !== 'arrow';\n    const helpers = ast.helpers || [];\n    const generator = createCodeGenerator(ast, {\n        mode,\n        filename,\n        sourceMap,\n        breakLineCode,\n        needIndent\n    });\n    generator.push(mode === 'normal' ? `function __msg__ (ctx) {` : `(ctx) => {`);\n    generator.indent(needIndent);\n    if (helpers.length > 0) {\n        generator.push(`const { ${join(helpers.map(s => `${s}: _${s}`), ', ')} } = ctx`);\n        generator.newline();\n    }\n    generator.push(`return `);\n    generateNode(generator, ast);\n    generator.deindent(needIndent);\n    generator.push(`}`);\n    delete ast.helpers;\n    const { code, map } = generator.context();\n    return {\n        ast,\n        code,\n        map: map ? map.toJSON() : undefined // eslint-disable-line @typescript-eslint/no-explicit-any\n    };\n};\n\nfunction baseCompile(source, options = {}) {\n    const assignedOptions = assign({}, options);\n    const jit = !!assignedOptions.jit;\n    const enalbeMinify = !!assignedOptions.minify;\n    const enambeOptimize = assignedOptions.optimize == null ? true : assignedOptions.optimize;\n    // parse source codes\n    const parser = createParser(assignedOptions);\n    const ast = parser.parse(source);\n    if (!jit) {\n        // transform ASTs\n        transform(ast, assignedOptions);\n        // generate javascript codes\n        return generate(ast, assignedOptions);\n    }\n    else {\n        // optimize ASTs\n        enambeOptimize && optimize(ast);\n        // minimize ASTs\n        enalbeMinify && minify(ast);\n        // In JIT mode, no ast transform, no code generation.\n        return { ast, code: '' };\n    }\n}\n\nexport { COMPILE_ERROR_CODES_EXTEND_POINT, CompileErrorCodes, ERROR_DOMAIN$2 as ERROR_DOMAIN, LOCATION_STUB, baseCompile, createCompileError, createLocation, createParser, createPosition, defaultOnError, detectHtmlTag, errorMessages };\n","/*!\n  * core-base v11.4.2\n  * (c) 2026 kazuya kawaguchi\n  * Released under the MIT License.\n  */\nimport { getGlobalThis, isObject, hasOwn, isNumber, create, isString, isBoolean, warn, format as format$1, isFunction, isPromise, isArray, isPlainObject, assign, isRegExp, warnOnce, isDate, isEmptyObject, join, toDisplayString, sanitizeTranslatedHtml, escapeHtml, inBrowser, mark, measure, generateCodeFrame, generateFormatCacheKey } from '@intlify/shared';\nimport { detectHtmlTag, defaultOnError, baseCompile as baseCompile$1, COMPILE_ERROR_CODES_EXTEND_POINT, createCompileError } from '@intlify/message-compiler';\nexport { CompileErrorCodes, createCompileError } from '@intlify/message-compiler';\n\n/**\n * This is only called in esm-bundler builds.\n * istanbul-ignore-next\n */\nfunction initFeatureFlags() {\n    if (typeof __INTLIFY_PROD_DEVTOOLS__ !== 'boolean') {\n        getGlobalThis().__INTLIFY_PROD_DEVTOOLS__ = false;\n    }\n    if (typeof __INTLIFY_DROP_MESSAGE_COMPILER__ !== 'boolean') {\n        getGlobalThis().__INTLIFY_DROP_MESSAGE_COMPILER__ = false;\n    }\n}\n\nfunction isMessageAST(val) {\n    return (isObject(val) &&\n        resolveType(val) === 0 &&\n        (hasOwn(val, 'b') || hasOwn(val, 'body')));\n}\nconst PROPS_BODY = ['b', 'body'];\nfunction resolveBody(node) {\n    return resolveProps(node, PROPS_BODY);\n}\nconst PROPS_CASES = ['c', 'cases'];\nfunction resolveCases(node) {\n    return resolveProps(node, PROPS_CASES, []);\n}\nconst PROPS_STATIC = ['s', 'static'];\nfunction resolveStatic(node) {\n    return resolveProps(node, PROPS_STATIC);\n}\nconst PROPS_ITEMS = ['i', 'items'];\nfunction resolveItems(node) {\n    return resolveProps(node, PROPS_ITEMS, []);\n}\nconst PROPS_TYPE = ['t', 'type'];\nfunction resolveType(node) {\n    return resolveProps(node, PROPS_TYPE);\n}\nconst PROPS_VALUE = ['v', 'value'];\nfunction resolveValue$1(node, type) {\n    const resolved = resolveProps(node, PROPS_VALUE);\n    if (resolved != null) {\n        return resolved;\n    }\n    else {\n        throw createUnhandleNodeError(type);\n    }\n}\nconst PROPS_MODIFIER = ['m', 'modifier'];\nfunction resolveLinkedModifier(node) {\n    return resolveProps(node, PROPS_MODIFIER);\n}\nconst PROPS_KEY = ['k', 'key'];\nfunction resolveLinkedKey(node) {\n    const resolved = resolveProps(node, PROPS_KEY);\n    if (resolved) {\n        return resolved;\n    }\n    else {\n        throw createUnhandleNodeError(6 /* NodeTypes.Linked */);\n    }\n}\nfunction resolveProps(node, props, defaultValue) {\n    for (let i = 0; i < props.length; i++) {\n        const prop = props[i];\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        if (hasOwn(node, prop) && node[prop] != null) {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            return node[prop];\n        }\n    }\n    return defaultValue;\n}\nconst AST_NODE_PROPS_KEYS = [\n    ...PROPS_BODY,\n    ...PROPS_CASES,\n    ...PROPS_STATIC,\n    ...PROPS_ITEMS,\n    ...PROPS_KEY,\n    ...PROPS_MODIFIER,\n    ...PROPS_VALUE,\n    ...PROPS_TYPE\n];\nfunction createUnhandleNodeError(type) {\n    return new Error(`unhandled node type: ${type}`);\n}\n\nfunction format(ast) {\n    const msg = (ctx) => formatParts(ctx, ast);\n    return msg;\n}\nfunction formatParts(ctx, ast) {\n    const body = resolveBody(ast);\n    if (body == null) {\n        throw createUnhandleNodeError(0 /* NodeTypes.Resource */);\n    }\n    const type = resolveType(body);\n    if (type === 1 /* NodeTypes.Plural */) {\n        const plural = body;\n        const cases = resolveCases(plural);\n        return ctx.plural(cases.reduce((messages, c) => [\n            ...messages,\n            formatMessageParts(ctx, c)\n        ], []));\n    }\n    else {\n        return formatMessageParts(ctx, body);\n    }\n}\nfunction formatMessageParts(ctx, node) {\n    const static_ = resolveStatic(node);\n    if (static_ != null) {\n        return ctx.type === 'text'\n            ? static_\n            : ctx.normalize([static_]);\n    }\n    else {\n        const messages = resolveItems(node).reduce((acm, c) => [...acm, formatMessagePart(ctx, c)], []);\n        return ctx.normalize(messages);\n    }\n}\nfunction formatMessagePart(ctx, node) {\n    const type = resolveType(node);\n    switch (type) {\n        case 3 /* NodeTypes.Text */: {\n            return resolveValue$1(node, type);\n        }\n        case 9 /* NodeTypes.Literal */: {\n            return resolveValue$1(node, type);\n        }\n        case 4 /* NodeTypes.Named */: {\n            const named = node;\n            if (hasOwn(named, 'k') && named.k) {\n                return ctx.interpolate(ctx.named(named.k));\n            }\n            if (hasOwn(named, 'key') && named.key) {\n                return ctx.interpolate(ctx.named(named.key));\n            }\n            throw createUnhandleNodeError(type);\n        }\n        case 5 /* NodeTypes.List */: {\n            const list = node;\n            if (hasOwn(list, 'i') && isNumber(list.i)) {\n                return ctx.interpolate(ctx.list(list.i));\n            }\n            if (hasOwn(list, 'index') && isNumber(list.index)) {\n                return ctx.interpolate(ctx.list(list.index));\n            }\n            throw createUnhandleNodeError(type);\n        }\n        case 6 /* NodeTypes.Linked */: {\n            const linked = node;\n            const modifier = resolveLinkedModifier(linked);\n            const key = resolveLinkedKey(linked);\n            return ctx.linked(formatMessagePart(ctx, key), modifier ? formatMessagePart(ctx, modifier) : undefined, ctx.type);\n        }\n        case 7 /* NodeTypes.LinkedKey */: {\n            return resolveValue$1(node, type);\n        }\n        case 8 /* NodeTypes.LinkedModifier */: {\n            return resolveValue$1(node, type);\n        }\n        default:\n            throw new Error(`unhandled node on format message part: ${type}`);\n    }\n}\n\nconst WARN_MESSAGE = `Detected HTML in '{source}' message. Recommend not using HTML messages to avoid XSS.`;\nfunction checkHtmlMessage(source, warnHtmlMessage) {\n    if (warnHtmlMessage && detectHtmlTag(source)) {\n        warn(format$1(WARN_MESSAGE, { source }));\n    }\n}\nconst defaultOnCacheKey = (message) => message;\nlet compileCache = create();\nfunction clearCompileCache() {\n    compileCache = create();\n}\nfunction baseCompile(message, options = {}) {\n    // error detecting on compile\n    let detectError = false;\n    const onError = options.onError || defaultOnError;\n    options.onError = (err) => {\n        detectError = true;\n        onError(err);\n    };\n    // compile with mesasge-compiler\n    return { ...baseCompile$1(message, options), detectError };\n}\n/* #__NO_SIDE_EFFECTS__ */\nfunction compile(message, context) {\n    if ((!__INTLIFY_DROP_MESSAGE_COMPILER__) &&\n        isString(message)) {\n        // check HTML message\n        const warnHtmlMessage = isBoolean(context.warnHtmlMessage)\n            ? context.warnHtmlMessage\n            : true;\n        (process.env.NODE_ENV !== 'production') && checkHtmlMessage(message, warnHtmlMessage);\n        // check caches\n        const onCacheKey = context.onCacheKey || defaultOnCacheKey;\n        const cacheKey = onCacheKey(message);\n        const cached = compileCache[cacheKey];\n        if (cached) {\n            return cached;\n        }\n        // compile with JIT mode\n        const { ast, detectError } = baseCompile(message, {\n            ...context,\n            location: (process.env.NODE_ENV !== 'production'),\n            jit: true\n        });\n        // compose message function from AST\n        const msg = format(ast);\n        // if occurred compile error, don't cache\n        return !detectError\n            ? (compileCache[cacheKey] = msg)\n            : msg;\n    }\n    else {\n        if ((process.env.NODE_ENV !== 'production') && !isMessageAST(message)) {\n            warn(`the message that is resolve with key '${context.key}' is not supported for jit compilation`);\n            return (() => message);\n        }\n        // AST case (passed from bundler)\n        const cacheKey = message.cacheKey;\n        if (cacheKey) {\n            const cached = compileCache[cacheKey];\n            if (cached) {\n                return cached;\n            }\n            // compose message function from message (AST)\n            return (compileCache[cacheKey] =\n                format(message));\n        }\n        else {\n            return format(message);\n        }\n    }\n}\n\nlet devtools = null;\nfunction setDevToolsHook(hook) {\n    devtools = hook;\n}\nfunction getDevToolsHook() {\n    return devtools;\n}\nfunction initI18nDevTools(i18n, version, meta) {\n    // TODO: queue if devtools is undefined\n    devtools &&\n        devtools.emit('i18n:init', {\n            timestamp: Date.now(),\n            i18n,\n            version,\n            meta\n        });\n}\nconst translateDevTools = \n/* #__PURE__*/ createDevToolsHook('function:translate');\nfunction createDevToolsHook(hook) {\n    return (payloads) => devtools && devtools.emit(hook, payloads);\n}\n\nconst CoreErrorCodes = {\n    INVALID_ARGUMENT: COMPILE_ERROR_CODES_EXTEND_POINT, // 17\n    INVALID_DATE_ARGUMENT: 18,\n    INVALID_ISO_DATE_ARGUMENT: 19,\n    NOT_SUPPORT_NON_STRING_MESSAGE: 20,\n    NOT_SUPPORT_LOCALE_PROMISE_VALUE: 21,\n    NOT_SUPPORT_LOCALE_ASYNC_FUNCTION: 22,\n    NOT_SUPPORT_LOCALE_TYPE: 23\n};\nconst CORE_ERROR_CODES_EXTEND_POINT = 24;\nfunction createCoreError(code) {\n    return createCompileError(code, null, (process.env.NODE_ENV !== 'production') ? { messages: errorMessages } : undefined);\n}\n/** @internal */\nconst errorMessages = {\n    [CoreErrorCodes.INVALID_ARGUMENT]: 'Invalid arguments',\n    [CoreErrorCodes.INVALID_DATE_ARGUMENT]: 'The date provided is an invalid Date object.' +\n        'Make sure your Date represents a valid date.',\n    [CoreErrorCodes.INVALID_ISO_DATE_ARGUMENT]: 'The argument provided is not a valid ISO date string',\n    [CoreErrorCodes.NOT_SUPPORT_NON_STRING_MESSAGE]: 'Not support non-string message',\n    [CoreErrorCodes.NOT_SUPPORT_LOCALE_PROMISE_VALUE]: 'cannot support promise value',\n    [CoreErrorCodes.NOT_SUPPORT_LOCALE_ASYNC_FUNCTION]: 'cannot support async function',\n    [CoreErrorCodes.NOT_SUPPORT_LOCALE_TYPE]: 'cannot support locale type'\n};\n\n/** @internal */\nfunction getLocale(context, options) {\n    return options.locale != null\n        ? resolveLocale(options.locale)\n        : resolveLocale(context.locale);\n}\nlet _resolveLocale;\n/** @internal */\nfunction resolveLocale(locale) {\n    if (isString(locale)) {\n        return locale;\n    }\n    else {\n        if (isFunction(locale)) {\n            if (locale.resolvedOnce && _resolveLocale != null) {\n                return _resolveLocale;\n            }\n            else if (locale.constructor.name === 'Function') {\n                const resolve = locale();\n                if (isPromise(resolve)) {\n                    throw createCoreError(CoreErrorCodes.NOT_SUPPORT_LOCALE_PROMISE_VALUE);\n                }\n                return (_resolveLocale = resolve);\n            }\n            else {\n                throw createCoreError(CoreErrorCodes.NOT_SUPPORT_LOCALE_ASYNC_FUNCTION);\n            }\n        }\n        else {\n            throw createCoreError(CoreErrorCodes.NOT_SUPPORT_LOCALE_TYPE);\n        }\n    }\n}\n/**\n * Fallback with simple implemenation\n *\n * @remarks\n * A fallback locale function implemented with a simple fallback algorithm.\n *\n * Basically, it returns the value as specified in the `fallbackLocale` props, and is processed with the fallback inside intlify.\n *\n * @param ctx - A {@link CoreContext | context}\n * @param fallback - A {@link FallbackLocale | fallback locale}\n * @param start - A starting {@link Locale | locale}\n *\n * @returns Fallback locales\n *\n * @VueI18nGeneral\n */\nfunction fallbackWithSimple(ctx, fallback, start) {\n    // prettier-ignore\n    return [...new Set([\n            start,\n            ...(isArray(fallback)\n                ? fallback\n                : isObject(fallback)\n                    ? Object.keys(fallback)\n                    : isString(fallback)\n                        ? [fallback]\n                        : [start])\n        ])];\n}\n/**\n * Fallback with locale chain\n *\n * @remarks\n * A fallback locale function implemented with a fallback chain algorithm. It's used in VueI18n as default.\n *\n * @param ctx - A {@link CoreContext | context}\n * @param fallback - A {@link FallbackLocale | fallback locale}\n * @param start - A starting {@link Locale | locale}\n *\n * @returns Fallback locales\n *\n * @VueI18nSee [Fallbacking](../guide/essentials/fallback)\n *\n * @VueI18nGeneral\n */\nfunction fallbackWithLocaleChain(ctx, fallback, start) {\n    const startLocale = isString(start) ? start : DEFAULT_LOCALE;\n    const context = ctx;\n    if (!context.__localeChainCache) {\n        context.__localeChainCache = new Map();\n    }\n    let chain = context.__localeChainCache.get(startLocale);\n    if (!chain) {\n        chain = [];\n        // first block defined by start\n        let block = [start];\n        // while any intervening block found\n        while (isArray(block)) {\n            block = appendBlockToChain(chain, block, fallback);\n        }\n        // prettier-ignore\n        // last block defined by default\n        const defaults = isArray(fallback) || !isPlainObject(fallback)\n            ? fallback\n            : fallback['default']\n                ? fallback['default']\n                : null;\n        // convert defaults to array\n        block = isString(defaults) ? [defaults] : defaults;\n        if (isArray(block)) {\n            appendBlockToChain(chain, block, false);\n        }\n        context.__localeChainCache.set(startLocale, chain);\n    }\n    return chain;\n}\nfunction appendBlockToChain(chain, block, blocks) {\n    let follow = true;\n    for (let i = 0; i < block.length && isBoolean(follow); i++) {\n        const locale = block[i];\n        if (isString(locale)) {\n            follow = appendLocaleToChain(chain, block[i], blocks);\n        }\n    }\n    return follow;\n}\nfunction appendLocaleToChain(chain, locale, blocks) {\n    let follow;\n    const tokens = locale.split('-');\n    do {\n        const target = tokens.join('-');\n        follow = appendItemToChain(chain, target, blocks);\n        tokens.splice(-1, 1);\n    } while (tokens.length && follow === true);\n    return follow;\n}\nfunction appendItemToChain(chain, target, blocks) {\n    let follow = false;\n    if (!chain.includes(target)) {\n        follow = true;\n        if (target) {\n            follow = target[target.length - 1] !== '!';\n            const locale = target.replace(/!/g, '');\n            chain.push(locale);\n            if ((isArray(blocks) || isPlainObject(blocks)) &&\n                blocks[locale] // eslint-disable-line @typescript-eslint/no-explicit-any\n            ) {\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                follow = blocks[locale];\n            }\n        }\n    }\n    return follow;\n}\n\nconst pathStateMachine = [];\npathStateMachine[0 /* States.BEFORE_PATH */] = {\n    [\"w\" /* PathCharTypes.WORKSPACE */]: [0 /* States.BEFORE_PATH */],\n    [\"i\" /* PathCharTypes.IDENT */]: [3 /* States.IN_IDENT */, 0 /* Actions.APPEND */],\n    [\"[\" /* PathCharTypes.LEFT_BRACKET */]: [4 /* States.IN_SUB_PATH */],\n    [\"o\" /* PathCharTypes.END_OF_FAIL */]: [7 /* States.AFTER_PATH */]\n};\npathStateMachine[1 /* States.IN_PATH */] = {\n    [\"w\" /* PathCharTypes.WORKSPACE */]: [1 /* States.IN_PATH */],\n    [\".\" /* PathCharTypes.DOT */]: [2 /* States.BEFORE_IDENT */],\n    [\"[\" /* PathCharTypes.LEFT_BRACKET */]: [4 /* States.IN_SUB_PATH */],\n    [\"o\" /* PathCharTypes.END_OF_FAIL */]: [7 /* States.AFTER_PATH */]\n};\npathStateMachine[2 /* States.BEFORE_IDENT */] = {\n    [\"w\" /* PathCharTypes.WORKSPACE */]: [2 /* States.BEFORE_IDENT */],\n    [\"i\" /* PathCharTypes.IDENT */]: [3 /* States.IN_IDENT */, 0 /* Actions.APPEND */],\n    [\"0\" /* PathCharTypes.ZERO */]: [3 /* States.IN_IDENT */, 0 /* Actions.APPEND */]\n};\npathStateMachine[3 /* States.IN_IDENT */] = {\n    [\"i\" /* PathCharTypes.IDENT */]: [3 /* States.IN_IDENT */, 0 /* Actions.APPEND */],\n    [\"0\" /* PathCharTypes.ZERO */]: [3 /* States.IN_IDENT */, 0 /* Actions.APPEND */],\n    [\"w\" /* PathCharTypes.WORKSPACE */]: [1 /* States.IN_PATH */, 1 /* Actions.PUSH */],\n    [\".\" /* PathCharTypes.DOT */]: [2 /* States.BEFORE_IDENT */, 1 /* Actions.PUSH */],\n    [\"[\" /* PathCharTypes.LEFT_BRACKET */]: [4 /* States.IN_SUB_PATH */, 1 /* Actions.PUSH */],\n    [\"o\" /* PathCharTypes.END_OF_FAIL */]: [7 /* States.AFTER_PATH */, 1 /* Actions.PUSH */]\n};\npathStateMachine[4 /* States.IN_SUB_PATH */] = {\n    [\"'\" /* PathCharTypes.SINGLE_QUOTE */]: [5 /* States.IN_SINGLE_QUOTE */, 0 /* Actions.APPEND */],\n    [\"\\\"\" /* PathCharTypes.DOUBLE_QUOTE */]: [6 /* States.IN_DOUBLE_QUOTE */, 0 /* Actions.APPEND */],\n    [\"[\" /* PathCharTypes.LEFT_BRACKET */]: [\n        4 /* States.IN_SUB_PATH */,\n        2 /* Actions.INC_SUB_PATH_DEPTH */\n    ],\n    [\"]\" /* PathCharTypes.RIGHT_BRACKET */]: [1 /* States.IN_PATH */, 3 /* Actions.PUSH_SUB_PATH */],\n    [\"o\" /* PathCharTypes.END_OF_FAIL */]: 8 /* States.ERROR */,\n    [\"l\" /* PathCharTypes.ELSE */]: [4 /* States.IN_SUB_PATH */, 0 /* Actions.APPEND */]\n};\npathStateMachine[5 /* States.IN_SINGLE_QUOTE */] = {\n    [\"'\" /* PathCharTypes.SINGLE_QUOTE */]: [4 /* States.IN_SUB_PATH */, 0 /* Actions.APPEND */],\n    [\"o\" /* PathCharTypes.END_OF_FAIL */]: 8 /* States.ERROR */,\n    [\"l\" /* PathCharTypes.ELSE */]: [5 /* States.IN_SINGLE_QUOTE */, 0 /* Actions.APPEND */]\n};\npathStateMachine[6 /* States.IN_DOUBLE_QUOTE */] = {\n    [\"\\\"\" /* PathCharTypes.DOUBLE_QUOTE */]: [4 /* States.IN_SUB_PATH */, 0 /* Actions.APPEND */],\n    [\"o\" /* PathCharTypes.END_OF_FAIL */]: 8 /* States.ERROR */,\n    [\"l\" /* PathCharTypes.ELSE */]: [6 /* States.IN_DOUBLE_QUOTE */, 0 /* Actions.APPEND */]\n};\n/**\n * Check if an expression is a literal value.\n */\nconst literalValueRE = /^\\s?(?:true|false|-?[\\d.]+|'[^']*'|\"[^\"]*\")\\s?$/;\nfunction isLiteral(exp) {\n    return literalValueRE.test(exp);\n}\n/**\n * Strip quotes from a string\n */\nfunction stripQuotes(str) {\n    const a = str.charCodeAt(0);\n    const b = str.charCodeAt(str.length - 1);\n    return a === b && (a === 0x22 || a === 0x27) ? str.slice(1, -1) : str;\n}\n/**\n * Determine the type of a character in a keypath.\n */\nfunction getPathCharType(ch) {\n    if (ch === undefined || ch === null) {\n        return \"o\" /* PathCharTypes.END_OF_FAIL */;\n    }\n    const code = ch.charCodeAt(0);\n    switch (code) {\n        case 0x5b: // [\n        case 0x5d: // ]\n        case 0x2e: // .\n        case 0x22: // \"\n        case 0x27: // '\n            return ch;\n        case 0x5f: // _\n        case 0x24: // $\n        case 0x2d: // -\n            return \"i\" /* PathCharTypes.IDENT */;\n        case 0x09: // Tab (HT)\n        case 0x0a: // Newline (LF)\n        case 0x0d: // Return (CR)\n        case 0xa0: // No-break space (NBSP)\n        case 0xfeff: // Byte Order Mark (BOM)\n        case 0x2028: // Line Separator (LS)\n        case 0x2029: // Paragraph Separator (PS)\n            return \"w\" /* PathCharTypes.WORKSPACE */;\n    }\n    return \"i\" /* PathCharTypes.IDENT */;\n}\n/**\n * Format a subPath, return its plain form if it is\n * a literal string or number. Otherwise prepend the\n * dynamic indicator (*).\n */\nfunction formatSubPath(path) {\n    const trimmed = path.trim();\n    // invalid leading 0\n    if (path.charAt(0) === '0' && isNaN(parseInt(path))) {\n        return false;\n    }\n    return isLiteral(trimmed)\n        ? stripQuotes(trimmed)\n        : \"*\" /* PathCharTypes.ASTARISK */ + trimmed;\n}\n/**\n * Parse a string path into an array of segments\n */\nfunction parse(path) {\n    const keys = [];\n    let index = -1;\n    let mode = 0 /* States.BEFORE_PATH */;\n    let subPathDepth = 0;\n    let c;\n    let key; // eslint-disable-line\n    let newChar;\n    let type;\n    let transition;\n    let action;\n    let typeMap;\n    const actions = [];\n    actions[0 /* Actions.APPEND */] = () => {\n        if (key === undefined) {\n            key = newChar;\n        }\n        else {\n            key += newChar;\n        }\n    };\n    actions[1 /* Actions.PUSH */] = () => {\n        if (key !== undefined) {\n            keys.push(key);\n            key = undefined;\n        }\n    };\n    actions[2 /* Actions.INC_SUB_PATH_DEPTH */] = () => {\n        actions[0 /* Actions.APPEND */]();\n        subPathDepth++;\n    };\n    actions[3 /* Actions.PUSH_SUB_PATH */] = () => {\n        if (subPathDepth > 0) {\n            subPathDepth--;\n            mode = 4 /* States.IN_SUB_PATH */;\n            actions[0 /* Actions.APPEND */]();\n        }\n        else {\n            subPathDepth = 0;\n            if (key === undefined) {\n                return false;\n            }\n            key = formatSubPath(key);\n            if (key === false) {\n                return false;\n            }\n            else {\n                actions[1 /* Actions.PUSH */]();\n            }\n        }\n    };\n    function maybeUnescapeQuote() {\n        const nextChar = path[index + 1];\n        if ((mode === 5 /* States.IN_SINGLE_QUOTE */ &&\n            nextChar === \"'\" /* PathCharTypes.SINGLE_QUOTE */) ||\n            (mode === 6 /* States.IN_DOUBLE_QUOTE */ &&\n                nextChar === \"\\\"\" /* PathCharTypes.DOUBLE_QUOTE */)) {\n            index++;\n            newChar = '\\\\' + nextChar;\n            actions[0 /* Actions.APPEND */]();\n            return true;\n        }\n    }\n    while (mode !== null) {\n        index++;\n        c = path[index];\n        if (c === '\\\\' && maybeUnescapeQuote()) {\n            continue;\n        }\n        type = getPathCharType(c);\n        typeMap = pathStateMachine[mode];\n        transition = typeMap[type] || typeMap[\"l\" /* PathCharTypes.ELSE */] || 8 /* States.ERROR */;\n        // check parse error\n        if (transition === 8 /* States.ERROR */) {\n            return;\n        }\n        mode = transition[0];\n        if (transition[1] !== undefined) {\n            action = actions[transition[1]];\n            if (action) {\n                newChar = c;\n                if (action() === false) {\n                    return;\n                }\n            }\n        }\n        // check parse finish\n        if (mode === 7 /* States.AFTER_PATH */) {\n            return keys;\n        }\n    }\n}\n// path token cache\nconst cache = new Map();\n/**\n * key-value message resolver\n *\n * @remarks\n * Resolves messages with the key-value structure. Note that messages with a hierarchical structure such as objects cannot be resolved\n *\n * @param obj - A target object to be resolved with path\n * @param path - A {@link Path | path} to resolve the value of message\n *\n * @returns A resolved {@link PathValue | path value}\n *\n * @VueI18nGeneral\n */\nfunction resolveWithKeyValue(obj, path) {\n    return isObject(obj) ? obj[path] : null;\n}\n/**\n * message resolver\n *\n * @remarks\n * Resolves messages. messages with a hierarchical structure such as objects can be resolved. This resolver is used in VueI18n as default.\n *\n * @param obj - A target object to be resolved with path\n * @param path - A {@link Path | path} to resolve the value of message\n *\n * @returns A resolved {@link PathValue | path value}\n *\n * @VueI18nGeneral\n */\nfunction resolveValue(obj, path) {\n    // check object\n    if (!isObject(obj)) {\n        return null;\n    }\n    // parse path\n    let hit = cache.get(path);\n    if (!hit) {\n        hit = parse(path);\n        if (hit) {\n            cache.set(path, hit);\n        }\n    }\n    // check hit\n    if (!hit) {\n        return null;\n    }\n    // resolve path value\n    const len = hit.length;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any -- for generic object\n    let last = obj;\n    let i = 0;\n    while (i < len) {\n        const key = hit[i];\n        /**\n         * NOTE:\n         * if `key` is intlify message format AST node key and `last` is intlify message format AST, skip it.\n         * because the AST node is not a key-value structure.\n         */\n        if (AST_NODE_PROPS_KEYS.includes(key) && isMessageAST(last)) {\n            return null;\n        }\n        if (!isObject(last)) {\n            return null;\n        }\n        if (!hasOwn(last, key)) {\n            return null;\n        }\n        const val = last[key];\n        if (val === undefined) {\n            return null;\n        }\n        if (isFunction(last)) {\n            return null;\n        }\n        last = val;\n        i++;\n    }\n    return last;\n}\n\nconst CoreWarnCodes = {\n    NOT_FOUND_KEY: 1,\n    FALLBACK_TO_TRANSLATE: 2,\n    CANNOT_FORMAT_NUMBER: 3,\n    FALLBACK_TO_NUMBER_FORMAT: 4,\n    CANNOT_FORMAT_DATE: 5,\n    FALLBACK_TO_DATE_FORMAT: 6,\n    EXPERIMENTAL_CUSTOM_MESSAGE_COMPILER: 7,\n    INVALID_NUMBER_ARGUMENT: 8,\n    INVALID_DATE_ARGUMENT: 9\n};\nconst CORE_WARN_CODES_EXTEND_POINT = 10;\n/** @internal */\nconst warnMessages = {\n    [CoreWarnCodes.NOT_FOUND_KEY]: `Not found '{key}' key in '{locale}' locale messages.`,\n    [CoreWarnCodes.FALLBACK_TO_TRANSLATE]: `Fall back to translate '{key}' key with '{target}' locale.`,\n    [CoreWarnCodes.CANNOT_FORMAT_NUMBER]: `Cannot format a number value due to not supported Intl.NumberFormat.`,\n    [CoreWarnCodes.FALLBACK_TO_NUMBER_FORMAT]: `Fall back to number format '{key}' key with '{target}' locale.`,\n    [CoreWarnCodes.CANNOT_FORMAT_DATE]: `Cannot format a date value due to not supported Intl.DateTimeFormat.`,\n    [CoreWarnCodes.FALLBACK_TO_DATE_FORMAT]: `Fall back to datetime format '{key}' key with '{target}' locale.`,\n    [CoreWarnCodes.EXPERIMENTAL_CUSTOM_MESSAGE_COMPILER]: `This project is using Custom Message Compiler, which is an experimental feature. It may receive breaking changes or be removed in the future.`,\n    [CoreWarnCodes.INVALID_NUMBER_ARGUMENT]: `Invalid argument for number formatting: expected a number but received '{value}'.`,\n    [CoreWarnCodes.INVALID_DATE_ARGUMENT]: `Invalid argument for datetime formatting: expected a Date, number, or ISO string but received '{value}'.`\n};\nfunction getWarnMessage(code, ...args) {\n    return format$1(warnMessages[code], ...args);\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Intlify core-base version\n * @internal\n */\nconst VERSION = '11.4.2';\nconst NOT_REOSLVED = -1;\nconst DEFAULT_LOCALE = 'en-US';\nconst MISSING_RESOLVE_VALUE = '';\nconst capitalize = (str) => `${str.charAt(0).toLocaleUpperCase()}${str.substr(1)}`;\nfunction getDefaultLinkedModifiers() {\n    return {\n        upper: (val, type) => {\n            // prettier-ignore\n            return type === 'text' && isString(val)\n                ? val.toUpperCase()\n                : type === 'vnode' && isObject(val) && '__v_isVNode' in val\n                    ? val.children.toUpperCase()\n                    : val;\n        },\n        lower: (val, type) => {\n            // prettier-ignore\n            return type === 'text' && isString(val)\n                ? val.toLowerCase()\n                : type === 'vnode' && isObject(val) && '__v_isVNode' in val\n                    ? val.children.toLowerCase()\n                    : val;\n        },\n        capitalize: (val, type) => {\n            // prettier-ignore\n            return (type === 'text' && isString(val)\n                ? capitalize(val)\n                : type === 'vnode' && isObject(val) && '__v_isVNode' in val\n                    ? capitalize(val.children)\n                    : val);\n        }\n    };\n}\nlet _compiler;\nfunction registerMessageCompiler(compiler) {\n    _compiler = compiler;\n}\nlet _resolver;\n/**\n * Register the message resolver\n *\n * @param resolver - A {@link MessageResolver} function\n *\n * @VueI18nGeneral\n */\nfunction registerMessageResolver(resolver) {\n    _resolver = resolver;\n}\nlet _fallbacker;\n/**\n * Register the locale fallbacker\n *\n * @param fallbacker - A {@link LocaleFallbacker} function\n *\n * @VueI18nGeneral\n */\nfunction registerLocaleFallbacker(fallbacker) {\n    _fallbacker = fallbacker;\n}\n// Additional Meta for Intlify DevTools\nlet _additionalMeta = null;\n/* #__NO_SIDE_EFFECTS__ */\nconst setAdditionalMeta = (meta) => {\n    _additionalMeta = meta;\n};\n/* #__NO_SIDE_EFFECTS__ */\nconst getAdditionalMeta = () => _additionalMeta;\nlet _fallbackContext = null;\nconst setFallbackContext = (context) => {\n    _fallbackContext = context;\n};\nconst getFallbackContext = () => _fallbackContext;\n// ID for CoreContext\nlet _cid = 0;\nfunction createCoreContext(options = {}) {\n    // setup options\n    const onWarn = isFunction(options.onWarn) ? options.onWarn : warn;\n    const version = isString(options.version) ? options.version : VERSION;\n    const locale = isString(options.locale) || isFunction(options.locale)\n        ? options.locale\n        : DEFAULT_LOCALE;\n    const _locale = isFunction(locale) ? DEFAULT_LOCALE : locale;\n    const fallbackLocale = isArray(options.fallbackLocale) ||\n        isPlainObject(options.fallbackLocale) ||\n        isString(options.fallbackLocale) ||\n        options.fallbackLocale === false\n        ? options.fallbackLocale\n        : _locale;\n    const messages = isPlainObject(options.messages)\n        ? options.messages\n        : createResources(_locale);\n    const datetimeFormats = isPlainObject(options.datetimeFormats)\n            ? options.datetimeFormats\n            : createResources(_locale)\n        ;\n    const numberFormats = isPlainObject(options.numberFormats)\n            ? options.numberFormats\n            : createResources(_locale)\n        ;\n    const modifiers = assign(create(), options.modifiers, getDefaultLinkedModifiers());\n    const pluralRules = options.pluralRules || create();\n    const missing = isFunction(options.missing) ? options.missing : null;\n    const missingWarn = isBoolean(options.missingWarn) || isRegExp(options.missingWarn)\n        ? options.missingWarn\n        : true;\n    const fallbackWarn = isBoolean(options.fallbackWarn) || isRegExp(options.fallbackWarn)\n        ? options.fallbackWarn\n        : true;\n    const fallbackFormat = !!options.fallbackFormat;\n    const unresolving = !!options.unresolving;\n    const postTranslation = isFunction(options.postTranslation)\n        ? options.postTranslation\n        : null;\n    const processor = isPlainObject(options.processor) ? options.processor : null;\n    const warnHtmlMessage = isBoolean(options.warnHtmlMessage)\n        ? options.warnHtmlMessage\n        : true;\n    const escapeParameter = !!options.escapeParameter;\n    const messageCompiler = isFunction(options.messageCompiler)\n        ? options.messageCompiler\n        : _compiler;\n    if ((process.env.NODE_ENV !== 'production') &&\n        !false &&\n        !false &&\n        isFunction(options.messageCompiler)) {\n        warnOnce(getWarnMessage(CoreWarnCodes.EXPERIMENTAL_CUSTOM_MESSAGE_COMPILER));\n    }\n    const messageResolver = isFunction(options.messageResolver)\n        ? options.messageResolver\n        : _resolver || resolveWithKeyValue;\n    const localeFallbacker = isFunction(options.localeFallbacker)\n        ? options.localeFallbacker\n        : _fallbacker || fallbackWithSimple;\n    const fallbackContext = isObject(options.fallbackContext)\n        ? options.fallbackContext\n        : undefined;\n    // setup internal options\n    const internalOptions = options;\n    const __datetimeFormatters = isObject(internalOptions.__datetimeFormatters)\n            ? internalOptions.__datetimeFormatters\n            : new Map()\n        ;\n    const __numberFormatters = isObject(internalOptions.__numberFormatters)\n            ? internalOptions.__numberFormatters\n            : new Map()\n        ;\n    const __meta = isObject(internalOptions.__meta) ? internalOptions.__meta : {};\n    _cid++;\n    const context = {\n        version,\n        cid: _cid,\n        locale,\n        fallbackLocale,\n        messages,\n        modifiers,\n        pluralRules,\n        missing,\n        missingWarn,\n        fallbackWarn,\n        fallbackFormat,\n        unresolving,\n        postTranslation,\n        processor,\n        warnHtmlMessage,\n        escapeParameter,\n        messageCompiler,\n        messageResolver,\n        localeFallbacker,\n        fallbackContext,\n        onWarn,\n        __meta\n    };\n    {\n        context.datetimeFormats = datetimeFormats;\n        context.numberFormats = numberFormats;\n        context.__datetimeFormatters = __datetimeFormatters;\n        context.__numberFormatters = __numberFormatters;\n    }\n    // for vue-devtools timeline event\n    if ((process.env.NODE_ENV !== 'production')) {\n        context.__v_emitter =\n            internalOptions.__v_emitter != null\n                ? internalOptions.__v_emitter\n                : undefined;\n    }\n    // NOTE: experimental !!\n    if ((process.env.NODE_ENV !== 'production') || __INTLIFY_PROD_DEVTOOLS__) {\n        initI18nDevTools(context, version, __meta);\n    }\n    return context;\n}\nconst createResources = (locale) => ({ [locale]: create() });\n/** @internal */\nfunction isTranslateFallbackWarn(fallback, key) {\n    return fallback instanceof RegExp ? fallback.test(key) : fallback;\n}\n/** @internal */\nfunction isTranslateMissingWarn(missing, key) {\n    return missing instanceof RegExp ? missing.test(key) : missing;\n}\n/** @internal */\nfunction handleMissing(context, key, locale, missingWarn, type) {\n    const { missing, onWarn } = context;\n    // for vue-devtools timeline event\n    if ((process.env.NODE_ENV !== 'production')) {\n        const emitter = context.__v_emitter;\n        if (emitter) {\n            emitter.emit('missing', {\n                locale,\n                key,\n                type,\n                groupId: `${type}:${key}`\n            });\n        }\n    }\n    if (missing !== null) {\n        const ret = missing(context, locale, key, type);\n        return isString(ret) ? ret : key;\n    }\n    else {\n        if ((process.env.NODE_ENV !== 'production') && isTranslateMissingWarn(missingWarn, key)) {\n            onWarn(getWarnMessage(CoreWarnCodes.NOT_FOUND_KEY, { key, locale }));\n        }\n        return key;\n    }\n}\n/** @internal */\nfunction updateFallbackLocale(ctx, locale, fallback) {\n    const context = ctx;\n    context.__localeChainCache = new Map();\n    ctx.localeFallbacker(ctx, fallback, locale);\n}\n/** @internal */\nfunction isAlmostSameLocale(locale, compareLocale) {\n    if (locale === compareLocale)\n        return false;\n    return locale.split('-')[0] === compareLocale.split('-')[0];\n}\n/** @internal */\nfunction isImplicitFallback(targetLocale, locales) {\n    const index = locales.indexOf(targetLocale);\n    if (index === -1) {\n        return false;\n    }\n    for (let i = index + 1; i < locales.length; i++) {\n        if (isAlmostSameLocale(targetLocale, locales[i])) {\n            return true;\n        }\n    }\n    return false;\n}\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\nconst intlDefined = typeof Intl !== 'undefined';\nconst Availabilities = {\n    dateTimeFormat: intlDefined && typeof Intl.DateTimeFormat !== 'undefined',\n    numberFormat: intlDefined && typeof Intl.NumberFormat !== 'undefined'\n};\n\n// implementation of `datetime` function\nfunction datetime(context, ...args) {\n    const { datetimeFormats, unresolving, fallbackLocale, onWarn, localeFallbacker } = context;\n    const { __datetimeFormatters } = context;\n    if ((process.env.NODE_ENV !== 'production') && !Availabilities.dateTimeFormat) {\n        onWarn(getWarnMessage(CoreWarnCodes.CANNOT_FORMAT_DATE));\n        return MISSING_RESOLVE_VALUE;\n    }\n    if (!isString(args[0]) && !isDate(args[0]) && !isNumber(args[0])) {\n        if ((process.env.NODE_ENV !== 'production')) {\n            onWarn(getWarnMessage(CoreWarnCodes.INVALID_DATE_ARGUMENT, {\n                value: String(args[0])\n            }));\n        }\n        return MISSING_RESOLVE_VALUE;\n    }\n    const [key, value, options, overrides] = parseDateTimeArgs(...args);\n    const missingWarn = isBoolean(options.missingWarn)\n        ? options.missingWarn\n        : context.missingWarn;\n    const fallbackWarn = isBoolean(options.fallbackWarn)\n        ? options.fallbackWarn\n        : context.fallbackWarn;\n    const part = !!options.part;\n    const locale = getLocale(context, options);\n    const locales = localeFallbacker(context, // eslint-disable-line @typescript-eslint/no-explicit-any\n    fallbackLocale, locale);\n    if (!isString(key) || key === '') {\n        return new Intl.DateTimeFormat(locale.replace(/!/g, ''), overrides).format(value);\n    }\n    // resolve format\n    let datetimeFormat = {};\n    let targetLocale;\n    let format = null;\n    let from = locale;\n    let to = null;\n    const type = 'datetime format';\n    for (let i = 0; i < locales.length; i++) {\n        targetLocale = to = locales[i];\n        if ((process.env.NODE_ENV !== 'production') &&\n            locale !== targetLocale &&\n            isTranslateFallbackWarn(fallbackWarn, key)) {\n            onWarn(getWarnMessage(CoreWarnCodes.FALLBACK_TO_DATE_FORMAT, {\n                key,\n                target: targetLocale\n            }));\n        }\n        // for vue-devtools timeline event\n        if ((process.env.NODE_ENV !== 'production') && locale !== targetLocale) {\n            const emitter = context.__v_emitter;\n            if (emitter) {\n                emitter.emit('fallback', {\n                    type,\n                    key,\n                    from,\n                    to,\n                    groupId: `${type}:${key}`\n                });\n            }\n        }\n        datetimeFormat =\n            datetimeFormats[targetLocale] || {};\n        format = datetimeFormat[key];\n        if (isPlainObject(format))\n            break;\n        handleMissing(context, key, targetLocale, missingWarn, type); // eslint-disable-line @typescript-eslint/no-explicit-any\n        from = to;\n    }\n    // checking format and target locale\n    if (!isPlainObject(format) || !isString(targetLocale)) {\n        return unresolving ? NOT_REOSLVED : key;\n    }\n    let id = `${targetLocale}__${key}`;\n    if (!isEmptyObject(overrides)) {\n        id = `${id}__${JSON.stringify(overrides)}`;\n    }\n    let formatter = __datetimeFormatters.get(id);\n    if (!formatter) {\n        formatter = new Intl.DateTimeFormat(targetLocale, assign({}, format, overrides));\n        __datetimeFormatters.set(id, formatter);\n    }\n    return !part ? formatter.format(value) : formatter.formatToParts(value);\n}\n/** @internal */\nconst DATETIME_FORMAT_OPTIONS_KEYS = [\n    'localeMatcher',\n    'weekday',\n    'era',\n    'year',\n    'month',\n    'day',\n    'hour',\n    'minute',\n    'second',\n    'timeZoneName',\n    'formatMatcher',\n    'hour12',\n    'timeZone',\n    'dateStyle',\n    'timeStyle',\n    'calendar',\n    'dayPeriod',\n    'numberingSystem',\n    'hourCycle',\n    'fractionalSecondDigits'\n];\n/** @internal */\nfunction parseDateTimeArgs(...args) {\n    const [arg1, arg2, arg3, arg4] = args;\n    const options = create();\n    let overrides = create();\n    let value;\n    if (isString(arg1)) {\n        // Only allow ISO strings - other date formats are often supported,\n        // but may cause different results in different browsers.\n        const matches = arg1.match(/(\\d{4}-\\d{2}-\\d{2})(T|\\s)?(.*)/);\n        if (!matches) {\n            throw createCoreError(CoreErrorCodes.INVALID_ISO_DATE_ARGUMENT);\n        }\n        // Some browsers can not parse the iso datetime separated by space,\n        // this is a compromise solution by replace the 'T'/' ' with 'T'\n        const dateTime = matches[3]\n            ? matches[3].trim().startsWith('T')\n                ? `${matches[1].trim()}${matches[3].trim()}`\n                : `${matches[1].trim()}T${matches[3].trim()}`\n            : matches[1].trim();\n        value = new Date(dateTime);\n        try {\n            // This will fail if the date is not valid\n            value.toISOString();\n        }\n        catch {\n            throw createCoreError(CoreErrorCodes.INVALID_ISO_DATE_ARGUMENT);\n        }\n    }\n    else if (isDate(arg1)) {\n        if (isNaN(arg1.getTime())) {\n            throw createCoreError(CoreErrorCodes.INVALID_DATE_ARGUMENT);\n        }\n        value = arg1;\n    }\n    else if (isNumber(arg1)) {\n        value = arg1;\n    }\n    else {\n        throw createCoreError(CoreErrorCodes.INVALID_ARGUMENT);\n    }\n    if (isString(arg2)) {\n        options.key = arg2;\n    }\n    else if (isPlainObject(arg2)) {\n        Object.keys(arg2).forEach(key => {\n            if (DATETIME_FORMAT_OPTIONS_KEYS.includes(key)) {\n                overrides[key] = arg2[key];\n            }\n            else {\n                options[key] = arg2[key];\n            }\n        });\n    }\n    if (isString(arg3)) {\n        options.locale = arg3;\n    }\n    else if (isPlainObject(arg3)) {\n        overrides = arg3;\n    }\n    if (isPlainObject(arg4)) {\n        overrides = arg4;\n    }\n    return [options.key || '', value, options, overrides];\n}\n/** @internal */\nfunction clearDateTimeFormat(ctx, locale, format) {\n    const context = ctx;\n    for (const key in format) {\n        const id = `${locale}__${key}`;\n        if (!context.__datetimeFormatters.has(id)) {\n            continue;\n        }\n        context.__datetimeFormatters.delete(id);\n    }\n}\n\n// implementation of `number` function\nfunction number(context, ...args) {\n    const { numberFormats, unresolving, fallbackLocale, onWarn, localeFallbacker } = context;\n    const { __numberFormatters } = context;\n    if ((process.env.NODE_ENV !== 'production') && !Availabilities.numberFormat) {\n        onWarn(getWarnMessage(CoreWarnCodes.CANNOT_FORMAT_NUMBER));\n        return MISSING_RESOLVE_VALUE;\n    }\n    if (!isNumber(args[0])) {\n        if ((process.env.NODE_ENV !== 'production')) {\n            onWarn(getWarnMessage(CoreWarnCodes.INVALID_NUMBER_ARGUMENT, {\n                value: String(args[0])\n            }));\n        }\n        return MISSING_RESOLVE_VALUE;\n    }\n    const [key, value, options, overrides] = parseNumberArgs(...args);\n    const missingWarn = isBoolean(options.missingWarn)\n        ? options.missingWarn\n        : context.missingWarn;\n    const fallbackWarn = isBoolean(options.fallbackWarn)\n        ? options.fallbackWarn\n        : context.fallbackWarn;\n    const part = !!options.part;\n    const locale = getLocale(context, options);\n    const locales = localeFallbacker(context, // eslint-disable-line @typescript-eslint/no-explicit-any\n    fallbackLocale, locale);\n    if (!isString(key) || key === '') {\n        return new Intl.NumberFormat(locale.replace(/!/g, ''), overrides).format(value);\n    }\n    // resolve format\n    let numberFormat = {};\n    let targetLocale;\n    let format = null;\n    let from = locale;\n    let to = null;\n    const type = 'number format';\n    for (let i = 0; i < locales.length; i++) {\n        targetLocale = to = locales[i];\n        if ((process.env.NODE_ENV !== 'production') &&\n            locale !== targetLocale &&\n            isTranslateFallbackWarn(fallbackWarn, key)) {\n            onWarn(getWarnMessage(CoreWarnCodes.FALLBACK_TO_NUMBER_FORMAT, {\n                key,\n                target: targetLocale\n            }));\n        }\n        // for vue-devtools timeline event\n        if ((process.env.NODE_ENV !== 'production') && locale !== targetLocale) {\n            const emitter = context.__v_emitter;\n            if (emitter) {\n                emitter.emit('fallback', {\n                    type,\n                    key,\n                    from,\n                    to,\n                    groupId: `${type}:${key}`\n                });\n            }\n        }\n        numberFormat =\n            numberFormats[targetLocale] || {};\n        format = numberFormat[key];\n        if (isPlainObject(format))\n            break;\n        handleMissing(context, key, targetLocale, missingWarn, type); // eslint-disable-line @typescript-eslint/no-explicit-any\n        from = to;\n    }\n    // checking format and target locale\n    if (!isPlainObject(format) || !isString(targetLocale)) {\n        return unresolving ? NOT_REOSLVED : key;\n    }\n    let id = `${targetLocale}__${key}`;\n    if (!isEmptyObject(overrides)) {\n        id = `${id}__${JSON.stringify(overrides)}`;\n    }\n    let formatter = __numberFormatters.get(id);\n    if (!formatter) {\n        formatter = new Intl.NumberFormat(targetLocale, assign({}, format, overrides));\n        __numberFormatters.set(id, formatter);\n    }\n    return !part ? formatter.format(value) : formatter.formatToParts(value);\n}\n/** @internal */\nconst NUMBER_FORMAT_OPTIONS_KEYS = [\n    'localeMatcher',\n    'style',\n    'currency',\n    'currencyDisplay',\n    'currencySign',\n    'useGrouping',\n    'minimumIntegerDigits',\n    'minimumFractionDigits',\n    'maximumFractionDigits',\n    'minimumSignificantDigits',\n    'maximumSignificantDigits',\n    'compactDisplay',\n    'notation',\n    'signDisplay',\n    'unit',\n    'unitDisplay',\n    'roundingMode',\n    'roundingPriority',\n    'roundingIncrement',\n    'trailingZeroDisplay'\n];\n/** @internal */\nfunction parseNumberArgs(...args) {\n    const [arg1, arg2, arg3, arg4] = args;\n    const options = create();\n    let overrides = create();\n    if (!isNumber(arg1)) {\n        throw createCoreError(CoreErrorCodes.INVALID_ARGUMENT);\n    }\n    const value = arg1;\n    if (isString(arg2)) {\n        options.key = arg2;\n    }\n    else if (isPlainObject(arg2)) {\n        Object.keys(arg2).forEach(key => {\n            if (NUMBER_FORMAT_OPTIONS_KEYS.includes(key)) {\n                overrides[key] = arg2[key];\n            }\n            else {\n                options[key] = arg2[key];\n            }\n        });\n    }\n    if (isString(arg3)) {\n        options.locale = arg3;\n    }\n    else if (isPlainObject(arg3)) {\n        overrides = arg3;\n    }\n    if (isPlainObject(arg4)) {\n        overrides = arg4;\n    }\n    return [options.key || '', value, options, overrides];\n}\n/** @internal */\nfunction clearNumberFormat(ctx, locale, format) {\n    const context = ctx;\n    for (const key in format) {\n        const id = `${locale}__${key}`;\n        if (!context.__numberFormatters.has(id)) {\n            continue;\n        }\n        context.__numberFormatters.delete(id);\n    }\n}\n\nconst DEFAULT_MODIFIER = (str) => str;\nconst DEFAULT_MESSAGE = (ctx) => ''; // eslint-disable-line\nconst DEFAULT_MESSAGE_DATA_TYPE = 'text';\nconst DEFAULT_NORMALIZE = (values) => values.length === 0 ? '' : join(values);\nconst DEFAULT_INTERPOLATE = toDisplayString;\nfunction pluralDefault(choice, choicesLength) {\n    choice = Math.abs(choice);\n    // singular (0) | plural (1)\n    if (choicesLength === 2) {\n        // prettier-ignore\n        return choice === 1\n            ? 0\n            : 1;\n    }\n    // zero (0) | singular (1) | plural (2)\n    return Math.min(choice, 2);\n}\nfunction getPluralIndex(options) {\n    // prettier-ignore\n    const index = isNumber(options.pluralIndex)\n        ? options.pluralIndex\n        : -1;\n    return isNumber(options.named?.count)\n        ? options.named.count\n        : isNumber(options.named?.n)\n            ? options.named.n\n            : index;\n}\nfunction createMessageContext(options = {}) {\n    const locale = options.locale;\n    const pluralIndex = getPluralIndex(options);\n    const pluralRule = isString(locale) && isFunction(options.pluralRules?.[locale])\n        ? options.pluralRules[locale]\n        : pluralDefault;\n    const orgPluralRule = pluralRule === pluralDefault ? undefined : pluralDefault;\n    const plural = (messages) => messages[pluralRule(pluralIndex, messages.length, orgPluralRule)];\n    const _list = options.list || [];\n    const list = (index) => _list[index];\n    const _named = options.named || create(); // eslint-disable-line @typescript-eslint/no-explicit-any\n    // normalize named\n    if (isNumber(options.pluralIndex)) {\n        _named.count ||= options.pluralIndex;\n        _named.n ||= options.pluralIndex;\n    }\n    const named = (key) => _named[key];\n    function message(key, useLinked) {\n        // prettier-ignore\n        const msg = isFunction(options.messages)\n            ? options.messages(key, !!useLinked)\n            : isObject(options.messages)\n                ? options.messages[key]\n                : false;\n        return !msg\n            ? options.parent\n                ? options.parent.message(key) // resolve from parent messages\n                : DEFAULT_MESSAGE\n            : msg;\n    }\n    const _modifier = (name) => options.modifiers\n        ? options.modifiers[name]\n        : DEFAULT_MODIFIER;\n    const normalize = isFunction(options.processor?.normalize)\n        ? options.processor.normalize\n        : DEFAULT_NORMALIZE;\n    const interpolate = isFunction(options.processor?.interpolate)\n        ? options.processor.interpolate\n        : DEFAULT_INTERPOLATE;\n    const type = isString(options.processor?.type)\n        ? options.processor.type\n        : DEFAULT_MESSAGE_DATA_TYPE;\n    const linked = (key, ...args) => {\n        const [arg1, arg2] = args;\n        let type = 'text';\n        let modifier = '';\n        if (args.length === 1) {\n            if (isObject(arg1)) {\n                modifier = arg1.modifier || modifier;\n                type = arg1.type || type;\n            }\n            else if (isString(arg1)) {\n                modifier = arg1 || modifier;\n            }\n        }\n        else if (args.length === 2) {\n            if (isString(arg1)) {\n                modifier = arg1 || modifier;\n            }\n            if (isString(arg2)) {\n                type = arg2 || type;\n            }\n        }\n        const ret = message(key, true)(ctx);\n        // If the linked message is not resolved (empty string), fall back to the key itself\n        const resolved = ret === '' || ret === undefined ? key : ret;\n        const msg = \n        // The message in vnode resolved with linked are returned as an array by processor.nomalize\n        type === 'vnode' && isArray(resolved) && modifier\n            ? resolved[0]\n            : resolved;\n        return modifier ? _modifier(modifier)(msg, type) : msg;\n    };\n    const ctx = {\n        [\"list\" /* HelperNameMap.LIST */]: list,\n        [\"named\" /* HelperNameMap.NAMED */]: named,\n        [\"plural\" /* HelperNameMap.PLURAL */]: plural,\n        [\"linked\" /* HelperNameMap.LINKED */]: linked,\n        [\"message\" /* HelperNameMap.MESSAGE */]: message,\n        [\"type\" /* HelperNameMap.TYPE */]: type,\n        [\"interpolate\" /* HelperNameMap.INTERPOLATE */]: interpolate,\n        [\"normalize\" /* HelperNameMap.NORMALIZE */]: normalize,\n        [\"values\" /* HelperNameMap.VALUES */]: assign(create(), _list, _named)\n    };\n    return ctx;\n}\n\nconst NOOP_MESSAGE_FUNCTION = () => '';\nconst isMessageFunction = (val) => isFunction(val);\n// implementation of `translate` function\nfunction translate(context, ...args) {\n    const { fallbackFormat, postTranslation, unresolving, messageCompiler, fallbackLocale, messages } = context;\n    const [key, options] = parseTranslateArgs(...args);\n    const missingWarn = isBoolean(options.missingWarn)\n        ? options.missingWarn\n        : context.missingWarn;\n    const fallbackWarn = isBoolean(options.fallbackWarn)\n        ? options.fallbackWarn\n        : context.fallbackWarn;\n    const escapeParameter = isBoolean(options.escapeParameter)\n        ? options.escapeParameter\n        : context.escapeParameter;\n    const resolvedMessage = !!options.resolvedMessage;\n    // prettier-ignore\n    const defaultMsgOrKey = isString(options.default) || isBoolean(options.default) // default by function option\n        ? !isBoolean(options.default)\n            ? options.default\n            : (!messageCompiler ? () => key : key)\n        : fallbackFormat // default by `fallbackFormat` option\n            ? (!messageCompiler ? () => key : key)\n            : null;\n    const enableDefaultMsg = fallbackFormat ||\n        (defaultMsgOrKey != null &&\n            (isString(defaultMsgOrKey) || isFunction(defaultMsgOrKey)));\n    const locale = getLocale(context, options);\n    // escape params\n    escapeParameter && escapeParams(options);\n    // resolve message format\n    // eslint-disable-next-line prefer-const\n    let [formatScope, targetLocale, message] = !resolvedMessage\n        ? resolveMessageFormat(context, key, locale, fallbackLocale, fallbackWarn, missingWarn)\n        : [\n            key,\n            locale,\n            messages[locale] || create()\n        ];\n    // NOTE:\n    //  Fix to work around `ssrTransfrom` bug in Vite.\n    //  https://github.com/vitejs/vite/issues/4306\n    //  To get around this, use temporary variables.\n    //  https://github.com/nuxt/framework/issues/1461#issuecomment-954606243\n    let format = formatScope;\n    // if you use default message, set it as message format!\n    let cacheBaseKey = key;\n    if (!resolvedMessage &&\n        !(isString(format) ||\n            isMessageAST(format) ||\n            isMessageFunction(format))) {\n        if (enableDefaultMsg) {\n            format = defaultMsgOrKey;\n            cacheBaseKey = format;\n        }\n    }\n    // checking message format and target locale\n    if (!resolvedMessage &&\n        (!(isString(format) ||\n            isMessageAST(format) ||\n            isMessageFunction(format)) ||\n            !isString(targetLocale))) {\n        return unresolving ? NOT_REOSLVED : key;\n    }\n    // TODO: refactor\n    if ((process.env.NODE_ENV !== 'production') && isString(format) && context.messageCompiler == null) {\n        warn(`The message format compilation is not supported in this build. ` +\n            `Because message compiler isn't included. ` +\n            `You need to pre-compilation all message format. ` +\n            `So translate function return '${key}'.`);\n        return key;\n    }\n    // setup compile error detecting\n    let occurred = false;\n    const onError = () => {\n        occurred = true;\n    };\n    // compile message format\n    const msg = !isMessageFunction(format)\n        ? compileMessageFormat(context, key, targetLocale, format, cacheBaseKey, onError)\n        : format;\n    // if occurred compile error, return the message format\n    if (occurred) {\n        return format;\n    }\n    // evaluate message with context\n    const ctxOptions = getMessageContextOptions(context, targetLocale, message, options);\n    const msgContext = createMessageContext(ctxOptions);\n    const messaged = evaluateMessage(context, msg, msgContext);\n    // if use post translation option, proceed it with handler\n    let ret = postTranslation\n        ? postTranslation(messaged, key)\n        : messaged;\n    // apply HTML sanitization for security\n    if (escapeParameter && isString(ret)) {\n        ret = sanitizeTranslatedHtml(ret);\n    }\n    // NOTE: experimental !!\n    if ((process.env.NODE_ENV !== 'production') || __INTLIFY_PROD_DEVTOOLS__) {\n        // prettier-ignore\n        const payloads = {\n            timestamp: Date.now(),\n            key: isString(key)\n                ? key\n                : isMessageFunction(format)\n                    ? format.key\n                    : '',\n            locale: targetLocale || (isMessageFunction(format)\n                ? format.locale\n                : ''),\n            format: isString(format)\n                ? format\n                : isMessageFunction(format)\n                    ? format.source\n                    : '',\n            message: ret\n        };\n        payloads.meta = assign({}, context.__meta, getAdditionalMeta() || {});\n        translateDevTools(payloads);\n    }\n    return ret;\n}\nfunction escapeParams(options) {\n    if (isArray(options.list)) {\n        options.list = options.list.map(item => isString(item) ? escapeHtml(item) : item);\n    }\n    else if (isObject(options.named)) {\n        Object.keys(options.named).forEach(key => {\n            if (isString(options.named[key])) {\n                options.named[key] = escapeHtml(options.named[key]);\n            }\n        });\n    }\n}\nfunction resolveMessageFormat(context, key, locale, fallbackLocale, fallbackWarn, missingWarn) {\n    const { messages, onWarn, messageResolver: resolveValue, localeFallbacker } = context;\n    const locales = localeFallbacker(context, fallbackLocale, locale); // eslint-disable-line @typescript-eslint/no-explicit-any\n    let message = create();\n    let targetLocale;\n    let format = null;\n    let from = locale;\n    let to = null;\n    const type = 'translate';\n    for (let i = 0; i < locales.length; i++) {\n        targetLocale = to = locales[i];\n        if ((process.env.NODE_ENV !== 'production') &&\n            locale !== targetLocale &&\n            !isAlmostSameLocale(locale, targetLocale) &&\n            isTranslateFallbackWarn(fallbackWarn, key)) {\n            onWarn(getWarnMessage(CoreWarnCodes.FALLBACK_TO_TRANSLATE, {\n                key,\n                target: targetLocale\n            }));\n        }\n        const emitter = (process.env.NODE_ENV !== 'production')\n            ? context.__v_emitter\n            : undefined;\n        // for vue-devtools timeline event\n        if ((process.env.NODE_ENV !== 'production') && locale !== targetLocale) {\n            if (emitter) {\n                emitter.emit('fallback', {\n                    type,\n                    key,\n                    from,\n                    to,\n                    groupId: `${type}:${key}`\n                });\n            }\n        }\n        message =\n            messages[targetLocale] || create();\n        // for vue-devtools timeline event\n        let start = null;\n        let startTag;\n        let endTag;\n        if ((process.env.NODE_ENV !== 'production') && inBrowser && emitter) {\n            start = window.performance.now();\n            startTag = 'intlify-message-resolve-start';\n            endTag = 'intlify-message-resolve-end';\n            mark && mark(startTag);\n        }\n        if ((format = resolveValue(message, key)) === null) {\n            // if null, resolve with object key path\n            format = message[key]; // eslint-disable-line @typescript-eslint/no-explicit-any\n        }\n        // for vue-devtools timeline event\n        if ((process.env.NODE_ENV !== 'production') && inBrowser && emitter) {\n            const end = window.performance.now();\n            if (emitter && start && format) {\n                emitter.emit('message-resolve', {\n                    type: 'message-resolve',\n                    key,\n                    message: format,\n                    time: end - start,\n                    groupId: `${type}:${key}`\n                });\n            }\n            if (startTag && endTag && mark && measure) {\n                mark(endTag);\n                measure('intlify message resolve', startTag, endTag);\n            }\n        }\n        if (isString(format) || isMessageAST(format) || isMessageFunction(format)) {\n            break;\n        }\n        if (!isImplicitFallback(targetLocale, locales)) {\n            const missingRet = handleMissing(context, // eslint-disable-line @typescript-eslint/no-explicit-any\n            key, targetLocale, missingWarn, type);\n            if (missingRet !== key) {\n                format = missingRet;\n            }\n        }\n        from = to;\n    }\n    return [format, targetLocale, message];\n}\nfunction compileMessageFormat(context, key, targetLocale, format, cacheBaseKey, onError) {\n    const { messageCompiler, warnHtmlMessage } = context;\n    if (isMessageFunction(format)) {\n        const msg = format;\n        msg.locale = msg.locale || targetLocale;\n        msg.key = msg.key || key;\n        return msg;\n    }\n    if (messageCompiler == null) {\n        const msg = (() => format);\n        msg.locale = targetLocale;\n        msg.key = key;\n        return msg;\n    }\n    // for vue-devtools timeline event\n    const emitter = (process.env.NODE_ENV !== 'production')\n        ? context.__v_emitter\n        : undefined;\n    let start = null;\n    let startTag;\n    let endTag;\n    if ((process.env.NODE_ENV !== 'production') && inBrowser && emitter) {\n        start = window.performance.now();\n        startTag = 'intlify-message-compilation-start';\n        endTag = 'intlify-message-compilation-end';\n        mark && mark(startTag);\n    }\n    const msg = messageCompiler(format, getCompileContext(context, targetLocale, cacheBaseKey, format, warnHtmlMessage, onError));\n    // for vue-devtools timeline event\n    if ((process.env.NODE_ENV !== 'production') && inBrowser && emitter) {\n        const end = window.performance.now();\n        if (emitter && start) {\n            emitter.emit('message-compilation', {\n                type: 'message-compilation',\n                message: format,\n                time: end - start,\n                groupId: `${'translate'}:${key}`\n            });\n        }\n        if (startTag && endTag && mark && measure) {\n            mark(endTag);\n            measure('intlify message compilation', startTag, endTag);\n        }\n    }\n    msg.locale = targetLocale;\n    msg.key = key;\n    msg.source = format;\n    return msg;\n}\nfunction evaluateMessage(context, msg, msgCtx) {\n    // for vue-devtools timeline event\n    const emitter = (process.env.NODE_ENV !== 'production')\n        ? context.__v_emitter\n        : undefined;\n    let start = null;\n    let startTag;\n    let endTag;\n    if ((process.env.NODE_ENV !== 'production') && inBrowser && emitter) {\n        start = window.performance.now();\n        startTag = 'intlify-message-evaluation-start';\n        endTag = 'intlify-message-evaluation-end';\n        mark && mark(startTag);\n    }\n    const messaged = msg(msgCtx);\n    // for vue-devtools timeline event\n    if ((process.env.NODE_ENV !== 'production') && inBrowser && emitter) {\n        const end = window.performance.now();\n        if (emitter && start) {\n            emitter.emit('message-evaluation', {\n                type: 'message-evaluation',\n                value: messaged,\n                time: end - start,\n                groupId: `${'translate'}:${msg.key}`\n            });\n        }\n        if (startTag && endTag && mark && measure) {\n            mark(endTag);\n            measure('intlify message evaluation', startTag, endTag);\n        }\n    }\n    return messaged;\n}\n/** @internal */\nfunction parseTranslateArgs(...args) {\n    const [arg1, arg2, arg3] = args;\n    const options = create();\n    if (!isString(arg1) &&\n        !isNumber(arg1) &&\n        !isMessageFunction(arg1) &&\n        !isMessageAST(arg1)) {\n        throw createCoreError(CoreErrorCodes.INVALID_ARGUMENT);\n    }\n    // prettier-ignore\n    const key = isNumber(arg1)\n        ? String(arg1)\n        : isMessageFunction(arg1)\n            ? arg1\n            : arg1;\n    if (isNumber(arg2)) {\n        options.plural = arg2;\n    }\n    else if (isString(arg2)) {\n        options.default = arg2;\n    }\n    else if (isPlainObject(arg2) && !isEmptyObject(arg2)) {\n        options.named = arg2;\n    }\n    else if (isArray(arg2)) {\n        options.list = arg2;\n    }\n    if (isNumber(arg3)) {\n        options.plural = arg3;\n    }\n    else if (isString(arg3)) {\n        options.default = arg3;\n    }\n    else if (isPlainObject(arg3)) {\n        assign(options, arg3);\n    }\n    return [key, options];\n}\nfunction getCompileContext(context, locale, key, source, warnHtmlMessage, onError) {\n    return {\n        locale,\n        key,\n        warnHtmlMessage,\n        onError: (err) => {\n            onError && onError(err);\n            if ((process.env.NODE_ENV !== 'production')) {\n                const _source = getSourceForCodeFrame(source);\n                const codeFrame = err.location &&\n                    _source &&\n                    generateCodeFrame(_source, err.location.start.offset, err.location.end.offset);\n                const emitter = context.__v_emitter;\n                if (emitter && _source) {\n                    emitter.emit('compile-error', {\n                        message: _source,\n                        error: err.message,\n                        start: err.location && err.location.start.offset,\n                        end: err.location && err.location.end.offset,\n                        groupId: `${'translate'}:${key}`\n                    });\n                }\n                const message = `Message compilation error: ${err.message}`;\n                throw new SyntaxError(codeFrame ? `${message}\\n${codeFrame}` : message);\n            }\n            throw err;\n        },\n        onCacheKey: (source) => generateFormatCacheKey(locale, key, source)\n    };\n}\nfunction getSourceForCodeFrame(source) {\n    if (isString(source)) {\n        return source;\n    }\n    else {\n        if (source.loc && source.loc.source) {\n            return source.loc.source;\n        }\n    }\n}\nfunction getMessageContextOptions(context, locale, message, options) {\n    const { modifiers, pluralRules, messageResolver: resolveValue, fallbackLocale, fallbackWarn, missingWarn, fallbackContext } = context;\n    const resolveMessage = (key, useLinked) => {\n        let val = resolveValue(message, key);\n        // fallback\n        if (val == null && (fallbackContext || useLinked)) {\n            const [format, , message] = resolveMessageFormat(fallbackContext || context, // NOTE: if has fallbackContext, fallback to root, else if use linked, fallback to local context\n            key, locale, fallbackLocale, fallbackWarn, missingWarn);\n            val = format ?? resolveValue(message, key);\n        }\n        if (isString(val) || isMessageAST(val)) {\n            let occurred = false;\n            const onError = () => {\n                occurred = true;\n            };\n            const msg = compileMessageFormat(context, key, locale, val, key, onError);\n            return !occurred\n                ? msg\n                : NOOP_MESSAGE_FUNCTION;\n        }\n        else if (isMessageFunction(val)) {\n            return val;\n        }\n        else {\n            // TODO: should be implemented warning message\n            return NOOP_MESSAGE_FUNCTION;\n        }\n    };\n    const ctxOptions = {\n        locale,\n        modifiers,\n        pluralRules,\n        messages: resolveMessage\n    };\n    if (context.processor) {\n        ctxOptions.processor = context.processor;\n    }\n    if (options.list) {\n        ctxOptions.list = options.list;\n    }\n    if (options.named) {\n        ctxOptions.named = options.named;\n    }\n    if (isNumber(options.plural)) {\n        ctxOptions.pluralIndex = options.plural;\n    }\n    return ctxOptions;\n}\n\n{\n    initFeatureFlags();\n}\n\nexport { AST_NODE_PROPS_KEYS, CORE_ERROR_CODES_EXTEND_POINT, CORE_WARN_CODES_EXTEND_POINT, CoreErrorCodes, CoreWarnCodes, DATETIME_FORMAT_OPTIONS_KEYS, DEFAULT_LOCALE, DEFAULT_MESSAGE_DATA_TYPE, MISSING_RESOLVE_VALUE, NOT_REOSLVED, NUMBER_FORMAT_OPTIONS_KEYS, VERSION, clearCompileCache, clearDateTimeFormat, clearNumberFormat, compile, createCoreContext, createCoreError, createMessageContext, datetime, fallbackWithLocaleChain, fallbackWithSimple, getAdditionalMeta, getDevToolsHook, getFallbackContext, getLocale, getWarnMessage, handleMissing, initI18nDevTools, isAlmostSameLocale, isImplicitFallback, isMessageAST, isMessageFunction, isTranslateFallbackWarn, isTranslateMissingWarn, number, parse, parseDateTimeArgs, parseNumberArgs, parseTranslateArgs, registerLocaleFallbacker, registerMessageCompiler, registerMessageResolver, resolveLocale, resolveValue, resolveWithKeyValue, setAdditionalMeta, setDevToolsHook, setFallbackContext, translate, translateDevTools, updateFallbackLocale };\n","export function getDevtoolsGlobalHook() {\n    return getTarget().__VUE_DEVTOOLS_GLOBAL_HOOK__;\n}\nexport function getTarget() {\n    // @ts-expect-error navigator and windows are not available in all environments\n    return (typeof navigator !== 'undefined' && typeof window !== 'undefined')\n        ? window\n        : typeof globalThis !== 'undefined'\n            ? globalThis\n            : {};\n}\nexport const isProxyAvailable = typeof Proxy === 'function';\n","export const HOOK_SETUP = 'devtools-plugin:setup';\nexport const HOOK_PLUGIN_SETTINGS_SET = 'plugin:settings:set';\n","let supported;\nlet perf;\nexport function isPerformanceSupported() {\n    var _a;\n    if (supported !== undefined) {\n        return supported;\n    }\n    if (typeof window !== 'undefined' && window.performance) {\n        supported = true;\n        perf = window.performance;\n    }\n    else if (typeof globalThis !== 'undefined' && ((_a = globalThis.perf_hooks) === null || _a === void 0 ? void 0 : _a.performance)) {\n        supported = true;\n        perf = globalThis.perf_hooks.performance;\n    }\n    else {\n        supported = false;\n    }\n    return supported;\n}\nexport function now() {\n    return isPerformanceSupported() ? perf.now() : Date.now();\n}\n","import { HOOK_PLUGIN_SETTINGS_SET } from './const.js';\nimport { now } from './time.js';\nexport class ApiProxy {\n    constructor(plugin, hook) {\n        this.target = null;\n        this.targetQueue = [];\n        this.onQueue = [];\n        this.plugin = plugin;\n        this.hook = hook;\n        const defaultSettings = {};\n        if (plugin.settings) {\n            for (const id in plugin.settings) {\n                const item = plugin.settings[id];\n                defaultSettings[id] = item.defaultValue;\n            }\n        }\n        const localSettingsSaveId = `__vue-devtools-plugin-settings__${plugin.id}`;\n        let currentSettings = Object.assign({}, defaultSettings);\n        try {\n            const raw = localStorage.getItem(localSettingsSaveId);\n            const data = JSON.parse(raw);\n            Object.assign(currentSettings, data);\n        }\n        catch (e) {\n            // noop\n        }\n        this.fallbacks = {\n            getSettings() {\n                return currentSettings;\n            },\n            setSettings(value) {\n                try {\n                    localStorage.setItem(localSettingsSaveId, JSON.stringify(value));\n                }\n                catch (e) {\n                    // noop\n                }\n                currentSettings = value;\n            },\n            now() {\n                return now();\n            },\n        };\n        if (hook) {\n            hook.on(HOOK_PLUGIN_SETTINGS_SET, (pluginId, value) => {\n                if (pluginId === this.plugin.id) {\n                    this.fallbacks.setSettings(value);\n                }\n            });\n        }\n        this.proxiedOn = new Proxy({}, {\n            get: (_target, prop) => {\n                if (this.target) {\n                    return this.target.on[prop];\n                }\n                else {\n                    return (...args) => {\n                        this.onQueue.push({\n                            method: prop,\n                            args,\n                        });\n                    };\n                }\n            },\n        });\n        this.proxiedTarget = new Proxy({}, {\n            get: (_target, prop) => {\n                if (this.target) {\n                    return this.target[prop];\n                }\n                else if (prop === 'on') {\n                    return this.proxiedOn;\n                }\n                else if (Object.keys(this.fallbacks).includes(prop)) {\n                    return (...args) => {\n                        this.targetQueue.push({\n                            method: prop,\n                            args,\n                            resolve: () => { },\n                        });\n                        return this.fallbacks[prop](...args);\n                    };\n                }\n                else {\n                    return (...args) => {\n                        return new Promise((resolve) => {\n                            this.targetQueue.push({\n                                method: prop,\n                                args,\n                                resolve,\n                            });\n                        });\n                    };\n                }\n            },\n        });\n    }\n    async setRealTarget(target) {\n        this.target = target;\n        for (const item of this.onQueue) {\n            this.target.on[item.method](...item.args);\n        }\n        for (const item of this.targetQueue) {\n            item.resolve(await this.target[item.method](...item.args));\n        }\n    }\n}\n","import { getDevtoolsGlobalHook, getTarget, isProxyAvailable } from './env.js';\nimport { HOOK_SETUP } from './const.js';\nimport { ApiProxy } from './proxy.js';\nexport * from './api/index.js';\nexport * from './plugin.js';\nexport * from './time.js';\nexport function setupDevtoolsPlugin(pluginDescriptor, setupFn) {\n    const descriptor = pluginDescriptor;\n    const target = getTarget();\n    const hook = getDevtoolsGlobalHook();\n    const enableProxy = isProxyAvailable && descriptor.enableEarlyProxy;\n    if (hook && (target.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__ || !enableProxy)) {\n        hook.emit(HOOK_SETUP, pluginDescriptor, setupFn);\n    }\n    else {\n        const proxy = enableProxy ? new ApiProxy(descriptor, hook) : null;\n        const list = target.__VUE_DEVTOOLS_PLUGINS__ = target.__VUE_DEVTOOLS_PLUGINS__ || [];\n        list.push({\n            pluginDescriptor: descriptor,\n            setupFn,\n            proxy,\n        });\n        if (proxy) {\n            setupFn(proxy.proxiedTarget);\n        }\n    }\n}\n","/*!\n  * vue-i18n v11.4.2\n  * (c) 2026 kazuya kawaguchi\n  * Released under the MIT License.\n  */\nimport { CORE_ERROR_CODES_EXTEND_POINT, createCompileError, CORE_WARN_CODES_EXTEND_POINT, isMessageAST, AST_NODE_PROPS_KEYS, DEFAULT_LOCALE, updateFallbackLocale, setFallbackContext, createCoreContext, clearDateTimeFormat, clearNumberFormat, setAdditionalMeta, getFallbackContext, NOT_REOSLVED, isTranslateFallbackWarn, isTranslateMissingWarn, parseTranslateArgs, translate, MISSING_RESOLVE_VALUE, parseDateTimeArgs, datetime, parseNumberArgs, number, fallbackWithLocaleChain, isMessageFunction, NUMBER_FORMAT_OPTIONS_KEYS, DATETIME_FORMAT_OPTIONS_KEYS, registerMessageCompiler, compile, registerMessageResolver, resolveValue, registerLocaleFallbacker, setDevToolsHook } from '@intlify/core-base';\nimport { getGlobalThis, makeSymbol, format, isObject, create, isPlainObject, isArray, deepCopy, isString, hasOwn, warn, isBoolean, isRegExp, isFunction, inBrowser, assign, isNumber, createEmitter, warnOnce, isEmptyObject } from '@intlify/shared';\nimport * as Vue from 'vue';\nimport { createVNode, Text, computed, watch, ref, shallowRef, Fragment, defineComponent, h, getCurrentScope, onScopeDispose, effectScope, inject, onMounted, onUnmounted, isRef } from 'vue';\nimport { setupDevtoolsPlugin } from '@vue/devtools-api';\n\n/**\n * Vue I18n Version\n *\n * @remarks\n * Semver format. Same format as the package.json `version` field.\n *\n * @VueI18nGeneral\n */\nconst VERSION = '11.4.2';\n/**\n * This is only called in esm-bundler builds.\n * istanbul-ignore-next\n */\nfunction initFeatureFlags() {\n    if (typeof __VUE_I18N_FULL_INSTALL__ !== 'boolean') {\n        getGlobalThis().__VUE_I18N_FULL_INSTALL__ = true;\n    }\n    if (typeof __VUE_I18N_LEGACY_API__ !== 'boolean') {\n        getGlobalThis().__VUE_I18N_LEGACY_API__ = true;\n    }\n    if (typeof __INTLIFY_DROP_MESSAGE_COMPILER__ !== 'boolean') {\n        getGlobalThis().__INTLIFY_DROP_MESSAGE_COMPILER__ = false;\n    }\n    if (typeof __INTLIFY_PROD_DEVTOOLS__ !== 'boolean') {\n        getGlobalThis().__INTLIFY_PROD_DEVTOOLS__ = false;\n    }\n}\n\nconst I18nErrorCodes = {\n    // composer module errors\n    UNEXPECTED_RETURN_TYPE: CORE_ERROR_CODES_EXTEND_POINT, // 24\n    // legacy module errors\n    INVALID_ARGUMENT: 25,\n    // i18n module errors\n    MUST_BE_CALL_SETUP_TOP: 26,\n    NOT_INSTALLED: 27,\n    // directive module errors\n    REQUIRED_VALUE: 28,\n    INVALID_VALUE: 29,\n    // vue-devtools errors\n    CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN: 30,\n    NOT_INSTALLED_WITH_PROVIDE: 31,\n    // unexpected error\n    UNEXPECTED_ERROR: 32,\n    // not compatible legacy vue-i18n constructor\n    NOT_COMPATIBLE_LEGACY_VUE_I18N: 33,\n    // Not available Compostion API in Legacy API mode. Please make sure that the legacy API mode is working properly\n    NOT_AVAILABLE_COMPOSITION_IN_LEGACY: 34\n};\nfunction createI18nError(code, ...args) {\n    return createCompileError(code, null, (process.env.NODE_ENV !== 'production') ? { messages: errorMessages, args } : undefined);\n}\nconst errorMessages = {\n    [I18nErrorCodes.UNEXPECTED_RETURN_TYPE]: 'Unexpected return type in composer',\n    [I18nErrorCodes.INVALID_ARGUMENT]: 'Invalid argument',\n    [I18nErrorCodes.MUST_BE_CALL_SETUP_TOP]: 'Must be called at the top of a `setup` function',\n    [I18nErrorCodes.NOT_INSTALLED]: 'Need to install with `app.use` function',\n    [I18nErrorCodes.UNEXPECTED_ERROR]: 'Unexpected error',\n    [I18nErrorCodes.REQUIRED_VALUE]: `Required in value: {0}`,\n    [I18nErrorCodes.INVALID_VALUE]: `Invalid value`,\n    [I18nErrorCodes.CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN]: `Cannot setup vue-devtools plugin`,\n    [I18nErrorCodes.NOT_INSTALLED_WITH_PROVIDE]: 'Need to install with `provide` function',\n    [I18nErrorCodes.NOT_COMPATIBLE_LEGACY_VUE_I18N]: 'Not compatible legacy VueI18n.',\n    [I18nErrorCodes.NOT_AVAILABLE_COMPOSITION_IN_LEGACY]: 'Not available Compostion API in Legacy API mode. Please make sure that the legacy API mode is working properly'\n};\n\nconst TranslateVNodeSymbol = \n/* #__PURE__*/ makeSymbol('__translateVNode');\nconst DatetimePartsSymbol = /* #__PURE__*/ makeSymbol('__datetimeParts');\nconst NumberPartsSymbol = /* #__PURE__*/ makeSymbol('__numberParts');\nconst EnableEmitter = /* #__PURE__*/ makeSymbol('__enableEmitter');\nconst DisableEmitter = /* #__PURE__*/ makeSymbol('__disableEmitter');\nconst SetPluralRulesSymbol = makeSymbol('__setPluralRules');\nmakeSymbol('__intlifyMeta');\nconst InejctWithOptionSymbol = \n/* #__PURE__*/ makeSymbol('__injectWithOption');\nconst DisposeSymbol = /* #__PURE__*/ makeSymbol('__dispose');\n\nconst I18nWarnCodes = {\n    FALLBACK_TO_ROOT: CORE_WARN_CODES_EXTEND_POINT, // 10\n    NOT_FOUND_PARENT_SCOPE: (CORE_WARN_CODES_EXTEND_POINT + 1),\n    IGNORE_OBJ_FLATTEN: (CORE_WARN_CODES_EXTEND_POINT + 2),\n    /**\n     * @deprecated will be removed at vue-i18n v12\n     */\n    DEPRECATE_LEGACY_MODE: (CORE_WARN_CODES_EXTEND_POINT + 3),\n    /**\n     * @deprecated will be removed at vue-i18n v12\n     */\n    DEPRECATE_TRANSLATE_CUSTOME_DIRECTIVE: (CORE_WARN_CODES_EXTEND_POINT +\n        4),\n    // duplicate `useI18n` calling\n    DUPLICATE_USE_I18N_CALLING: (CORE_WARN_CODES_EXTEND_POINT + 5)\n};\nconst warnMessages = {\n    [I18nWarnCodes.FALLBACK_TO_ROOT]: `Fall back to {type} '{key}' with root locale.`,\n    [I18nWarnCodes.NOT_FOUND_PARENT_SCOPE]: `Not found parent scope. use the global scope.`,\n    [I18nWarnCodes.IGNORE_OBJ_FLATTEN]: `Ignore object flatten: '{key}' key has an string value`,\n    /**\n     * @deprecated will be removed at vue-i18n v12\n     */\n    [I18nWarnCodes.DEPRECATE_LEGACY_MODE]: `Legacy API mode has been deprecated in v11. Use Composition API mode instead.\\nAbout how to use the Composition API mode, see https://vue-i18n.intlify.dev/guide/advanced/composition.html`,\n    /**\n     * @deprecated will be removed at vue-i18n v12\n     */\n    [I18nWarnCodes.DEPRECATE_TRANSLATE_CUSTOME_DIRECTIVE]: `'v-t' has been deprecated in v11. Use translate APIs ('t' or '$t') instead.`,\n    [I18nWarnCodes.DUPLICATE_USE_I18N_CALLING]: \"Duplicate `useI18n` calling by local scope. Please don't call it on local scope, due to it does not work properly in component.\"\n};\nfunction getWarnMessage(code, ...args) {\n    return format(warnMessages[code], ...args);\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Transform flat json in obj to normal json in obj\n */\nfunction handleFlatJson(obj) {\n    // check obj\n    if (!isObject(obj)) {\n        return obj;\n    }\n    if (isMessageAST(obj)) {\n        return obj;\n    }\n    for (const key in obj) {\n        // check key\n        if (!hasOwn(obj, key)) {\n            continue;\n        }\n        // handle for normal json\n        if (!key.includes('.')) {\n            // recursive process value if value is also a object\n            if (isObject(obj[key])) {\n                handleFlatJson(obj[key]);\n            }\n        }\n        // handle for flat json, transform to normal json\n        else {\n            // go to the last object\n            const subKeys = key.split('.');\n            const lastIndex = subKeys.length - 1;\n            let currentObj = obj;\n            let hasStringValue = false;\n            for (let i = 0; i < lastIndex; i++) {\n                if (subKeys[i] === '__proto__') {\n                    throw new Error(`unsafe key: ${subKeys[i]}`);\n                }\n                if (!(subKeys[i] in currentObj)) {\n                    currentObj[subKeys[i]] = create();\n                }\n                if (!isObject(currentObj[subKeys[i]])) {\n                    (process.env.NODE_ENV !== 'production') &&\n                        warn(getWarnMessage(I18nWarnCodes.IGNORE_OBJ_FLATTEN, {\n                            key: subKeys[i]\n                        }));\n                    hasStringValue = true;\n                    break;\n                }\n                currentObj = currentObj[subKeys[i]];\n            }\n            // update last object value, delete old property\n            if (!hasStringValue) {\n                if (!isMessageAST(currentObj)) {\n                    currentObj[subKeys[lastIndex]] = obj[key];\n                    delete obj[key];\n                }\n                else {\n                    /**\n                     * NOTE:\n                     * if the last object is a message AST and subKeys[lastIndex] has message AST prop key, ignore to copy and key deletion\n                     */\n                    if (!AST_NODE_PROPS_KEYS.includes(subKeys[lastIndex])) {\n                        delete obj[key];\n                    }\n                }\n            }\n            // recursive process value if value is also a object\n            if (!isMessageAST(currentObj)) {\n                const target = currentObj[subKeys[lastIndex]];\n                if (isObject(target)) {\n                    handleFlatJson(target);\n                }\n            }\n        }\n    }\n    return obj;\n}\nfunction getLocaleMessages(locale, options) {\n    const { messages, __i18n, messageResolver, flatJson } = options;\n    // prettier-ignore\n    const ret = (isPlainObject(messages)\n        ? messages\n        : isArray(__i18n)\n            ? create()\n            : { [locale]: create() });\n    // merge locale messages of i18n custom block\n    if (isArray(__i18n)) {\n        __i18n.forEach(custom => {\n            if ('locale' in custom && 'resource' in custom) {\n                const { locale, resource } = custom;\n                if (locale) {\n                    ret[locale] = ret[locale] || create();\n                    deepCopy(resource, ret[locale]);\n                }\n                else {\n                    deepCopy(resource, ret);\n                }\n            }\n            else {\n                isString(custom) && deepCopy(JSON.parse(custom), ret);\n            }\n        });\n    }\n    // handle messages for flat json\n    if (messageResolver == null && flatJson) {\n        for (const key in ret) {\n            if (hasOwn(ret, key)) {\n                handleFlatJson(ret[key]);\n            }\n        }\n    }\n    return ret;\n}\nfunction getComponentOptions(instance) {\n    return instance.type;\n}\nfunction adjustI18nResources(gl, options, componentOptions) {\n    // prettier-ignore\n    let messages = isObject(options.messages)\n        ? options.messages\n        : create();\n    if ('__i18nGlobal' in componentOptions) {\n        messages = getLocaleMessages(gl.locale.value, {\n            messages,\n            __i18n: componentOptions.__i18nGlobal\n        });\n    }\n    // merge locale messages\n    const locales = Object.keys(messages);\n    if (locales.length) {\n        locales.forEach(locale => {\n            gl.mergeLocaleMessage(locale, messages[locale]);\n        });\n    }\n    {\n        // merge datetime formats\n        if (isObject(options.datetimeFormats)) {\n            const locales = Object.keys(options.datetimeFormats);\n            if (locales.length) {\n                locales.forEach(locale => {\n                    gl.mergeDateTimeFormat(locale, options.datetimeFormats[locale]);\n                });\n            }\n        }\n        // merge number formats\n        if (isObject(options.numberFormats)) {\n            const locales = Object.keys(options.numberFormats);\n            if (locales.length) {\n                locales.forEach(locale => {\n                    gl.mergeNumberFormat(locale, options.numberFormats[locale]);\n                });\n            }\n        }\n    }\n}\nfunction createTextNode(key) {\n    return createVNode(Text, null, key, 0);\n}\nfunction getCurrentInstance() {\n    // NOTE(kazupon): avoid bundler warning\n    const key = 'currentInstance';\n    if (key in Vue) {\n        return Vue[key];\n    }\n    else {\n        return Vue.getCurrentInstance();\n    }\n}\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n// extend VNode interface\nconst DEVTOOLS_META = '__INTLIFY_META__';\nconst NOOP_RETURN_ARRAY = () => [];\nconst NOOP_RETURN_FALSE = () => false;\nlet composerID = 0;\nfunction defineCoreMissingHandler(missing) {\n    return ((ctx, locale, key, type) => {\n        return missing(locale, key, getCurrentInstance() || undefined, type);\n    });\n}\n// for Intlify DevTools\n/* #__NO_SIDE_EFFECTS__ */\nconst getMetaInfo = () => {\n    const instance = getCurrentInstance();\n    let meta = null;\n    return instance && (meta = getComponentOptions(instance)[DEVTOOLS_META])\n        ? { [DEVTOOLS_META]: meta }\n        : null;\n};\n/**\n * Create composer interface factory\n *\n * @internal\n */\nfunction createComposer(options = {}) {\n    const { __root, __injectWithOption } = options;\n    const _isGlobal = __root === undefined;\n    const flatJson = options.flatJson;\n    const _ref = inBrowser ? ref : shallowRef;\n    let _inheritLocale = isBoolean(options.inheritLocale)\n        ? options.inheritLocale\n        : true;\n    const _locale = _ref(\n    // prettier-ignore\n    __root && _inheritLocale\n        ? __root.locale.value\n        : isString(options.locale)\n            ? options.locale\n            : DEFAULT_LOCALE);\n    const _fallbackLocale = _ref(\n    // prettier-ignore\n    __root && _inheritLocale\n        ? __root.fallbackLocale.value\n        : isString(options.fallbackLocale) ||\n            isArray(options.fallbackLocale) ||\n            isPlainObject(options.fallbackLocale) ||\n            options.fallbackLocale === false\n            ? options.fallbackLocale\n            : _locale.value);\n    const _messages = _ref(getLocaleMessages(_locale.value, options));\n    // prettier-ignore\n    const _datetimeFormats = _ref(isPlainObject(options.datetimeFormats)\n            ? options.datetimeFormats\n            : { [_locale.value]: {} })\n        ;\n    // prettier-ignore\n    const _numberFormats = _ref(isPlainObject(options.numberFormats)\n            ? options.numberFormats\n            : { [_locale.value]: {} })\n        ;\n    // warning suppress options\n    // prettier-ignore\n    let _missingWarn = __root\n        ? __root.missingWarn\n        : isBoolean(options.missingWarn) || isRegExp(options.missingWarn)\n            ? options.missingWarn\n            : true;\n    // prettier-ignore\n    let _fallbackWarn = __root\n        ? __root.fallbackWarn\n        : isBoolean(options.fallbackWarn) || isRegExp(options.fallbackWarn)\n            ? options.fallbackWarn\n            : true;\n    // prettier-ignore\n    let _fallbackRoot = __root\n        ? __root.fallbackRoot\n        : isBoolean(options.fallbackRoot)\n            ? options.fallbackRoot\n            : true;\n    // configure fall back to root\n    let _fallbackFormat = !!options.fallbackFormat;\n    // runtime missing\n    let _missing = isFunction(options.missing) ? options.missing : null;\n    let _runtimeMissing = isFunction(options.missing)\n        ? defineCoreMissingHandler(options.missing)\n        : null;\n    // postTranslation handler\n    let _postTranslation = isFunction(options.postTranslation)\n        ? options.postTranslation\n        : null;\n    // prettier-ignore\n    let _warnHtmlMessage = __root\n        ? __root.warnHtmlMessage\n        : isBoolean(options.warnHtmlMessage)\n            ? options.warnHtmlMessage\n            : true;\n    let _escapeParameter = !!options.escapeParameter;\n    // custom linked modifiers\n    // prettier-ignore\n    const _modifiers = __root\n        ? __root.modifiers\n        : isPlainObject(options.modifiers)\n            ? options.modifiers\n            : {};\n    // pluralRules\n    let _pluralRules = options.pluralRules || (__root && __root.pluralRules);\n    // runtime context\n    // eslint-disable-next-line prefer-const\n    let _context;\n    const getCoreContext = () => {\n        _isGlobal && setFallbackContext(null);\n        const ctxOptions = {\n            version: VERSION,\n            locale: _locale.value,\n            fallbackLocale: _fallbackLocale.value,\n            messages: _messages.value,\n            modifiers: _modifiers,\n            pluralRules: _pluralRules,\n            missing: _runtimeMissing === null ? undefined : _runtimeMissing,\n            missingWarn: _missingWarn,\n            fallbackWarn: _fallbackWarn,\n            fallbackFormat: _fallbackFormat,\n            unresolving: true,\n            postTranslation: _postTranslation === null ? undefined : _postTranslation,\n            warnHtmlMessage: _warnHtmlMessage,\n            escapeParameter: _escapeParameter,\n            messageResolver: options.messageResolver,\n            messageCompiler: options.messageCompiler,\n            __meta: { framework: 'vue' }\n        };\n        {\n            ctxOptions.datetimeFormats = _datetimeFormats.value;\n            ctxOptions.numberFormats = _numberFormats.value;\n            ctxOptions.__datetimeFormatters = isPlainObject(_context)\n                ? _context.__datetimeFormatters\n                : undefined;\n            ctxOptions.__numberFormatters = isPlainObject(_context)\n                ? _context.__numberFormatters\n                : undefined;\n        }\n        if ((process.env.NODE_ENV !== 'production')) {\n            ctxOptions.__v_emitter = isPlainObject(_context)\n                ? _context.__v_emitter\n                : undefined;\n        }\n        const ctx = createCoreContext(ctxOptions);\n        _isGlobal && setFallbackContext(ctx);\n        return ctx;\n    };\n    _context = getCoreContext();\n    updateFallbackLocale(_context, _locale.value, _fallbackLocale.value);\n    // track reactivity\n    function trackReactivityValues() {\n        return [\n                _locale.value,\n                _fallbackLocale.value,\n                _messages.value,\n                _datetimeFormats.value,\n                _numberFormats.value\n            ]\n            ;\n    }\n    // locale\n    const locale = computed({\n        get: () => _locale.value,\n        set: val => {\n            _context.locale = val;\n            _locale.value = val;\n        }\n    });\n    // fallbackLocale\n    const fallbackLocale = computed({\n        get: () => _fallbackLocale.value,\n        set: val => {\n            _context.fallbackLocale = val;\n            _fallbackLocale.value = val;\n            updateFallbackLocale(_context, _locale.value, val);\n        }\n    });\n    // messages\n    const messages = computed(() => _messages.value);\n    // datetimeFormats\n    const datetimeFormats = /* #__PURE__*/ computed(() => _datetimeFormats.value);\n    // numberFormats\n    const numberFormats = /* #__PURE__*/ computed(() => _numberFormats.value);\n    // getPostTranslationHandler\n    function getPostTranslationHandler() {\n        return isFunction(_postTranslation) ? _postTranslation : null;\n    }\n    // setPostTranslationHandler\n    function setPostTranslationHandler(handler) {\n        _postTranslation = handler;\n        _context.postTranslation = handler;\n    }\n    // getMissingHandler\n    function getMissingHandler() {\n        return _missing;\n    }\n    // setMissingHandler\n    function setMissingHandler(handler) {\n        if (handler !== null) {\n            _runtimeMissing = defineCoreMissingHandler(handler);\n        }\n        _missing = handler;\n        _context.missing = _runtimeMissing;\n    }\n    function isResolvedTranslateMessage(type, arg) {\n        return type !== 'translate' || !arg.resolvedMessage;\n    }\n    const wrapWithDeps = (fn, argumentParser, warnType, fallbackSuccess, fallbackFail, successCondition) => {\n        trackReactivityValues(); // track reactive dependency\n        // NOTE: experimental !!\n        let ret;\n        try {\n            if ((process.env.NODE_ENV !== 'production') || __INTLIFY_PROD_DEVTOOLS__) {\n                setAdditionalMeta(getMetaInfo());\n            }\n            if (!_isGlobal) {\n                _context.fallbackContext = __root\n                    ? getFallbackContext()\n                    : undefined;\n            }\n            ret = fn(_context);\n        }\n        finally {\n            if ((process.env.NODE_ENV !== 'production') || __INTLIFY_PROD_DEVTOOLS__) {\n                setAdditionalMeta(null);\n            }\n            if (!_isGlobal) {\n                _context.fallbackContext = undefined;\n            }\n        }\n        if ((warnType !== 'translate exists' && // for not `te` (e.g `t`)\n            isNumber(ret) &&\n            ret === NOT_REOSLVED) ||\n            (warnType === 'translate exists' && !ret) // for `te`\n        ) {\n            const [key, arg2] = argumentParser();\n            if ((process.env.NODE_ENV !== 'production') &&\n                __root &&\n                isString(key) &&\n                isResolvedTranslateMessage(warnType, arg2)) {\n                if (_fallbackRoot &&\n                    (isTranslateFallbackWarn(_fallbackWarn, key) ||\n                        isTranslateMissingWarn(_missingWarn, key))) {\n                    warn(getWarnMessage(I18nWarnCodes.FALLBACK_TO_ROOT, {\n                        key,\n                        type: warnType\n                    }));\n                }\n                // for vue-devtools timeline event\n                if ((process.env.NODE_ENV !== 'production')) {\n                    const { __v_emitter: emitter } = _context;\n                    if (emitter && _fallbackRoot) {\n                        emitter.emit('fallback', {\n                            type: warnType,\n                            key,\n                            to: 'global',\n                            groupId: `${warnType}:${key}`\n                        });\n                    }\n                }\n            }\n            return __root && _fallbackRoot\n                ? fallbackSuccess(__root)\n                : fallbackFail(key);\n        }\n        else if (successCondition(ret)) {\n            return ret;\n        }\n        else {\n            /* istanbul ignore next */\n            throw createI18nError(I18nErrorCodes.UNEXPECTED_RETURN_TYPE);\n        }\n    };\n    // t\n    function t(...args) {\n        return wrapWithDeps(context => Reflect.apply(translate, null, [context, ...args]), () => parseTranslateArgs(...args), 'translate', root => Reflect.apply(root.t, root, [...args]), key => key, val => isString(val));\n    }\n    // rt\n    function rt(...args) {\n        const [arg1, arg2, arg3] = args;\n        if (arg3 && !isObject(arg3)) {\n            throw createI18nError(I18nErrorCodes.INVALID_ARGUMENT);\n        }\n        return t(...[arg1, arg2, assign({ resolvedMessage: true }, arg3 || {})]);\n    }\n    // d\n    function d(...args) {\n        return wrapWithDeps(context => Reflect.apply(datetime, null, [context, ...args]), () => parseDateTimeArgs(...args), 'datetime format', root => Reflect.apply(root.d, root, [...args]), () => MISSING_RESOLVE_VALUE, val => isString(val) || isArray(val));\n    }\n    // n\n    function n(...args) {\n        return wrapWithDeps(context => Reflect.apply(number, null, [context, ...args]), () => parseNumberArgs(...args), 'number format', root => Reflect.apply(root.n, root, [...args]), () => MISSING_RESOLVE_VALUE, val => isString(val) || isArray(val));\n    }\n    // for custom processor\n    function normalize(values) {\n        return values.map(val => isString(val) || isNumber(val) || isBoolean(val)\n            ? createTextNode(String(val))\n            : val);\n    }\n    const interpolate = (val) => val;\n    const processor = {\n        normalize,\n        interpolate,\n        type: 'vnode'\n    };\n    // translateVNode, using for `i18n-t` component\n    function translateVNode(...args) {\n        return wrapWithDeps(context => {\n            let ret;\n            const _context = context;\n            try {\n                _context.processor = processor;\n                ret = Reflect.apply(translate, null, [_context, ...args]);\n            }\n            finally {\n                _context.processor = null;\n            }\n            return ret;\n        }, () => parseTranslateArgs(...args), 'translate', root => root[TranslateVNodeSymbol](...args), key => [createTextNode(key)], val => isArray(val));\n    }\n    // numberParts, using for `i18n-n` component\n    function numberParts(...args) {\n        return wrapWithDeps(context => Reflect.apply(number, null, [context, ...args]), () => parseNumberArgs(...args), 'number format', root => root[NumberPartsSymbol](...args), NOOP_RETURN_ARRAY, val => isString(val) || isArray(val));\n    }\n    // datetimeParts, using for `i18n-d` component\n    function datetimeParts(...args) {\n        return wrapWithDeps(context => Reflect.apply(datetime, null, [context, ...args]), () => parseDateTimeArgs(...args), 'datetime format', root => root[DatetimePartsSymbol](...args), NOOP_RETURN_ARRAY, val => isString(val) || isArray(val));\n    }\n    function setPluralRules(rules) {\n        _pluralRules = rules;\n        _context.pluralRules = _pluralRules;\n    }\n    // te\n    function te(key, locale) {\n        return wrapWithDeps(() => {\n            if (!key) {\n                return false;\n            }\n            const targetLocale = isString(locale) ? locale : _locale.value;\n            // When locale is explicitly specified, check only that locale (no fallback chain)\n            // When locale is not specified, check the fallback locale chain\n            const locales = isString(locale)\n                ? [targetLocale]\n                : fallbackWithLocaleChain(_context, _fallbackLocale.value, targetLocale);\n            for (let i = 0; i < locales.length; i++) {\n                const message = getLocaleMessage(locales[i]);\n                let resolved = _context.messageResolver(message, key);\n                // if null, resolve with object key path (for flat keys containing dots)\n                if (resolved === null) {\n                    resolved = message[key];\n                }\n                if (isMessageAST(resolved) ||\n                    isMessageFunction(resolved) ||\n                    isString(resolved)) {\n                    return true;\n                }\n            }\n            return false;\n        }, () => [key], 'translate exists', root => {\n            return Reflect.apply(root.te, root, [key, locale]);\n        }, NOOP_RETURN_FALSE, val => isBoolean(val));\n    }\n    function resolveMessages(key) {\n        let messages = null;\n        const locales = fallbackWithLocaleChain(_context, _fallbackLocale.value, _locale.value);\n        for (let i = 0; i < locales.length; i++) {\n            const targetLocaleMessages = _messages.value[locales[i]] || {};\n            const messageValue = _context.messageResolver(targetLocaleMessages, key);\n            if (messageValue != null) {\n                messages = messageValue;\n                break;\n            }\n        }\n        return messages;\n    }\n    // tm\n    function tm(key) {\n        const messages = resolveMessages(key);\n        // prettier-ignore\n        return messages != null\n            ? messages\n            : __root\n                ? __root.tm(key) || {}\n                : {};\n    }\n    // getLocaleMessage\n    function getLocaleMessage(locale) {\n        return (_messages.value[locale] || {});\n    }\n    // setLocaleMessage\n    function setLocaleMessage(locale, message) {\n        if (flatJson) {\n            const _message = { [locale]: message };\n            for (const key in _message) {\n                if (hasOwn(_message, key)) {\n                    handleFlatJson(_message[key]);\n                }\n            }\n            message = _message[locale];\n        }\n        _messages.value[locale] = message;\n        _context.messages = _messages.value;\n    }\n    // mergeLocaleMessage\n    function mergeLocaleMessage(locale, message) {\n        _messages.value[locale] = _messages.value[locale] || {};\n        const _message = { [locale]: message };\n        if (flatJson) {\n            for (const key in _message) {\n                if (hasOwn(_message, key)) {\n                    handleFlatJson(_message[key]);\n                }\n            }\n        }\n        message = _message[locale];\n        deepCopy(message, _messages.value[locale]);\n        _context.messages = _messages.value;\n    }\n    // getDateTimeFormat\n    function getDateTimeFormat(locale) {\n        return _datetimeFormats.value[locale] || {};\n    }\n    // setDateTimeFormat\n    function setDateTimeFormat(locale, format) {\n        _datetimeFormats.value[locale] = format;\n        _context.datetimeFormats = _datetimeFormats.value;\n        clearDateTimeFormat(_context, locale, format);\n    }\n    // mergeDateTimeFormat\n    function mergeDateTimeFormat(locale, format) {\n        _datetimeFormats.value[locale] = assign(_datetimeFormats.value[locale] || {}, format);\n        _context.datetimeFormats = _datetimeFormats.value;\n        clearDateTimeFormat(_context, locale, format);\n    }\n    // getNumberFormat\n    function getNumberFormat(locale) {\n        return _numberFormats.value[locale] || {};\n    }\n    // setNumberFormat\n    function setNumberFormat(locale, format) {\n        _numberFormats.value[locale] = format;\n        _context.numberFormats = _numberFormats.value;\n        clearNumberFormat(_context, locale, format);\n    }\n    // mergeNumberFormat\n    function mergeNumberFormat(locale, format) {\n        _numberFormats.value[locale] = assign(_numberFormats.value[locale] || {}, format);\n        _context.numberFormats = _numberFormats.value;\n        clearNumberFormat(_context, locale, format);\n    }\n    // for debug\n    composerID++;\n    // watch root locale & fallbackLocale\n    if (__root && inBrowser) {\n        watch(__root.locale, (val) => {\n            if (_inheritLocale) {\n                _locale.value = val;\n                _context.locale = val;\n                updateFallbackLocale(_context, _locale.value, _fallbackLocale.value);\n            }\n        });\n        watch(__root.fallbackLocale, (val) => {\n            if (_inheritLocale) {\n                _fallbackLocale.value = val;\n                _context.fallbackLocale = val;\n                updateFallbackLocale(_context, _locale.value, _fallbackLocale.value);\n            }\n        });\n    }\n    // define basic composition API!\n    const composer = {\n        id: composerID,\n        locale,\n        fallbackLocale,\n        get inheritLocale() {\n            return _inheritLocale;\n        },\n        set inheritLocale(val) {\n            _inheritLocale = val;\n            if (val && __root) {\n                _locale.value = __root.locale.value;\n                _fallbackLocale.value = __root.fallbackLocale.value;\n                updateFallbackLocale(_context, _locale.value, _fallbackLocale.value);\n            }\n        },\n        get availableLocales() {\n            return Object.keys(_messages.value).sort();\n        },\n        messages,\n        get modifiers() {\n            return _modifiers;\n        },\n        get pluralRules() {\n            return _pluralRules || {};\n        },\n        get isGlobal() {\n            return _isGlobal;\n        },\n        get missingWarn() {\n            return _missingWarn;\n        },\n        set missingWarn(val) {\n            _missingWarn = val;\n            _context.missingWarn = _missingWarn;\n        },\n        get fallbackWarn() {\n            return _fallbackWarn;\n        },\n        set fallbackWarn(val) {\n            _fallbackWarn = val;\n            _context.fallbackWarn = _fallbackWarn;\n        },\n        get fallbackRoot() {\n            return _fallbackRoot;\n        },\n        set fallbackRoot(val) {\n            _fallbackRoot = val;\n        },\n        get fallbackFormat() {\n            return _fallbackFormat;\n        },\n        set fallbackFormat(val) {\n            _fallbackFormat = val;\n            _context.fallbackFormat = _fallbackFormat;\n        },\n        get warnHtmlMessage() {\n            return _warnHtmlMessage;\n        },\n        set warnHtmlMessage(val) {\n            _warnHtmlMessage = val;\n            _context.warnHtmlMessage = val;\n        },\n        get escapeParameter() {\n            return _escapeParameter;\n        },\n        set escapeParameter(val) {\n            _escapeParameter = val;\n            _context.escapeParameter = val;\n        },\n        t,\n        getLocaleMessage,\n        setLocaleMessage,\n        mergeLocaleMessage,\n        getPostTranslationHandler,\n        setPostTranslationHandler,\n        getMissingHandler,\n        setMissingHandler,\n        [SetPluralRulesSymbol]: setPluralRules\n    };\n    {\n        composer.datetimeFormats = datetimeFormats;\n        composer.numberFormats = numberFormats;\n        composer.rt = rt;\n        composer.te = te;\n        composer.tm = tm;\n        composer.d = d;\n        composer.n = n;\n        composer.getDateTimeFormat = getDateTimeFormat;\n        composer.setDateTimeFormat = setDateTimeFormat;\n        composer.mergeDateTimeFormat = mergeDateTimeFormat;\n        composer.getNumberFormat = getNumberFormat;\n        composer.setNumberFormat = setNumberFormat;\n        composer.mergeNumberFormat = mergeNumberFormat;\n        composer[InejctWithOptionSymbol] = __injectWithOption;\n        composer[TranslateVNodeSymbol] = translateVNode;\n        composer[DatetimePartsSymbol] = datetimeParts;\n        composer[NumberPartsSymbol] = numberParts;\n    }\n    // for vue-devtools timeline event\n    if ((process.env.NODE_ENV !== 'production')) {\n        composer[EnableEmitter] = (emitter) => {\n            _context.__v_emitter = emitter;\n        };\n        composer[DisableEmitter] = () => {\n            _context.__v_emitter = undefined;\n        };\n    }\n    return composer;\n}\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\nconst VUE_I18N_COMPONENT_TYPES = 'vue-i18n: composer properties';\nconst VueDevToolsLabels = {\n    'vue-devtools-plugin-vue-i18n': 'Vue I18n DevTools',\n    'vue-i18n-resource-inspector': 'Vue I18n DevTools',\n    'vue-i18n-timeline': 'Vue I18n'\n};\nconst VueDevToolsPlaceholders = {\n    'vue-i18n-resource-inspector': 'Search for scopes ...'\n};\nconst VueDevToolsTimelineColors = {\n    'vue-i18n-timeline': 0xffcd19\n};\nlet devtoolsApi;\nasync function enableDevTools(app, i18n) {\n    return new Promise((resolve, reject) => {\n        try {\n            setupDevtoolsPlugin({\n                id: 'vue-devtools-plugin-vue-i18n',\n                label: VueDevToolsLabels['vue-devtools-plugin-vue-i18n'],\n                packageName: 'vue-i18n',\n                homepage: 'https://vue-i18n.intlify.dev',\n                logo: 'https://vue-i18n.intlify.dev/vue-i18n-devtools-logo.png',\n                componentStateTypes: [VUE_I18N_COMPONENT_TYPES],\n                app: app // eslint-disable-line @typescript-eslint/no-explicit-any\n            }, api => {\n                devtoolsApi = api;\n                api.on.visitComponentTree(({ componentInstance, treeNode }) => {\n                    updateComponentTreeTags(componentInstance, treeNode, i18n);\n                });\n                api.on.inspectComponent(({ componentInstance, instanceData }) => {\n                    if (componentInstance.__VUE_I18N__ && instanceData) {\n                        if (i18n.mode === 'legacy') {\n                            // ignore global scope on legacy mode\n                            if (componentInstance.__VUE_I18N__ !==\n                                i18n.global.__composer) {\n                                inspectComposer(instanceData, componentInstance.__VUE_I18N__);\n                            }\n                        }\n                        else {\n                            inspectComposer(instanceData, componentInstance.__VUE_I18N__);\n                        }\n                    }\n                });\n                api.addInspector({\n                    id: 'vue-i18n-resource-inspector',\n                    label: VueDevToolsLabels['vue-i18n-resource-inspector'],\n                    icon: 'language',\n                    treeFilterPlaceholder: VueDevToolsPlaceholders['vue-i18n-resource-inspector']\n                });\n                api.on.getInspectorTree(payload => {\n                    if (payload.app === app &&\n                        payload.inspectorId === 'vue-i18n-resource-inspector') {\n                        registerScope(payload, i18n);\n                    }\n                });\n                const roots = new Map();\n                api.on.getInspectorState(async (payload) => {\n                    if (payload.app === app &&\n                        payload.inspectorId === 'vue-i18n-resource-inspector') {\n                        api.unhighlightElement();\n                        inspectScope(payload, i18n);\n                        if (payload.nodeId === 'global') {\n                            if (!roots.has(payload.app)) {\n                                const [root] = await api.getComponentInstances(payload.app);\n                                roots.set(payload.app, root);\n                            }\n                            api.highlightElement(roots.get(payload.app));\n                        }\n                        else {\n                            const instance = getComponentInstance(payload.nodeId, i18n);\n                            instance && api.highlightElement(instance);\n                        }\n                    }\n                });\n                api.on.editInspectorState(payload => {\n                    if (payload.app === app &&\n                        payload.inspectorId === 'vue-i18n-resource-inspector') {\n                        editScope(payload, i18n);\n                    }\n                });\n                api.addTimelineLayer({\n                    id: 'vue-i18n-timeline',\n                    label: VueDevToolsLabels['vue-i18n-timeline'],\n                    color: VueDevToolsTimelineColors['vue-i18n-timeline']\n                });\n                resolve(true);\n            });\n        }\n        catch (e) {\n            console.error(e);\n            // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n            reject(false);\n        }\n    });\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getI18nScopeLable(instance) {\n    return (instance.type.name ||\n        instance.type.displayName ||\n        instance.type.__file ||\n        'Anonymous');\n}\nfunction updateComponentTreeTags(instance, // eslint-disable-line @typescript-eslint/no-explicit-any\ntreeNode, i18n) {\n    // prettier-ignore\n    const global = i18n.mode === 'composition'\n        ? i18n.global\n        : i18n.global.__composer;\n    if (instance && instance.__VUE_I18N__) {\n        // add custom tags local scope only\n        if (instance.__VUE_I18N__ !== global) {\n            const tag = {\n                label: `i18n (${getI18nScopeLable(instance)} Scope)`,\n                textColor: 0x000000,\n                backgroundColor: 0xffcd19\n            };\n            treeNode.tags.push(tag);\n        }\n    }\n}\nfunction inspectComposer(instanceData, composer) {\n    const type = VUE_I18N_COMPONENT_TYPES;\n    instanceData.state.push({\n        type,\n        key: 'locale',\n        editable: true,\n        value: composer.locale.value\n    });\n    instanceData.state.push({\n        type,\n        key: 'availableLocales',\n        editable: false,\n        value: composer.availableLocales\n    });\n    instanceData.state.push({\n        type,\n        key: 'fallbackLocale',\n        editable: true,\n        value: composer.fallbackLocale.value\n    });\n    instanceData.state.push({\n        type,\n        key: 'inheritLocale',\n        editable: true,\n        value: composer.inheritLocale\n    });\n    instanceData.state.push({\n        type,\n        key: 'messages',\n        editable: false,\n        value: getLocaleMessageValue(composer.messages.value)\n    });\n    {\n        instanceData.state.push({\n            type,\n            key: 'datetimeFormats',\n            editable: false,\n            value: composer.datetimeFormats.value\n        });\n        instanceData.state.push({\n            type,\n            key: 'numberFormats',\n            editable: false,\n            value: composer.numberFormats.value\n        });\n    }\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getLocaleMessageValue(messages) {\n    const value = {};\n    Object.keys(messages).forEach((key) => {\n        const v = messages[key];\n        if (isFunction(v) && 'source' in v) {\n            value[key] = getMessageFunctionDetails(v);\n        }\n        else if (isMessageAST(v) && v.loc && v.loc.source) {\n            value[key] = v.loc.source;\n        }\n        else if (isObject(v)) {\n            value[key] = getLocaleMessageValue(v);\n        }\n        else {\n            value[key] = v;\n        }\n    });\n    return value;\n}\nconst ESC = {\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    '&': '&amp;'\n};\nfunction escape(s) {\n    return s.replace(/[<>\"&]/g, escapeChar);\n}\nfunction escapeChar(a) {\n    return ESC[a] || a;\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getMessageFunctionDetails(func) {\n    const argString = func.source ? `(\"${escape(func.source)}\")` : `(?)`;\n    return {\n        _custom: {\n            type: 'function',\n            display: `<span>ƒ</span> ${argString}`\n        }\n    };\n}\nfunction registerScope(payload, i18n) {\n    payload.rootNodes.push({\n        id: 'global',\n        label: 'Global Scope'\n    });\n    // prettier-ignore\n    const global = i18n.mode === 'composition'\n        ? i18n.global\n        : i18n.global.__composer;\n    for (const [keyInstance, instance] of i18n.__instances) {\n        // prettier-ignore\n        const composer = i18n.mode === 'composition'\n            ? instance\n            : instance.__composer;\n        if (global === composer) {\n            continue;\n        }\n        payload.rootNodes.push({\n            id: composer.id.toString(),\n            label: `${getI18nScopeLable(keyInstance)} Scope`\n        });\n    }\n}\nfunction getComponentInstance(nodeId, i18n) {\n    let instance = null;\n    if (nodeId !== 'global') {\n        for (const [component, composer] of i18n.__instances.entries()) {\n            if (composer.id.toString() === nodeId) {\n                instance = component;\n                break;\n            }\n        }\n    }\n    return instance;\n}\nfunction getComposer$2(nodeId, i18n) {\n    if (nodeId === 'global') {\n        return i18n.mode === 'composition'\n            ? i18n.global\n            : i18n.global.__composer;\n    }\n    else {\n        const instance = Array.from(i18n.__instances.values()).find(item => item.id.toString() === nodeId);\n        if (instance) {\n            return i18n.mode === 'composition'\n                ? instance\n                : instance.__composer;\n        }\n        else {\n            return null;\n        }\n    }\n}\nfunction inspectScope(payload, i18n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n) {\n    const composer = getComposer$2(payload.nodeId, i18n);\n    if (composer) {\n        // TODO:\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        payload.state = makeScopeInspectState(composer);\n    }\n    return null;\n}\nfunction makeScopeInspectState(composer) {\n    const state = {};\n    const localeType = 'Locale related info';\n    const localeStates = [\n        {\n            type: localeType,\n            key: 'locale',\n            editable: true,\n            value: composer.locale.value\n        },\n        {\n            type: localeType,\n            key: 'fallbackLocale',\n            editable: true,\n            value: composer.fallbackLocale.value\n        },\n        {\n            type: localeType,\n            key: 'availableLocales',\n            editable: false,\n            value: composer.availableLocales\n        },\n        {\n            type: localeType,\n            key: 'inheritLocale',\n            editable: true,\n            value: composer.inheritLocale\n        }\n    ];\n    state[localeType] = localeStates;\n    const localeMessagesType = 'Locale messages info';\n    const localeMessagesStates = [\n        {\n            type: localeMessagesType,\n            key: 'messages',\n            editable: false,\n            value: getLocaleMessageValue(composer.messages.value)\n        }\n    ];\n    state[localeMessagesType] = localeMessagesStates;\n    {\n        const datetimeFormatsType = 'Datetime formats info';\n        const datetimeFormatsStates = [\n            {\n                type: datetimeFormatsType,\n                key: 'datetimeFormats',\n                editable: false,\n                value: composer.datetimeFormats.value\n            }\n        ];\n        state[datetimeFormatsType] = datetimeFormatsStates;\n        const numberFormatsType = 'Datetime formats info';\n        const numberFormatsStates = [\n            {\n                type: numberFormatsType,\n                key: 'numberFormats',\n                editable: false,\n                value: composer.numberFormats.value\n            }\n        ];\n        state[numberFormatsType] = numberFormatsStates;\n    }\n    return state;\n}\nfunction addTimelineEvent(event, payload) {\n    if (devtoolsApi) {\n        let groupId;\n        if (payload && 'groupId' in payload) {\n            groupId = payload.groupId;\n            delete payload.groupId;\n        }\n        devtoolsApi.addTimelineEvent({\n            layerId: 'vue-i18n-timeline',\n            event: {\n                title: event,\n                groupId,\n                time: Date.now(),\n                meta: {},\n                data: payload || {},\n                logType: event === 'compile-error'\n                    ? 'error'\n                    : event === 'fallback' || event === 'missing'\n                        ? 'warning'\n                        : 'default'\n            }\n        });\n    }\n}\nfunction editScope(payload, i18n) {\n    const composer = getComposer$2(payload.nodeId, i18n);\n    if (composer) {\n        const [field] = payload.path;\n        if (field === 'locale' && isString(payload.state.value)) {\n            composer.locale.value = payload.state.value;\n        }\n        else if (field === 'fallbackLocale' &&\n            (isString(payload.state.value) ||\n                isArray(payload.state.value) ||\n                isObject(payload.state.value))) {\n            composer.fallbackLocale.value = payload.state.value;\n        }\n        else if (field === 'inheritLocale' && isBoolean(payload.state.value)) {\n            composer.inheritLocale = payload.state.value;\n        }\n    }\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Convert to I18n Composer Options from VueI18n Options\n *\n * @internal\n */\nfunction convertComposerOptions(options) {\n    const locale = isString(options.locale) ? options.locale : DEFAULT_LOCALE;\n    const fallbackLocale = isString(options.fallbackLocale) ||\n        isArray(options.fallbackLocale) ||\n        isPlainObject(options.fallbackLocale) ||\n        options.fallbackLocale === false\n        ? options.fallbackLocale\n        : locale;\n    const missing = isFunction(options.missing) ? options.missing : undefined;\n    const missingWarn = isBoolean(options.silentTranslationWarn) ||\n        isRegExp(options.silentTranslationWarn)\n        ? !options.silentTranslationWarn\n        : true;\n    const fallbackWarn = isBoolean(options.silentFallbackWarn) ||\n        isRegExp(options.silentFallbackWarn)\n        ? !options.silentFallbackWarn\n        : true;\n    const fallbackRoot = isBoolean(options.fallbackRoot)\n        ? options.fallbackRoot\n        : true;\n    const fallbackFormat = !!options.formatFallbackMessages;\n    const modifiers = isPlainObject(options.modifiers) ? options.modifiers : {};\n    const pluralizationRules = options.pluralizationRules;\n    const postTranslation = isFunction(options.postTranslation)\n        ? options.postTranslation\n        : undefined;\n    const warnHtmlMessage = isString(options.warnHtmlInMessage)\n        ? options.warnHtmlInMessage !== 'off'\n        : true;\n    const escapeParameter = !!options.escapeParameterHtml;\n    const inheritLocale = isBoolean(options.sync) ? options.sync : true;\n    let messages = options.messages;\n    if (isPlainObject(options.sharedMessages)) {\n        const sharedMessages = options.sharedMessages;\n        const locales = Object.keys(sharedMessages);\n        messages = locales.reduce((messages, locale) => {\n            const message = messages[locale] || (messages[locale] = {});\n            assign(message, sharedMessages[locale]);\n            return messages;\n        }, (messages || {}));\n    }\n    const { __i18n, __root, __injectWithOption } = options;\n    const datetimeFormats = options.datetimeFormats;\n    const numberFormats = options.numberFormats;\n    const flatJson = options.flatJson;\n    return {\n        locale,\n        fallbackLocale,\n        messages,\n        flatJson,\n        datetimeFormats,\n        numberFormats,\n        missing,\n        missingWarn,\n        fallbackWarn,\n        fallbackRoot,\n        fallbackFormat,\n        modifiers,\n        pluralRules: pluralizationRules,\n        postTranslation,\n        warnHtmlMessage,\n        escapeParameter,\n        messageResolver: options.messageResolver,\n        inheritLocale,\n        __i18n,\n        __root,\n        __injectWithOption\n    };\n}\n/**\n * create VueI18n interface factory\n *\n * @internal\n *\n * @deprecated will be removed at vue-i18n v12\n */\nfunction createVueI18n(options = {}) {\n    const composer = createComposer(convertComposerOptions(options));\n    const { __extender } = options;\n    // defines VueI18n\n    const vueI18n = {\n        // id\n        id: composer.id,\n        // locale\n        get locale() {\n            return composer.locale.value;\n        },\n        set locale(val) {\n            composer.locale.value = val;\n        },\n        // fallbackLocale\n        get fallbackLocale() {\n            return composer.fallbackLocale.value;\n        },\n        set fallbackLocale(val) {\n            composer.fallbackLocale.value = val;\n        },\n        // messages\n        get messages() {\n            return composer.messages.value;\n        },\n        // datetimeFormats\n        get datetimeFormats() {\n            return composer.datetimeFormats.value;\n        },\n        // numberFormats\n        get numberFormats() {\n            return composer.numberFormats.value;\n        },\n        // availableLocales\n        get availableLocales() {\n            return composer.availableLocales;\n        },\n        // missing\n        get missing() {\n            return composer.getMissingHandler();\n        },\n        set missing(handler) {\n            composer.setMissingHandler(handler);\n        },\n        // silentTranslationWarn\n        get silentTranslationWarn() {\n            return isBoolean(composer.missingWarn)\n                ? !composer.missingWarn\n                : composer.missingWarn;\n        },\n        set silentTranslationWarn(val) {\n            composer.missingWarn = isBoolean(val) ? !val : val;\n        },\n        // silentFallbackWarn\n        get silentFallbackWarn() {\n            return isBoolean(composer.fallbackWarn)\n                ? !composer.fallbackWarn\n                : composer.fallbackWarn;\n        },\n        set silentFallbackWarn(val) {\n            composer.fallbackWarn = isBoolean(val) ? !val : val;\n        },\n        // modifiers\n        get modifiers() {\n            return composer.modifiers;\n        },\n        // formatFallbackMessages\n        get formatFallbackMessages() {\n            return composer.fallbackFormat;\n        },\n        set formatFallbackMessages(val) {\n            composer.fallbackFormat = val;\n        },\n        // postTranslation\n        get postTranslation() {\n            return composer.getPostTranslationHandler();\n        },\n        set postTranslation(handler) {\n            composer.setPostTranslationHandler(handler);\n        },\n        // sync\n        get sync() {\n            return composer.inheritLocale;\n        },\n        set sync(val) {\n            composer.inheritLocale = val;\n        },\n        // warnInHtmlMessage\n        get warnHtmlInMessage() {\n            return composer.warnHtmlMessage ? 'warn' : 'off';\n        },\n        set warnHtmlInMessage(val) {\n            composer.warnHtmlMessage = val !== 'off';\n        },\n        // escapeParameterHtml\n        get escapeParameterHtml() {\n            return composer.escapeParameter;\n        },\n        set escapeParameterHtml(val) {\n            composer.escapeParameter = val;\n        },\n        // pluralizationRules\n        get pluralizationRules() {\n            return composer.pluralRules || {};\n        },\n        // for internal\n        __composer: composer,\n        // t\n        t(...args) {\n            return Reflect.apply(composer.t, composer, [...args]);\n        },\n        // rt\n        rt(...args) {\n            return Reflect.apply(composer.rt, composer, [...args]);\n        },\n        // te\n        te(key, locale) {\n            return composer.te(key, locale);\n        },\n        // tm\n        tm(key) {\n            return composer.tm(key);\n        },\n        // getLocaleMessage\n        getLocaleMessage(locale) {\n            return composer.getLocaleMessage(locale);\n        },\n        // setLocaleMessage\n        setLocaleMessage(locale, message) {\n            composer.setLocaleMessage(locale, message);\n        },\n        // mergeLocaleMessage\n        mergeLocaleMessage(locale, message) {\n            composer.mergeLocaleMessage(locale, message);\n        },\n        // d\n        d(...args) {\n            return Reflect.apply(composer.d, composer, [...args]);\n        },\n        // getDateTimeFormat\n        getDateTimeFormat(locale) {\n            return composer.getDateTimeFormat(locale);\n        },\n        // setDateTimeFormat\n        setDateTimeFormat(locale, format) {\n            composer.setDateTimeFormat(locale, format);\n        },\n        // mergeDateTimeFormat\n        mergeDateTimeFormat(locale, format) {\n            composer.mergeDateTimeFormat(locale, format);\n        },\n        // n\n        n(...args) {\n            return Reflect.apply(composer.n, composer, [...args]);\n        },\n        // getNumberFormat\n        getNumberFormat(locale) {\n            return composer.getNumberFormat(locale);\n        },\n        // setNumberFormat\n        setNumberFormat(locale, format) {\n            composer.setNumberFormat(locale, format);\n        },\n        // mergeNumberFormat\n        mergeNumberFormat(locale, format) {\n            composer.mergeNumberFormat(locale, format);\n        }\n    };\n    vueI18n.__extender = __extender;\n    // for vue-devtools timeline event\n    if ((process.env.NODE_ENV !== 'production')) {\n        vueI18n.__enableEmitter = (emitter) => {\n            const __composer = composer;\n            __composer[EnableEmitter] && __composer[EnableEmitter](emitter);\n        };\n        vueI18n.__disableEmitter = () => {\n            const __composer = composer;\n            __composer[DisableEmitter] && __composer[DisableEmitter]();\n        };\n    }\n    return vueI18n;\n}\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\n/**\n * Supports compatibility for legacy vue-i18n APIs\n * This mixin is used when we use vue-i18n@v9.x or later\n */\nfunction defineMixin(vuei18n, composer, i18n) {\n    return {\n        beforeCreate() {\n            const instance = getCurrentInstance();\n            /* istanbul ignore if */\n            if (!instance) {\n                throw createI18nError(I18nErrorCodes.UNEXPECTED_ERROR);\n            }\n            const options = this.$options;\n            if (options.i18n) {\n                const optionsI18n = options.i18n;\n                if (options.__i18n) {\n                    optionsI18n.__i18n = options.__i18n;\n                }\n                optionsI18n.__root = composer;\n                if (this === this.$root) {\n                    // merge option and gttach global\n                    this.$i18n = mergeToGlobal(vuei18n, optionsI18n);\n                }\n                else {\n                    optionsI18n.__injectWithOption = true;\n                    optionsI18n.__extender = i18n.__vueI18nExtend;\n                    // atttach local VueI18n instance\n                    this.$i18n = createVueI18n(optionsI18n);\n                    // extend VueI18n instance\n                    const _vueI18n = this.$i18n;\n                    if (_vueI18n.__extender) {\n                        _vueI18n.__disposer = _vueI18n.__extender(this.$i18n);\n                    }\n                }\n            }\n            else if (options.__i18n) {\n                if (this === this.$root) {\n                    // merge option and gttach global\n                    this.$i18n = mergeToGlobal(vuei18n, options);\n                }\n                else {\n                    // atttach local VueI18n instance\n                    this.$i18n = createVueI18n({\n                        __i18n: options.__i18n,\n                        __injectWithOption: true,\n                        __extender: i18n.__vueI18nExtend,\n                        __root: composer\n                    });\n                    // extend VueI18n instance\n                    const _vueI18n = this.$i18n;\n                    if (_vueI18n.__extender) {\n                        _vueI18n.__disposer = _vueI18n.__extender(this.$i18n);\n                    }\n                }\n            }\n            else {\n                // attach global VueI18n instance\n                this.$i18n = vuei18n;\n            }\n            if (options.__i18nGlobal) {\n                adjustI18nResources(composer, options, options);\n            }\n            // defines vue-i18n legacy APIs\n            this.$t = (...args) => this.$i18n.t(...args);\n            this.$rt = (...args) => this.$i18n.rt(...args);\n            this.$te = (key, locale) => this.$i18n.te(key, locale);\n            this.$d = (...args) => this.$i18n.d(...args);\n            this.$n = (...args) => this.$i18n.n(...args);\n            this.$tm = (key) => this.$i18n.tm(key);\n            i18n.__setInstance(instance, this.$i18n);\n        },\n        mounted() {\n            /* istanbul ignore if */\n            if (((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) &&\n                !false &&\n                this.$i18n) {\n                const instance = getCurrentInstance();\n                if (!instance) {\n                    return;\n                }\n                const _vueI18n = this.$i18n;\n                instance.__VUE_I18N__ = _vueI18n.__composer;\n                const emitter = (this.__v_emitter =\n                    createEmitter());\n                _vueI18n.__enableEmitter && _vueI18n.__enableEmitter(emitter);\n                emitter.on('*', addTimelineEvent);\n            }\n        },\n        unmounted() {\n            const instance = getCurrentInstance();\n            /* istanbul ignore if */\n            if (!instance) {\n                throw createI18nError(I18nErrorCodes.UNEXPECTED_ERROR);\n            }\n            const _vueI18n = this.$i18n;\n            /* istanbul ignore if */\n            if (((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) &&\n                !false &&\n                instance.__VUE_I18N__) {\n                if (this.__v_emitter) {\n                    this.__v_emitter.off('*', addTimelineEvent);\n                    delete this.__v_emitter;\n                }\n                if (this.$i18n) {\n                    _vueI18n.__disableEmitter && _vueI18n.__disableEmitter();\n                    delete instance.__VUE_I18N__;\n                }\n            }\n            delete this.$t;\n            delete this.$rt;\n            delete this.$te;\n            delete this.$d;\n            delete this.$n;\n            delete this.$tm;\n            if (_vueI18n.__disposer) {\n                _vueI18n.__disposer();\n                delete _vueI18n.__disposer;\n                delete _vueI18n.__extender;\n            }\n            i18n.__deleteInstance(instance);\n            delete this.$i18n;\n        }\n    };\n}\nfunction mergeToGlobal(g, options) {\n    g.locale = options.locale || g.locale;\n    g.fallbackLocale = options.fallbackLocale || g.fallbackLocale;\n    g.missing = options.missing || g.missing;\n    g.silentTranslationWarn =\n        options.silentTranslationWarn || g.silentFallbackWarn;\n    g.silentFallbackWarn = options.silentFallbackWarn || g.silentFallbackWarn;\n    g.formatFallbackMessages =\n        options.formatFallbackMessages || g.formatFallbackMessages;\n    g.postTranslation = options.postTranslation || g.postTranslation;\n    g.warnHtmlInMessage = options.warnHtmlInMessage || g.warnHtmlInMessage;\n    g.escapeParameterHtml = options.escapeParameterHtml || g.escapeParameterHtml;\n    g.sync = options.sync || g.sync;\n    g.__composer[SetPluralRulesSymbol](options.pluralizationRules || g.pluralizationRules);\n    const messages = getLocaleMessages(g.locale, {\n        messages: options.messages,\n        __i18n: options.__i18n\n    });\n    Object.keys(messages).forEach(locale => g.mergeLocaleMessage(locale, messages[locale]));\n    if (options.datetimeFormats) {\n        Object.keys(options.datetimeFormats).forEach(locale => g.mergeDateTimeFormat(locale, options.datetimeFormats[locale]));\n    }\n    if (options.numberFormats) {\n        Object.keys(options.numberFormats).forEach(locale => g.mergeNumberFormat(locale, options.numberFormats[locale]));\n    }\n    return g;\n}\n\nconst baseFormatProps = {\n    tag: {\n        type: [String, Object]\n    },\n    locale: {\n        type: String\n    },\n    scope: {\n        type: String,\n        // NOTE: avoid https://github.com/microsoft/rushstack/issues/1050\n        validator: (val /* ComponentI18nScope */) => val === 'parent' || val === 'global',\n        default: 'parent' /* ComponentI18nScope */\n    },\n    i18n: {\n        type: Object\n    }\n};\n\nfunction getInterpolateArg(\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n{ slots }, // SetupContext,\nkeys) {\n    if (keys.length === 1 && keys[0] === 'default') {\n        // default slot with list\n        const ret = slots.default ? slots.default() : [];\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        return ret.reduce((slot, current) => {\n            return [\n                ...slot,\n                // prettier-ignore\n                ...(current.type === Fragment ? current.children : [current])\n            ];\n        }, []);\n    }\n    else {\n        // named slots\n        return keys.reduce((arg, key) => {\n            const slot = slots[key];\n            if (slot) {\n                arg[key] = slot();\n            }\n            return arg;\n        }, create());\n    }\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getFragmentableTag() {\n    return Fragment;\n}\n\nconst TranslationImpl = /*#__PURE__*/ defineComponent({\n    /* eslint-disable */\n    name: 'i18n-t',\n    props: assign({\n        keypath: {\n            type: String,\n            required: true\n        },\n        plural: {\n            type: [Number, String],\n            validator: (val) => isNumber(val) || !isNaN(val)\n        }\n    }, baseFormatProps),\n    /* eslint-enable */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    setup(props, context) {\n        const { slots, attrs } = context;\n        // NOTE: avoid https://github.com/microsoft/rushstack/issues/1050\n        const i18n = props.i18n ||\n            useI18n({\n                useScope: props.scope,\n                __useComponent: true\n            });\n        return () => {\n            const renderChildren = () => {\n                const keys = Object.keys(slots).filter(key => key[0] !== '_');\n                const options = create();\n                if (props.locale) {\n                    options.locale = props.locale;\n                }\n                if (props.plural !== undefined) {\n                    options.plural = isString(props.plural) ? +props.plural : props.plural;\n                }\n                const arg = getInterpolateArg(context, keys);\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                return i18n[TranslateVNodeSymbol](props.keypath, arg, options);\n            };\n            const assignedAttrs = assign(create(), attrs);\n            const tag = isString(props.tag) || isObject(props.tag)\n                ? props.tag\n                : getFragmentableTag();\n            return isObject(tag)\n                ? h(tag, assignedAttrs, { default: renderChildren })\n                : h(tag, assignedAttrs, renderChildren());\n        };\n    }\n});\n/**\n * export the public type for h/tsx inference\n * also to avoid inline import() in generated d.ts files\n */\n/**\n * Translation Component\n *\n * @remarks\n * See the following items for property about details\n *\n * @VueI18nSee [TranslationProps](component#translationprops)\n * @VueI18nSee [BaseFormatProps](component#baseformatprops)\n * @VueI18nSee [Component Interpolation](../guide/advanced/component)\n *\n * @example\n * ```html\n * <div id=\"app\">\n *   <!-- ... -->\n *   <i18n keypath=\"term\" tag=\"label\" for=\"tos\">\n *     <a :href=\"url\" target=\"_blank\">{{ $t('tos') }}</a>\n *   </i18n>\n *   <!-- ... -->\n * </div>\n * ```\n * ```js\n * import { createApp } from 'vue'\n * import { createI18n } from 'vue-i18n'\n *\n * const messages = {\n *   en: {\n *     tos: 'Term of Service',\n *     term: 'I accept xxx {0}.'\n *   },\n *   ja: {\n *     tos: '利用規約',\n *     term: '私は xxx の{0}に同意します。'\n *   }\n * }\n *\n * const i18n = createI18n({\n *   locale: 'en',\n *   messages\n * })\n *\n * const app = createApp({\n *   data: {\n *     url: '/term'\n *   }\n * }).use(i18n).mount('#app')\n * ```\n *\n * @VueI18nComponent\n */\nconst Translation = TranslationImpl;\nconst I18nT = Translation;\n\nfunction isVNode(target) {\n    return isArray(target) && !isString(target[0]);\n}\nfunction renderFormatter(props, context, slotKeys, partFormatter) {\n    const { slots, attrs } = context;\n    return () => {\n        const renderChildren = () => {\n            const options = { part: true };\n            let overrides = create();\n            if (props.locale) {\n                options.locale = props.locale;\n            }\n            if (isString(props.format)) {\n                options.key = props.format;\n            }\n            else if (isObject(props.format)) {\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                if (isString(props.format.key)) {\n                    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                    options.key = props.format.key;\n                }\n                // Filter out number format options only\n                overrides = Object.keys(props.format).reduce((options, prop) => {\n                    return slotKeys.includes(prop)\n                        ? assign(create(), options, { [prop]: props.format[prop] }) // eslint-disable-line @typescript-eslint/no-explicit-any\n                        : options;\n                }, create());\n            }\n            const parts = partFormatter(...[props.value, options, overrides]);\n            let children = [options.key];\n            if (isArray(parts)) {\n                children = parts.map((part, index) => {\n                    const slot = slots[part.type];\n                    const node = slot\n                        ? slot({ [part.type]: part.value, index, parts })\n                        : [part.value];\n                    if (isVNode(node)) {\n                        node[0].key = `${part.type}-${index}`;\n                    }\n                    return node;\n                });\n            }\n            else if (isString(parts)) {\n                children = [parts];\n            }\n            return children;\n        };\n        const assignedAttrs = assign(create(), attrs);\n        const tag = isString(props.tag) || isObject(props.tag)\n            ? props.tag\n            : getFragmentableTag();\n        return isObject(tag)\n            ? h(tag, assignedAttrs, { default: renderChildren })\n            : h(tag, assignedAttrs, renderChildren());\n    };\n}\n\nconst NumberFormatImpl = /*#__PURE__*/ defineComponent({\n    /* eslint-disable */\n    name: 'i18n-n',\n    props: assign({\n        value: {\n            type: Number,\n            required: true\n        },\n        format: {\n            type: [String, Object]\n        }\n    }, baseFormatProps),\n    /* eslint-enable */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    setup(props, context) {\n        const i18n = props.i18n ||\n            useI18n({\n                useScope: props.scope,\n                __useComponent: true\n            });\n        return renderFormatter(props, context, NUMBER_FORMAT_OPTIONS_KEYS, (...args) => \n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        i18n[NumberPartsSymbol](...args));\n    }\n});\n/**\n * export the public type for h/tsx inference\n * also to avoid inline import() in generated d.ts files\n */\n/**\n * Number Format Component\n *\n * @remarks\n * See the following items for property about details\n *\n * @VueI18nSee [FormattableProps](component#formattableprops)\n * @VueI18nSee [BaseFormatProps](component#baseformatprops)\n * @VueI18nSee [Custom Formatting](../guide/essentials/number#custom-formatting)\n *\n * @VueI18nDanger\n * Not supported IE, due to no support `Intl.NumberFormat#formatToParts` in [IE](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/formatToParts)\n *\n * If you want to use it, you need to use [polyfill](https://github.com/formatjs/formatjs/tree/main/packages/intl-numberformat)\n *\n * @VueI18nComponent\n */\nconst NumberFormat = NumberFormatImpl;\nconst I18nN = NumberFormat;\n\nfunction getComposer$1(i18n, instance) {\n    const i18nInternal = i18n;\n    if (i18n.mode === 'composition') {\n        return (i18nInternal.__getInstance(instance) || i18n.global);\n    }\n    else {\n        const vueI18n = i18nInternal.__getInstance(instance);\n        return vueI18n != null\n            ? vueI18n.__composer\n            : i18n.global.__composer;\n    }\n}\n/**\n * @deprecated will be removed at vue-i18n v12\n */\nfunction vTDirective(i18n) {\n    const _process = (binding) => {\n        if ((process.env.NODE_ENV !== 'production')) {\n            warnOnce(getWarnMessage(I18nWarnCodes.DEPRECATE_TRANSLATE_CUSTOME_DIRECTIVE));\n        }\n        const { instance, value } = binding;\n        /* istanbul ignore if */\n        if (!instance || !instance.$) {\n            throw createI18nError(I18nErrorCodes.UNEXPECTED_ERROR);\n        }\n        const composer = getComposer$1(i18n, instance.$);\n        const parsedValue = parseValue(value);\n        return [\n            Reflect.apply(composer.t, composer, [...makeParams(parsedValue)]),\n            composer\n        ];\n    };\n    const register = (el, binding) => {\n        const [textContent, composer] = _process(binding);\n        if (inBrowser) {\n            el.__i18nWatcher = watch(composer.locale, () => {\n                binding.instance && binding.instance.$forceUpdate();\n            });\n        }\n        el.__composer = composer;\n        el.textContent = textContent;\n    };\n    const unregister = (el) => {\n        if (inBrowser && el.__i18nWatcher) {\n            el.__i18nWatcher();\n            el.__i18nWatcher = undefined;\n            delete el.__i18nWatcher;\n        }\n        if (el.__composer) {\n            el.__composer = undefined;\n            delete el.__composer;\n        }\n    };\n    const update = (el, { value }) => {\n        if (el.__composer) {\n            const composer = el.__composer;\n            const parsedValue = parseValue(value);\n            el.textContent = Reflect.apply(composer.t, composer, [\n                ...makeParams(parsedValue)\n            ]);\n        }\n    };\n    const getSSRProps = (binding) => {\n        const [textContent] = _process(binding);\n        return { textContent };\n    };\n    return {\n        created: register,\n        unmounted: unregister,\n        beforeUpdate: update,\n        getSSRProps\n    };\n}\nfunction parseValue(value) {\n    if (isString(value)) {\n        return { path: value };\n    }\n    else if (isPlainObject(value)) {\n        if (!('path' in value)) {\n            throw createI18nError(I18nErrorCodes.REQUIRED_VALUE, 'path');\n        }\n        return value;\n    }\n    else {\n        throw createI18nError(I18nErrorCodes.INVALID_VALUE);\n    }\n}\nfunction makeParams(value) {\n    const { path, locale, args, choice, plural } = value;\n    const options = {};\n    const named = args || {};\n    if (isString(locale)) {\n        options.locale = locale;\n    }\n    if (isNumber(choice)) {\n        options.plural = choice;\n    }\n    if (isNumber(plural)) {\n        options.plural = plural;\n    }\n    return [path, named, options];\n}\n\nfunction apply(app, i18n, ...options) {\n    const pluginOptions = isPlainObject(options[0])\n        ? options[0]\n        : {};\n    const globalInstall = isBoolean(pluginOptions.globalInstall)\n        ? pluginOptions.globalInstall\n        : true;\n    if (globalInstall) {\n        [Translation.name, 'I18nT'].forEach(name => app.component(name, Translation));\n        [NumberFormat.name, 'I18nN'].forEach(name => app.component(name, NumberFormat));\n        [DatetimeFormat.name, 'I18nD'].forEach(name => app.component(name, DatetimeFormat));\n    }\n    // install directive\n    {\n        app.directive('t', vTDirective(i18n));\n    }\n}\n\n/**\n * Injection key for {@link useI18n}\n *\n * @remarks\n * The global injection key for I18n instances with `useI18n`. this injection key is used in Web Components.\n * Specify the i18n instance created by {@link createI18n} together with `provide` function.\n *\n * @VueI18nGeneral\n */\nconst I18nInjectionKey = \n/* #__PURE__*/ makeSymbol('global-vue-i18n');\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction createI18n(options = {}) {\n    // prettier-ignore\n    const __legacyMode = __VUE_I18N_LEGACY_API__ && isBoolean(options.legacy)\n            ? options.legacy\n            : __VUE_I18N_LEGACY_API__;\n    if ((process.env.NODE_ENV !== 'production') && __legacyMode) {\n        warnOnce(getWarnMessage(I18nWarnCodes.DEPRECATE_LEGACY_MODE));\n    }\n    // prettier-ignore\n    const __globalInjection = isBoolean(options.globalInjection)\n        ? options.globalInjection\n        : true;\n    const __instances = new Map();\n    const [globalScope, __global] = createGlobal(options, __legacyMode);\n    const symbol = /* #__PURE__*/ makeSymbol((process.env.NODE_ENV !== 'production') ? 'vue-i18n' : '');\n    function __getInstance(component) {\n        return __instances.get(component) || null;\n    }\n    function __setInstance(component, instance) {\n        __instances.set(component, instance);\n    }\n    function __deleteInstance(component) {\n        __instances.delete(component);\n    }\n    const i18n = {\n        // mode\n        get mode() {\n            return __VUE_I18N_LEGACY_API__ && __legacyMode\n                ? 'legacy'\n                : 'composition';\n        },\n        // install plugin\n        async install(app, ...options) {\n            if (((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) && !false) {\n                app.__VUE_I18N__ = i18n;\n            }\n            // setup global provider\n            app.__VUE_I18N_SYMBOL__ = symbol;\n            app.provide(app.__VUE_I18N_SYMBOL__, i18n);\n            // set composer & vuei18n extend hook options from plugin options\n            if (isPlainObject(options[0])) {\n                const opts = options[0];\n                i18n.__composerExtend =\n                    opts.__composerExtend;\n                i18n.__vueI18nExtend =\n                    opts.__vueI18nExtend;\n            }\n            // global method and properties injection for Composition API\n            let globalReleaseHandler = null;\n            if (!__legacyMode && __globalInjection) {\n                globalReleaseHandler = injectGlobalFields(app, i18n.global);\n            }\n            // install built-in components and directive\n            if (__VUE_I18N_FULL_INSTALL__) {\n                apply(app, i18n, ...options);\n            }\n            // setup mixin for Legacy API\n            if (__VUE_I18N_LEGACY_API__ && __legacyMode) {\n                app.mixin(defineMixin(__global, __global.__composer, i18n));\n            }\n            // release global scope\n            const unmountApp = app.unmount;\n            app.unmount = () => {\n                globalReleaseHandler && globalReleaseHandler();\n                i18n.dispose();\n                unmountApp();\n            };\n            // setup vue-devtools plugin\n            if (((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) && !false) {\n                const ret = await enableDevTools(app, i18n);\n                if (!ret) {\n                    throw createI18nError(I18nErrorCodes.CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN);\n                }\n                const emitter = createEmitter();\n                if (__legacyMode) {\n                    const _vueI18n = __global;\n                    _vueI18n.__enableEmitter && _vueI18n.__enableEmitter(emitter);\n                }\n                else {\n                    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                    const _composer = __global;\n                    _composer[EnableEmitter] && _composer[EnableEmitter](emitter);\n                }\n                emitter.on('*', addTimelineEvent);\n            }\n        },\n        // global accessor\n        get global() {\n            return __global;\n        },\n        dispose() {\n            globalScope.stop();\n        },\n        // @internal\n        __instances,\n        // @internal\n        __getInstance,\n        // @internal\n        __setInstance,\n        // @internal\n        __deleteInstance\n    };\n    return i18n;\n}\nfunction useI18n(options = {}) {\n    const instance = getCurrentInstance();\n    if (instance == null) {\n        throw createI18nError(I18nErrorCodes.MUST_BE_CALL_SETUP_TOP);\n    }\n    if (!instance.isCE &&\n        instance.appContext.app != null &&\n        !instance.appContext.app.__VUE_I18N_SYMBOL__) {\n        throw createI18nError(I18nErrorCodes.NOT_INSTALLED);\n    }\n    const i18n = getI18nInstance(instance);\n    const gl = getGlobalComposer(i18n);\n    const componentOptions = getComponentOptions(instance);\n    const scope = getScope(options, componentOptions);\n    if (scope === 'global') {\n        adjustI18nResources(gl, options, componentOptions);\n        return gl;\n    }\n    if (scope === 'parent') {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        let composer = getComposer(i18n, instance, options.__useComponent);\n        if (composer == null) {\n            if ((process.env.NODE_ENV !== 'production')) {\n                warn(getWarnMessage(I18nWarnCodes.NOT_FOUND_PARENT_SCOPE));\n            }\n            composer = gl;\n        }\n        return composer;\n    }\n    // Isolated scope - independent composer not tied to component\n    if (scope === 'isolated') {\n        // Composition API mode only\n        if (i18n.mode !== 'composition') {\n            throw createI18nError(I18nErrorCodes.NOT_AVAILABLE_COMPOSITION_IN_LEGACY);\n        }\n        const i18nInternalIso = i18n;\n        const composerOptions = assign({}, options);\n        // Find parent composer via parent chain (or fall back to global)\n        const parentComposer = getComposer(i18n, instance);\n        composerOptions.__root = parentComposer || gl;\n        const composer = createComposer(composerOptions);\n        // ComposerExtend hook\n        if (i18nInternalIso.__composerExtend) {\n            composer[DisposeSymbol] =\n                i18nInternalIso.__composerExtend(composer);\n        }\n        // Setup devtools emitter (no target.__VUE_I18N__ attachment -\n        // multiple isolated composers per component are allowed)\n        let emitter = null;\n        if (((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) && !false) {\n            emitter = createEmitter();\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            const _composer = composer;\n            _composer[EnableEmitter] && _composer[EnableEmitter](emitter);\n            emitter.on('*', addTimelineEvent);\n        }\n        // Lifecycle cleanup via onScopeDispose\n        const currentScope = getCurrentScope();\n        if (currentScope) {\n            onScopeDispose(() => {\n                if (((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) && !false) {\n                    emitter && emitter.off('*', addTimelineEvent);\n                    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                    const _composer = composer;\n                    _composer[DisableEmitter] && _composer[DisableEmitter]();\n                }\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                const dispose = composer[DisposeSymbol];\n                if (dispose) {\n                    dispose();\n                    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                    delete composer[DisposeSymbol];\n                }\n            });\n        }\n        return composer;\n    }\n    const i18nInternal = i18n;\n    let composer = i18nInternal.__getInstance(instance);\n    if (composer == null) {\n        const composerOptions = assign({}, options);\n        if ('__i18n' in componentOptions) {\n            composerOptions.__i18n = componentOptions.__i18n;\n        }\n        if (gl) {\n            composerOptions.__root = gl;\n        }\n        composer = createComposer(composerOptions);\n        if (i18nInternal.__composerExtend) {\n            composer[DisposeSymbol] =\n                i18nInternal.__composerExtend(composer);\n        }\n        setupLifeCycle(i18nInternal, instance, composer);\n        i18nInternal.__setInstance(instance, composer);\n    }\n    else {\n        if ((process.env.NODE_ENV !== 'production') && scope === 'local') {\n            warn(getWarnMessage(I18nWarnCodes.DUPLICATE_USE_I18N_CALLING));\n        }\n    }\n    return composer;\n}\nfunction createGlobal(options, legacyMode) {\n    const scope = effectScope();\n    const obj = __VUE_I18N_LEGACY_API__ && legacyMode\n        ? scope.run(() => createVueI18n(options))\n        : scope.run(() => createComposer(options));\n    if (obj == null) {\n        throw createI18nError(I18nErrorCodes.UNEXPECTED_ERROR);\n    }\n    return [scope, obj];\n}\nfunction getI18nInstance(instance) {\n    const i18n = inject(!instance.isCE\n        ? instance.appContext.app.__VUE_I18N_SYMBOL__\n        : I18nInjectionKey);\n    /* istanbul ignore if */\n    if (!i18n) {\n        throw createI18nError(!instance.isCE\n            ? I18nErrorCodes.UNEXPECTED_ERROR\n            : I18nErrorCodes.NOT_INSTALLED_WITH_PROVIDE);\n    }\n    return i18n;\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getScope(options, componentOptions) {\n    // prettier-ignore\n    return isEmptyObject(options)\n        ? ('__i18n' in componentOptions)\n            ? 'local'\n            : 'global'\n        : !options.useScope\n            ? 'local'\n            : options.useScope;\n}\nfunction getGlobalComposer(i18n) {\n    // prettier-ignore\n    return i18n.mode === 'composition'\n        ? i18n.global\n        : i18n.global.__composer;\n}\nfunction getComposer(i18n, target, useComponent = false) {\n    let composer = null;\n    const root = target.root;\n    let current = getParentComponentInstance(target, useComponent);\n    while (current != null) {\n        const i18nInternal = i18n;\n        if (i18n.mode === 'composition') {\n            composer = i18nInternal.__getInstance(current);\n        }\n        else {\n            if (__VUE_I18N_LEGACY_API__) {\n                const vueI18n = i18nInternal.__getInstance(current);\n                if (vueI18n != null) {\n                    composer = vueI18n\n                        .__composer;\n                    if (useComponent &&\n                        composer &&\n                        !composer[InejctWithOptionSymbol] // eslint-disable-line @typescript-eslint/no-explicit-any\n                    ) {\n                        composer = null;\n                    }\n                }\n            }\n        }\n        if (composer != null) {\n            break;\n        }\n        if (root === current) {\n            break;\n        }\n        current = current.parent;\n    }\n    return composer;\n}\nfunction getParentComponentInstance(target, useComponent = false) {\n    if (target == null) {\n        return null;\n    }\n    // if `useComponent: true` will be specified, we get lexical scope owner instance for use-case slots\n    return !useComponent\n        ? target.parent\n        : target.vnode.ctx || target.parent; // eslint-disable-line @typescript-eslint/no-explicit-any\n}\nfunction setupLifeCycle(i18n, target, composer) {\n    let emitter = null;\n    onMounted(() => {\n        // inject composer instance to DOM for intlify-devtools\n        if (((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) && !false) {\n            target.__VUE_I18N__ = composer;\n            emitter = createEmitter();\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            const _composer = composer;\n            _composer[EnableEmitter] && _composer[EnableEmitter](emitter);\n            emitter.on('*', addTimelineEvent);\n        }\n    }, target);\n    onUnmounted(() => {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        const _composer = composer;\n        // remove composer instance from DOM for intlify-devtools\n        if (((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) && !false) {\n            emitter && emitter.off('*', addTimelineEvent);\n            _composer[DisableEmitter] && _composer[DisableEmitter]();\n            delete target.__VUE_I18N__;\n        }\n        i18n.__deleteInstance(target);\n        // dispose extended resources\n        const dispose = _composer[DisposeSymbol];\n        if (dispose) {\n            dispose();\n            delete _composer[DisposeSymbol];\n        }\n    }, target);\n}\nconst globalExportProps = [\n    'locale',\n    'fallbackLocale',\n    'availableLocales'\n];\nconst globalExportMethods = ['t', 'rt', 'd', 'n', 'tm', 'te']\n    ;\nfunction injectGlobalFields(app, composer) {\n    const i18n = Object.create(null);\n    globalExportProps.forEach(prop => {\n        const desc = Object.getOwnPropertyDescriptor(composer, prop);\n        if (!desc) {\n            throw createI18nError(I18nErrorCodes.UNEXPECTED_ERROR);\n        }\n        const wrap = isRef(desc.value) // check computed props\n            ? {\n                get() {\n                    return desc.value.value;\n                },\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                set(val) {\n                    desc.value.value = val;\n                }\n            }\n            : {\n                get() {\n                    return desc.get && desc.get();\n                }\n            };\n        Object.defineProperty(i18n, prop, wrap);\n    });\n    app.config.globalProperties.$i18n = i18n;\n    globalExportMethods.forEach(method => {\n        const desc = Object.getOwnPropertyDescriptor(composer, method);\n        if (!desc || !desc.value) {\n            throw createI18nError(I18nErrorCodes.UNEXPECTED_ERROR);\n        }\n        Object.defineProperty(app.config.globalProperties, `$${method}`, desc);\n    });\n    const dispose = () => {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        delete app.config.globalProperties.$i18n;\n        globalExportMethods.forEach(method => {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            delete app.config.globalProperties[`$${method}`];\n        });\n    };\n    return dispose;\n}\n\nconst DatetimeFormatImpl = /* #__PURE__*/ defineComponent({\n    /* eslint-disable */\n    name: 'i18n-d',\n    props: assign({\n        value: {\n            type: [Number, Date],\n            required: true\n        },\n        format: {\n            type: [String, Object]\n        }\n    }, baseFormatProps),\n    /* eslint-enable */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    setup(props, context) {\n        const i18n = props.i18n ||\n            useI18n({\n                useScope: props.scope,\n                __useComponent: true\n            });\n        return renderFormatter(props, context, DATETIME_FORMAT_OPTIONS_KEYS, (...args) => \n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        i18n[DatetimePartsSymbol](...args));\n    }\n});\n/**\n * Datetime Format Component\n *\n * @remarks\n * See the following items for property about details\n *\n * @VueI18nSee [FormattableProps](component#formattableprops)\n * @VueI18nSee [BaseFormatProps](component#baseformatprops)\n * @VueI18nSee [Custom Formatting](../guide/essentials/datetime#custom-formatting)\n *\n * @VueI18nDanger\n * Not supported IE, due to no support `Intl.DateTimeFormat#formatToParts` in [IE](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/formatToParts)\n *\n * If you want to use it, you need to use [polyfill](https://github.com/formatjs/formatjs/tree/main/packages/intl-datetimeformat)\n *\n * @VueI18nComponent\n */\nconst DatetimeFormat = DatetimeFormatImpl;\nconst I18nD = DatetimeFormat;\n\n{\n    initFeatureFlags();\n}\n// register message compiler for jit compilation\nregisterMessageCompiler(compile);\n// register message resolver at vue-i18n\nregisterMessageResolver(resolveValue);\n// register fallback locale at vue-i18n\nregisterLocaleFallbacker(fallbackWithLocaleChain);\n// NOTE: experimental !!\nif ((process.env.NODE_ENV !== 'production') || __INTLIFY_PROD_DEVTOOLS__) {\n    const target = getGlobalThis();\n    target.__INTLIFY__ = true;\n    setDevToolsHook(target.__INTLIFY_DEVTOOLS_GLOBAL_HOOK__);\n}\nif ((process.env.NODE_ENV !== 'production')) ;\n\nexport { DatetimeFormat, I18nD, I18nInjectionKey, I18nN, I18nT, NumberFormat, Translation, VERSION, createI18n, useI18n, vTDirective };\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport type { IconSize } from '@/types'\n\nexport interface AppIconLayersProps {\n  /**\n   * Size of the icon layers container. Can be a preset ('2xs', 'xs', 'sm', 'md', 'lg', 'xl', '2xl') or a CSS value.\n   */\n  size?: IconSize | string\n}\n\nconst props = withDefaults(defineProps<AppIconLayersProps>(), {\n  size: 'md'\n})\n\nconst isRawSize = computed(() => {\n  return !['2xs', 'xs', 'sm', 'md', 'lg', 'xl', '2xl'].includes(props.size)\n})\n\nconst style = computed(() => {\n  return {\n    '--app-icon-layers-raw-size': isRawSize.value ? props.size : undefined,\n    '--app-icon-layers-size': isRawSize.value ? undefined : props.size\n  }\n})\n\nconst classList = computed(() => {\n  return {\n    [`app-icon-layers--size-${props.size}`]: !isRawSize.value\n  }\n})\n</script>\n\n<template>\n  <span\n    class=\"app-icon-layers\"\n    :style=\"style\"\n    :class=\"classList\"\n  >\n    <slot />\n  </span>\n</template>\n\n<style lang=\"scss\" scoped>\n@import '../../styles/mixins';\n\n.app-icon-layers {\n  display: inline-block;\n  position: relative;\n  height: var(--app-icon-raw-size, 1em);\n  width: var(--app-icon-raw-size, 1em);\n  @include app-icon-layers-size($app-icon-size-scale-base);\n\n  @each $size, $value in $app-icon-sizes {\n    &--size-#{$size} {\n      @include app-icon-layers-size($value);\n\n      &:deep(.app-icon:not(.app-icon--has-size)) {\n        @include app-icon-size($value);\n      }\n    }\n  }\n\n  &:deep(.app-icon) {\n    display: inline-flex;\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport type { IconSize } from '@/types'\n\nexport interface AppIconLayersProps {\n  /**\n   * Size of the icon layers container. Can be a preset ('2xs', 'xs', 'sm', 'md', 'lg', 'xl', '2xl') or a CSS value.\n   */\n  size?: IconSize | string\n}\n\nconst props = withDefaults(defineProps<AppIconLayersProps>(), {\n  size: 'md'\n})\n\nconst isRawSize = computed(() => {\n  return !['2xs', 'xs', 'sm', 'md', 'lg', 'xl', '2xl'].includes(props.size)\n})\n\nconst style = computed(() => {\n  return {\n    '--app-icon-layers-raw-size': isRawSize.value ? props.size : undefined,\n    '--app-icon-layers-size': isRawSize.value ? undefined : props.size\n  }\n})\n\nconst classList = computed(() => {\n  return {\n    [`app-icon-layers--size-${props.size}`]: !isRawSize.value\n  }\n})\n</script>\n\n<template>\n  <span\n    class=\"app-icon-layers\"\n    :style=\"style\"\n    :class=\"classList\"\n  >\n    <slot />\n  </span>\n</template>\n\n<style lang=\"scss\" scoped>\n@import '../../styles/mixins';\n\n.app-icon-layers {\n  display: inline-block;\n  position: relative;\n  height: var(--app-icon-raw-size, 1em);\n  width: var(--app-icon-raw-size, 1em);\n  @include app-icon-layers-size($app-icon-size-scale-base);\n\n  @each $size, $value in $app-icon-sizes {\n    &--size-#{$size} {\n      @include app-icon-layers-size($value);\n\n      &:deep(.app-icon:not(.app-icon--has-size)) {\n        @include app-icon-size($value);\n      }\n    }\n  }\n\n  &:deep(.app-icon) {\n    display: inline-flex;\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n  }\n}\n</style>\n","import noop from 'lodash/noop'\nimport { computed, nextTick, onUnmounted, ref } from 'vue'\nimport type { ComputedRef, Ref } from 'vue'\n\n/**\n * Copies content to the clipboard. May run synchronously (HTML copy) or return\n * a promise (text copy); both shapes are awaited by {@link useHapticCopy}.\n */\nexport type HapticCopyAction = () => void | Promise<void>\n\n/**\n * Resolves a feedback message key into the string shown in the tooltip. The\n * default implementation returns the key untouched; consumers usually plug an\n * i18n translator in here.\n */\nexport type HapticCopyMessageResolver = (message: string) => string\n\n/**\n * Optional callbacks fired across the copy lifecycle, mirroring the events a\n * host component typically re-emits to its parent.\n */\nexport interface UseHapticCopyOptions {\n  /**\n   * Performs the actual clipboard write. Defaults to a no-op so the composable\n   * can be wired incrementally.\n   */\n  copy?: HapticCopyAction\n  /**\n   * Turns a message key into the displayed tooltip text. Defaults to identity.\n   */\n  resolveMessage?: HapticCopyMessageResolver\n  /**\n   * Delay, in milliseconds, before the success/failure feedback is hidden.\n   * Accepts a getter so a reactive delay is read afresh on every copy.\n   */\n  hideDelay?: number | (() => number)\n  /**\n   * Message key displayed when the copy succeeds.\n   */\n  succeedMessage?: string\n  /**\n   * Message key displayed when the copy fails.\n   */\n  failedMessage?: string\n  /**\n   * Called before the copy attempt starts.\n   */\n  onAttempt?: () => void\n  /**\n   * Called once the copy succeeds.\n   */\n  onSuccess?: () => void\n  /**\n   * Called with the thrown error when the copy fails.\n   */\n  onError?: (error: unknown) => void\n  /**\n   * Called when the feedback is hidden, either after the delay or on cleanup.\n   */\n  onHide?: () => void\n}\n\n/**\n * Reactive API returned by {@link useHapticCopy}.\n */\nexport interface UseHapticCopy {\n  /**\n   * Run the copy action, surface success/failure feedback, then hide it after\n   * the configured delay.\n   */\n  copy: () => Promise<void>\n  /**\n   * Text currently displayed in the feedback tooltip.\n   */\n  tooltipContent: Ref<string>\n  /**\n   * Whether the feedback tooltip is requested to be shown.\n   */\n  showTooltip: Ref<boolean>\n  /**\n   * Whether the transient \"copied!\" feedback is currently active, i.e. a hide\n   * timer is pending. Drives the success/idle icon swap in host components.\n   */\n  isVisible: ComputedRef<boolean>\n  /**\n   * Hide the feedback tooltip and clear any pending hide timer.\n   */\n  close: () => Promise<void>\n}\n\n/**\n * Owns the transient \"copied!\" feedback shown after a clipboard write: the\n * tooltip message, its visibility, and the timer that resets it. The copy\n * itself is delegated to the {@link UseHapticCopyOptions.copy} action so the\n * composable stays agnostic of text vs HTML clipboard strategies.\n *\n * The single hide timer is always cleared before a new one is scheduled, so\n * repeated copies never stack overlapping resets, and it is cleared again on\n * unmount to avoid running after the host is gone.\n *\n * @param options - Copy action, message resolver, delay and lifecycle hooks\n *   (see {@link UseHapticCopyOptions}).\n * @returns The {@link UseHapticCopy} API: the `copy` action, the reactive\n *   `tooltipContent`, `showTooltip` and `isVisible` state, and the `close`\n *   handler.\n * @example\n * const { copy, tooltipContent, isVisible } = useHapticCopy({\n *   copy: () => navigator.clipboard.writeText('hello'),\n *   resolveMessage: (key) => translate(key),\n *   onSuccess: () => {\n *     // show a toast, log analytics, etc.\n *   }\n * })\n */\nexport function useHapticCopy(options: UseHapticCopyOptions = {}): UseHapticCopy {\n  const {\n    copy: copyAction = noop,\n    resolveMessage = (message: string) => message,\n    hideDelay = 1e3,\n    succeedMessage = 'haptic-copy.tooltip.succeed',\n    failedMessage = 'haptic-copy.tooltip.failed',\n    onAttempt,\n    onSuccess,\n    onError,\n    onHide\n  } = options\n\n  const tooltipContent = ref<string>('')\n  const tooltipTimeout = ref<ReturnType<typeof setTimeout> | null>(null)\n  const showTooltip = ref(false)\n\n  // Truthy exactly while a hide timer is pending, which is also when the\n  // \"copied!\" feedback (the success icon) should be shown.\n  const isVisible = computed(() => tooltipTimeout.value !== null)\n\n  function openTooltip(message = succeedMessage): Promise<void> {\n    tooltipContent.value = resolveMessage(message)\n    showTooltip.value = true\n    return Promise.resolve()\n  }\n\n  function close(): Promise<void> {\n    clearTimeout(tooltipTimeout.value ?? undefined)\n    showTooltip.value = false\n    tooltipTimeout.value = null\n    onHide?.()\n    return Promise.resolve()\n  }\n\n  // Reset the single hide timer before scheduling a new one so back-to-back\n  // copies never leave a stale reset running.\n  function nextTimeout(fn = noop, delay = 0): Promise<unknown> {\n    clearTimeout(tooltipTimeout.value ?? undefined)\n    return new Promise((resolve) => {\n      tooltipTimeout.value = setTimeout(resolve, delay)\n    })\n      .finally(nextTick)\n      .then(fn)\n  }\n\n  async function copy(): Promise<void> {\n    try {\n      onAttempt?.()\n      await copyAction()\n      await openTooltip()\n      onSuccess?.()\n    }\n    catch (error) {\n      await openTooltip(failedMessage)\n      onError?.(error)\n    }\n    // Hide the feedback once the delay elapses, reading a reactive delay afresh.\n    const delay = typeof hideDelay === 'function' ? hideDelay() : hideDelay\n    await nextTimeout(close, delay)\n  }\n\n  onUnmounted(() => {\n    close()\n  })\n\n  return {\n    copy,\n    tooltipContent,\n    showTooltip,\n    isVisible,\n    close\n  }\n}\n\nexport default useHapticCopy\n","/*!\n * clipboard.js v2.0.11\n * https://clipboardjs.com/\n *\n * Licensed MIT © Zeno Rocha\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ClipboardJS\"] = factory();\n\telse\n\t\troot[\"ClipboardJS\"] = factory();\n})(this, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 686:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  \"default\": function() { return /* binding */ clipboard; }\n});\n\n// EXTERNAL MODULE: ./node_modules/tiny-emitter/index.js\nvar tiny_emitter = __webpack_require__(279);\nvar tiny_emitter_default = /*#__PURE__*/__webpack_require__.n(tiny_emitter);\n// EXTERNAL MODULE: ./node_modules/good-listener/src/listen.js\nvar listen = __webpack_require__(370);\nvar listen_default = /*#__PURE__*/__webpack_require__.n(listen);\n// EXTERNAL MODULE: ./node_modules/select/src/select.js\nvar src_select = __webpack_require__(817);\nvar select_default = /*#__PURE__*/__webpack_require__.n(src_select);\n;// CONCATENATED MODULE: ./src/common/command.js\n/**\n * Executes a given operation type.\n * @param {String} type\n * @return {Boolean}\n */\nfunction command(type) {\n  try {\n    return document.execCommand(type);\n  } catch (err) {\n    return false;\n  }\n}\n;// CONCATENATED MODULE: ./src/actions/cut.js\n\n\n/**\n * Cut action wrapper.\n * @param {String|HTMLElement} target\n * @return {String}\n */\n\nvar ClipboardActionCut = function ClipboardActionCut(target) {\n  var selectedText = select_default()(target);\n  command('cut');\n  return selectedText;\n};\n\n/* harmony default export */ var actions_cut = (ClipboardActionCut);\n;// CONCATENATED MODULE: ./src/common/create-fake-element.js\n/**\n * Creates a fake textarea element with a value.\n * @param {String} value\n * @return {HTMLElement}\n */\nfunction createFakeElement(value) {\n  var isRTL = document.documentElement.getAttribute('dir') === 'rtl';\n  var fakeElement = document.createElement('textarea'); // Prevent zooming on iOS\n\n  fakeElement.style.fontSize = '12pt'; // Reset box model\n\n  fakeElement.style.border = '0';\n  fakeElement.style.padding = '0';\n  fakeElement.style.margin = '0'; // Move element out of screen horizontally\n\n  fakeElement.style.position = 'absolute';\n  fakeElement.style[isRTL ? 'right' : 'left'] = '-9999px'; // Move element to the same position vertically\n\n  var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n  fakeElement.style.top = \"\".concat(yPosition, \"px\");\n  fakeElement.setAttribute('readonly', '');\n  fakeElement.value = value;\n  return fakeElement;\n}\n;// CONCATENATED MODULE: ./src/actions/copy.js\n\n\n\n/**\n * Create fake copy action wrapper using a fake element.\n * @param {String} target\n * @param {Object} options\n * @return {String}\n */\n\nvar fakeCopyAction = function fakeCopyAction(value, options) {\n  var fakeElement = createFakeElement(value);\n  options.container.appendChild(fakeElement);\n  var selectedText = select_default()(fakeElement);\n  command('copy');\n  fakeElement.remove();\n  return selectedText;\n};\n/**\n * Copy action wrapper.\n * @param {String|HTMLElement} target\n * @param {Object} options\n * @return {String}\n */\n\n\nvar ClipboardActionCopy = function ClipboardActionCopy(target) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n    container: document.body\n  };\n  var selectedText = '';\n\n  if (typeof target === 'string') {\n    selectedText = fakeCopyAction(target, options);\n  } else if (target instanceof HTMLInputElement && !['text', 'search', 'url', 'tel', 'password'].includes(target === null || target === void 0 ? void 0 : target.type)) {\n    // If input type doesn't support `setSelectionRange`. Simulate it. https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n    selectedText = fakeCopyAction(target.value, options);\n  } else {\n    selectedText = select_default()(target);\n    command('copy');\n  }\n\n  return selectedText;\n};\n\n/* harmony default export */ var actions_copy = (ClipboardActionCopy);\n;// CONCATENATED MODULE: ./src/actions/default.js\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n\n/**\n * Inner function which performs selection from either `text` or `target`\n * properties and then executes copy or cut operations.\n * @param {Object} options\n */\n\nvar ClipboardActionDefault = function ClipboardActionDefault() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  // Defines base properties passed from constructor.\n  var _options$action = options.action,\n      action = _options$action === void 0 ? 'copy' : _options$action,\n      container = options.container,\n      target = options.target,\n      text = options.text; // Sets the `action` to be performed which can be either 'copy' or 'cut'.\n\n  if (action !== 'copy' && action !== 'cut') {\n    throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n  } // Sets the `target` property using an element that will be have its content copied.\n\n\n  if (target !== undefined) {\n    if (target && _typeof(target) === 'object' && target.nodeType === 1) {\n      if (action === 'copy' && target.hasAttribute('disabled')) {\n        throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n      }\n\n      if (action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n        throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n      }\n    } else {\n      throw new Error('Invalid \"target\" value, use a valid Element');\n    }\n  } // Define selection strategy based on `text` property.\n\n\n  if (text) {\n    return actions_copy(text, {\n      container: container\n    });\n  } // Defines which selection strategy based on `target` property.\n\n\n  if (target) {\n    return action === 'cut' ? actions_cut(target) : actions_copy(target, {\n      container: container\n    });\n  }\n};\n\n/* harmony default export */ var actions_default = (ClipboardActionDefault);\n;// CONCATENATED MODULE: ./src/clipboard.js\nfunction clipboard_typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { clipboard_typeof = function _typeof(obj) { return typeof obj; }; } else { clipboard_typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return clipboard_typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (clipboard_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n\n\n\n\n\n/**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n\nfunction getAttributeValue(suffix, element) {\n  var attribute = \"data-clipboard-\".concat(suffix);\n\n  if (!element.hasAttribute(attribute)) {\n    return;\n  }\n\n  return element.getAttribute(attribute);\n}\n/**\n * Base class which takes one or more elements, adds event listeners to them,\n * and instantiates a new `ClipboardAction` on each click.\n */\n\n\nvar Clipboard = /*#__PURE__*/function (_Emitter) {\n  _inherits(Clipboard, _Emitter);\n\n  var _super = _createSuper(Clipboard);\n\n  /**\n   * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n   * @param {Object} options\n   */\n  function Clipboard(trigger, options) {\n    var _this;\n\n    _classCallCheck(this, Clipboard);\n\n    _this = _super.call(this);\n\n    _this.resolveOptions(options);\n\n    _this.listenClick(trigger);\n\n    return _this;\n  }\n  /**\n   * Defines if attributes would be resolved using internal setter functions\n   * or custom functions that were passed in the constructor.\n   * @param {Object} options\n   */\n\n\n  _createClass(Clipboard, [{\n    key: \"resolveOptions\",\n    value: function resolveOptions() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n      this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n      this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n      this.container = clipboard_typeof(options.container) === 'object' ? options.container : document.body;\n    }\n    /**\n     * Adds a click event listener to the passed trigger.\n     * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n     */\n\n  }, {\n    key: \"listenClick\",\n    value: function listenClick(trigger) {\n      var _this2 = this;\n\n      this.listener = listen_default()(trigger, 'click', function (e) {\n        return _this2.onClick(e);\n      });\n    }\n    /**\n     * Defines a new `ClipboardAction` on each click event.\n     * @param {Event} e\n     */\n\n  }, {\n    key: \"onClick\",\n    value: function onClick(e) {\n      var trigger = e.delegateTarget || e.currentTarget;\n      var action = this.action(trigger) || 'copy';\n      var text = actions_default({\n        action: action,\n        container: this.container,\n        target: this.target(trigger),\n        text: this.text(trigger)\n      }); // Fires an event based on the copy operation result.\n\n      this.emit(text ? 'success' : 'error', {\n        action: action,\n        text: text,\n        trigger: trigger,\n        clearSelection: function clearSelection() {\n          if (trigger) {\n            trigger.focus();\n          }\n\n          window.getSelection().removeAllRanges();\n        }\n      });\n    }\n    /**\n     * Default `action` lookup function.\n     * @param {Element} trigger\n     */\n\n  }, {\n    key: \"defaultAction\",\n    value: function defaultAction(trigger) {\n      return getAttributeValue('action', trigger);\n    }\n    /**\n     * Default `target` lookup function.\n     * @param {Element} trigger\n     */\n\n  }, {\n    key: \"defaultTarget\",\n    value: function defaultTarget(trigger) {\n      var selector = getAttributeValue('target', trigger);\n\n      if (selector) {\n        return document.querySelector(selector);\n      }\n    }\n    /**\n     * Allow fire programmatically a copy action\n     * @param {String|HTMLElement} target\n     * @param {Object} options\n     * @returns Text copied.\n     */\n\n  }, {\n    key: \"defaultText\",\n\n    /**\n     * Default `text` lookup function.\n     * @param {Element} trigger\n     */\n    value: function defaultText(trigger) {\n      return getAttributeValue('text', trigger);\n    }\n    /**\n     * Destroy lifecycle.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.listener.destroy();\n    }\n  }], [{\n    key: \"copy\",\n    value: function copy(target) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n        container: document.body\n      };\n      return actions_copy(target, options);\n    }\n    /**\n     * Allow fire programmatically a cut action\n     * @param {String|HTMLElement} target\n     * @returns Text cutted.\n     */\n\n  }, {\n    key: \"cut\",\n    value: function cut(target) {\n      return actions_cut(target);\n    }\n    /**\n     * Returns the support of the given action, or all actions if no action is\n     * given.\n     * @param {String} [action]\n     */\n\n  }, {\n    key: \"isSupported\",\n    value: function isSupported() {\n      var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n      var actions = typeof action === 'string' ? [action] : action;\n      var support = !!document.queryCommandSupported;\n      actions.forEach(function (action) {\n        support = support && !!document.queryCommandSupported(action);\n      });\n      return support;\n    }\n  }]);\n\n  return Clipboard;\n}((tiny_emitter_default()));\n\n/* harmony default export */ var clipboard = (Clipboard);\n\n/***/ }),\n\n/***/ 828:\n/***/ (function(module) {\n\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n    var proto = Element.prototype;\n\n    proto.matches = proto.matchesSelector ||\n                    proto.mozMatchesSelector ||\n                    proto.msMatchesSelector ||\n                    proto.oMatchesSelector ||\n                    proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n    while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n        if (typeof element.matches === 'function' &&\n            element.matches(selector)) {\n          return element;\n        }\n        element = element.parentNode;\n    }\n}\n\nmodule.exports = closest;\n\n\n/***/ }),\n\n/***/ 438:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar closest = __webpack_require__(828);\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n    var listenerFn = listener.apply(this, arguments);\n\n    element.addEventListener(type, listenerFn, useCapture);\n\n    return {\n        destroy: function() {\n            element.removeEventListener(type, listenerFn, useCapture);\n        }\n    }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n    // Handle the regular Element usage\n    if (typeof elements.addEventListener === 'function') {\n        return _delegate.apply(null, arguments);\n    }\n\n    // Handle Element-less usage, it defaults to global delegation\n    if (typeof type === 'function') {\n        // Use `document` as the first parameter, then apply arguments\n        // This is a short way to .unshift `arguments` without running into deoptimizations\n        return _delegate.bind(null, document).apply(null, arguments);\n    }\n\n    // Handle Selector-based usage\n    if (typeof elements === 'string') {\n        elements = document.querySelectorAll(elements);\n    }\n\n    // Handle Array-like based usage\n    return Array.prototype.map.call(elements, function (element) {\n        return _delegate(element, selector, type, callback, useCapture);\n    });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n    return function(e) {\n        e.delegateTarget = closest(e.target, selector);\n\n        if (e.delegateTarget) {\n            callback.call(element, e);\n        }\n    }\n}\n\nmodule.exports = delegate;\n\n\n/***/ }),\n\n/***/ 879:\n/***/ (function(__unused_webpack_module, exports) {\n\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n    return value !== undefined\n        && value instanceof HTMLElement\n        && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n    var type = Object.prototype.toString.call(value);\n\n    return value !== undefined\n        && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n        && ('length' in value)\n        && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n    return typeof value === 'string'\n        || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n    var type = Object.prototype.toString.call(value);\n\n    return type === '[object Function]';\n};\n\n\n/***/ }),\n\n/***/ 370:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar is = __webpack_require__(879);\nvar delegate = __webpack_require__(438);\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n    if (!target && !type && !callback) {\n        throw new Error('Missing required arguments');\n    }\n\n    if (!is.string(type)) {\n        throw new TypeError('Second argument must be a String');\n    }\n\n    if (!is.fn(callback)) {\n        throw new TypeError('Third argument must be a Function');\n    }\n\n    if (is.node(target)) {\n        return listenNode(target, type, callback);\n    }\n    else if (is.nodeList(target)) {\n        return listenNodeList(target, type, callback);\n    }\n    else if (is.string(target)) {\n        return listenSelector(target, type, callback);\n    }\n    else {\n        throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n    }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n    node.addEventListener(type, callback);\n\n    return {\n        destroy: function() {\n            node.removeEventListener(type, callback);\n        }\n    }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n    Array.prototype.forEach.call(nodeList, function(node) {\n        node.addEventListener(type, callback);\n    });\n\n    return {\n        destroy: function() {\n            Array.prototype.forEach.call(nodeList, function(node) {\n                node.removeEventListener(type, callback);\n            });\n        }\n    }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n    return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n\n/***/ }),\n\n/***/ 817:\n/***/ (function(module) {\n\nfunction select(element) {\n    var selectedText;\n\n    if (element.nodeName === 'SELECT') {\n        element.focus();\n\n        selectedText = element.value;\n    }\n    else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n        var isReadOnly = element.hasAttribute('readonly');\n\n        if (!isReadOnly) {\n            element.setAttribute('readonly', '');\n        }\n\n        element.select();\n        element.setSelectionRange(0, element.value.length);\n\n        if (!isReadOnly) {\n            element.removeAttribute('readonly');\n        }\n\n        selectedText = element.value;\n    }\n    else {\n        if (element.hasAttribute('contenteditable')) {\n            element.focus();\n        }\n\n        var selection = window.getSelection();\n        var range = document.createRange();\n\n        range.selectNodeContents(element);\n        selection.removeAllRanges();\n        selection.addRange(range);\n\n        selectedText = selection.toString();\n    }\n\n    return selectedText;\n}\n\nmodule.exports = select;\n\n\n/***/ }),\n\n/***/ 279:\n/***/ (function(module) {\n\nfunction E () {\n  // Keep this empty so it's easier to inherit from\n  // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n  on: function (name, callback, ctx) {\n    var e = this.e || (this.e = {});\n\n    (e[name] || (e[name] = [])).push({\n      fn: callback,\n      ctx: ctx\n    });\n\n    return this;\n  },\n\n  once: function (name, callback, ctx) {\n    var self = this;\n    function listener () {\n      self.off(name, listener);\n      callback.apply(ctx, arguments);\n    };\n\n    listener._ = callback\n    return this.on(name, listener, ctx);\n  },\n\n  emit: function (name) {\n    var data = [].slice.call(arguments, 1);\n    var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n    var i = 0;\n    var len = evtArr.length;\n\n    for (i; i < len; i++) {\n      evtArr[i].fn.apply(evtArr[i].ctx, data);\n    }\n\n    return this;\n  },\n\n  off: function (name, callback) {\n    var e = this.e || (this.e = {});\n    var evts = e[name];\n    var liveEvents = [];\n\n    if (evts && callback) {\n      for (var i = 0, len = evts.length; i < len; i++) {\n        if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n          liveEvents.push(evts[i]);\n      }\n    }\n\n    // Remove event from queue to prevent memory leak\n    // Suggested by https://github.com/lazd\n    // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n    (liveEvents.length)\n      ? e[name] = liveEvents\n      : delete e[name];\n\n    return this;\n  }\n};\n\nmodule.exports = E;\nmodule.exports.TinyEmitter = E;\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(__webpack_module_cache__[moduleId]) {\n/******/ \t\t\treturn __webpack_module_cache__[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t// module exports must be returned from runtime so entry inlining is disabled\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(686);\n/******/ })()\n.default;\n});","import Clipboard from 'clipboard'\n\n/**\n * Copy plain text to the clipboard using a throwaway button element.\n *\n * @param text - The text to copy.\n * @param container - The element the temporary clipboard target lives in;\n *   falls back to `document.body` when not a valid object.\n * @returns A promise that resolves once the copy succeeds and rejects on failure.\n * @example\n * await copyText('hello', document.body)\n */\nexport function copyText(text: string, container: Element): Promise<void> {\n  return new Promise(function (\n    resolve: (value?: undefined) => void,\n    reject: (value?: Clipboard.Event) => void\n  ) {\n    const fakeElement = document.createElement('button')\n    // Fall back to the document body when no valid container is provided.\n    container = typeof container === 'object' ? container : document.body\n\n    const clipboard: Clipboard = new Clipboard(fakeElement, {\n      text: () => text,\n      container\n    })\n\n    clipboard.on('success', () => {\n      clipboard.destroy()\n      resolve()\n    })\n\n    clipboard.on('error', (error) => {\n      clipboard.destroy()\n      reject(error)\n    })\n\n    fakeElement.click()\n  })\n}\n\n/**\n * Copy rich content to the clipboard with both HTML and plain-text flavors.\n *\n * @param html - The HTML representation written to the `text/html` flavor.\n * @param plain - The fallback text written to the `text/plain` flavor.\n * @example\n * copyHtml('<b>hello</b>', 'hello')\n */\nexport function copyHtml(html: string, plain: string) {\n  interface ClipboardEvent extends Event {\n    clipboardData: {\n      setData: (attribute: string, value: string) => void\n    }\n  }\n\n  function writeClipboardFlavors(event: ClipboardEvent) {\n    event.clipboardData.setData('text/html', html)\n    event.clipboardData.setData('text/plain', plain)\n    event.preventDefault()\n  }\n\n  document.addEventListener('copy', writeClipboardFlavors as EventListener)\n  document.execCommand('copy')\n  document.removeEventListener('copy', writeClipboardFlavors as EventListener)\n}\n","<script setup lang=\"ts\">\nimport { BButton, BTooltip, PopoverPlacement, ButtonVariant } from 'bootstrap-vue-next'\nimport uniqueId from 'lodash/uniqueId'\nimport {\n  ComponentPublicInstance,\n  computed,\n  markRaw,\n  ref,\n  type Component\n} from 'vue'\nimport { useI18n } from 'vue-i18n'\n\nimport AppIcon from '@/components/App/AppIcon.vue'\nimport AppIconLayers from '@/components/App/AppIconLayers.vue'\n\nimport { useHapticCopy } from '@/composables/useHapticCopy'\nimport { copyHtml, copyText } from '@/utils/clipboard'\nimport IPhCheckFatFill from '~icons/ph/check-fat-fill'\nimport IPhClipboard from '~icons/ph/clipboard'\n\nexport interface HapticCopyProps {\n  /**\n   * HTML tag or component to render\n   */\n  tag?: string | Component\n  /**\n   * Text to copy to the clipboard\n   */\n  text?: string | number | null\n  /**\n   * Plain text to use as an alternative text for HTML copy (uses `text` by default)\n   */\n  plain?: string | null\n  /**\n   * Hide the button label (still visible for screen reader)\n   */\n  hideLabel?: boolean\n  /**\n   * Button label\n   */\n  label?: string | null\n  /**\n   * Delay after which we hide the tooltip\n   */\n  tooltipHideDelay?: number\n  /**\n   * Placement of the tooltip. Can be: top, topleft, topright, right,\n   * righttop, rightbottom, bottom, bottomleft, bottomright, left, lefttop,\n   * and leftbottom.\n   */\n  tooltipPlacement?: PopoverPlacement\n  /**\n   * Copy HTML content\n   */\n  html?: boolean\n  /**\n   * Deactivate haptic tooltip display\n   */\n  noTooltip?: boolean\n  /**\n   * Button variant\n   */\n  variant?: ButtonVariant\n}\n\nconst props = withDefaults(defineProps<HapticCopyProps>(), {\n  tag: () => markRaw(BButton),\n  text: null,\n  plain: null,\n  hideLabel: false,\n  label: null,\n  tooltipHideDelay: 1e3,\n  tooltipPlacement: 'top',\n  html: false,\n  noTooltip: false,\n  variant: 'primary'\n})\n\nconst emit = defineEmits(['attempt', 'success', 'error', 'hideClipboardTooltip'])\n\nconst { t, te } = useI18n()\nconst tooltip = ref<ComponentPublicInstance | null>(null)\nconst el = ref<ComponentPublicInstance<HTMLElement> | null>(null)\nconst buttonId = computed(() => uniqueId('haptic-copy-'))\nconst buttonBinding = computed(() => {\n  // Vue's Component type doesn't statically expose a `props` declaration; we\n  // only need to probe whether this particular tag declares a `variant` prop\n  // (as bootstrap-vue-next's button-like components do).\n  const tag = props.tag as { props?: Record<string, unknown> } | string\n  if (typeof tag !== 'string' && tag.props?.['variant']) {\n    return { variant: props.variant }\n  }\n  return { }\n})\n\n// Use clipboard.js internally, copying either rich HTML or plain text.\nfunction copyTextOrHtml(): void | Promise<void> {\n  if (props.html) {\n    return copyHtml(String(props.text), String(props.plain ?? props.text))\n  }\n  return el.value ? copyText(String(props.text), el.value.$el) : Promise.resolve()\n}\n\n// Resolve a known i18n key to its translation, leaving arbitrary strings as-is.\nfunction resolveTooltipMessage(message: string): string {\n  return te(message) ? t(message) : message\n}\n\nconst {\n  tooltipContent,\n  showTooltip: showClipboardTooltip,\n  isVisible,\n  copy,\n  close\n} = useHapticCopy({\n  copy: copyTextOrHtml,\n  resolveMessage: resolveTooltipMessage,\n  hideDelay: () => props.tooltipHideDelay,\n  /**\n   * Emitted when an attempt to copy text is made\n   *\n   * @event attempt\n   */\n  onAttempt: () => emit('attempt'),\n  /**\n   * Emitted when the text has been copied successfully\n   *\n   * @event success\n   */\n  onSuccess: () => emit('success'),\n  /**\n   * Emitted when the text couldn't be copied\n   *\n   * @event error\n   */\n  onError: error => emit('error', error),\n  onHide: () => emit('hideClipboardTooltip')\n})\n\ndefineExpose({\n  hide: close,\n  copy,\n  tooltipContent\n})\n</script>\n\n<template>\n  <component\n    :is=\"tag\"\n    :id=\"buttonId\"\n    ref=\"el\"\n    v-bind=\"buttonBinding\"\n    class=\"haptic-copy\"\n    @mouseleave=\"close\"\n    @click.stop=\"copy\"\n  >\n    <!-- @slot Main content of the button (including the icon) -->\n    <slot>\n      <app-icon-layers>\n        <transition name=\"spin\">\n          <app-icon\n            v-if=\"!isVisible\"\n            class=\"haptic-copy__icon\"\n          >\n            <i-ph-clipboard />\n          </app-icon>\n        </transition>\n        <transition name=\"spin\">\n          <app-icon\n            v-if=\"isVisible\"\n            class=\"haptic-copy__icon\"\n          >\n            <i-ph-check-fat-fill />\n          </app-icon>\n        </transition>\n      </app-icon-layers>\n      <span\n        :class=\"{ 'visually-hidden': hideLabel }\"\n        class=\"ms-2 haptic-copy__label\"\n      >\n        {{ label || t('haptic-copy.label') }}\n      </span>\n    </slot>\n    <b-tooltip\n      v-if=\"!noTooltip\"\n      ref=\"tooltip\"\n      :model-value=\"showClipboardTooltip\"\n      :placement=\"tooltipPlacement\"\n      :target=\"buttonId\"\n      teleport-to=\"body\"\n      manual\n      noninteractive\n    >\n      {{ tooltipContent }}\n    </b-tooltip>\n  </component>\n</template>\n<style lang=\"scss\">\n.haptic-copy {\n  &__icon {\n    transform: rotate(0deg) translate(-50%, -50%);\n\n    &.spin-enter-active,\n    &.spin-leave-active {\n      transition: all 500ms;\n    }\n\n    &.spin-enter-from {\n      transform: rotate(-180deg) translate(-50%, -50%);\n      opacity: 0;\n    }\n\n    &.spin-leave-to {\n      transform: rotate(180deg) translate(-50%, -50%);\n      opacity: 0;\n    }\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { BButton, BTooltip, PopoverPlacement, ButtonVariant } from 'bootstrap-vue-next'\nimport uniqueId from 'lodash/uniqueId'\nimport {\n  ComponentPublicInstance,\n  computed,\n  markRaw,\n  ref,\n  type Component\n} from 'vue'\nimport { useI18n } from 'vue-i18n'\n\nimport AppIcon from '@/components/App/AppIcon.vue'\nimport AppIconLayers from '@/components/App/AppIconLayers.vue'\n\nimport { useHapticCopy } from '@/composables/useHapticCopy'\nimport { copyHtml, copyText } from '@/utils/clipboard'\nimport IPhCheckFatFill from '~icons/ph/check-fat-fill'\nimport IPhClipboard from '~icons/ph/clipboard'\n\nexport interface HapticCopyProps {\n  /**\n   * HTML tag or component to render\n   */\n  tag?: string | Component\n  /**\n   * Text to copy to the clipboard\n   */\n  text?: string | number | null\n  /**\n   * Plain text to use as an alternative text for HTML copy (uses `text` by default)\n   */\n  plain?: string | null\n  /**\n   * Hide the button label (still visible for screen reader)\n   */\n  hideLabel?: boolean\n  /**\n   * Button label\n   */\n  label?: string | null\n  /**\n   * Delay after which we hide the tooltip\n   */\n  tooltipHideDelay?: number\n  /**\n   * Placement of the tooltip. Can be: top, topleft, topright, right,\n   * righttop, rightbottom, bottom, bottomleft, bottomright, left, lefttop,\n   * and leftbottom.\n   */\n  tooltipPlacement?: PopoverPlacement\n  /**\n   * Copy HTML content\n   */\n  html?: boolean\n  /**\n   * Deactivate haptic tooltip display\n   */\n  noTooltip?: boolean\n  /**\n   * Button variant\n   */\n  variant?: ButtonVariant\n}\n\nconst props = withDefaults(defineProps<HapticCopyProps>(), {\n  tag: () => markRaw(BButton),\n  text: null,\n  plain: null,\n  hideLabel: false,\n  label: null,\n  tooltipHideDelay: 1e3,\n  tooltipPlacement: 'top',\n  html: false,\n  noTooltip: false,\n  variant: 'primary'\n})\n\nconst emit = defineEmits(['attempt', 'success', 'error', 'hideClipboardTooltip'])\n\nconst { t, te } = useI18n()\nconst tooltip = ref<ComponentPublicInstance | null>(null)\nconst el = ref<ComponentPublicInstance<HTMLElement> | null>(null)\nconst buttonId = computed(() => uniqueId('haptic-copy-'))\nconst buttonBinding = computed(() => {\n  // Vue's Component type doesn't statically expose a `props` declaration; we\n  // only need to probe whether this particular tag declares a `variant` prop\n  // (as bootstrap-vue-next's button-like components do).\n  const tag = props.tag as { props?: Record<string, unknown> } | string\n  if (typeof tag !== 'string' && tag.props?.['variant']) {\n    return { variant: props.variant }\n  }\n  return { }\n})\n\n// Use clipboard.js internally, copying either rich HTML or plain text.\nfunction copyTextOrHtml(): void | Promise<void> {\n  if (props.html) {\n    return copyHtml(String(props.text), String(props.plain ?? props.text))\n  }\n  return el.value ? copyText(String(props.text), el.value.$el) : Promise.resolve()\n}\n\n// Resolve a known i18n key to its translation, leaving arbitrary strings as-is.\nfunction resolveTooltipMessage(message: string): string {\n  return te(message) ? t(message) : message\n}\n\nconst {\n  tooltipContent,\n  showTooltip: showClipboardTooltip,\n  isVisible,\n  copy,\n  close\n} = useHapticCopy({\n  copy: copyTextOrHtml,\n  resolveMessage: resolveTooltipMessage,\n  hideDelay: () => props.tooltipHideDelay,\n  /**\n   * Emitted when an attempt to copy text is made\n   *\n   * @event attempt\n   */\n  onAttempt: () => emit('attempt'),\n  /**\n   * Emitted when the text has been copied successfully\n   *\n   * @event success\n   */\n  onSuccess: () => emit('success'),\n  /**\n   * Emitted when the text couldn't be copied\n   *\n   * @event error\n   */\n  onError: error => emit('error', error),\n  onHide: () => emit('hideClipboardTooltip')\n})\n\ndefineExpose({\n  hide: close,\n  copy,\n  tooltipContent\n})\n</script>\n\n<template>\n  <component\n    :is=\"tag\"\n    :id=\"buttonId\"\n    ref=\"el\"\n    v-bind=\"buttonBinding\"\n    class=\"haptic-copy\"\n    @mouseleave=\"close\"\n    @click.stop=\"copy\"\n  >\n    <!-- @slot Main content of the button (including the icon) -->\n    <slot>\n      <app-icon-layers>\n        <transition name=\"spin\">\n          <app-icon\n            v-if=\"!isVisible\"\n            class=\"haptic-copy__icon\"\n          >\n            <i-ph-clipboard />\n          </app-icon>\n        </transition>\n        <transition name=\"spin\">\n          <app-icon\n            v-if=\"isVisible\"\n            class=\"haptic-copy__icon\"\n          >\n            <i-ph-check-fat-fill />\n          </app-icon>\n        </transition>\n      </app-icon-layers>\n      <span\n        :class=\"{ 'visually-hidden': hideLabel }\"\n        class=\"ms-2 haptic-copy__label\"\n      >\n        {{ label || t('haptic-copy.label') }}\n      </span>\n    </slot>\n    <b-tooltip\n      v-if=\"!noTooltip\"\n      ref=\"tooltip\"\n      :model-value=\"showClipboardTooltip\"\n      :placement=\"tooltipPlacement\"\n      :target=\"buttonId\"\n      teleport-to=\"body\"\n      manual\n      noninteractive\n    >\n      {{ tooltipContent }}\n    </b-tooltip>\n  </component>\n</template>\n<style lang=\"scss\">\n.haptic-copy {\n  &__icon {\n    transform: rotate(0deg) translate(-50%, -50%);\n\n    &.spin-enter-active,\n    &.spin-leave-active {\n      transition: all 500ms;\n    }\n\n    &.spin-enter-from {\n      transform: rotate(-180deg) translate(-50%, -50%);\n      opacity: 0;\n    }\n\n    &.spin-leave-to {\n      transform: rotate(180deg) translate(-50%, -50%);\n      opacity: 0;\n    }\n  }\n}\n</style>\n","/**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n *  else `false`.\n */\nfunction arrayEvery(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (!predicate(array[index], index, array)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nmodule.exports = arrayEvery;\n","var baseEach = require('./_baseEach');\n\n/**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n *  else `false`\n */\nfunction baseEvery(collection, predicate) {\n  var result = true;\n  baseEach(collection, function(value, index, collection) {\n    result = !!predicate(value, index, collection);\n    return result;\n  });\n  return result;\n}\n\nmodule.exports = baseEvery;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var ListCache = require('./_ListCache'),\n    Map = require('./_Map'),\n    MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\nmodule.exports = stackSet;\n","var ListCache = require('./_ListCache'),\n    stackClear = require('./_stackClear'),\n    stackDelete = require('./_stackDelete'),\n    stackGet = require('./_stackGet'),\n    stackHas = require('./_stackHas'),\n    stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n  this.__data__.set(value, HASH_UNDEFINED);\n  return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n  return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","var MapCache = require('./_MapCache'),\n    setCacheAdd = require('./_setCacheAdd'),\n    setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n  var index = -1,\n      length = values == null ? 0 : values.length;\n\n  this.__data__ = new MapCache;\n  while (++index < length) {\n    this.add(values[index]);\n  }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nmodule.exports = arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n  return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var SetCache = require('./_SetCache'),\n    arraySome = require('./_arraySome'),\n    cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\n  // Check that cyclic values are equal.\n  var arrStacked = stack.get(array);\n  var othStacked = stack.get(other);\n  if (arrStacked && othStacked) {\n    return arrStacked == other && othStacked == array;\n  }\n  var index = -1,\n      result = true,\n      seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n  stack.set(array, other);\n  stack.set(other, array);\n\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, arrValue, index, other, array, stack)\n        : customizer(arrValue, othValue, index, array, other, stack);\n    }\n    if (compared !== undefined) {\n      if (compared) {\n        continue;\n      }\n      result = false;\n      break;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (seen) {\n      if (!arraySome(other, function(othValue, othIndex) {\n            if (!cacheHas(seen, othIndex) &&\n                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n              return seen.push(othIndex);\n            }\n          })) {\n        result = false;\n        break;\n      }\n    } else if (!(\n          arrValue === othValue ||\n            equalFunc(arrValue, othValue, bitmask, customizer, stack)\n        )) {\n      result = false;\n      break;\n    }\n  }\n  stack['delete'](array);\n  stack['delete'](other);\n  return result;\n}\n\nmodule.exports = equalArrays;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n  var index = -1,\n      result = Array(map.size);\n\n  map.forEach(function(value, key) {\n    result[++index] = [key, value];\n  });\n  return result;\n}\n\nmodule.exports = mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\n\nmodule.exports = setToArray;\n","var Symbol = require('./_Symbol'),\n    Uint8Array = require('./_Uint8Array'),\n    eq = require('./eq'),\n    equalArrays = require('./_equalArrays'),\n    mapToArray = require('./_mapToArray'),\n    setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n  switch (tag) {\n    case dataViewTag:\n      if ((object.byteLength != other.byteLength) ||\n          (object.byteOffset != other.byteOffset)) {\n        return false;\n      }\n      object = object.buffer;\n      other = other.buffer;\n\n    case arrayBufferTag:\n      if ((object.byteLength != other.byteLength) ||\n          !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n        return false;\n      }\n      return true;\n\n    case boolTag:\n    case dateTag:\n    case numberTag:\n      // Coerce booleans to `1` or `0` and dates to milliseconds.\n      // Invalid dates are coerced to `NaN`.\n      return eq(+object, +other);\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings, primitives and objects,\n      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n      // for more details.\n      return object == (other + '');\n\n    case mapTag:\n      var convert = mapToArray;\n\n    case setTag:\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n      convert || (convert = setToArray);\n\n      if (object.size != other.size && !isPartial) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(object);\n      if (stacked) {\n        return stacked == other;\n      }\n      bitmask |= COMPARE_UNORDERED_FLAG;\n\n      // Recursively compare objects (susceptible to call stack limits).\n      stack.set(object, other);\n      var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n      stack['delete'](object);\n      return result;\n\n    case symbolTag:\n      if (symbolValueOf) {\n        return symbolValueOf.call(object) == symbolValueOf.call(other);\n      }\n  }\n  return false;\n}\n\nmodule.exports = equalByTag;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\nmodule.exports = arrayPush;\n","var arrayPush = require('./_arrayPush'),\n    isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\nmodule.exports = stubArray;\n","var arrayFilter = require('./_arrayFilter'),\n    stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\nmodule.exports = getSymbols;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n    getSymbols = require('./_getSymbols'),\n    keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\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 * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      objProps = getAllKeys(object),\n      objLength = objProps.length,\n      othProps = getAllKeys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isPartial) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  // Check that cyclic values are equal.\n  var objStacked = stack.get(object);\n  var othStacked = stack.get(other);\n  if (objStacked && othStacked) {\n    return objStacked == other && othStacked == object;\n  }\n  var result = true;\n  stack.set(object, other);\n  stack.set(other, object);\n\n  var skipCtor = isPartial;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, objValue, key, other, object, stack)\n        : customizer(objValue, othValue, key, object, other, stack);\n    }\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(compared === undefined\n          ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n          : compared\n        )) {\n      result = false;\n      break;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (result && !skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      result = false;\n    }\n  }\n  stack['delete'](object);\n  stack['delete'](other);\n  return result;\n}\n\nmodule.exports = equalObjects;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","var DataView = require('./_DataView'),\n    Map = require('./_Map'),\n    Promise = require('./_Promise'),\n    Set = require('./_Set'),\n    WeakMap = require('./_WeakMap'),\n    baseGetTag = require('./_baseGetTag'),\n    toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    setTag = '[object Set]',\n    weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\nmodule.exports = getTag;\n","var Stack = require('./_Stack'),\n    equalArrays = require('./_equalArrays'),\n    equalByTag = require('./_equalByTag'),\n    equalObjects = require('./_equalObjects'),\n    getTag = require('./_getTag'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    objectTag = '[object Object]';\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 * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = objIsArr ? arrayTag : getTag(object),\n      othTag = othIsArr ? arrayTag : getTag(other);\n\n  objTag = objTag == argsTag ? objectTag : objTag;\n  othTag = othTag == argsTag ? objectTag : othTag;\n\n  var objIsObj = objTag == objectTag,\n      othIsObj = othTag == objectTag,\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && isBuffer(object)) {\n    if (!isBuffer(other)) {\n      return false;\n    }\n    objIsArr = true;\n    objIsObj = false;\n  }\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack);\n    return (objIsArr || isTypedArray(object))\n      ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n      : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n  }\n  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      var objUnwrapped = objIsWrapped ? object.value() : object,\n          othUnwrapped = othIsWrapped ? other.value() : other;\n\n      stack || (stack = new Stack);\n      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack);\n  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n    isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Unordered comparison\n *  2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var Stack = require('./_Stack'),\n    baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n  var index = matchData.length,\n      length = index,\n      noCustomizer = !customizer;\n\n  if (object == null) {\n    return !length;\n  }\n  object = Object(object);\n  while (index--) {\n    var data = matchData[index];\n    if ((noCustomizer && data[2])\n          ? data[1] !== object[data[0]]\n          : !(data[0] in object)\n        ) {\n      return false;\n    }\n  }\n  while (++index < length) {\n    data = matchData[index];\n    var key = data[0],\n        objValue = object[key],\n        srcValue = data[1];\n\n    if (noCustomizer && data[2]) {\n      if (objValue === undefined && !(key in object)) {\n        return false;\n      }\n    } else {\n      var stack = new Stack;\n      if (customizer) {\n        var result = customizer(objValue, srcValue, key, object, source, stack);\n      }\n      if (!(result === undefined\n            ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n            : result\n          )) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\nmodule.exports = baseIsMatch;\n","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n *  equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n  return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n","var isStrictComparable = require('./_isStrictComparable'),\n    keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n  var result = keys(object),\n      length = result.length;\n\n  while (length--) {\n    var key = result[length],\n        value = object[key];\n\n    result[length] = [key, value, isStrictComparable(value)];\n  }\n  return result;\n}\n\nmodule.exports = getMatchData;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n  return function(object) {\n    if (object == null) {\n      return false;\n    }\n    return object[key] === srcValue &&\n      (srcValue !== undefined || (key in Object(object)));\n  };\n}\n\nmodule.exports = matchesStrictComparable;\n","var baseIsMatch = require('./_baseIsMatch'),\n    getMatchData = require('./_getMatchData'),\n    matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n  var matchData = getMatchData(source);\n  if (matchData.length == 1 && matchData[0][2]) {\n    return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n  }\n  return function(object) {\n    return object === source || baseIsMatch(object, source, matchData);\n  };\n}\n\nmodule.exports = baseMatches;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n  return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var castPath = require('./_castPath'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isIndex = require('./_isIndex'),\n    isLength = require('./isLength'),\n    toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      result = false;\n\n  while (++index < length) {\n    var key = toKey(path[index]);\n    if (!(result = object != null && hasFunc(object, key))) {\n      break;\n    }\n    object = object[key];\n  }\n  if (result || ++index != length) {\n    return result;\n  }\n  length = object == null ? 0 : object.length;\n  return !!length && isLength(length) && isIndex(key, length) &&\n    (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","var baseHasIn = require('./_baseHasIn'),\n    hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n  return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","var baseIsEqual = require('./_baseIsEqual'),\n    get = require('./get'),\n    hasIn = require('./hasIn'),\n    isKey = require('./_isKey'),\n    isStrictComparable = require('./_isStrictComparable'),\n    matchesStrictComparable = require('./_matchesStrictComparable'),\n    toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n  if (isKey(path) && isStrictComparable(srcValue)) {\n    return matchesStrictComparable(toKey(path), srcValue);\n  }\n  return function(object) {\n    var objValue = get(object, path);\n    return (objValue === undefined && objValue === srcValue)\n      ? hasIn(object, path)\n      : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n  };\n}\n\nmodule.exports = baseMatchesProperty;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\nmodule.exports = baseProperty;\n","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n  return function(object) {\n    return baseGet(object, path);\n  };\n}\n\nmodule.exports = basePropertyDeep;\n","var baseProperty = require('./_baseProperty'),\n    basePropertyDeep = require('./_basePropertyDeep'),\n    isKey = require('./_isKey'),\n    toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n *   { 'a': { 'b': 2 } },\n *   { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n  return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n","var baseMatches = require('./_baseMatches'),\n    baseMatchesProperty = require('./_baseMatchesProperty'),\n    identity = require('./identity'),\n    isArray = require('./isArray'),\n    property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n  // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n  // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n  if (typeof value == 'function') {\n    return value;\n  }\n  if (value == null) {\n    return identity;\n  }\n  if (typeof value == 'object') {\n    return isArray(value)\n      ? baseMatchesProperty(value[0], value[1])\n      : baseMatches(value);\n  }\n  return property(value);\n}\n\nmodule.exports = baseIteratee;\n","var eq = require('./eq'),\n    isArrayLike = require('./isArrayLike'),\n    isIndex = require('./_isIndex'),\n    isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n *  else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike(object) && isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq(object[index], value);\n  }\n  return false;\n}\n\nmodule.exports = isIterateeCall;\n","var arrayEvery = require('./_arrayEvery'),\n    baseEvery = require('./_baseEvery'),\n    baseIteratee = require('./_baseIteratee'),\n    isArray = require('./isArray'),\n    isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n *  else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n *   { 'user': 'barney', 'age': 36, 'active': false },\n *   { 'user': 'fred',   'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\nfunction every(collection, predicate, guard) {\n  var func = isArray(collection) ? arrayEvery : baseEvery;\n  if (guard && isIterateeCall(collection, predicate, guard)) {\n    predicate = undefined;\n  }\n  return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = every;\n","var Symbol = require('./_Symbol'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n  return isArray(value) || isArguments(value) ||\n    !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n","var arrayPush = require('./_arrayPush'),\n    isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n  var index = -1,\n      length = array.length;\n\n  predicate || (predicate = isFlattenable);\n  result || (result = []);\n\n  while (++index < length) {\n    var value = array[index];\n    if (depth > 0 && predicate(value)) {\n      if (depth > 1) {\n        // Recursively flatten arrays (susceptible to call stack limits).\n        baseFlatten(value, depth - 1, predicate, isStrict, result);\n      } else {\n        arrayPush(result, value);\n      }\n    } else if (!isStrict) {\n      result[result.length] = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseFlatten;\n","var baseFlatten = require('./_baseFlatten');\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? baseFlatten(array, 1) : [];\n}\n\nmodule.exports = flatten;\n","import memoize from 'lodash/memoize'\nimport flatten from 'lodash/flatten'\n\nlet assetUniqueIdCounter = 0\n\nfunction resolveAssetParent(): HTMLElement {\n  return document.querySelector('body') || document.querySelector('head')!\n}\n\nfunction fileExtension(file: string): string {\n  const parts = file.split('.')\n  return parts[parts.length - 1].toLowerCase()\n}\n\nfunction injectScript(\n  parent: HTMLElement,\n  file: string,\n  id: string,\n  resolve: (value?: unknown) => void,\n  reject: (reason?: unknown) => void\n): void {\n  const script = document.createElement('script')\n  script.setAttribute('type', 'text/javascript')\n  script.onload = resolve\n  script.onerror = reject\n  parent.appendChild(script)\n  script.setAttribute('src', file)\n  script.setAttribute('id', id)\n}\n\nfunction injectStylesheet(\n  parent: HTMLElement,\n  file: string,\n  id: string,\n  resolve: (value?: unknown) => void,\n  reject: (reason?: unknown) => void\n): void {\n  const css = document.createElement('link')\n  css.setAttribute('rel', 'stylesheet')\n  css.setAttribute('type', 'text/css')\n  css.onload = resolve\n  css.onerror = reject\n  parent.appendChild(css)\n  css.setAttribute('href', file)\n  css.setAttribute('id', id)\n}\n\n/**\n * Inject a JS or CSS asset into the document, resolving once it loads.\n *\n * Results are memoized by file URL so the same asset is injected only once.\n *\n * @param file - The URL of the asset to inject; its extension selects the type.\n * @param id - The element id to assign; defaults to a generated unique id.\n * @returns A promise resolving when the asset loads and rejecting on failure\n *   or on an unsupported extension.\n * @example\n * await injectAsset('https://example.com/widget.js')\n */\nexport const injectAsset = memoize(function (\n  file: string,\n  id = `dynamic-asset-${assetUniqueIdCounter++}`\n): Promise<unknown> {\n  const promise = new Promise((resolve: (value?: unknown) => void, reject: (reason?: unknown) => void) => {\n    const parent = resolveAssetParent()\n    const ext = fileExtension(file)\n\n    if (ext === 'js') {\n      injectScript(parent, file, id, resolve, reject)\n    }\n    else if (ext === 'css') {\n      injectStylesheet(parent, file, id, resolve, reject)\n    }\n    else {\n      reject(new Error(`Unsupported asset extension: ${ext}`))\n    }\n  })\n  // Don't keep a failed injection cached forever, so callers can retry later.\n  return promise.catch((err) => {\n    injectAsset.cache?.delete(file)\n    throw err\n  })\n})\n\n/**\n * Inject several assets in parallel, resolving once all have settled.\n *\n * A failed asset still counts as settled so one broken URL cannot leave the\n * batch promise pending forever.\n *\n * @param args - Asset URLs, either as separate arguments or nested arrays.\n * @returns A promise resolving when every asset has loaded or failed.\n * @example\n * await injectAssets('a.js', 'b.css')\n */\nexport const injectAssets = function (...args: string[]): Promise<void> {\n  const files = flatten(args)\n  return new Promise((resolve: () => void) => {\n    if (files.length === 0) {\n      resolve()\n      return\n    }\n    let filesLoaded = 0\n    const allFilesLoaded = function () {\n      if (++filesLoaded == files.length) {\n        resolve()\n      }\n    }\n    for (const file of files) {\n      injectAsset(file)\n        .then(allFilesLoaded)\n        .catch(allFilesLoaded)\n    }\n  })\n}\n","import every from 'lodash/every'\nimport { Child as PymChild } from 'pym.js'\nimport { injectAssets } from './assets'\n\n// Holds the single Pym child instance shared across IframeResizer instances.\nlet pymChild: PymChild\n// URL parameters injected by Pym into embedded pages.\nconst pymParams = ['initialWidth', 'childId', 'parentUrl', 'parentTitle']\n// Capture the initial href once, before any navigation can change it.\nconst initialHref = window.location.href\n\n/**\n * Wraps Pym.js to let an embedded iframe report its height to its parent.\n *\n * @example\n * const resizer = IframeResizer.create()\n * await resizer.sendHeight()\n */\nexport default class IframeResizer {\n  initializer: Promise<PymChild>\n\n  constructor() {\n    this.initializer = injectAssets('//pym.nprapps.org/pym.v1.min.js').then(\n      () => {\n        pymChild = pymChild || new (window as any).pym.Child({ polling: 300 })\n        return pymChild\n      }\n    )\n  }\n\n  /**\n   * Report the current document height to the parent frame.\n   *\n   * @returns A promise resolving once the height has been sent.\n   */\n  sendHeight(): Promise<void> {\n    return this.initializer.then(pymChild => pymChild.sendHeight())\n  }\n\n  /**\n   * Build a new resizer instance.\n   *\n   * @returns A fresh `IframeResizer`.\n   */\n  static create(): IframeResizer {\n    return new IframeResizer()\n  }\n\n  /**\n   * Build the HTML snippet that embeds a given URL as a Pym-resized iframe.\n   *\n   * @param url - The URL to embed.\n   * @param id - The container element id; defaults to a generated unique id.\n   * @returns The HTML snippet wiring up the Pym parent.\n   */\n  static template(\n    url: string,\n    id: string = 'icij-' + Date.now().toString(32)\n  ): string {\n    return [\n      `<script type=\"text/javascript\" src=\"https://pym.nprapps.org/pym.v1.min.js\"></script>`,\n      `<div id=\"${id}\"></div>`,\n      `<script>`,\n      `const icijIframe = new pym.Parent(\"${id}\", \"${IframeResizer.deletePymParams(url)}\", {})`,\n      `</script>`\n    ].join('\\n')\n  }\n\n  /**\n   * Strip every Pym-injected parameter from a URL.\n   *\n   * @param href - The URL to clean; defaults to the captured initial href.\n   * @returns The URL without any Pym parameters.\n   */\n  static deletePymParams(href: string = initialHref): string {\n    const url = new URL(href)\n    for (const param of pymParams) {\n      url.searchParams.delete(param)\n    }\n    return url.href\n  }\n\n  /**\n   * Tell whether a URL is being viewed inside a Pym iframe.\n   *\n   * @param href - The URL to inspect; defaults to the captured initial href.\n   * @returns `true` when every Pym parameter is present.\n   */\n  static isEmbedded(href: string = initialHref): boolean {\n    const url = new URL(href)\n    return every(pymParams, param => url.searchParams.has(param))\n  }\n}\n","import { computed, toValue } from 'vue'\nimport type { ComputedRef, MaybeRefOrGetter } from 'vue'\n\nimport IframeResizer from '@/utils/iframe-resizer'\n\n/**\n * Reactive inputs driving the embed-snippet derivation. They mirror the sizing\n * props of the `FormEmbed` component, accepted as plain values, refs or getters\n * so the composable stays adaptable to how the caller wires its props.\n */\nexport interface UseEmbedFormOptions {\n  /**\n   * URL to embed. When omitted (`null`/`undefined`), the current window\n   * location is used instead.\n   */\n  url: MaybeRefOrGetter<string | null | undefined>\n  /**\n   * Iframe width. A string (e.g. `'100%'`) is used verbatim; a number is\n   * clamped to `minWidth` before being stringified.\n   */\n  width: MaybeRefOrGetter<number | string>\n  /**\n   * Iframe height in pixels, clamped to `minHeight` before being stringified.\n   */\n  height: MaybeRefOrGetter<number>\n  /**\n   * Lower bound applied to a numeric `width`.\n   */\n  minWidth: MaybeRefOrGetter<number>\n  /**\n   * Lower bound applied to `height`.\n   */\n  minHeight: MaybeRefOrGetter<number>\n}\n\n/**\n * Reactive API returned by {@link useEmbedForm}.\n */\nexport interface UseEmbedForm {\n  /**\n   * The resolved URL to embed: the provided `url` when set, otherwise the\n   * current window location.\n   */\n  currentUrl: ComputedRef<string>\n  /**\n   * Builds the embeddable HTML snippet for the current URL and sizing.\n   *\n   * @param withPym - When `true`, emit the responsive Pym.js snippet; otherwise\n   *   emit a plain `<iframe>`.\n   * @returns The HTML snippet to copy or preview.\n   */\n  embedCode: (withPym?: boolean) => string\n}\n\n// Build a plain iframe snippet for the given URL and sizing, stripping any\n// Pym.js parameters from the source URL first.\nfunction iframeCodeFor(url: string, width: string, height: string): string {\n  const src = IframeResizer.deletePymParams(url)\n  return `<iframe width=\"${width}\" height=\"${height}\" src=\"${src}\" frameborder=\"0\" allowfullscreen></iframe>`\n}\n\n// Build the responsive Pym.js snippet for the given URL.\nfunction pymCodeFor(url: string): string {\n  return IframeResizer.template(url)\n}\n\n/**\n * Owns the embed-snippet generation for the `FormEmbed` component: resolves the\n * URL to embed (explicit prop or current location), clamps the numeric sizing\n * to its minimums, and builds either a plain `<iframe>` or the responsive\n * Pym.js snippet.\n *\n * This composable is internal to the library and not exported from the public\n * entry point; consume it from a relative path.\n *\n * @param options - Reactive sizing and URL inputs (see {@link UseEmbedFormOptions}).\n * @returns The {@link UseEmbedForm} API: the resolved `currentUrl` and the\n *   `embedCode` snippet builder.\n * @example\n * import { useEmbedForm } from '@/composables/useEmbedForm'\n *\n * const { currentUrl, embedCode } = useEmbedForm({\n *   url: () => props.url,\n *   width: () => props.width,\n *   height: () => props.height,\n *   minWidth: () => props.minWidth,\n *   minHeight: () => props.minHeight\n * })\n * const snippet = embedCode(true)\n */\nexport function useEmbedForm(options: UseEmbedFormOptions): UseEmbedForm {\n  const { url, width, height, minWidth, minHeight } = options\n\n  const currentUrl = computed((): string => {\n    return toValue(url) || window?.location?.href\n  })\n\n  function embedCode(withPym = false): string {\n    const widthValue = toValue(width)\n    // A string width (e.g. a percentage) is used as-is; a numeric width is\n    // clamped to its minimum before being stringified.\n    const resolvedWidth\n      = typeof widthValue === 'string'\n        ? widthValue\n        : Math.max(widthValue, toValue(minWidth)).toString()\n    const resolvedHeight = Math.max(toValue(height), toValue(minHeight)).toString()\n\n    return withPym\n      ? pymCodeFor(currentUrl.value)\n      : iframeCodeFor(currentUrl.value, resolvedWidth, resolvedHeight)\n  }\n\n  return {\n    currentUrl,\n    embedCode\n  }\n}\n\nexport default useEmbedForm\n","<script setup lang=\"ts\">\nimport { ref } from 'vue'\n\nimport { useI18n } from 'vue-i18n'\nimport { BFormCheckbox } from 'bootstrap-vue-next'\nimport HapticCopy from '@/components/HapticCopy/HapticCopy.vue'\nimport { useEmbedForm } from '@/composables/useEmbedForm'\n\ndefineOptions({\n  name: 'EmbedForm'\n})\n\nexport interface FormEmbedProps {\n  /**\n   * Hide the form title\n   */\n  noTitle?: boolean\n  /**\n   * Hide the preview panel\n   */\n  noPreview?: boolean\n  /**\n   * Default width of the iframe code\n   */\n  width?: number | string\n  /**\n   * Default height of the iframe code\n   */\n  height?: number\n  /**\n   * Default minimal width of the iframe code (if extract from window's size)\n   */\n  minWidth?: number\n  /**\n   * Default minimal height of the iframe code (if extract from window's size)\n   */\n  minHeight?: number\n  /**\n   * URL of the iframe code\n   */\n  url?: string | null\n  /**\n   * Use a switch display for the responsive iframe checkbox\n   */\n  switchResponsive?: boolean\n}\n\nconst props = withDefaults(defineProps<FormEmbedProps>(), {\n  noTitle: false,\n  noPreview: false,\n  width: '100%',\n  height: () => window.innerHeight,\n  minWidth: 0,\n  minHeight: 0,\n  url: null,\n  switchResponsive: false\n})\n\nconst { t } = useI18n()\n\nconst responsiveCheck = ref(false)\nconst embedFormCode = ref<HTMLTextAreaElement | null>(null)\n\nconst { embedCode: buildEmbedCode } = useEmbedForm({\n  url: () => props.url,\n  width: () => props.width,\n  height: () => props.height,\n  minWidth: () => props.minWidth,\n  minHeight: () => props.minHeight\n})\n\nfunction selectCode(): void {\n  embedFormCode.value?.select()\n}\n\n// The responsive checkbox drives the default snippet flavour, so callers can\n// omit the flag to follow the current selection or force it explicitly.\nfunction embedCode(withPym = responsiveCheck.value): string {\n  return buildEmbedCode(withPym)\n}\n\n// Keep the snippet builder and responsive flag reachable for tests that poke\n// the component instance directly.\ndefineExpose({ embedCode, responsiveCheck })\n</script>\n\n<template>\n  <div class=\"embed-form\">\n    <div class=\"container-fluid\">\n      <h4\n        v-if=\"!noTitle\"\n        class=\"embed-form__heading\"\n      >\n        {{ t('embed-form.heading') }}\n      </h4>\n      <div class=\"row\">\n        <div class=\"col\">\n          <p>\n            {{ t('embed-form.introduction') }}\n          </p>\n          <textarea\n            ref=\"embed-form__code\"\n            class=\"form-control embed-form__code mb-2\"\n            readonly\n            :value=\"embedCode()\"\n            @click=\"selectCode\"\n          />\n\n          <div class=\"d-flex justify-content-between\">\n            <b-form-checkbox\n              id=\"responsiveOptin\"\n              v-model=\"responsiveCheck\"\n              class=\"align-self-end fw-bold\"\n              :switch=\"switchResponsive\"\n            >\n              {{ t('embed-form.responsive-optin') }}\n            </b-form-checkbox>\n\n            <haptic-copy\n              class=\"btn-link btn-sm text-uppercase fw-bold\"\n              :text=\"embedCode()\"\n              :label=\"t('embed-form.copy').toString()\"\n              @attempt=\"selectCode()\"\n            />\n          </div>\n        </div>\n        <div\n          v-if=\"!noPreview\"\n          class=\"col-7 d-none d-lg-block embed-form__preview\"\n        >\n          <!-- eslint-disable vue/no-v-html -->\n          <span v-html=\"embedCode(false)\" />\n          <!-- eslint-enable -->\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n\n.embed-form {\n  font-size: 0.9rem;\n  overflow: auto;\n\n  &__heading {\n    font-size: 1.1em;\n    text-transform: uppercase;\n  }\n\n  &__code {\n    height: 80px;\n  }\n\n  &__preview {\n    border-left: 1px $gray-400 dashed;\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ref } from 'vue'\n\nimport { useI18n } from 'vue-i18n'\nimport { BFormCheckbox } from 'bootstrap-vue-next'\nimport HapticCopy from '@/components/HapticCopy/HapticCopy.vue'\nimport { useEmbedForm } from '@/composables/useEmbedForm'\n\ndefineOptions({\n  name: 'EmbedForm'\n})\n\nexport interface FormEmbedProps {\n  /**\n   * Hide the form title\n   */\n  noTitle?: boolean\n  /**\n   * Hide the preview panel\n   */\n  noPreview?: boolean\n  /**\n   * Default width of the iframe code\n   */\n  width?: number | string\n  /**\n   * Default height of the iframe code\n   */\n  height?: number\n  /**\n   * Default minimal width of the iframe code (if extract from window's size)\n   */\n  minWidth?: number\n  /**\n   * Default minimal height of the iframe code (if extract from window's size)\n   */\n  minHeight?: number\n  /**\n   * URL of the iframe code\n   */\n  url?: string | null\n  /**\n   * Use a switch display for the responsive iframe checkbox\n   */\n  switchResponsive?: boolean\n}\n\nconst props = withDefaults(defineProps<FormEmbedProps>(), {\n  noTitle: false,\n  noPreview: false,\n  width: '100%',\n  height: () => window.innerHeight,\n  minWidth: 0,\n  minHeight: 0,\n  url: null,\n  switchResponsive: false\n})\n\nconst { t } = useI18n()\n\nconst responsiveCheck = ref(false)\nconst embedFormCode = ref<HTMLTextAreaElement | null>(null)\n\nconst { embedCode: buildEmbedCode } = useEmbedForm({\n  url: () => props.url,\n  width: () => props.width,\n  height: () => props.height,\n  minWidth: () => props.minWidth,\n  minHeight: () => props.minHeight\n})\n\nfunction selectCode(): void {\n  embedFormCode.value?.select()\n}\n\n// The responsive checkbox drives the default snippet flavour, so callers can\n// omit the flag to follow the current selection or force it explicitly.\nfunction embedCode(withPym = responsiveCheck.value): string {\n  return buildEmbedCode(withPym)\n}\n\n// Keep the snippet builder and responsive flag reachable for tests that poke\n// the component instance directly.\ndefineExpose({ embedCode, responsiveCheck })\n</script>\n\n<template>\n  <div class=\"embed-form\">\n    <div class=\"container-fluid\">\n      <h4\n        v-if=\"!noTitle\"\n        class=\"embed-form__heading\"\n      >\n        {{ t('embed-form.heading') }}\n      </h4>\n      <div class=\"row\">\n        <div class=\"col\">\n          <p>\n            {{ t('embed-form.introduction') }}\n          </p>\n          <textarea\n            ref=\"embed-form__code\"\n            class=\"form-control embed-form__code mb-2\"\n            readonly\n            :value=\"embedCode()\"\n            @click=\"selectCode\"\n          />\n\n          <div class=\"d-flex justify-content-between\">\n            <b-form-checkbox\n              id=\"responsiveOptin\"\n              v-model=\"responsiveCheck\"\n              class=\"align-self-end fw-bold\"\n              :switch=\"switchResponsive\"\n            >\n              {{ t('embed-form.responsive-optin') }}\n            </b-form-checkbox>\n\n            <haptic-copy\n              class=\"btn-link btn-sm text-uppercase fw-bold\"\n              :text=\"embedCode()\"\n              :label=\"t('embed-form.copy').toString()\"\n              @attempt=\"selectCode()\"\n            />\n          </div>\n        </div>\n        <div\n          v-if=\"!noPreview\"\n          class=\"col-7 d-none d-lg-block embed-form__preview\"\n        >\n          <!-- eslint-disable vue/no-v-html -->\n          <span v-html=\"embedCode(false)\" />\n          <!-- eslint-enable -->\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n\n.embed-form {\n  font-size: 0.9rem;\n  overflow: auto;\n\n  &__heading {\n    font-size: 1.1em;\n    text-transform: uppercase;\n  }\n\n  &__code {\n    height: 80px;\n  }\n\n  &__preview {\n    border-left: 1px $gray-400 dashed;\n  }\n}\n</style>\n","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n *  the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  if (initAccum && length) {\n    accumulator = array[++index];\n  }\n  while (++index < length) {\n    accumulator = iteratee(accumulator, array[index], index, array);\n  }\n  return accumulator;\n}\n\nmodule.exports = arrayReduce;\n","/**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n *  `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\nfunction baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n  eachFunc(collection, function(value, index, collection) {\n    accumulator = initAccum\n      ? (initAccum = false, value)\n      : iteratee(accumulator, value, index, collection);\n  });\n  return accumulator;\n}\n\nmodule.exports = baseReduce;\n","var arrayReduce = require('./_arrayReduce'),\n    baseEach = require('./_baseEach'),\n    baseIteratee = require('./_baseIteratee'),\n    baseReduce = require('./_baseReduce'),\n    isArray = require('./isArray');\n\n/**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n *   return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n *   (result[value] || (result[value] = [])).push(key);\n *   return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\nfunction reduce(collection, iteratee, accumulator) {\n  var func = isArray(collection) ? arrayReduce : baseReduce,\n      initAccum = arguments.length < 3;\n\n  return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n}\n\nmodule.exports = reduce;\n","import reduce from 'lodash/reduce'\nimport get from 'lodash/get'\nimport { computed, onUnmounted, reactive, toValue, type Component, type MaybeRefOrGetter } from 'vue'\n\nimport { SharingPlatform } from '@/enums'\nimport IPhEnvelope from '~icons/ph/envelope-bold'\nimport IPhFacebookLogoFill from '~icons/ph/facebook-logo-fill'\nimport IPhLinkedinLogoFill from '~icons/ph/linkedin-logo-fill'\nimport IPhButterflyFill from '~icons/ph/butterfly-fill'\n\n/**\n * Description of a single social network share endpoint: the base share URL,\n * the icon to display, and the mapping from query parameter to share value key.\n */\nexport interface SharingPlatformConfig {\n  base: string\n  icon: Component\n  args: Record<string, string>\n}\n\ntype SharingPlatforms = Record<SharingPlatform, SharingPlatformConfig>\n\n/**\n * Per-network share endpoints. Each `args` entry maps the network's own query\n * parameter name to the generic share value key it should receive.\n *\n * @source https://github.com/bradvin/social-share-urls\n */\nexport const networks: SharingPlatforms = {\n  email: {\n    base: 'mailto:?',\n    icon: IPhEnvelope,\n    args: {\n      subject: 'title',\n      body: 'description'\n    }\n  },\n  facebook: {\n    base: 'https://www.facebook.com/sharer.php?',\n    icon: IPhFacebookLogoFill,\n    args: {\n      u: 'url',\n      title: 'title',\n      description: 'description',\n      hashtag: 'hashtags'\n    }\n  },\n  linkedin: {\n    base: 'https://www.linkedin.com/sharing/share-offsite/?',\n    icon: IPhLinkedinLogoFill,\n    args: {\n      url: 'url',\n      title: 'title',\n      summary: 'description'\n    }\n  },\n  bluesky: {\n    base: 'https://bsky.app/intent/compose?',\n    icon: IPhButterflyFill,\n    args: {\n      text: 'title',\n      url: 'url'\n    }\n  }\n}\n\n/**\n * Holds the single share popup window shared across every link instance, plus\n * the interval that polls for its closing. Kept module-level so that all links\n * cooperate on (and tear down) the same popup.\n */\nexport interface SharingPopup {\n  instance: Window | null | undefined\n  interval: undefined | ReturnType<typeof setTimeout>\n  parent: (Window & typeof globalThis) | null\n}\n\n/**\n * @internal Module-level singleton, not part of the public API. Re-exported\n * from SharingOptionsLink.vue only so the existing component spec can poke it.\n */\nexport const $popup: SharingPopup = {\n  instance: null,\n  interval: undefined,\n  parent: typeof window !== 'undefined' ? window : null\n}\n\n/**\n * Generic share values a link can carry. Each key maps onto a network query\n * parameter through the network's `args` configuration.\n */\nexport interface SharingValues {\n  url?: string | null\n  title?: string | null\n  description?: string | null\n  media?: string | null\n  user?: string | null\n  hashtags?: string | null\n}\n\ntype SharingValueKey = keyof SharingValues\n\n/**\n * Builds the share URL for a social network and drives the share popup window.\n *\n * The URL building (`base`, `args`, `query`, `href`) is pure and deterministic,\n * derived only from the target network and the share values. The popup helpers\n * cooperate on a single module-level window ({@link $popup}) so concurrent links\n * never leave orphaned popups or polling intervals behind.\n *\n * @param network - Target social network (plain value, ref, or getter).\n * @param values - Generic share values (url, title, description, …); may be reactive.\n * @returns Reactive share-link state plus popup lifecycle helpers.\n * @example\n * // Internal building block — import via relative path inside the library.\n * <script setup>\n * import { useSharingOptionsLink } from '@/composables/useSharingOptionsLink'\n *\n * const { href, openSharePopup } = useSharingOptionsLink('facebook', { url: 'https://icij.org' })\n * </script>\n */\nexport function useSharingOptionsLink(\n  network: MaybeRefOrGetter<SharingPlatform>,\n  values: MaybeRefOrGetter<SharingValues>\n) {\n  // Popup window geometry and chrome, serialized as window.open features.\n  const popup = reactive({\n    status: 'no',\n    resizable: 'yes',\n    toolbar: 'no',\n    menubar: 'no',\n    scrollbars: 'no',\n    location: 'no',\n    directories: 'no',\n    width: 626,\n    height: 436,\n    top: 0,\n    left: 0,\n    screenY: 0,\n    screenX: 0\n  })\n\n  const base = computed((): string => {\n    return get(networks, [toValue(network), 'base'], '')\n  })\n\n  const args = computed((): Record<string, string> => {\n    return get(networks, [toValue(network), 'args'], {})\n  })\n\n  const iconComponent = computed((): Component | null => {\n    return get(networks, [toValue(network), 'icon'], null)\n  })\n\n  // Map each network query parameter to its share value, skipping empty values.\n  const query = computed((): Record<string, string> => {\n    const sharingValues = toValue(values)\n    return reduce(\n      args.value,\n      (obj: Record<string, string>, valueKey: string, param: string) => {\n        const value = sharingValues[valueKey as SharingValueKey]\n        if (value) {\n          obj[param] = value\n        }\n        return obj\n      },\n      {}\n    )\n  })\n\n  const href = computed((): string => {\n    // URLSearchParams encodes spaces as `+`, but a mailto query is\n    // percent-decoded per RFC 6068 without treating `+` as a space.\n    return base.value + new URLSearchParams(query.value).toString().replaceAll('+', '%20')\n  })\n\n  // NOTE: latent quirk preserved from the original — no network entry carries a\n  // `name` key, so this lookup always falls back to the network id itself.\n  const name = computed((): string => {\n    return get(networks, [toValue(network), 'name'], toValue(network))\n  })\n\n  // window.open expects a comma-separated feature string, not a query string.\n  const popupParams = computed((): string => {\n    return new URLSearchParams(popup as unknown as Record<string, string>).toString().split('&').join(',')\n  })\n\n  // The email network opens the default mail client, not a popup window.\n  function hasPopup(): boolean {\n    return toValue(network) !== SharingPlatform.email\n  }\n\n  function openPopup(): void {\n    $popup.instance = $popup.parent?.open(href.value, 'sharer', popupParams.value)\n    $popup.instance?.focus()\n    // Poll for the popup closing so we can reset the shared state afterwards.\n    $popup.interval = setInterval(cleanExistingPopupInterval, 500)\n  }\n\n  function cleanExistingPopupInstance(): void {\n    if ($popup.instance && $popup.interval) {\n      clearInterval($popup.interval)\n      $popup.interval = undefined\n      $popup.instance.close()\n    }\n  }\n\n  function cleanExistingPopupInterval(): void {\n    if ($popup.instance && $popup.instance.closed) {\n      clearInterval($popup.interval)\n      $popup.interval = undefined\n      $popup.instance = null\n    }\n  }\n\n  function openSharePopup(): void {\n    cleanExistingPopupInstance()\n    openPopup()\n  }\n\n  // Tear down the polling interval (and any open popup) on unmount, otherwise\n  // the setInterval started in openPopup() keeps firing against a destroyed\n  // instance.\n  onUnmounted(() => {\n    cleanExistingPopupInstance()\n  })\n\n  return {\n    base,\n    args,\n    iconComponent,\n    query,\n    href,\n    name,\n    popupParams,\n    hasPopup,\n    openPopup,\n    openSharePopup,\n    cleanExistingPopupInstance,\n    cleanExistingPopupInterval\n  }\n}\n\nexport default useSharingOptionsLink\n","<script lang=\"ts\">\nimport { SharingPlatform } from '@/enums'\n\n// Re-exported for backward compatibility: the share popup singleton and the\n// per-network share endpoints now live in the composable.\nexport { $popup, networks } from '@/composables/useSharingOptionsLink'\n\nexport interface SharingOptionsLinkProps {\n  /**\n   * Root element type\n   */\n  tag?: string\n  /**\n   * Social network to use\n   */\n  network: SharingPlatform\n  /**\n   * Disable icon\n   */\n  noIcon?: boolean\n  /**\n   * Shared URL\n   */\n  url?: string | null\n  /**\n   * Shared text\n   */\n  title?: string | null\n  /**\n   * Shared description\n   */\n  description?: string | null\n  /**\n   * Shared image\n   */\n  media?: string | null\n  /**\n   * Social media user handle\n   */\n  user?: string | null\n  /**\n   * Shared hashtags\n   */\n  hashtags?: string | null\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nimport AppIcon from '@/components/App/AppIcon.vue'\nimport {\n  useSharingOptionsLink,\n  type SharingValues\n} from '@/composables/useSharingOptionsLink'\n\ndefineOptions({\n  name: 'SharingOptionsLink'\n})\n\nconst props = withDefaults(defineProps<SharingOptionsLinkProps>(), {\n  tag: 'a',\n  noIcon: false,\n  url: null,\n  title: null,\n  description: null,\n  media: null,\n  user: null,\n  hashtags: null\n})\n\nconst sharingValues = computed((): SharingValues => {\n  return {\n    url: props.url,\n    title: props.title,\n    description: props.description,\n    media: props.media,\n    user: props.user,\n    hashtags: props.hashtags\n  }\n})\n\nconst {\n  base,\n  args,\n  iconComponent,\n  query,\n  href,\n  name,\n  hasPopup,\n  openSharePopup,\n  openPopup,\n  cleanExistingPopupInstance\n} = useSharingOptionsLink(() => props.network, sharingValues)\n\n// Only intercept the click for networks that open a share popup; the email\n// network keeps its native mailto: behavior.\nfunction handleClick(event: Event): void {\n  if (hasPopup()) {\n    event.preventDefault()\n    openSharePopup()\n  }\n}\n\ndefineExpose({\n  base,\n  args,\n  query,\n  hasPopup,\n  openPopup,\n  cleanExistingPopupInstance\n})\n</script>\n\n<template>\n  <component\n    :is=\"tag\"\n    :href=\"href\"\n    @click=\"handleClick\"\n  >\n    <slot>\n      <app-icon\n        v-if=\"!noIcon && iconComponent\"\n        size=\"1.2em\"\n      >\n        <component :is=\"iconComponent\" />\n      </app-icon>\n      <span class=\"visually-hidden\">{{ name }}</span>\n    </slot>\n  </component>\n</template>\n","<script lang=\"ts\">\nimport { SharingPlatform } from '@/enums'\n\n// Re-exported for backward compatibility: the share popup singleton and the\n// per-network share endpoints now live in the composable.\nexport { $popup, networks } from '@/composables/useSharingOptionsLink'\n\nexport interface SharingOptionsLinkProps {\n  /**\n   * Root element type\n   */\n  tag?: string\n  /**\n   * Social network to use\n   */\n  network: SharingPlatform\n  /**\n   * Disable icon\n   */\n  noIcon?: boolean\n  /**\n   * Shared URL\n   */\n  url?: string | null\n  /**\n   * Shared text\n   */\n  title?: string | null\n  /**\n   * Shared description\n   */\n  description?: string | null\n  /**\n   * Shared image\n   */\n  media?: string | null\n  /**\n   * Social media user handle\n   */\n  user?: string | null\n  /**\n   * Shared hashtags\n   */\n  hashtags?: string | null\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nimport AppIcon from '@/components/App/AppIcon.vue'\nimport {\n  useSharingOptionsLink,\n  type SharingValues\n} from '@/composables/useSharingOptionsLink'\n\ndefineOptions({\n  name: 'SharingOptionsLink'\n})\n\nconst props = withDefaults(defineProps<SharingOptionsLinkProps>(), {\n  tag: 'a',\n  noIcon: false,\n  url: null,\n  title: null,\n  description: null,\n  media: null,\n  user: null,\n  hashtags: null\n})\n\nconst sharingValues = computed((): SharingValues => {\n  return {\n    url: props.url,\n    title: props.title,\n    description: props.description,\n    media: props.media,\n    user: props.user,\n    hashtags: props.hashtags\n  }\n})\n\nconst {\n  base,\n  args,\n  iconComponent,\n  query,\n  href,\n  name,\n  hasPopup,\n  openSharePopup,\n  openPopup,\n  cleanExistingPopupInstance\n} = useSharingOptionsLink(() => props.network, sharingValues)\n\n// Only intercept the click for networks that open a share popup; the email\n// network keeps its native mailto: behavior.\nfunction handleClick(event: Event): void {\n  if (hasPopup()) {\n    event.preventDefault()\n    openSharePopup()\n  }\n}\n\ndefineExpose({\n  base,\n  args,\n  query,\n  hasPopup,\n  openPopup,\n  cleanExistingPopupInstance\n})\n</script>\n\n<template>\n  <component\n    :is=\"tag\"\n    :href=\"href\"\n    @click=\"handleClick\"\n  >\n    <slot>\n      <app-icon\n        v-if=\"!noIcon && iconComponent\"\n        size=\"1.2em\"\n      >\n        <component :is=\"iconComponent\" />\n      </app-icon>\n      <span class=\"visually-hidden\">{{ name }}</span>\n    </slot>\n  </component>\n</template>\n","import get from 'lodash/get'\nimport reduce from 'lodash/reduce'\nimport { computed, toValue, type MaybeRefOrGetter } from 'vue'\n\nimport config from '@/config'\n\n/**\n * Default share values resolved once from the configuration and the document\n * meta tags. Network-specific overrides (e.g. `facebook_title`) are layered on\n * top of these when building a network's values.\n */\nexport interface MetaValuesMap {\n  url: string\n  title?: string\n  description?: string\n  facebook_title?: string\n  facebook_description?: string\n  facebook_media?: string\n}\n\n/**\n * Resolves the share values handed to each social link.\n *\n * Default values are read from the library configuration and, unless disabled,\n * from the page meta tags. Consumer-provided `values` win over those defaults,\n * and {@link UseSharingOptionsReturn.valuesFor} picks the most specific value\n * for a network (e.g. `facebook_title` before the generic `title`).\n *\n * @param url - URL being shared (plain value, ref, or getter).\n * @param values - Consumer share values, generic or network-prefixed; may be reactive.\n * @param valuesKeys - Keys to inject into each social link (plain value, ref, or getter).\n * @param noMeta - When true, skip reading defaults from the document meta tags.\n * @returns The resolved default `metaValues` plus a `valuesFor(network)` builder.\n * @example\n * // Internal composable — import via relative path inside the library.\n * <script setup>\n * import { useSharingOptions } from '@/composables/useSharingOptions'\n *\n * const { valuesFor } = useSharingOptions(() => props.url, () => props.values)\n * const facebookValues = valuesFor('facebook')\n * </script>\n */\nexport function useSharingOptions(\n  url: MaybeRefOrGetter<string | null | undefined>,\n  values: MaybeRefOrGetter<Record<string, unknown>> = () => ({}),\n  valuesKeys: MaybeRefOrGetter<string[]> = () => ['url', 'title', 'description', 'media', 'user'],\n  noMeta: MaybeRefOrGetter<boolean> = false\n) {\n  // Read a default value from the page meta tags, falling back to the config.\n  // When meta reading is disabled or no selector is given, use the config only.\n  function defaultValueFor(key: string, metaSelector?: string): string | undefined {\n    if (toValue(noMeta) || !metaSelector) {\n      return config.get<string>(key) ?? undefined\n    }\n    return get(document.head.querySelector(metaSelector), 'content', config.get<string>(key) ?? undefined)\n  }\n\n  const metaValues = computed((): MetaValuesMap => {\n    return {\n      url: toValue(url) ?? '',\n      title: defaultValueFor('sharing-options.title'),\n      description: defaultValueFor('sharing-options.description', 'meta[name=\"description\"]'),\n      facebook_title: defaultValueFor('sharing-options.facebook_title', 'meta[property=\"og:title\"]'),\n      facebook_description: defaultValueFor('sharing-options.description', 'meta[property=\"og:description\"]'),\n      facebook_media: defaultValueFor('sharing-options.media', 'meta[property=\"og:image\"]')\n    }\n  })\n\n  // Build the values for a network, preferring its prefixed key (e.g.\n  // `facebook_title`) and falling back to the generic key (`title`).\n  function valuesFor(network: string): Record<string, string> {\n    const resolvedValues: Record<string, unknown> = { ...metaValues.value, ...toValue(values) }\n    return reduce(\n      toValue(valuesKeys),\n      (res: Record<string, string>, key) => {\n        const value = get(resolvedValues, `${network}_${key}`, resolvedValues[key])\n        res[key] = value == null ? '' : String(value)\n        return res\n      },\n      {}\n    )\n  }\n\n  return { metaValues, valuesFor }\n}\n\nexport default useSharingOptions\n","<script setup lang=\"ts\">\nimport { computed, ref, type CSSProperties } from 'vue'\n\nimport EmbedForm from '@/components/Form/FormEmbed.vue'\nimport AppIcon from '@/components/App/AppIcon.vue'\nimport SharingOptionsLink from '@/components/SharingOptions/SharingOptionsLink.vue'\nimport config from '@/config'\nimport IframeResizer from '@/utils/iframe-resizer'\nimport { useSharingOptions } from '@/composables/useSharingOptions'\nimport { BModal } from 'bootstrap-vue-next'\nimport { SharingPlatform } from '@/enums'\n\nexport interface SharingOptionsProps {\n  /**\n   * URL to be shared.\n   */\n  url?: string\n  /**\n   * URL to use specifically with the embed form\n   */\n  embedUrl?: string | null\n  /**\n   * Direction of the sharing options. Can be: 'row', 'row-reverse', 'column' or 'column-reverse'.\n   */\n  direction?: 'row' | 'row-reverse' | 'column' | 'column-reverse'\n  /**\n   * Sharing contents which can be generic (title, description, etc.)\n   * or specific to a network (twitter_title, facebook_description, etc.).\n   */\n  values?: Record<string, unknown>\n  /**\n   * The list of all the keys to automatically inject in each social button.\n   */\n  valuesKeys?: string[]\n  /**\n   * Disable embed button.\n   */\n  noEmbed?: boolean\n  /**\n   * Minimum height of the iframe in the embed form.\n   */\n  iframeMinHeight?: number\n  /**\n   * Minimum width of the iframe in the embed form.\n   */\n  iframeMinWidth?: number\n  /**\n   * Prevent from reading default value from the meta tags.\n   */\n  noMeta?: boolean\n}\n\nconst props = withDefaults(defineProps<SharingOptionsProps>(), {\n  url: () => config.get('sharing-options.url', null) || IframeResizer.deletePymParams(),\n  embedUrl: null,\n  direction: 'row',\n  values: () => ({}),\n  valuesKeys: () => ['url', 'title', 'description', 'media', 'user'],\n  noEmbed: false,\n  iframeMinHeight: 100,\n  iframeMinWidth: 100,\n  noMeta: false\n})\n\nconst showEmbedForm = ref(false)\nfunction showEmbed(): void {\n  showEmbedForm.value = true\n}\n\nconst style = computed((): CSSProperties => {\n  return {\n    'flex-direction': props.direction\n  } as CSSProperties\n})\n\nconst { valuesFor } = useSharingOptions(\n  () => props.url,\n  () => props.values,\n  () => props.valuesKeys,\n  () => props.noMeta\n)\n\n// Exposed so consumers (and tests) can resolve a network's share values.\ndefineExpose({\n  valuesFor\n})\n</script>\n\n<template>\n  <div\n    :style=\"style\"\n    class=\"sharing-options\"\n  >\n    <sharing-options-link\n      class=\"sharing-options__link\"\n      :network=\"SharingPlatform.facebook\"\n      v-bind=\"valuesFor('facebook')\"\n    />\n    <sharing-options-link\n      class=\"sharing-options__link\"\n      :network=\"SharingPlatform.bluesky\"\n      v-bind=\"valuesFor('bluesky')\"\n    />\n    <sharing-options-link\n      class=\"sharing-options__link\"\n      :network=\"SharingPlatform.linkedin\"\n      v-bind=\"valuesFor('linkedin')\"\n    />\n    <sharing-options-link\n      class=\"sharing-options__link\"\n      :network=\"SharingPlatform.email\"\n      v-bind=\"valuesFor('email')\"\n    />\n    <a\n      v-show=\"!noEmbed\"\n      class=\"sharing-options__link sharing-options__link--embed\"\n      @click=\"showEmbed\"\n    >\n      <app-icon>\n        <i-ph-code-bold />\n      </app-icon>\n      <span class=\"visually-hidden\">Embed</span>\n    </a>\n    <b-modal\n      v-model=\"showEmbedForm\"\n      class=\"text-dark\"\n      no-footer\n      title=\"Embed on your website\"\n    >\n      <embed-form\n        :min-height=\"iframeMinHeight\"\n        :min-width=\"iframeMinWidth\"\n        :url=\"embedUrl || url\"\n        no-preview\n        no-title\n      />\n    </b-modal>\n  </div>\n</template>\n\n<style lang=\"scss\">\n\n@import '../../styles/mixins';\n\n.sharing-options {\n  display: flex;\n\n  &__link {\n    display: block;\n    margin: $spacer * 0.25;\n    background: black;\n    height: 2.5em;\n    line-height: 2.5em;\n    width: 2.5em;\n    text-align: center;\n    font-size: 80%;\n    border-radius: 50%;\n    cursor: pointer;\n    color: white;\n    position: relative;\n\n    i {\n      position: absolute;\n      top: 50%;\n      left: 50%;\n      transform: translate(-50%, -50%);\n    }\n\n    & > a,\n    & > button {\n      padding: 0;\n      margin: 0;\n      width: 100%;\n      height: 100%;\n      display: block;\n      background: transparent !important;\n      text-decoration: none;\n      opacity: 1;\n    }\n\n    .svg-inline--fa {\n      color: white;\n    }\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref, type CSSProperties } from 'vue'\n\nimport EmbedForm from '@/components/Form/FormEmbed.vue'\nimport AppIcon from '@/components/App/AppIcon.vue'\nimport SharingOptionsLink from '@/components/SharingOptions/SharingOptionsLink.vue'\nimport config from '@/config'\nimport IframeResizer from '@/utils/iframe-resizer'\nimport { useSharingOptions } from '@/composables/useSharingOptions'\nimport { BModal } from 'bootstrap-vue-next'\nimport { SharingPlatform } from '@/enums'\n\nexport interface SharingOptionsProps {\n  /**\n   * URL to be shared.\n   */\n  url?: string\n  /**\n   * URL to use specifically with the embed form\n   */\n  embedUrl?: string | null\n  /**\n   * Direction of the sharing options. Can be: 'row', 'row-reverse', 'column' or 'column-reverse'.\n   */\n  direction?: 'row' | 'row-reverse' | 'column' | 'column-reverse'\n  /**\n   * Sharing contents which can be generic (title, description, etc.)\n   * or specific to a network (twitter_title, facebook_description, etc.).\n   */\n  values?: Record<string, unknown>\n  /**\n   * The list of all the keys to automatically inject in each social button.\n   */\n  valuesKeys?: string[]\n  /**\n   * Disable embed button.\n   */\n  noEmbed?: boolean\n  /**\n   * Minimum height of the iframe in the embed form.\n   */\n  iframeMinHeight?: number\n  /**\n   * Minimum width of the iframe in the embed form.\n   */\n  iframeMinWidth?: number\n  /**\n   * Prevent from reading default value from the meta tags.\n   */\n  noMeta?: boolean\n}\n\nconst props = withDefaults(defineProps<SharingOptionsProps>(), {\n  url: () => config.get('sharing-options.url', null) || IframeResizer.deletePymParams(),\n  embedUrl: null,\n  direction: 'row',\n  values: () => ({}),\n  valuesKeys: () => ['url', 'title', 'description', 'media', 'user'],\n  noEmbed: false,\n  iframeMinHeight: 100,\n  iframeMinWidth: 100,\n  noMeta: false\n})\n\nconst showEmbedForm = ref(false)\nfunction showEmbed(): void {\n  showEmbedForm.value = true\n}\n\nconst style = computed((): CSSProperties => {\n  return {\n    'flex-direction': props.direction\n  } as CSSProperties\n})\n\nconst { valuesFor } = useSharingOptions(\n  () => props.url,\n  () => props.values,\n  () => props.valuesKeys,\n  () => props.noMeta\n)\n\n// Exposed so consumers (and tests) can resolve a network's share values.\ndefineExpose({\n  valuesFor\n})\n</script>\n\n<template>\n  <div\n    :style=\"style\"\n    class=\"sharing-options\"\n  >\n    <sharing-options-link\n      class=\"sharing-options__link\"\n      :network=\"SharingPlatform.facebook\"\n      v-bind=\"valuesFor('facebook')\"\n    />\n    <sharing-options-link\n      class=\"sharing-options__link\"\n      :network=\"SharingPlatform.bluesky\"\n      v-bind=\"valuesFor('bluesky')\"\n    />\n    <sharing-options-link\n      class=\"sharing-options__link\"\n      :network=\"SharingPlatform.linkedin\"\n      v-bind=\"valuesFor('linkedin')\"\n    />\n    <sharing-options-link\n      class=\"sharing-options__link\"\n      :network=\"SharingPlatform.email\"\n      v-bind=\"valuesFor('email')\"\n    />\n    <a\n      v-show=\"!noEmbed\"\n      class=\"sharing-options__link sharing-options__link--embed\"\n      @click=\"showEmbed\"\n    >\n      <app-icon>\n        <i-ph-code-bold />\n      </app-icon>\n      <span class=\"visually-hidden\">Embed</span>\n    </a>\n    <b-modal\n      v-model=\"showEmbedForm\"\n      class=\"text-dark\"\n      no-footer\n      title=\"Embed on your website\"\n    >\n      <embed-form\n        :min-height=\"iframeMinHeight\"\n        :min-width=\"iframeMinWidth\"\n        :url=\"embedUrl || url\"\n        no-preview\n        no-title\n      />\n    </b-modal>\n  </div>\n</template>\n\n<style lang=\"scss\">\n\n@import '../../styles/mixins';\n\n.sharing-options {\n  display: flex;\n\n  &__link {\n    display: block;\n    margin: $spacer * 0.25;\n    background: black;\n    height: 2.5em;\n    line-height: 2.5em;\n    width: 2.5em;\n    text-align: center;\n    font-size: 80%;\n    border-radius: 50%;\n    cursor: pointer;\n    color: white;\n    position: relative;\n\n    i {\n      position: absolute;\n      top: 50%;\n      left: 50%;\n      transform: translate(-50%, -50%);\n    }\n\n    & > a,\n    & > button {\n      padding: 0;\n      margin: 0;\n      width: 100%;\n      height: 100%;\n      display: block;\n      background: transparent !important;\n      text-decoration: none;\n      opacity: 1;\n    }\n\n    .svg-inline--fa {\n      color: white;\n    }\n  }\n}\n</style>\n","import { onMounted, ref } from 'vue'\nimport type { Ref } from 'vue'\n\nimport IframeResizer from '@/utils/iframe-resizer'\n\n/**\n * Reactive API returned by {@link useEmbeddableFooter}.\n */\nexport interface UseEmbeddableFooter {\n  /**\n   * Whether the sharing-options panel is currently visible.\n   */\n  showShareOptions: Ref<boolean>\n  /**\n   * Toggle the visibility of the sharing-options panel.\n   */\n  toggleShareOptions: () => void\n}\n\n/**\n * Owns the small amount of behaviour behind the `EmbeddableFooter` component:\n * the visibility state of the sharing-options panel and the mount-time setup of\n * the Pym child resizer, so an embedded footer can report its height to the\n * host page.\n *\n * The resizer is created for its side effect only (it wires up the Pym child);\n * the instance is intentionally not returned, matching the component's original\n * fire-and-forget behaviour.\n *\n * @returns The {@link UseEmbeddableFooter} API: the `showShareOptions` ref and\n *   the `toggleShareOptions` action.\n * @example\n * // Internal building block of the `EmbeddableFooter` component; not exported\n * // from the package root. Inside a `<script setup>` block:\n * import { useEmbeddableFooter } from '@/composables/useEmbeddableFooter'\n *\n * const { showShareOptions, toggleShareOptions } = useEmbeddableFooter()\n */\nexport function useEmbeddableFooter(): UseEmbeddableFooter {\n  const showShareOptions = ref(false)\n\n  function toggleShareOptions(): void {\n    showShareOptions.value = !showShareOptions.value\n  }\n\n  // Reporting the embedded height to the host page is a pure mount-time side\n  // effect, so the created resizer is left unreferenced on purpose.\n  onMounted(() => {\n    IframeResizer.create()\n  })\n\n  return { showShareOptions, toggleShareOptions }\n}\n\nexport default useEmbeddableFooter\n","<script setup lang=\"ts\">\nimport Brand from '@/components/Brand/Brand.vue'\nimport AppIcon from '@/components/App/AppIcon.vue'\nimport SharingOptions from '@/components/SharingOptions/SharingOptions.vue'\nimport { useEmbeddableFooter } from '@/composables/useEmbeddableFooter'\nimport config from '@/config'\nimport configDefaults from '@/config.default'\n\nexport interface EmbeddableFooterProps {\n  /**\n   * Title to display next to ICIJ logo.\n   */\n  title?: string\n  /**\n   * Lead sentence to display next to the title.\n   */\n  lead?: string\n  /**\n   * Minimum height for the iframe generated in the embed form.\n   */\n  iframeMinHeight?: number\n  /**\n   * Minimum width for the iframe generated in the embed form.\n   */\n  iframeMinWidth?: number\n  /**\n   * Target of the ICIJ logo and title links.\n   */\n  homeUrl?: string\n  /**\n   * Sharing option values to bind to the sharing-options component in the bottom-right corner.\n   */\n  sharingOptionsValues?: Record<string, unknown>\n  /**\n   * Hide the divider (right border) next to the brand.\n   */\n  hideDivider?: boolean\n  /**\n   * Height of the logo in pixels.\n   */\n  logoHeight?: number | string\n}\n\nwithDefaults(defineProps<EmbeddableFooterProps>(), {\n  title: () => config.get('project.name', configDefaults['project.name']),\n  lead: '',\n  iframeMinHeight: 100,\n  iframeMinWidth: 100,\n  homeUrl: () => config.get('app.home', configDefaults['app.home']),\n  sharingOptionsValues: () => ({}),\n  hideDivider: false,\n  logoHeight: 40\n})\n\nconst { showShareOptions, toggleShareOptions } = useEmbeddableFooter()\n</script>\n\n<template>\n  <div class=\"embeddable-footer p-2 text-nowrap\">\n    <a\n      :href=\"homeUrl\"\n      target=\"_blank\"\n      class=\"text-white embeddable-footer__brand\"\n      :class=\"{ 'embeddable-footer__brand--no-divider': hideDivider }\"\n    >\n      <brand\n        :size=\"logoHeight\"\n        no-border\n        class=\"me-2\"\n        color=\"white\"\n      />\n      <!-- @slot Slot to redefine title display -->\n      <slot name=\"title\">\n        <span v-html=\"title\" />\n      </slot>\n    </a>\n    <div class=\"embeddable-footer__lead small text-truncate\">\n      <!-- @slot Main slot to redefine lead text display -->\n      <slot :lead=\"lead\">\n        <span v-html=\"lead\" />\n      </slot>\n    </div>\n    <!-- @slot Override the sharing button -->\n    <slot\n      name=\"sharing-button\"\n      v-bind=\"{ sharingOptionsValues }\"\n    >\n      <button\n        class=\"btn btn-link text-white btn-sm py-0 embeddable-footer__share-btn\"\n        :class=\"{ active: showShareOptions }\"\n        @click=\"toggleShareOptions\"\n      >\n        <app-icon size=\"1.2em\">\n          <i-ph-share-network-fill />\n        </app-icon>\n        <span class=\"visually-hidden\">{{ $t('embeddable-footer.share') }}</span>\n      </button>\n    </slot>\n    <sharing-options\n      v-if=\"showShareOptions\"\n      :values=\"sharingOptionsValues\"\n      direction=\"column-reverse\"\n      :iframe-min-height=\"iframeMinHeight\"\n      :iframe-min-width=\"iframeMinWidth\"\n    />\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@import '../../styles/mixins';\n\n@include keyframes(slideup) {\n  0% {\n    transform: translateY(100%);\n    opacity: 0;\n  }\n\n  100% {\n    transform: translateY(0%);\n    opacity: 1;\n  }\n}\n\n.embeddable-footer {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n\n  z-index: $zindex-sticky;\n  position: fixed;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  background: black;\n  color: white;\n  // Magic technique to have a minimum font-size (10px-ish)\n  font-size: calc(10px + 1.5vh);\n\n  @media screen and (min-height: 800px) {\n    font-size: 1rem;\n  }\n\n  &__brand {\n    padding-right: $spacer;\n    margin-right: $spacer;\n    border-right: 2px solid white;\n    font-family: $jumbotron-font-family;\n    font-size: 1.1em;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n\n    &--no-divider {\n      border-right: none;\n    }\n  }\n  &__lead {\n    flex-grow: 1;\n    min-width: 0;\n    font-size: 0.9em;\n  }\n\n  &__share-btn {\n    border: 1px solid transparent;\n    height: 2.5em;\n    line-height: 2.5em;\n    width: 2.5em;\n    text-align: center;\n    border-radius: 50%;\n\n    &.active {\n      border-color: rgb(19, 18, 18);\n    }\n\n    &:hover {\n      background: rgba(white, 0.1);\n    }\n  }\n\n  .sharing-options {\n    position: absolute;\n    bottom: 100%;\n    right: 0;\n    margin: $spacer * 0.25;\n\n    &:deep(.sharing-options__link) {\n      opacity: 0;\n      animation: slideup 200ms forwards;\n      @include animation-delay-loop(0, 10, 50ms);\n    }\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport Brand from '@/components/Brand/Brand.vue'\nimport AppIcon from '@/components/App/AppIcon.vue'\nimport SharingOptions from '@/components/SharingOptions/SharingOptions.vue'\nimport { useEmbeddableFooter } from '@/composables/useEmbeddableFooter'\nimport config from '@/config'\nimport configDefaults from '@/config.default'\n\nexport interface EmbeddableFooterProps {\n  /**\n   * Title to display next to ICIJ logo.\n   */\n  title?: string\n  /**\n   * Lead sentence to display next to the title.\n   */\n  lead?: string\n  /**\n   * Minimum height for the iframe generated in the embed form.\n   */\n  iframeMinHeight?: number\n  /**\n   * Minimum width for the iframe generated in the embed form.\n   */\n  iframeMinWidth?: number\n  /**\n   * Target of the ICIJ logo and title links.\n   */\n  homeUrl?: string\n  /**\n   * Sharing option values to bind to the sharing-options component in the bottom-right corner.\n   */\n  sharingOptionsValues?: Record<string, unknown>\n  /**\n   * Hide the divider (right border) next to the brand.\n   */\n  hideDivider?: boolean\n  /**\n   * Height of the logo in pixels.\n   */\n  logoHeight?: number | string\n}\n\nwithDefaults(defineProps<EmbeddableFooterProps>(), {\n  title: () => config.get('project.name', configDefaults['project.name']),\n  lead: '',\n  iframeMinHeight: 100,\n  iframeMinWidth: 100,\n  homeUrl: () => config.get('app.home', configDefaults['app.home']),\n  sharingOptionsValues: () => ({}),\n  hideDivider: false,\n  logoHeight: 40\n})\n\nconst { showShareOptions, toggleShareOptions } = useEmbeddableFooter()\n</script>\n\n<template>\n  <div class=\"embeddable-footer p-2 text-nowrap\">\n    <a\n      :href=\"homeUrl\"\n      target=\"_blank\"\n      class=\"text-white embeddable-footer__brand\"\n      :class=\"{ 'embeddable-footer__brand--no-divider': hideDivider }\"\n    >\n      <brand\n        :size=\"logoHeight\"\n        no-border\n        class=\"me-2\"\n        color=\"white\"\n      />\n      <!-- @slot Slot to redefine title display -->\n      <slot name=\"title\">\n        <span v-html=\"title\" />\n      </slot>\n    </a>\n    <div class=\"embeddable-footer__lead small text-truncate\">\n      <!-- @slot Main slot to redefine lead text display -->\n      <slot :lead=\"lead\">\n        <span v-html=\"lead\" />\n      </slot>\n    </div>\n    <!-- @slot Override the sharing button -->\n    <slot\n      name=\"sharing-button\"\n      v-bind=\"{ sharingOptionsValues }\"\n    >\n      <button\n        class=\"btn btn-link text-white btn-sm py-0 embeddable-footer__share-btn\"\n        :class=\"{ active: showShareOptions }\"\n        @click=\"toggleShareOptions\"\n      >\n        <app-icon size=\"1.2em\">\n          <i-ph-share-network-fill />\n        </app-icon>\n        <span class=\"visually-hidden\">{{ $t('embeddable-footer.share') }}</span>\n      </button>\n    </slot>\n    <sharing-options\n      v-if=\"showShareOptions\"\n      :values=\"sharingOptionsValues\"\n      direction=\"column-reverse\"\n      :iframe-min-height=\"iframeMinHeight\"\n      :iframe-min-width=\"iframeMinWidth\"\n    />\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@import '../../styles/mixins';\n\n@include keyframes(slideup) {\n  0% {\n    transform: translateY(100%);\n    opacity: 0;\n  }\n\n  100% {\n    transform: translateY(0%);\n    opacity: 1;\n  }\n}\n\n.embeddable-footer {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n\n  z-index: $zindex-sticky;\n  position: fixed;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  background: black;\n  color: white;\n  // Magic technique to have a minimum font-size (10px-ish)\n  font-size: calc(10px + 1.5vh);\n\n  @media screen and (min-height: 800px) {\n    font-size: 1rem;\n  }\n\n  &__brand {\n    padding-right: $spacer;\n    margin-right: $spacer;\n    border-right: 2px solid white;\n    font-family: $jumbotron-font-family;\n    font-size: 1.1em;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n\n    &--no-divider {\n      border-right: none;\n    }\n  }\n  &__lead {\n    flex-grow: 1;\n    min-width: 0;\n    font-size: 0.9em;\n  }\n\n  &__share-btn {\n    border: 1px solid transparent;\n    height: 2.5em;\n    line-height: 2.5em;\n    width: 2.5em;\n    text-align: center;\n    border-radius: 50%;\n\n    &.active {\n      border-color: rgb(19, 18, 18);\n    }\n\n    &:hover {\n      background: rgba(white, 0.1);\n    }\n  }\n\n  .sharing-options {\n    position: absolute;\n    bottom: 100%;\n    right: 0;\n    margin: $spacer * 0.25;\n\n    &:deep(.sharing-options__link) {\n      opacity: 0;\n      animation: slideup 200ms forwards;\n      @include animation-delay-loop(0, 10, 50ms);\n    }\n  }\n}\n</style>\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? array[length - 1] : undefined;\n}\n\nmodule.exports = last;\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isNaN(val) === false) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  if (ms >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (ms >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (ms >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (ms >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  return plural(ms, d, 'day') ||\n    plural(ms, h, 'hour') ||\n    plural(ms, m, 'minute') ||\n    plural(ms, s, 'second') ||\n    ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n  if (ms < n) {\n    return;\n  }\n  if (ms < n * 1.5) {\n    return Math.floor(ms / n) + ' ' + name;\n  }\n  return Math.ceil(ms / n) + ' ' + name + 's';\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n  var hash = 0, i;\n\n  for (i in namespace) {\n    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);\n    hash |= 0; // Convert to 32bit integer\n  }\n\n  return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n  function debug() {\n    // disabled?\n    if (!debug.enabled) return;\n\n    var self = debug;\n\n    // set `diff` timestamp\n    var curr = +new Date();\n    var ms = curr - (prevTime || curr);\n    self.diff = ms;\n    self.prev = prevTime;\n    self.curr = curr;\n    prevTime = curr;\n\n    // turn the `arguments` into a proper Array\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n\n    args[0] = exports.coerce(args[0]);\n\n    if ('string' !== typeof args[0]) {\n      // anything else let's inspect with %O\n      args.unshift('%O');\n    }\n\n    // apply any `formatters` transformations\n    var index = 0;\n    args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n      // if we encounter an escaped % then don't increase the array index\n      if (match === '%%') return match;\n      index++;\n      var formatter = exports.formatters[format];\n      if ('function' === typeof formatter) {\n        var val = args[index];\n        match = formatter.call(self, val);\n\n        // now we need to remove `args[index]` since it's inlined in the `format`\n        args.splice(index, 1);\n        index--;\n      }\n      return match;\n    });\n\n    // apply env-specific formatting (colors, etc.)\n    exports.formatArgs.call(self, args);\n\n    var logFn = debug.log || exports.log || console.log.bind(console);\n    logFn.apply(self, args);\n  }\n\n  debug.namespace = namespace;\n  debug.enabled = exports.enabled(namespace);\n  debug.useColors = exports.useColors();\n  debug.color = selectColor(namespace);\n\n  // env-specific initialization logic for debug instances\n  if ('function' === typeof exports.init) {\n    exports.init(debug);\n  }\n\n  return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n  exports.save(namespaces);\n\n  exports.names = [];\n  exports.skips = [];\n\n  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n  var len = split.length;\n\n  for (var i = 0; i < len; i++) {\n    if (!split[i]) continue; // ignore empty strings\n    namespaces = split[i].replace(/\\*/g, '.*?');\n    if (namespaces[0] === '-') {\n      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n    } else {\n      exports.names.push(new RegExp('^' + namespaces + '$'));\n    }\n  }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n  exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n  var i, len;\n  for (i = 0, len = exports.skips.length; i < len; i++) {\n    if (exports.skips[i].test(name)) {\n      return false;\n    }\n  }\n  for (i = 0, len = exports.names.length; i < len; i++) {\n    if (exports.names[i].test(name)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n  if (val instanceof Error) return val.stack || val.message;\n  return val;\n}\n","/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n               && 'undefined' != typeof chrome.storage\n                  ? chrome.storage.local\n                  : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n  'lightseagreen',\n  'forestgreen',\n  'goldenrod',\n  'dodgerblue',\n  'darkorchid',\n  'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n  // NB: In an Electron preload script, document will be defined but not fully\n  // initialized. Since we know we're in Chrome, we'll just detect this case\n  // explicitly\n  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n    return true;\n  }\n\n  // is webkit? http://stackoverflow.com/a/16459606/376773\n  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n  return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n    // is firebug? http://stackoverflow.com/a/398120/376773\n    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n    // is firefox >= v31?\n    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n    // double check webkit in userAgent just in case we are in a worker\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n  try {\n    return JSON.stringify(v);\n  } catch (err) {\n    return '[UnexpectedJSONParseError]: ' + err.message;\n  }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n  var useColors = this.useColors;\n\n  args[0] = (useColors ? '%c' : '')\n    + this.namespace\n    + (useColors ? ' %c' : ' ')\n    + args[0]\n    + (useColors ? '%c ' : ' ')\n    + '+' + exports.humanize(this.diff);\n\n  if (!useColors) return;\n\n  var c = 'color: ' + this.color;\n  args.splice(1, 0, c, 'color: inherit')\n\n  // the final \"%c\" is somewhat tricky, because there could be other\n  // arguments passed either before or after the %c, so we need to\n  // figure out the correct index to insert the CSS into\n  var index = 0;\n  var lastC = 0;\n  args[0].replace(/%[a-zA-Z%]/g, function(match) {\n    if ('%%' === match) return;\n    index++;\n    if ('%c' === match) {\n      // we only are interested in the *last* %c\n      // (the user may have provided their own)\n      lastC = index;\n    }\n  });\n\n  args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n  // this hackery is required for IE8/9, where\n  // the `console.log` function doesn't have 'apply'\n  return 'object' === typeof console\n    && console.log\n    && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  try {\n    if (null == namespaces) {\n      exports.storage.removeItem('debug');\n    } else {\n      exports.storage.debug = namespaces;\n    }\n  } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  var r;\n  try {\n    r = exports.storage.debug;\n  } catch(e) {}\n\n  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n  if (!r && typeof process !== 'undefined' && 'env' in process) {\n    r = process.env.DEBUG;\n  }\n\n  return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n  try {\n    return window.localStorage;\n  } catch (e) {}\n}\n","/**\n * Module dependencies\n */\n\nvar debug = require('debug')('jsonp');\n\n/**\n * Module exports.\n */\n\nmodule.exports = jsonp;\n\n/**\n * Callback index.\n */\n\nvar count = 0;\n\n/**\n * Noop function.\n */\n\nfunction noop(){}\n\n/**\n * JSONP handler\n *\n * Options:\n *  - param {String} qs parameter (`callback`)\n *  - prefix {String} qs parameter (`__jp`)\n *  - name {String} qs parameter (`prefix` + incr)\n *  - timeout {Number} how long after a timeout error is emitted (`60000`)\n *\n * @param {String} url\n * @param {Object|Function} optional options / callback\n * @param {Function} optional callback\n */\n\nfunction jsonp(url, opts, fn){\n  if ('function' == typeof opts) {\n    fn = opts;\n    opts = {};\n  }\n  if (!opts) opts = {};\n\n  var prefix = opts.prefix || '__jp';\n\n  // use the callback name that was passed if one was provided.\n  // otherwise generate a unique name by incrementing our counter.\n  var id = opts.name || (prefix + (count++));\n\n  var param = opts.param || 'callback';\n  var timeout = null != opts.timeout ? opts.timeout : 60000;\n  var enc = encodeURIComponent;\n  var target = document.getElementsByTagName('script')[0] || document.head;\n  var script;\n  var timer;\n\n\n  if (timeout) {\n    timer = setTimeout(function(){\n      cleanup();\n      if (fn) fn(new Error('Timeout'));\n    }, timeout);\n  }\n\n  function cleanup(){\n    if (script.parentNode) script.parentNode.removeChild(script);\n    window[id] = noop;\n    if (timer) clearTimeout(timer);\n  }\n\n  function cancel(){\n    if (window[id]) {\n      cleanup();\n    }\n  }\n\n  window[id] = function(data){\n    debug('jsonp got', data);\n    cleanup();\n    if (fn) fn(null, data);\n  };\n\n  // add qs component\n  url += (~url.indexOf('?') ? '&' : '?') + param + '=' + enc(id);\n  url = url.replace('?&', '?');\n\n  debug('jsonp req \"%s\"', url);\n\n  // create script\n  script = document.createElement('script');\n  script.src = url;\n  target.parentNode.insertBefore(script, target);\n\n  return cancel;\n}\n","var isArray = require('./isArray');\n\n/**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\nfunction castArray() {\n  if (!arguments.length) {\n    return [];\n  }\n  var value = arguments[0];\n  return isArray(value) ? value : [value];\n}\n\nmodule.exports = castArray;\n","import jsonp from 'jsonp'\nimport { computed, MaybeRefOrGetter, toValue } from 'vue'\nimport flatten from 'lodash/flatten'\nimport castArray from 'lodash/castArray'\n\ninterface FormDataResult { result: string, msg: string }\n\n/**\n * Builds and submits a Mailchimp newsletter signup request via JSONP.\n *\n * @param email - Subscriber email address (plain value, ref, or getter).\n * @param action - Mailchimp form action URL; required before `send` can succeed.\n * @param emailField - Name of the Mailchimp merge field carrying the email.\n * @param tracker - Mailchimp signup tracker value (the `SIGNUP` parameter).\n * @param referrer - Explicit referrer to record; falls back to the parent/document referrer when omitted.\n * @param defaultGroups - Mailchimp interest group names to opt into; comma-separated strings are split.\n * @returns An object with a `send` function that resolves with the Mailchimp `FormDataResult`.\n * @remarks Internal building block; not exported from the package root.\n * @example\n * <script setup>\n * import { useSendEmail } from '@/composables/useSendEmail'\n *\n * const email = ref('jane@example.org')\n * const { send } = useSendEmail(email, action, 'EMAIL', 'newsletter')\n * await send()\n * </script>\n */\nexport function useSendEmail(\n  email: MaybeRefOrGetter<string>,\n  action?: string,\n  emailField?: string,\n  tracker?: string,\n  referrer?: string | null,\n  defaultGroups?: string[] | string\n) {\n  const groups = computed(() => {\n    return flatten(castArray(defaultGroups).map(g => g.split(',')))\n  })\n\n  // Mailchimp's JSONP endpoint lives at /post-json and echoes the callback via the \"c\" param.\n  const urlFromAction = computed(() => {\n    return action?.replace('/post?', '/post-json?').concat('&c=?')\n  })\n\n  const parentReferrer = computed(() => {\n    if (referrer) {\n      return referrer\n    }\n    return window.location !== window.parent.location\n      ? document.referrer\n      : document.location.href\n  })\n\n  const submitUrl = computed(() => {\n    if (typeof urlFromAction.value == 'undefined' || !tracker || !emailField) {\n      throw new Error('Missing url Info')\n    }\n\n    const emailValue = toValue(email)\n    const url = new URL(urlFromAction.value)\n    url.searchParams.set('SIGNUP', tracker)\n    url.searchParams.set('MMERGE24', parentReferrer.value)\n    url.searchParams.set(emailField, emailValue)\n    groups.value.map((group: string) => url.searchParams.set(group, '1'))\n\n    return url.href\n  })\n\n  function send(): Promise<FormDataResult> {\n    return new Promise((resolve, reject) => {\n      jsonp(\n        submitUrl.value,\n        { param: 'c' },\n        (err: any, data: FormDataResult) => {\n          return err ? reject(err) : resolve(data)\n        }\n      )\n    })\n  }\n\n  return { send }\n}\n","import last from 'lodash/last'\nimport { ref } from 'vue'\nimport type { Ref } from 'vue'\n\nimport { useSendEmail } from '@/composables/useSendEmail'\n\n/**\n * The newsletter signup payload forwarded to {@link useSendEmail}. Mirrors the\n * Mailchimp-related props of the `FormSignUp` component.\n */\nexport interface UseSignUpFormOptions {\n  /**\n   * Mailchimp form action URL.\n   */\n  action?: string\n  /**\n   * Name of the Mailchimp merge field carrying the email.\n   */\n  emailField?: string\n  /**\n   * Mailchimp signup tracker value.\n   */\n  tracker?: string\n  /**\n   * Explicit referrer to record; falls back to the document referrer when omitted.\n   */\n  referrer?: string | null\n  /**\n   * Mailchimp interest groups to opt into.\n   */\n  defaultGroups?: string | string[]\n  /**\n   * Emits the form lifecycle events back to the host component. Receives the\n   * same `('success' | 'error' | 'subscribed', payload?)` contract the\n   * component exposes.\n   */\n  emit: (event: 'success' | 'error' | 'subscribed', payload?: unknown) => void\n}\n\n/**\n * Reactive API returned by {@link useSignUpForm}.\n */\nexport interface UseSignUpForm {\n  /**\n   * Two-way bound subscriber email.\n   */\n  email: Ref<string>\n  /**\n   * Whether the form is locked while a submission is in flight.\n   */\n  frozen: Ref<boolean>\n  /**\n   * The last error message to display, if any.\n   */\n  errorMessage: Ref<string | null>\n  /**\n   * The last success message to display, if any.\n   */\n  successMessage: Ref<string | null>\n  /**\n   * Submits the email, freezing the form while the request is in flight and\n   * surfacing the outcome through the messages and the host `emit`.\n   *\n   * @returns A promise resolving once the submission settled.\n   */\n  subscribe: () => Promise<void>\n}\n\n/**\n * Owns the newsletter submission flow for the `FormSignUp` component: the\n * subscriber email, the freeze/unfreeze lifecycle, the success/error messages,\n * and the `success`/`error`/`subscribed` events. Wraps {@link useSendEmail} to\n * perform the actual Mailchimp request.\n *\n * This composable is internal to the library and not exported from the public\n * entry point; consume it from a relative path.\n *\n * @param options - Submission payload and the host `emit` (see {@link UseSignUpFormOptions}).\n * @returns The {@link UseSignUpForm} API: the form state and the `subscribe`\n *   action.\n * @example\n * import { useSignUpForm } from '@/composables/useSignUpForm'\n *\n * const emit = defineEmits(['error', 'success', 'subscribed'])\n * const { email, frozen, errorMessage, successMessage, subscribe } = useSignUpForm({\n *   action: props.action,\n *   emailField: props.emailField,\n *   tracker: props.tracker,\n *   referrer: props.referrer,\n *   defaultGroups: props.defaultGroups,\n *   emit\n * })\n */\nexport function useSignUpForm(options: UseSignUpFormOptions): UseSignUpForm {\n  const { action, emailField, tracker, referrer, defaultGroups, emit } = options\n\n  const email = ref('')\n  const frozen = ref(false)\n  const errorMessage = ref<string | null>(null)\n  const successMessage = ref<string | null>(null)\n\n  const { send } = useSendEmail(\n    email,\n    action,\n    emailField,\n    tracker,\n    referrer,\n    defaultGroups\n  )\n\n  function resetMessages(): void {\n    errorMessage.value = null\n    successMessage.value = null\n  }\n\n  function freeze(): void {\n    frozen.value = true\n  }\n\n  function unfreeze(): void {\n    frozen.value = false\n  }\n\n  function done({ result, msg }: any): void {\n    if (result === 'success') {\n      email.value = ''\n      successMessage.value = msg\n      emit('success', msg)\n    }\n    else {\n      error({ msg })\n    }\n  }\n\n  // Mailchimp formats errors as a list, so keep only the trailing message.\n  function error({ msg }: any): void {\n    errorMessage.value = last((msg || 'Something\\'s wrong').split('0 -')) ?? null\n    emit('error', errorMessage.value)\n  }\n\n  async function subscribe(): Promise<void> {\n    resetMessages()\n    freeze()\n    // Send the data, catch the result no matter what and unfreeze the form\n    try {\n      const { result, msg } = await send()\n      done({ result, msg })\n    }\n    catch (e) {\n      error(e)\n    }\n    unfreeze()\n    emit('subscribed')\n  }\n\n  return {\n    email,\n    frozen,\n    errorMessage,\n    successMessage,\n    subscribe\n  }\n}\n\nexport default useSignUpForm\n","<template>\n  <form\n    class=\"sign-up-form\"\n    :class=\"classList\"\n    @submit.prevent=\"subscribe\"\n  >\n    <fieldset :disabled=\"frozen\">\n      <label\n        v-if=\"!noLabel\"\n        class=\"sign-up-form__fieldset__label text-uppercase text-muted fw-bold\"\n        for=\"input-email\"\n      >\n        {{ t('sign-up-form.label') }}\n      </label>\n      <div\n        class=\"sign-up-form__fieldset__group\"\n        :class=\"{ 'input-group': horizontal }\"\n      >\n        <input\n          id=\"input-email\"\n          v-model=\"email\"\n          name=\"EMAIL\"\n          type=\"email\"\n          class=\"form-control\"\n          :placeholder=\"t('sign-up-form.placeholder').toString()\"\n        >\n        <button\n          class=\"sign-up-form__fieldset__group__addon btn text-uppercase fw-bold input-group-text\"\n          :class=\"{ [variantColorClass]: true }\"\n          type=\"submit\"\n        >\n          {{ t('sign-up-form.submit') }}\n        </button>\n      </div>\n    </fieldset>\n    <p\n      v-if=\"errorMessage\"\n      class=\"sign-up-form__error alert alert-danger p-2 m-0 mt-2\"\n    >\n      {{ errorMessage }}\n    </p>\n    <p\n      v-if=\"successMessage\"\n      class=\"sign-up-form__success alert alert-success p-2 m-0 mt-2\"\n    >\n      {{ successMessage }}\n    </p>\n  </form>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nimport config from '@/config'\nimport configDefaults from '@/config.default'\nimport { useI18n } from 'vue-i18n'\nimport { useSignUpForm } from '@/composables/useSignUpForm'\nimport type { ButtonVariant } from 'bootstrap-vue-next'\n\nexport interface FormSignUpProps {\n  /**\n   * Mailchimp URL to send the data to.\n   */\n  action?: string\n  /**\n   * Mailchimp email field parameter\n   */\n  emailField?: string\n  /**\n   * Mailchimp default groups. Can be an array or a comma-separated list of groups.\n   */\n  defaultGroups?: string | string[]\n  /**\n   * Disable the main label.\n   */\n  noLabel?: boolean\n  /**\n   * Horizontal layout of the form.\n   */\n  horizontal?: boolean\n  /**\n   * Mailchimp tracker tag to identify the origin.\n   */\n  tracker?: string\n  /**\n   * Referrer URL can't be passed explicitly\n   */\n  referrer?: string | null\n  /**\n   * Color variant of the sign-up button\n   */\n  variant?: ButtonVariant\n  /**\n   * Compact layout with no gap between the input and the submit button.\n   */\n  compact?: boolean\n}\n\nconst props = withDefaults(defineProps<FormSignUpProps>(), {\n  action: () => config.get('signup-form.action', configDefaults['signup-form.action']),\n  emailField: () => config.get('signup-form.email-field', configDefaults['signup-form.email-field']),\n  defaultGroups: () => config.get('signup-form.default-groups', configDefaults['signup-form.default-groups']),\n  noLabel: false,\n  horizontal: false,\n  tracker: () => config.get('signup-form.tracker', configDefaults['signup-form.tracker']),\n  referrer: null,\n  variant: 'primary',\n  compact: false\n})\nconst emit = defineEmits(['error', 'success', 'subscribed'])\nconst { t } = useI18n()\n\nconst { email, frozen, errorMessage, successMessage, subscribe } = useSignUpForm({\n  action: props.action,\n  emailField: props.emailField,\n  tracker: props.tracker,\n  referrer: props.referrer,\n  defaultGroups: props.defaultGroups,\n  emit\n})\n\nconst classList = computed(() => ({\n  'sign-up-form--horizontal': props.horizontal,\n  'sign-up-form--compact': props.compact,\n}))\n\nconst variantColorClass = computed(() => {\n  return `btn-${props.variant}`\n})\n</script>\n\n<style lang=\"scss\">\n\n.sign-up-form {\n  .sign-up-form__fieldset {\n    &__label {\n      margin-bottom: $spacer-xs;\n    }\n\n    &__group {\n      display: flex;\n      flex-direction: column;\n      gap: $spacer-xs;\n    }\n  }\n\n  &--horizontal .sign-up-form__fieldset__group {\n    flex-direction: row;\n  }\n\n  &--compact {\n    .sign-up-form__fieldset__label {\n      margin-bottom: 0;\n    }\n\n    .sign-up-form__fieldset__group {\n      gap: 0;\n    }\n  }\n\n  .sign-up-form__fieldset__group__addon.btn {\n    font-size: 0.9em;\n  }\n\n  &:not(&--horizontal) {\n    .sign-up-form__fieldset__group__addon.btn {\n      display: block;\n      width: 100%;\n    }\n  }\n}\n</style>\n","<template>\n  <form\n    class=\"sign-up-form\"\n    :class=\"classList\"\n    @submit.prevent=\"subscribe\"\n  >\n    <fieldset :disabled=\"frozen\">\n      <label\n        v-if=\"!noLabel\"\n        class=\"sign-up-form__fieldset__label text-uppercase text-muted fw-bold\"\n        for=\"input-email\"\n      >\n        {{ t('sign-up-form.label') }}\n      </label>\n      <div\n        class=\"sign-up-form__fieldset__group\"\n        :class=\"{ 'input-group': horizontal }\"\n      >\n        <input\n          id=\"input-email\"\n          v-model=\"email\"\n          name=\"EMAIL\"\n          type=\"email\"\n          class=\"form-control\"\n          :placeholder=\"t('sign-up-form.placeholder').toString()\"\n        >\n        <button\n          class=\"sign-up-form__fieldset__group__addon btn text-uppercase fw-bold input-group-text\"\n          :class=\"{ [variantColorClass]: true }\"\n          type=\"submit\"\n        >\n          {{ t('sign-up-form.submit') }}\n        </button>\n      </div>\n    </fieldset>\n    <p\n      v-if=\"errorMessage\"\n      class=\"sign-up-form__error alert alert-danger p-2 m-0 mt-2\"\n    >\n      {{ errorMessage }}\n    </p>\n    <p\n      v-if=\"successMessage\"\n      class=\"sign-up-form__success alert alert-success p-2 m-0 mt-2\"\n    >\n      {{ successMessage }}\n    </p>\n  </form>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nimport config from '@/config'\nimport configDefaults from '@/config.default'\nimport { useI18n } from 'vue-i18n'\nimport { useSignUpForm } from '@/composables/useSignUpForm'\nimport type { ButtonVariant } from 'bootstrap-vue-next'\n\nexport interface FormSignUpProps {\n  /**\n   * Mailchimp URL to send the data to.\n   */\n  action?: string\n  /**\n   * Mailchimp email field parameter\n   */\n  emailField?: string\n  /**\n   * Mailchimp default groups. Can be an array or a comma-separated list of groups.\n   */\n  defaultGroups?: string | string[]\n  /**\n   * Disable the main label.\n   */\n  noLabel?: boolean\n  /**\n   * Horizontal layout of the form.\n   */\n  horizontal?: boolean\n  /**\n   * Mailchimp tracker tag to identify the origin.\n   */\n  tracker?: string\n  /**\n   * Referrer URL can't be passed explicitly\n   */\n  referrer?: string | null\n  /**\n   * Color variant of the sign-up button\n   */\n  variant?: ButtonVariant\n  /**\n   * Compact layout with no gap between the input and the submit button.\n   */\n  compact?: boolean\n}\n\nconst props = withDefaults(defineProps<FormSignUpProps>(), {\n  action: () => config.get('signup-form.action', configDefaults['signup-form.action']),\n  emailField: () => config.get('signup-form.email-field', configDefaults['signup-form.email-field']),\n  defaultGroups: () => config.get('signup-form.default-groups', configDefaults['signup-form.default-groups']),\n  noLabel: false,\n  horizontal: false,\n  tracker: () => config.get('signup-form.tracker', configDefaults['signup-form.tracker']),\n  referrer: null,\n  variant: 'primary',\n  compact: false\n})\nconst emit = defineEmits(['error', 'success', 'subscribed'])\nconst { t } = useI18n()\n\nconst { email, frozen, errorMessage, successMessage, subscribe } = useSignUpForm({\n  action: props.action,\n  emailField: props.emailField,\n  tracker: props.tracker,\n  referrer: props.referrer,\n  defaultGroups: props.defaultGroups,\n  emit\n})\n\nconst classList = computed(() => ({\n  'sign-up-form--horizontal': props.horizontal,\n  'sign-up-form--compact': props.compact,\n}))\n\nconst variantColorClass = computed(() => {\n  return `btn-${props.variant}`\n})\n</script>\n\n<style lang=\"scss\">\n\n.sign-up-form {\n  .sign-up-form__fieldset {\n    &__label {\n      margin-bottom: $spacer-xs;\n    }\n\n    &__group {\n      display: flex;\n      flex-direction: column;\n      gap: $spacer-xs;\n    }\n  }\n\n  &--horizontal .sign-up-form__fieldset__group {\n    flex-direction: row;\n  }\n\n  &--compact {\n    .sign-up-form__fieldset__label {\n      margin-bottom: 0;\n    }\n\n    .sign-up-form__fieldset__group {\n      gap: 0;\n    }\n  }\n\n  .sign-up-form__fieldset__group__addon.btn {\n    font-size: 0.9em;\n  }\n\n  &:not(&--horizontal) {\n    .sign-up-form__fieldset__group__addon.btn {\n      display: block;\n      width: 100%;\n    }\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { useI18n } from 'vue-i18n'\nimport IPhXBold from '~icons/ph/x-bold'\nimport IPhXLogoFill from '~icons/ph/x-logo-fill'\nimport IPhFacebookLogoFill from '~icons/ph/facebook-logo-fill'\nimport IPhLinkedinLogoFill from '~icons/ph/linkedin-logo-fill'\n\nimport SignUpForm from '@/components/Form/FormSignUp.vue'\nimport AppIcon from '@/components/App/AppIcon.vue'\n\nexport interface FollowUsPopoverProps {\n  /**\n   * Compact layout for the sign-up form.\n   */\n  compact?: boolean\n}\n\nwithDefaults(defineProps<FollowUsPopoverProps>(), {\n  compact: false\n})\n\nconst emit = defineEmits(['update:close'])\nconst { t } = useI18n()\n\n// Social networks rendered as a row of round icon links. Kept as data so the\n// markup stays a single loop instead of three near-identical blocks.\nconst socialNetworks = Object.freeze([\n  { name: 'Twitter', href: 'https://x.com/ICIJorg', icon: IPhXLogoFill },\n  { name: 'Facebook', href: 'https://www.facebook.com/ICIJ.org', icon: IPhFacebookLogoFill },\n  { name: 'Linkedin', href: 'https://www.linkedin.com/company/1732242/', icon: IPhLinkedinLogoFill }\n])\n\n/**\n * Fired when a user clicks on the `close` button\n *\n * @event update:close\n * @type {boolean}\n */\nfunction closeSignupPopover(): void {\n  emit('update:close', false)\n}\n</script>\n\n<template>\n  <div class=\"follow-us\">\n    <button\n      class=\"btn btn-link text-secondary follow-us__close\"\n      @click=\"closeSignupPopover\"\n    >\n      <app-icon>\n        <i-ph-x-bold />\n      </app-icon>\n    </button>\n    <sign-up-form\n      class=\"p-3\"\n      :compact=\"compact\"\n    />\n    <div class=\"px-3 pb-1 text-uppercase text-muted fw-bold\">\n      {{ t('follow-us-popover.heading') }}\n    </div>\n    <div class=\"p-3 bg-light d-flex justify-content-between text-center\">\n      <div\n        v-for=\"socialNetwork in socialNetworks\"\n        :key=\"socialNetwork.name\"\n        class=\"col\"\n      >\n        <a\n          :href=\"socialNetwork.href\"\n          target=\"_blank\"\n          class=\"text-primary border border-primary rounded-circle bg-white follow-us__social-btn\"\n          :title=\"socialNetwork.name\"\n        >\n          <app-icon size=\"1.5em\">\n            <component :is=\"socialNetwork.icon\" />\n          </app-icon>\n          <span class=\"visually-hidden\">{{ socialNetwork.name }}</span>\n        </a>\n      </div>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n\n.follow-us {\n  position: relative;\n  width: 100%;\n  min-width: 298px;\n\n  &__social-btn {\n    height: 46px;\n    width: 46px;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n  }\n\n  &__close {\n    position: absolute;\n    right: $spacer * 0.5;\n    top: $spacer * 0.5;\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { useI18n } from 'vue-i18n'\nimport IPhXBold from '~icons/ph/x-bold'\nimport IPhXLogoFill from '~icons/ph/x-logo-fill'\nimport IPhFacebookLogoFill from '~icons/ph/facebook-logo-fill'\nimport IPhLinkedinLogoFill from '~icons/ph/linkedin-logo-fill'\n\nimport SignUpForm from '@/components/Form/FormSignUp.vue'\nimport AppIcon from '@/components/App/AppIcon.vue'\n\nexport interface FollowUsPopoverProps {\n  /**\n   * Compact layout for the sign-up form.\n   */\n  compact?: boolean\n}\n\nwithDefaults(defineProps<FollowUsPopoverProps>(), {\n  compact: false\n})\n\nconst emit = defineEmits(['update:close'])\nconst { t } = useI18n()\n\n// Social networks rendered as a row of round icon links. Kept as data so the\n// markup stays a single loop instead of three near-identical blocks.\nconst socialNetworks = Object.freeze([\n  { name: 'Twitter', href: 'https://x.com/ICIJorg', icon: IPhXLogoFill },\n  { name: 'Facebook', href: 'https://www.facebook.com/ICIJ.org', icon: IPhFacebookLogoFill },\n  { name: 'Linkedin', href: 'https://www.linkedin.com/company/1732242/', icon: IPhLinkedinLogoFill }\n])\n\n/**\n * Fired when a user clicks on the `close` button\n *\n * @event update:close\n * @type {boolean}\n */\nfunction closeSignupPopover(): void {\n  emit('update:close', false)\n}\n</script>\n\n<template>\n  <div class=\"follow-us\">\n    <button\n      class=\"btn btn-link text-secondary follow-us__close\"\n      @click=\"closeSignupPopover\"\n    >\n      <app-icon>\n        <i-ph-x-bold />\n      </app-icon>\n    </button>\n    <sign-up-form\n      class=\"p-3\"\n      :compact=\"compact\"\n    />\n    <div class=\"px-3 pb-1 text-uppercase text-muted fw-bold\">\n      {{ t('follow-us-popover.heading') }}\n    </div>\n    <div class=\"p-3 bg-light d-flex justify-content-between text-center\">\n      <div\n        v-for=\"socialNetwork in socialNetworks\"\n        :key=\"socialNetwork.name\"\n        class=\"col\"\n      >\n        <a\n          :href=\"socialNetwork.href\"\n          target=\"_blank\"\n          class=\"text-primary border border-primary rounded-circle bg-white follow-us__social-btn\"\n          :title=\"socialNetwork.name\"\n        >\n          <app-icon size=\"1.5em\">\n            <component :is=\"socialNetwork.icon\" />\n          </app-icon>\n          <span class=\"visually-hidden\">{{ socialNetwork.name }}</span>\n        </a>\n      </div>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n\n.follow-us {\n  position: relative;\n  width: 100%;\n  min-width: 298px;\n\n  &__social-btn {\n    height: 46px;\n    width: 46px;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n  }\n\n  &__close {\n    position: absolute;\n    right: $spacer * 0.5;\n    top: $spacer * 0.5;\n  }\n}\n</style>\n","import { Fragment } from \"vue\";\n//#region src/utils/flattenFragments.ts\nfunction flattenFragments(nodes) {\n\treturn nodes.map((node) => {\n\t\tif (node.type === Fragment) return flattenFragments(node.children);\n\t\treturn node;\n\t}).flat();\n}\n//#endregion\nexport { flattenFragments as t };\n\n//# sourceMappingURL=flattenFragments-ClbLQGqR.mjs.map","import { computed, toValue } from \"vue\";\n//#region src/composables/useAlignment.ts\nvar useAlignment = (align) => computed(() => {\n\tconst value = toValue(align);\n\treturn !value ? \"\" : `justify-content-${value}`;\n});\n//#endregion\nexport { useAlignment as t };\n\n//# sourceMappingURL=useAlignment-DuR8ymKI.mjs.map","import { C as tabsInjectionKey } from \"./keys-DU7sQgl3.mjs\";\nimport { c as sortSlotElementsByPosition, i as getSafeDocument } from \"./dom-AhkaSoh8.mjs\";\nimport { t as useDefaults } from \"./useDefaults-DseelK6y.mjs\";\nimport { t as useId$1 } from \"./useId-D1sqXtwx.mjs\";\nimport { t as flattenFragments } from \"./flattenFragments-ClbLQGqR.mjs\";\nimport { n as BvEvent } from \"./classes-B0E5Y78Y.mjs\";\nimport { t as useAlignment } from \"./useAlignment-DuR8ymKI.mjs\";\nimport { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, inject, mergeModels, mergeProps, nextTick, normalizeClass, normalizeProps, onMounted, onUnmounted, openBlock, provide, ref, renderList, renderSlot, resolveDynamicComponent, toDisplayString, toRef, unref, useAttrs, useModel, useSlots, useTemplateRef, watch, withCtx, withKeys, withModifiers } from \"vue\";\n//#endregion\n//#region src/components/BTabs/BTab.vue\nvar BTab_default = /* @__PURE__ */ defineComponent({\n\tinheritAttrs: false,\n\t__name: \"BTab\",\n\tprops: /* @__PURE__ */ mergeModels({\n\t\tbuttonId: { default: void 0 },\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tid: { default: void 0 },\n\t\tlazy: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\tunmountLazy: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: void 0\n\t\t},\n\t\tnoBody: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\ttag: { default: \"div\" },\n\t\ttitle: { default: void 0 },\n\t\ttitleItemClass: { default: void 0 },\n\t\ttitleLinkAttrs: { default: void 0 },\n\t\ttitleLinkClass: { default: void 0 }\n\t}, {\n\t\t\"active\": {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\t\"activeModifiers\": {}\n\t}),\n\temits: [\"update:active\"],\n\tsetup(__props, { expose: __expose }) {\n\t\tconst props = useDefaults(__props, \"BTab\");\n\t\tconst slots = useSlots();\n\t\tconst attrs = useAttrs();\n\t\tconst activeModel = useModel(__props, \"active\");\n\t\tconst parentData = inject(tabsInjectionKey, null);\n\t\tconst localId = ref(props.id);\n\t\tconst internalId = useId$1(\"\", \"tabpane\");\n\t\tconst computedId = computed(() => props.id ?? localId.value ?? internalId.value);\n\t\tconst computedButtonId = useId$1(() => props.buttonId, \"tab\");\n\t\tconst lazyRenderCompleted = ref(false);\n\t\tconst el = useTemplateRef(\"_el\");\n\t\tconst processedAttrs = computed(() => {\n\t\t\tconst { onClick: _, ...tabAttrs } = attrs;\n\t\t\treturn tabAttrs;\n\t\t});\n\t\tfunction updateTab() {\n\t\t\tif (!parentData) return;\n\t\t\tconst newId = parentData.registerTab(computed(() => ({\n\t\t\t\tinternalId: internalId.value,\n\t\t\t\tid: computedId.value,\n\t\t\t\tactive: activeModel.value,\n\t\t\t\tbuttonId: computedButtonId.value,\n\t\t\t\tdisabled: props.disabled,\n\t\t\t\ttitle: props.title,\n\t\t\t\ttitleComponent: slots.title,\n\t\t\t\ttitleItemClass: props.titleItemClass,\n\t\t\t\ttitleLinkAttrs: props.titleLinkAttrs,\n\t\t\t\ttitleLinkClass: props.titleLinkClass,\n\t\t\t\tonClick: attrs.onClick,\n\t\t\t\tel\n\t\t\t})));\n\t\t\tif (newId !== localId.value) localId.value = newId;\n\t\t}\n\t\tif (parentData) {\n\t\t\tupdateTab();\n\t\t\tif (activeModel.value) parentData.activateTab(internalId.value);\n\t\t}\n\t\tonUnmounted(() => {\n\t\t\tif (!parentData) return;\n\t\t\tparentData.unregisterTab(internalId.value);\n\t\t});\n\t\tconst isActive = computed(() => parentData?.activeId.value === computedId.value);\n\t\tconst show = ref(isActive.value);\n\t\tconst computedLazy = computed(() => !!(parentData?.lazy.value || props.lazy));\n\t\tconst computedActive = computed(() => isActive.value && !props.disabled);\n\t\tconst showSlot = computed(() => computedActive.value || !computedLazy.value || computedLazy.value && !props.unmountLazy && lazyRenderCompleted.value);\n\t\twatch(showSlot, (shown) => {\n\t\t\tif (shown && !lazyRenderCompleted.value) lazyRenderCompleted.value = true;\n\t\t});\n\t\twatch(isActive, (active) => {\n\t\t\tif (active) {\n\t\t\t\tactiveModel.value = true;\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tshow.value = true;\n\t\t\t\t}, 0);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tshow.value = false;\n\t\t\tactiveModel.value = false;\n\t\t});\n\t\twatch(activeModel, (active) => {\n\t\t\tif (props.disabled) {\n\t\t\t\tactiveModel.value = false;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!parentData) return;\n\t\t\tif (!active) {\n\t\t\t\tif (isActive.value) parentData.activateTab(void 0);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!isActive.value) parentData.activateTab(internalId.value);\n\t\t});\n\t\tconst computedClasses = computed(() => [\n\t\t\t{\n\t\t\t\t\"active\": isActive.value,\n\t\t\t\t\"show\": show.value,\n\t\t\t\t\"card-body\": parentData?.card.value && props.noBody === false,\n\t\t\t\t\"fade\": !parentData?.noFade.value\n\t\t\t},\n\t\t\tshow.value ? parentData?.activeTabClass.value : parentData?.inactiveTabClass.value,\n\t\t\tparentData?.tabClass.value\n\t\t]);\n\t\t__expose({\n\t\t\tactivate: () => {\n\t\t\t\tactiveModel.value = true;\n\t\t\t},\n\t\t\tdeactivate: () => {\n\t\t\t\tactiveModel.value = false;\n\t\t\t}\n\t\t});\n\t\treturn (_ctx, _cache) => {\n\t\t\treturn openBlock(), createBlock(resolveDynamicComponent(unref(props).tag), mergeProps({\n\t\t\t\tid: computedId.value,\n\t\t\t\tref: \"_el\",\n\t\t\t\tclass: [\"tab-pane\", computedClasses.value],\n\t\t\t\trole: \"tabpanel\",\n\t\t\t\t\"aria-labelledby\": unref(computedButtonId)\n\t\t\t}, processedAttrs.value), {\n\t\t\t\tdefault: withCtx(() => [showSlot.value ? renderSlot(_ctx.$slots, \"default\", { key: 0 }) : createCommentVNode(\"\", true)]),\n\t\t\t\t_: 3\n\t\t\t}, 16, [\n\t\t\t\t\"id\",\n\t\t\t\t\"class\",\n\t\t\t\t\"aria-labelledby\"\n\t\t\t]);\n\t\t};\n\t}\n});\n//#endregion\n//#region src/components/BTabsTabContent.vue\nvar BTabsTabContent_default = /* @__PURE__ */ defineComponent({\n\t__name: \"BTabsTabContent\",\n\tprops: {\n\t\tcontentClass: {},\n\t\tshowEmpty: { type: Boolean },\n\t\tcard: { type: Boolean }\n\t},\n\tsetup(__props) {\n\t\treturn (_ctx, _cache) => {\n\t\t\treturn openBlock(), createElementBlock(\"div\", { class: normalizeClass([\"tab-content\", __props.contentClass]) }, [renderSlot(_ctx.$slots, \"default\"), __props.showEmpty ? (openBlock(), createElementBlock(\"div\", {\n\t\t\t\tkey: \"bv-empty-tab\",\n\t\t\t\tclass: normalizeClass([\"tab-pane active\", { \"card-body\": __props.card }])\n\t\t\t}, [renderSlot(_ctx.$slots, \"empty\")], 2)) : createCommentVNode(\"\", true)], 2);\n\t\t};\n\t}\n});\n//#endregion\n//#region src/components/BTabs/BTabs.vue?vue&type=script&setup=true&lang.ts\nvar _hoisted_1 = [\"aria-orientation\"];\nvar _hoisted_2 = [\n\t\"id\",\n\t\"aria-controls\",\n\t\"aria-selected\",\n\t\"disabled\",\n\t\"tabindex\",\n\t\"onClick\"\n];\n//#endregion\n//#region src/components/BTabs/BTabs.vue\nvar BTabs_default = /* @__PURE__ */ defineComponent({\n\t__name: \"BTabs\",\n\tprops: /* @__PURE__ */ mergeModels({\n\t\tactiveNavItemClass: { default: void 0 },\n\t\tactiveNavLinkClass: { default: void 0 },\n\t\tactiveTabClass: { default: void 0 },\n\t\talign: { default: void 0 },\n\t\tcard: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tcontentClass: { default: void 0 },\n\t\tend: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tfill: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tid: { default: void 0 },\n\t\tindex: {},\n\t\tinactiveNavItemClass: { default: void 0 },\n\t\tinactiveNavLinkClass: { default: void 0 },\n\t\tinactiveTabClass: { default: void 0 },\n\t\tjustified: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tlazy: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tnavClass: { default: void 0 },\n\t\tnavItemClass: { default: void 0 },\n\t\tnavWrapperClass: { default: void 0 },\n\t\tnoFade: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tnoKeyNav: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tnoNavStyle: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tpills: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tsmall: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\ttag: { default: \"div\" },\n\t\ttabClass: { default: void 0 },\n\t\tunderline: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tvertical: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t}, {\n\t\t\"index\": { default: -1 },\n\t\t\"indexModifiers\": {},\n\t\t\"modelValue\": { default: void 0 },\n\t\t\"modelModifiers\": {}\n\t}),\n\temits: /* @__PURE__ */ mergeModels([\"activate-tab\"], [\"update:index\", \"update:modelValue\"]),\n\tsetup(__props, { emit: __emit }) {\n\t\tconst props = useDefaults(__props, \"BTabs\");\n\t\tconst emit = __emit;\n\t\tconst slots = useSlots();\n\t\tconst activeIndex = useModel(__props, \"index\");\n\t\tconst activeId = useModel(__props, \"modelValue\");\n\t\tconst tabsInternal = ref([]);\n\t\tconst tabElementsArray = ref([]);\n\t\tconst isChildActive = ref(false);\n\t\tconst initialIds = ref([]);\n\t\tconst hasExplicitIds = ref(false);\n\t\tconst updateTabElementsArray = () => {\n\t\t\tconst tabElements = flattenFragments(slots.default?.({}) ?? []);\n\t\t\ttabElementsArray.value = (Array.isArray(tabElements) ? tabElements : [tabElements]).filter((tab) => tab.type === BTab_default);\n\t\t\tif (initialIds.value.length === 0) {\n\t\t\t\tinitialIds.value = tabElementsArray.value.map((tab) => unref(useId$1(() => tab.props?.id, \"tabpane\")));\n\t\t\t\thasExplicitIds.value = tabElementsArray.value.some((tab) => tab.props?.id !== void 0);\n\t\t\t}\n\t\t\tisChildActive.value = tabElementsArray.value.some((tab) => tab.props?.active !== void 0 && tab.props?.active !== false);\n\t\t};\n\t\tupdateTabElementsArray();\n\t\twatch(() => slots.default?.({}), () => {\n\t\t\tupdateTabElementsArray();\n\t\t\tnextTick(() => {\n\t\t\t\tsortTabs();\n\t\t\t});\n\t\t});\n\t\tconst tabs = computed(() => {\n\t\t\tif (tabsInternal.value.length === 0) {\n\t\t\t\tconst _activeIndex = tabElementsArray.value.findIndex((tab) => tab.props?.active !== void 0 && (tab.props.disabled === false || tab.props.disabled === void 0) || activeId.value && tab.props?.id === activeId.value);\n\t\t\t\treturn tabElementsArray.value.map((tab, index) => {\n\t\t\t\t\tconst active = _activeIndex !== -1 ? index === _activeIndex : activeIndex.value > -1 ? index === activeIndex.value : index === 0;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: tab.props?.id ?? initialIds.value[index],\n\t\t\t\t\t\tinternalId: `premount-${index}`,\n\t\t\t\t\t\tbuttonId: tab.props?.buttonId,\n\t\t\t\t\t\tdisabled: tab.props?.disabled,\n\t\t\t\t\t\ttitle: tab.props?.title,\n\t\t\t\t\t\ttitleComponent: tab.children?.title,\n\t\t\t\t\t\ttitleItemClass: tab.props?.titleItemClass,\n\t\t\t\t\t\ttitleLinkAttrs: tab.props?.titleLinkAttrs,\n\t\t\t\t\t\ttitleLinkClass: tab.props?.titleLinkClass,\n\t\t\t\t\t\tonClick: tab.props?.onClick,\n\t\t\t\t\t\tactive,\n\t\t\t\t\t\tnavItemClasses: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tactive,\n\t\t\t\t\t\t\t\tdisabled: !(tab.props?.disabled === false || tab.props?.disabled === void 0)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tactive ? props.activeNavItemClass : props.inactiveNavItemClass,\n\t\t\t\t\t\t\tprops.navItemClass\n\t\t\t\t\t\t]\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn tabsInternal.value.map((_tab) => {\n\t\t\t\tconst tab = unref(_tab);\n\t\t\t\tconst active = tab.id === activeId.value;\n\t\t\t\treturn {\n\t\t\t\t\t...tab,\n\t\t\t\t\tactive,\n\t\t\t\t\tnavItemClasses: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tactive,\n\t\t\t\t\t\t\tdisabled: tab.disabled\n\t\t\t\t\t\t},\n\t\t\t\t\t\tactive ? props.activeNavItemClass : props.inactiveNavItemClass,\n\t\t\t\t\t\tprops.navItemClass\n\t\t\t\t\t]\n\t\t\t\t};\n\t\t\t});\n\t\t});\n\t\tlet initialized = false;\n\t\tlet updateInitialActiveIndex = false;\n\t\tlet updateInitialActiveId = false;\n\t\tlet delayedTabSelection = false;\n\t\tif (activeIndex.value > -1 && !activeId.value && !hasExplicitIds.value && tabElementsArray.value.length > 0) {\n\t\t\tdelayedTabSelection = true;\n\t\t\tupdateInitialActiveId = true;\n\t\t} else if (activeIndex.value === -1 && activeId.value) if (tabs.value.findIndex((t) => t.id === activeId.value) !== -1) activeIndex.value = tabs.value.findIndex((t) => t.id === activeId.value);\n\t\telse updateInitialActiveIndex = true;\n\t\telse if (activeIndex.value > -1 && !activeId.value) if (tabs.value[activeIndex.value]?.id) activeId.value = tabs.value[activeIndex.value]?.id;\n\t\telse updateInitialActiveId = true;\n\t\telse if (activeIndex.value === -1 && !activeId.value && !isChildActive.value) {\n\t\t\tactiveIndex.value = tabs.value.findIndex((t) => t.disabled === void 0 || t.disabled === false);\n\t\t\tactiveId.value = tabs.value[activeIndex.value]?.id;\n\t\t} else if (activeIndex.value === -1 && !activeId.value && isChildActive.value) {\n\t\t\tactiveIndex.value = tabs.value.findIndex((t) => t.active !== void 0 && t.active !== false && (t.disabled === void 0 || t.disabled === false));\n\t\t\tactiveId.value = tabs.value[activeIndex.value]?.id;\n\t\t}\n\t\tfunction updateInitialIndexAndId() {\n\t\t\tif (updateInitialActiveIndex) {\n\t\t\t\tconst index = tabs.value.findIndex((t) => t.id === activeId.value);\n\t\t\t\tif (index !== -1) nextTick(() => {\n\t\t\t\t\tactiveIndex.value = index;\n\t\t\t\t\tupdateInitialActiveIndex = false;\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (updateInitialActiveId) {\n\t\t\t\tif (delayedTabSelection && tabsInternal.value.length === 0) return;\n\t\t\t\tif (activeIndex.value > -1 && tabs.value[activeIndex.value]?.id) nextTick(() => {\n\t\t\t\t\tactiveId.value = tabs.value[activeIndex.value]?.id;\n\t\t\t\t\tupdateInitialActiveId = false;\n\t\t\t\t\tdelayedTabSelection = false;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tupdateInitialIndexAndId();\n\t\tconst showEmpty = computed(() => !(tabs?.value && tabs.value.length > 0));\n\t\tconst tabContentProps = computed(() => ({\n\t\t\tcontentClass: props.contentClass,\n\t\t\tshowEmpty: showEmpty.value,\n\t\t\tcard: props.card\n\t\t}));\n\t\tconst computedClasses = computed(() => ({\n\t\t\t\"d-flex\": props.vertical,\n\t\t\t\"align-items-start\": props.vertical\n\t\t}));\n\t\tconst alignment = useAlignment(() => props.align);\n\t\tconst navTabsClasses = computed(() => ({\n\t\t\t\"nav-pills\": props.pills,\n\t\t\t\"nav-underline\": props.underline,\n\t\t\t\"flex-column me-3\": props.vertical,\n\t\t\t[alignment.value]: props.align !== void 0,\n\t\t\t\"nav-fill\": props.fill,\n\t\t\t\"card-header-tabs\": props.card && !props.pills && !props.underline,\n\t\t\t\"card-header-pills\": props.card && props.pills,\n\t\t\t\"nav-justified\": props.justified,\n\t\t\t\"nav-tabs\": !props.noNavStyle && !props.pills && !props.underline,\n\t\t\t\"small\": props.small\n\t\t}));\n\t\tconst handleClick = (event, index) => {\n\t\t\tif (index >= 0 && !tabs.value[index]?.disabled && tabs.value[index]?.onClick && typeof tabs.value[index].onClick === \"function\") {\n\t\t\t\ttabs.value[index].onClick?.(event);\n\t\t\t\tif (event.defaultPrevented) {\n\t\t\t\t\tgetSafeDocument()?.getElementById(tabs.value[index].buttonId)?.blur();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tactiveIndex.value = index;\n\t\t};\n\t\tconst keynav = (e, direction) => {\n\t\t\tif (tabs.value.length <= 0 || props.noKeyNav) return;\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tactiveIndex.value = nextIndex(activeIndex.value + direction, direction);\n\t\t\tnextTick(() => {\n\t\t\t\tif (activeIndex.value >= 0) getSafeDocument()?.getElementById(tabs.value[activeIndex.value]?.buttonId)?.focus();\n\t\t\t});\n\t\t};\n\t\tconst nextIndex = (start, direction) => {\n\t\t\tlet index = start;\n\t\t\tlet minIdx = -1;\n\t\t\tlet maxIdx = -1;\n\t\t\tfor (let i = 0; i < tabs.value.length; i++) if (!tabs.value[i]?.disabled) {\n\t\t\t\tif (minIdx === -1) minIdx = i;\n\t\t\t\tmaxIdx = i;\n\t\t\t}\n\t\t\twhile (index >= minIdx && index <= maxIdx && tabs.value[index]?.disabled) index += direction;\n\t\t\tif (index < minIdx) index = minIdx;\n\t\t\tif (index > maxIdx) index = maxIdx;\n\t\t\treturn index;\n\t\t};\n\t\tlet previousIndex;\n\t\tlet isReverting = false;\n\t\twatch(activeIndex, (newValue, oldValue) => {\n\t\t\tif (tabs.value.length <= 0 || tabs.value.filter((t) => !t.disabled).length <= 0) return;\n\t\t\tif (isReverting) {\n\t\t\t\tisReverting = false;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst index = nextIndex(newValue, newValue > oldValue ? 1 : -1);\n\t\t\tif (index !== newValue) {\n\t\t\t\tpreviousIndex = oldValue;\n\t\t\t\tactiveIndex.value = index;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst tabEvent = new BvEvent(\"activate-tab\", { cancelable: true });\n\t\t\temit(\"activate-tab\", {\n\t\t\t\tnewTabId: tabs.value[index]?.id,\n\t\t\t\tprevTabId: tabs.value[previousIndex ?? oldValue]?.id,\n\t\t\t\tnewTabIndex: index,\n\t\t\t\tprevTabIndex: previousIndex ?? oldValue,\n\t\t\t\tevent: tabEvent\n\t\t\t});\n\t\t\tif (tabEvent.defaultPrevented) {\n\t\t\t\tisReverting = true;\n\t\t\t\tconst prev = previousIndex ?? oldValue ?? nextIndex(0, 1);\n\t\t\t\tpreviousIndex = void 0;\n\t\t\t\tif (activeId.value !== tabs.value[prev]?.id) activeId.value = tabs.value[prev]?.id;\n\t\t\t\tnextTick(() => {\n\t\t\t\t\tif (prev >= 0) getSafeDocument()?.getElementById(tabs.value[prev]?.buttonId)?.focus();\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (activeId.value !== tabs.value[index]?.id) activeId.value = tabs.value[index]?.id;\n\t\t\tpreviousIndex = void 0;\n\t\t});\n\t\twatch(activeId, (newValue, oldValue) => {\n\t\t\tif (tabs.value.length <= 0 || tabs.value.filter((t) => !t.disabled).length <= 0) return;\n\t\t\tconst index = tabs.value.findIndex((t) => t.id === newValue);\n\t\t\tif (index === activeIndex.value) return;\n\t\t\tconst oldIndex = tabs.value.findIndex((t) => t.id === oldValue);\n\t\t\tif (tabs.value[index]?.disabled) {\n\t\t\t\tactiveIndex.value = nextIndex(index, index > oldIndex ? 1 : -1);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (index === -1) {\n\t\t\t\tactiveIndex.value = nextIndex(0, 1);\n\t\t\t\tnextTick(() => {\n\t\t\t\t\tactiveId.value = tabs.value[activeIndex.value]?.id;\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tactiveIndex.value = index;\n\t\t});\n\t\tconst registerTab = (tab) => {\n\t\t\tconst idx = tabsInternal.value.findIndex((t) => t.value.internalId === tab.value.internalId);\n\t\t\tif (idx === -1) {\n\t\t\t\ttabsInternal.value.push(tab);\n\t\t\t\tif (initialized) nextTick(() => {\n\t\t\t\t\tsortTabs();\n\t\t\t\t});\n\t\t\t\telse if (delayedTabSelection) nextTick(() => {\n\t\t\t\t\tupdateInitialIndexAndId();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\ttabsInternal.value[idx] = tab;\n\t\t\t\tif (initialized) sortTabs();\n\t\t\t}\n\t\t\tconst idx2 = tabsInternal.value.findIndex((t) => t.value.internalId === tab.value.internalId);\n\t\t\treturn tab.value.id ?? (!initialized ? initialIds.value[idx2] : tab.value.internalId);\n\t\t};\n\t\tonMounted(() => {\n\t\t\tupdateInitialIndexAndId();\n\t\t\tsortTabs();\n\t\t\tinitialized = true;\n\t\t});\n\t\tconst sortTabs = () => {\n\t\t\ttabsInternal.value.sort((a, b) => sortSlotElementsByPosition(a.value.el.value, b.value.el.value));\n\t\t\tif (activeId.value && activeIndex.value !== tabs.value.findIndex((t) => t.id === activeId.value)) activeIndex.value = tabs.value.findIndex((t) => t.id === activeId.value);\n\t\t};\n\t\tconst unregisterTab = (id) => {\n\t\t\ttabsInternal.value = tabsInternal.value.filter((t) => t.value.internalId !== id);\n\t\t};\n\t\tprovide(tabsInjectionKey, {\n\t\t\tlazy: toRef(() => props.lazy),\n\t\t\tcard: toRef(() => props.card),\n\t\t\tnoFade: toRef(() => props.noFade),\n\t\t\tactiveTabClass: toRef(() => props.activeTabClass),\n\t\t\tinactiveTabClass: toRef(() => props.inactiveTabClass),\n\t\t\ttabClass: toRef(() => props.tabClass),\n\t\t\tregisterTab,\n\t\t\tunregisterTab,\n\t\t\tactiveId,\n\t\t\tactivateTab: (internalId) => {\n\t\t\t\tconst idx = tabs.value.findIndex((t) => t.internalId === internalId);\n\t\t\t\tif (internalId === void 0 || idx === -1) {\n\t\t\t\t\tactiveIndex.value = nextIndex(0, 1);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tactiveIndex.value = idx;\n\t\t\t}\n\t\t});\n\t\treturn (_ctx, _cache) => {\n\t\t\treturn openBlock(), createBlock(resolveDynamicComponent(unref(props).tag), {\n\t\t\t\tid: unref(props).id,\n\t\t\t\tclass: normalizeClass([\"tabs\", computedClasses.value])\n\t\t\t}, {\n\t\t\t\tdefault: withCtx(() => [\n\t\t\t\t\tunref(props).end ? (openBlock(), createBlock(BTabsTabContent_default, normalizeProps(mergeProps({ key: 0 }, tabContentProps.value)), {\n\t\t\t\t\t\tempty: withCtx(() => [renderSlot(_ctx.$slots, \"empty\")]),\n\t\t\t\t\t\tdefault: withCtx(() => [renderSlot(_ctx.$slots, \"default\")]),\n\t\t\t\t\t\t_: 3\n\t\t\t\t\t}, 16)) : createCommentVNode(\"\", true),\n\t\t\t\t\tcreateElementVNode(\"div\", { class: normalizeClass([unref(props).navWrapperClass, {\n\t\t\t\t\t\t\"card-header\": unref(props).card,\n\t\t\t\t\t\t\"ms-auto\": __props.vertical && unref(props).end\n\t\t\t\t\t}]) }, [createElementVNode(\"ul\", {\n\t\t\t\t\t\tclass: normalizeClass([\"nav\", [navTabsClasses.value, unref(props).navClass]]),\n\t\t\t\t\t\trole: \"tablist\",\n\t\t\t\t\t\t\"aria-orientation\": unref(props).vertical ? \"vertical\" : \"horizontal\"\n\t\t\t\t\t}, [\n\t\t\t\t\t\trenderSlot(_ctx.$slots, \"tabs-start\"),\n\t\t\t\t\t\t(openBlock(true), createElementBlock(Fragment, null, renderList(tabs.value, (tab, idx) => {\n\t\t\t\t\t\t\treturn openBlock(), createElementBlock(\"li\", {\n\t\t\t\t\t\t\t\tkey: tab.id ?? tab.internalId,\n\t\t\t\t\t\t\t\tclass: normalizeClass([\"nav-item\", tab.titleItemClass]),\n\t\t\t\t\t\t\t\trole: \"presentation\"\n\t\t\t\t\t\t\t}, [createElementVNode(\"button\", mergeProps({\n\t\t\t\t\t\t\t\tid: tab.buttonId,\n\t\t\t\t\t\t\t\tclass: [\"nav-link\", [\n\t\t\t\t\t\t\t\t\ttab.navItemClasses,\n\t\t\t\t\t\t\t\t\ttab.titleLinkClass,\n\t\t\t\t\t\t\t\t\ttab.active ? unref(props).activeNavLinkClass : unref(props).inactiveNavLinkClass\n\t\t\t\t\t\t\t\t]],\n\t\t\t\t\t\t\t\trole: \"tab\",\n\t\t\t\t\t\t\t\t\"aria-controls\": tab.id,\n\t\t\t\t\t\t\t\t\"aria-selected\": tab.active,\n\t\t\t\t\t\t\t\tdisabled: tab.disabled,\n\t\t\t\t\t\t\t\ttabindex: unref(props).noKeyNav ? void 0 : tab.active ? void 0 : -1,\n\t\t\t\t\t\t\t\ttype: \"button\"\n\t\t\t\t\t\t\t}, { ref_for: true }, tab.titleLinkAttrs, {\n\t\t\t\t\t\t\t\tonKeydown: [\n\t\t\t\t\t\t\t\t\t_cache[0] || (_cache[0] = withKeys(withModifiers(($event) => !unref(props).vertical && keynav($event, -1), [\"exact\"]), [\"left\"])),\n\t\t\t\t\t\t\t\t\t_cache[1] || (_cache[1] = withKeys(withModifiers(($event) => !unref(props).vertical && keynav($event, -999), [\"shift\"]), [\"left\"])),\n\t\t\t\t\t\t\t\t\t_cache[2] || (_cache[2] = withKeys(withModifiers(($event) => unref(props).vertical && keynav($event, -1), [\"exact\"]), [\"up\"])),\n\t\t\t\t\t\t\t\t\t_cache[3] || (_cache[3] = withKeys(withModifiers(($event) => unref(props).vertical && keynav($event, -999), [\"shift\"]), [\"up\"])),\n\t\t\t\t\t\t\t\t\t_cache[4] || (_cache[4] = withKeys(withModifiers(($event) => !unref(props).vertical && keynav($event, 1), [\"exact\"]), [\"right\"])),\n\t\t\t\t\t\t\t\t\t_cache[5] || (_cache[5] = withKeys(withModifiers(($event) => !unref(props).vertical && keynav($event, 999), [\"shift\"]), [\"right\"])),\n\t\t\t\t\t\t\t\t\t_cache[6] || (_cache[6] = withKeys(withModifiers(($event) => unref(props).vertical && keynav($event, 1), [\"exact\"]), [\"down\"])),\n\t\t\t\t\t\t\t\t\t_cache[7] || (_cache[7] = withKeys(withModifiers(($event) => unref(props).vertical && keynav($event, 999), [\"shift\"]), [\"down\"])),\n\t\t\t\t\t\t\t\t\t_cache[8] || (_cache[8] = withKeys(($event) => keynav($event, -999), [\"page-up\"])),\n\t\t\t\t\t\t\t\t\t_cache[9] || (_cache[9] = withKeys(($event) => keynav($event, 999), [\"page-down\"])),\n\t\t\t\t\t\t\t\t\t_cache[10] || (_cache[10] = withKeys(($event) => keynav($event, -999), [\"home\"])),\n\t\t\t\t\t\t\t\t\t_cache[11] || (_cache[11] = withKeys(($event) => keynav($event, 999), [\"end\"]))\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tonClick: withModifiers((e) => handleClick(e, idx), [\"stop\"])\n\t\t\t\t\t\t\t}), [tab.titleComponent ? (openBlock(), createBlock(resolveDynamicComponent(tab.titleComponent), { key: 0 })) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createTextVNode(toDisplayString(tab.title), 1)], 64))], 16, _hoisted_2)], 2);\n\t\t\t\t\t\t}), 128)),\n\t\t\t\t\t\trenderSlot(_ctx.$slots, \"tabs-end\")\n\t\t\t\t\t], 10, _hoisted_1)], 2),\n\t\t\t\t\t!unref(props).end ? (openBlock(), createBlock(BTabsTabContent_default, normalizeProps(mergeProps({ key: 1 }, tabContentProps.value)), {\n\t\t\t\t\t\tempty: withCtx(() => [renderSlot(_ctx.$slots, \"empty\")]),\n\t\t\t\t\t\tdefault: withCtx(() => [renderSlot(_ctx.$slots, \"default\")]),\n\t\t\t\t\t\t_: 3\n\t\t\t\t\t}, 16)) : createCommentVNode(\"\", true)\n\t\t\t\t]),\n\t\t\t\t_: 3\n\t\t\t}, 8, [\"id\", \"class\"]);\n\t\t};\n\t}\n});\n//#endregion\nexport { BTab_default as n, BTabs_default as t };\n\n//# sourceMappingURL=BTabs-D_vWlBjT.mjs.map","import { p as inputGroupKey } from \"./keys-DU7sQgl3.mjs\";\nimport { t as useDefaults } from \"./useDefaults-DseelK6y.mjs\";\nimport { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, defineComponent, normalizeClass, openBlock, provide, renderSlot, resolveDynamicComponent, toDisplayString, unref, withCtx } from \"vue\";\n//#region src/components/BInputGroup/BInputGroup.vue?vue&type=script&setup=true&lang.ts\nvar _hoisted_1 = {\n\tkey: 0,\n\tclass: \"input-group-text\"\n};\nvar _hoisted_2 = {\n\tkey: 0,\n\tclass: \"input-group-text\"\n};\n//#endregion\n//#region src/components/BInputGroup/BInputGroup.vue\nvar BInputGroup_default = /* @__PURE__ */ defineComponent({\n\t__name: \"BInputGroup\",\n\tprops: {\n\t\tappend: { default: void 0 },\n\t\tid: { default: void 0 },\n\t\tprepend: { default: void 0 },\n\t\tsize: { default: void 0 },\n\t\ttag: { default: \"div\" }\n\t},\n\tsetup(__props) {\n\t\tprovide(inputGroupKey, true);\n\t\tconst props = useDefaults(__props, \"BInputGroup\");\n\t\tconst computedClasses = computed(() => ({ [`input-group-${props.size}`]: props.size !== void 0 }));\n\t\tconst hasAppend = computed(() => !!props.append);\n\t\tconst hasPrepend = computed(() => !!props.prepend);\n\t\treturn (_ctx, _cache) => {\n\t\t\treturn openBlock(), createBlock(resolveDynamicComponent(unref(props).tag), {\n\t\t\t\tid: unref(props).id,\n\t\t\t\tclass: normalizeClass([\"input-group\", computedClasses.value]),\n\t\t\t\trole: \"group\"\n\t\t\t}, {\n\t\t\t\tdefault: withCtx(() => [\n\t\t\t\t\trenderSlot(_ctx.$slots, \"prepend\", {}, () => [hasPrepend.value ? (openBlock(), createElementBlock(\"span\", _hoisted_1, [createElementVNode(\"span\", null, toDisplayString(unref(props).prepend), 1)])) : createCommentVNode(\"\", true)]),\n\t\t\t\t\trenderSlot(_ctx.$slots, \"default\"),\n\t\t\t\t\trenderSlot(_ctx.$slots, \"append\", {}, () => [hasAppend.value ? (openBlock(), createElementBlock(\"span\", _hoisted_2, [createElementVNode(\"span\", null, toDisplayString(unref(props).append), 1)])) : createCommentVNode(\"\", true)])\n\t\t\t\t]),\n\t\t\t\t_: 3\n\t\t\t}, 8, [\"id\", \"class\"]);\n\t\t};\n\t}\n});\n//#endregion\nexport { BInputGroup_default as t };\n\n//# sourceMappingURL=BInputGroup-X2Z53RJx.mjs.map","import { computed, toValue } from \"vue\";\n//#region src/composables/useAriaInvalid.ts\nvar useAriaInvalid = (ariaInvalid, state) => computed(() => {\n\tconst resolvedAriaInvalid = toValue(ariaInvalid);\n\tconst resolvedState = toValue(state);\n\treturn resolvedAriaInvalid === true ? \"true\" : typeof resolvedAriaInvalid === \"string\" ? resolvedAriaInvalid : resolvedState === false ? \"true\" : resolvedAriaInvalid === false ? \"false\" : void 0;\n});\n//#endregion\nexport { useAriaInvalid as t };\n\n//# sourceMappingURL=useAriaInvalid-apOwgexm.mjs.map","import { t as noop } from \"./functions-BcMenQqL.mjs\";\nimport { toValue } from \"vue\";\n//#region src/utils/debounce.ts\n/**\n* @internal\n*/\nfunction createFilterWrapper(filter, fn) {\n\tfunction wrapper(...args) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tPromise.resolve(filter(() => fn.apply(this, args), {\n\t\t\t\tfn,\n\t\t\t\tthisArg: this,\n\t\t\t\targs\n\t\t\t})).then(resolve).catch(reject);\n\t\t});\n\t}\n\twrapper.cancel = filter.cancel;\n\treturn wrapper;\n}\n/**\n* Create an EventFilter that debounce the events\n*/\nfunction debounceFilter(ms, options = {}) {\n\tlet timer;\n\tlet maxTimer;\n\tlet lastRejector = noop;\n\tconst _clearTimeout = (timer) => {\n\t\tclearTimeout(timer);\n\t\tlastRejector();\n\t\tlastRejector = noop;\n\t};\n\tlet lastInvoker;\n\tconst filter = (invoke) => {\n\t\tconst duration = toValue(ms);\n\t\tconst maxDuration = toValue(options.maxWait);\n\t\tif (timer) _clearTimeout(timer);\n\t\tif (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n\t\t\tif (maxTimer) {\n\t\t\t\t_clearTimeout(maxTimer);\n\t\t\t\tmaxTimer = null;\n\t\t\t}\n\t\t\treturn Promise.resolve(invoke());\n\t\t}\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlastRejector = options.rejectOnCancel ? reject : resolve;\n\t\t\tlastInvoker = invoke;\n\t\t\tif (maxDuration && !maxTimer) maxTimer = setTimeout(() => {\n\t\t\t\tif (timer) _clearTimeout(timer);\n\t\t\t\tmaxTimer = null;\n\t\t\t\tresolve(lastInvoker());\n\t\t\t}, maxDuration);\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\tif (maxTimer) _clearTimeout(maxTimer);\n\t\t\t\tmaxTimer = null;\n\t\t\t\tresolve(invoke());\n\t\t\t}, duration);\n\t\t});\n\t};\n\tfilter.cancel = () => {\n\t\tif (timer) _clearTimeout(timer);\n\t\tif (maxTimer) _clearTimeout(maxTimer);\n\t\tmaxTimer = null;\n\t};\n\treturn filter;\n}\n/**\n* Debounce execution of a function.\n*\n* @see https://vueuse.org/useDebounceFn\n* @param  fn          A function to be executed after delay milliseconds debounced.\n* @param  ms          A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n* @param  options     Options\n*\n* @return A new, debounce, function, provided with a cancel method.\n*/\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n\treturn createFilterWrapper(debounceFilter(ms, options), fn);\n}\n//#endregion\nexport { useDebounceFn as t };\n\n//# sourceMappingURL=debounce-DHxNfjan.mjs.map","import { computed, toValue } from \"vue\";\n//#region src/composables/useStateClass.ts\nvar useStateClass = (value) => computed(() => {\n\tconst resolvedValue = toValue(value);\n\treturn resolvedValue === true ? \"is-valid\" : resolvedValue === false ? \"is-invalid\" : null;\n});\n//#endregion\nexport { useStateClass as t };\n\n//# sourceMappingURL=useStateClass-DxlL_m2E.mjs.map","import { d as formGroupKey } from \"./keys-DU7sQgl3.mjs\";\nimport { R as useToNumber, m as useFocus } from \"./dist-Dk9C_HFS.mjs\";\nimport { t as useId$1 } from \"./useId-D1sqXtwx.mjs\";\nimport { t as useAriaInvalid } from \"./useAriaInvalid-apOwgexm.mjs\";\nimport { t as useDebounceFn } from \"./debounce-DHxNfjan.mjs\";\nimport { t as useStateClass } from \"./useStateClass-DxlL_m2E.mjs\";\nimport { computed, inject, nextTick, onActivated, onMounted } from \"vue\";\n//#region src/utils/normalizeInput.ts\nvar normalizeInput = (v, modelModifiers) => {\n\tif (v === null) return;\n\tlet update = v;\n\tif (modelModifiers.number && typeof update === \"string\" && update !== \"\") {\n\t\tconst parsed = Number.parseFloat(update);\n\t\tupdate = Number.isNaN(parsed) ? update : parsed;\n\t}\n\treturn update;\n};\n//#endregion\n//#region src/composables/useFormInput.ts\nvar useFormInput = (props, input, modelValue, modelModifiers) => {\n\tconst computedId = useId$1(() => props.id, \"input\");\n\tconst debounceNumber = useToNumber(() => props.debounce ?? 0, { nanToZero: true });\n\tconst debounceMaxWaitNumber = useToNumber(() => props.debounceMaxWait ?? NaN);\n\tconst formGroupData = inject(formGroupKey, null)?.();\n\tformGroupData?.track(computedId);\n\tconst computedState = computed(() => props.state !== void 0 ? props.state : formGroupData?.state.value ?? null);\n\tconst isDisabled = computed(() => props.disabled || (formGroupData?.disabled.value ?? false));\n\tconst computedAriaInvalid = useAriaInvalid(() => props.ariaInvalid, computedState);\n\tconst stateClass = useStateClass(computedState);\n\tconst internalUpdateModelValue = useDebounceFn((value) => {\n\t\tmodelValue.value = value;\n\t}, () => modelModifiers.lazy === true ? 0 : debounceNumber.value, { maxWait: () => modelModifiers.lazy === true ? NaN : debounceMaxWaitNumber.value });\n\tconst updateModelValue = (value, force = false, immediate = false) => {\n\t\tif (modelModifiers.lazy === true && force === false) return;\n\t\tif (immediate) modelValue.value = value;\n\t\telse internalUpdateModelValue(value);\n\t};\n\tconst { focused } = useFocus(input, { initialValue: props.autofocus });\n\tconst _formatValue = (value, evt, force = false) => {\n\t\tif (props.formatter !== void 0 && (!props.lazyFormatter || force)) return props.formatter(value, evt);\n\t\treturn value;\n\t};\n\tonMounted(() => {\n\t\tif (input.value) input.value.value = modelValue.value?.toString() ?? \"\";\n\t});\n\tonActivated(() => {\n\t\tnextTick(() => {\n\t\t\tif (props.autofocus) focused.value = true;\n\t\t});\n\t});\n\tconst syncDisplayedValue = (nextValue) => {\n\t\tif (input.value && input.value.value !== nextValue) input.value.value = nextValue;\n\t};\n\tconst onInput = (evt) => {\n\t\tconst { value } = evt.target;\n\t\tconst formattedValue = _formatValue(value, evt);\n\t\tif (evt.defaultPrevented) {\n\t\t\tevt.preventDefault();\n\t\t\treturn;\n\t\t}\n\t\tupdateModelValue(formattedValue);\n\t\tif (formattedValue !== value) syncDisplayedValue(formattedValue);\n\t};\n\tconst onChange = (evt) => {\n\t\tconst { value } = evt.target;\n\t\tconst formattedValue = _formatValue(value, evt);\n\t\tif (evt.defaultPrevented) {\n\t\t\tevt.preventDefault();\n\t\t\treturn;\n\t\t}\n\t\tconst nextModel = formattedValue;\n\t\tif (modelValue.value !== nextModel) updateModelValue(formattedValue, true);\n\t};\n\tconst onBlur = (evt) => {\n\t\tif (!modelModifiers.lazy && !props.lazyFormatter && !modelModifiers.trim && debounceNumber.value <= 0) return;\n\t\tconst { value } = evt.target;\n\t\tconst formattedValue = _formatValue(value, evt, true);\n\t\tconst nextModel = modelModifiers.trim ? formattedValue.trim() : formattedValue;\n\t\tinternalUpdateModelValue.cancel();\n\t\tif (modelValue.value !== nextModel) updateModelValue(nextModel, true, true);\n\t\tif (nextModel !== value) syncDisplayedValue(nextModel);\n\t};\n\tconst focus = () => {\n\t\tif (!isDisabled.value) focused.value = true;\n\t};\n\tconst blur = () => {\n\t\tif (!isDisabled.value) focused.value = false;\n\t};\n\treturn {\n\t\tinput,\n\t\tcomputedId,\n\t\tcomputedAriaInvalid,\n\t\tonInput,\n\t\tonChange,\n\t\tonBlur,\n\t\tfocus,\n\t\tblur,\n\t\tstateClass,\n\t\tisDisabled\n\t};\n};\n//#endregion\nexport { normalizeInput as n, useFormInput as t };\n\n//# sourceMappingURL=useFormInput-CXl8rpD0.mjs.map","import { p as inputGroupKey } from \"./keys-DU7sQgl3.mjs\";\nimport { t as useDefaults } from \"./useDefaults-DseelK6y.mjs\";\nimport { n as normalizeInput, t as useFormInput } from \"./useFormInput-CXl8rpD0.mjs\";\nimport { computed, createElementBlock, defineComponent, inject, mergeModels, normalizeClass, openBlock, unref, useModel, useTemplateRef } from \"vue\";\n//#region src/components/BFormInput/BFormInput.vue?vue&type=script&setup=true&lang.ts\nvar _hoisted_1 = [\n\t\"id\",\n\t\"value\",\n\t\"name\",\n\t\"form\",\n\t\"type\",\n\t\"disabled\",\n\t\"placeholder\",\n\t\"required\",\n\t\"autocomplete\",\n\t\"readonly\",\n\t\"min\",\n\t\"max\",\n\t\"step\",\n\t\"list\",\n\t\"aria-required\",\n\t\"aria-invalid\"\n];\n//#endregion\n//#region src/components/BFormInput/BFormInput.vue\nvar BFormInput_default = /* @__PURE__ */ defineComponent({\n\t__name: \"BFormInput\",\n\tprops: /* @__PURE__ */ mergeModels({\n\t\tmax: { default: void 0 },\n\t\tmin: { default: void 0 },\n\t\tstep: { default: void 0 },\n\t\ttype: { default: \"text\" },\n\t\tariaInvalid: {\n\t\t\ttype: [Boolean, String],\n\t\t\tdefault: void 0\n\t\t},\n\t\tautocomplete: { default: void 0 },\n\t\tautofocus: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tform: { default: void 0 },\n\t\tformatter: {\n\t\t\ttype: Function,\n\t\t\tdefault: void 0\n\t\t},\n\t\tid: { default: void 0 },\n\t\tlazyFormatter: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tlist: { default: void 0 },\n\t\tname: { default: void 0 },\n\t\tplaceholder: { default: void 0 },\n\t\tplaintext: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\treadonly: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\trequired: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tsize: { default: void 0 },\n\t\tstate: {\n\t\t\ttype: [Boolean, null],\n\t\t\tdefault: void 0\n\t\t},\n\t\tdebounce: { default: 0 },\n\t\tdebounceMaxWait: { default: NaN }\n\t}, {\n\t\t\"modelValue\": { default: \"\" },\n\t\t\"modelModifiers\": {}\n\t}),\n\temits: [\"update:modelValue\"],\n\tsetup(__props, { expose: __expose }) {\n\t\tconst props = useDefaults(__props, \"BFormInput\");\n\t\tconst [modelValue, modelModifiers] = useModel(__props, \"modelValue\", { set: (v) => normalizeInput(v, modelModifiers) });\n\t\tconst input = useTemplateRef(\"_input\");\n\t\tconst inInputGroup = inject(inputGroupKey, false);\n\t\tconst { computedId, computedAriaInvalid, onInput, onChange, onBlur, stateClass, focus, blur, isDisabled } = useFormInput(props, input, modelValue, modelModifiers);\n\t\tconst computedClasses = computed(() => {\n\t\t\tconst isRange = props.type === \"range\";\n\t\t\tconst isColor = props.type === \"color\";\n\t\t\treturn [stateClass.value, {\n\t\t\t\t\"form-range\": isRange,\n\t\t\t\t\"form-control\": isColor || !props.plaintext && !isRange || isRange && inInputGroup,\n\t\t\t\t\"form-control-color\": isColor,\n\t\t\t\t\"form-control-plaintext\": props.plaintext && !isRange && !isColor,\n\t\t\t\t[`form-control-${props.size}`]: !!props.size\n\t\t\t}];\n\t\t});\n\t\t__expose({\n\t\t\tblur,\n\t\t\telement: input,\n\t\t\tflushDebounce: onBlur,\n\t\t\tfocus\n\t\t});\n\t\treturn (_ctx, _cache) => {\n\t\t\treturn openBlock(), createElementBlock(\"input\", {\n\t\t\t\tid: unref(computedId),\n\t\t\t\tref: \"_input\",\n\t\t\t\tvalue: unref(modelValue),\n\t\t\t\tclass: normalizeClass(computedClasses.value),\n\t\t\t\tname: unref(props).name || void 0,\n\t\t\t\tform: unref(props).form || void 0,\n\t\t\t\ttype: unref(props).type,\n\t\t\t\tdisabled: unref(isDisabled),\n\t\t\t\tplaceholder: unref(props).placeholder,\n\t\t\t\trequired: unref(props).required || void 0,\n\t\t\t\tautocomplete: unref(props).autocomplete || void 0,\n\t\t\t\treadonly: unref(props).readonly || unref(props).plaintext,\n\t\t\t\tmin: unref(props).min,\n\t\t\t\tmax: unref(props).max,\n\t\t\t\tstep: unref(props).step,\n\t\t\t\tlist: unref(props).type !== \"password\" ? unref(props).list : void 0,\n\t\t\t\t\"aria-required\": unref(props).required || void 0,\n\t\t\t\t\"aria-invalid\": unref(computedAriaInvalid),\n\t\t\t\tonInput: _cache[0] || (_cache[0] = (...args) => unref(onInput) && unref(onInput)(...args)),\n\t\t\t\tonChange: _cache[1] || (_cache[1] = (...args) => unref(onChange) && unref(onChange)(...args)),\n\t\t\t\tonBlur: _cache[2] || (_cache[2] = (...args) => unref(onBlur) && unref(onBlur)(...args))\n\t\t\t}, null, 42, _hoisted_1);\n\t\t};\n\t}\n});\n//#endregion\nexport { BFormInput_default as t };\n\n//# sourceMappingURL=BFormInput-sEfU3CuN.mjs.map","<script setup lang=\"ts\">\nimport { BaseButtonVariant } from 'bootstrap-vue-next'\nimport HapticCopy from '@/components/HapticCopy/HapticCopy.vue'\nimport { computed, nextTick, type ShallowRef, useTemplateRef } from 'vue'\n\nimport { AdvancedLinkTab } from '@/enums'\n\nexport interface AdvancedLinkFormTabProps {\n  title: string\n  link?: string\n  type?: AdvancedLinkTab\n  compact?: boolean\n  variant?: keyof BaseButtonVariant\n}\n\ninterface TextRange {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n  moveToElementText: Function\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n  select: Function\n}\n\ninterface HTMLElementSupportingCreateRange extends HTMLElement {\n  createTextRange(): TextRange\n}\n\nconst props = withDefaults(defineProps<AdvancedLinkFormTabProps>(), {\n  type: AdvancedLinkTab.raw,\n  compact: false,\n  variant: 'primary'\n})\n\n// bootstrap-vue-next's `size` prop doesn't accept our 'md' sentinel (it only\n// covers 'sm' | 'lg', the classes it applies).\nconst size = computed(() => (props.compact ? 'sm' : undefined))\n\nconst inputRef = useTemplateRef<HTMLInputElement>('input')\n\nconst text = computed(() => {\n  switch (props.type) {\n    case AdvancedLinkTab.rich:\n    case AdvancedLinkTab.html:\n      return linkAsHtml.value\n    case AdvancedLinkTab.markdown:\n      return linkAsMarkdown.value\n    case AdvancedLinkTab.raw:\n    default:\n      return props.link\n  }\n})\n\nconst titleOrLink = computed(() => props.title || props.link)\nconst linkAsHtml = computed(\n  () => `<a href=\"${props.link}\" target=\"_blank\">${titleOrLink.value}</a>`\n)\nconst linkAsMarkdown = computed(() => `[${titleOrLink.value}](${props.link})`)\nconst isRich = computed(() => props.type === AdvancedLinkTab.rich)\nconst isHTML = computed(() => props.type === AdvancedLinkTab.html)\n\nfunction select() {\n  if (props.type === AdvancedLinkTab.rich) {\n    selectRich(inputRef)\n  }\n  else {\n    selectInput(inputRef)\n  }\n}\n\nasync function selectInput(\n  target: Readonly<ShallowRef<HTMLInputElement | null>>\n) {\n  // wait for the copy to finish to select text\n  await nextTick()\n  // The ref is on <b-form-input>, which exposes the real input as `element`;\n  // the component instance itself has no select().\n  const input = (\n    target.value as unknown as { element?: HTMLInputElement | null }\n  )?.element\n  input?.select()\n}\n\nasync function selectRich(\n  target: Readonly<ShallowRef<HTMLInputElement | null>>\n) {\n  if (!target.value) {\n    return\n  }\n  // wait for the copy to finish to select text\n  await nextTick()\n  const selection = window.getSelection ? window.getSelection() : null\n  if (selection) {\n    const range = document.createRange()\n    range.selectNodeContents(target.value)\n    selection.removeAllRanges()\n    selection.addRange(range)\n  }\n  else if (\n    (document.body as HTMLElementSupportingCreateRange).createTextRange\n  ) {\n    const range = (\n      document.body as HTMLElementSupportingCreateRange\n    ).createTextRange()\n    range.moveToElementText(target.value)\n    range.select()\n  }\n}\n</script>\n\n<template>\n  <div\n    class=\"advanced-link-form-tab\"\n    :class=\"{ small: compact }\"\n  >\n    <b-input-group :size=\"size\">\n      <a\n        v-if=\"isRich\"\n        ref=\"input\"\n        :href=\"link\"\n        class=\"form-control advanced-link-form-tab__input advanced-link-form-tab__input--rich\"\n        @click.prevent=\"select\"\n      >\n        {{ titleOrLink }}\n      </a>\n      <b-form-input\n        v-else\n        ref=\"input\"\n        readonly\n        :model-value=\"text\"\n        class=\"advanced-link-form-tab__input\"\n        @click.prevent=\"select\"\n      />\n      <haptic-copy\n        :html=\"isHTML\"\n        :text=\"text\"\n        :plain=\"link\"\n        :variant=\"variant\"\n        @attempt=\"select\"\n      />\n    </b-input-group>\n  </div>\n</template>\n\n<style scoped lang=\"scss\">\n.advanced-link-form-tab {\n  text-align: left;\n\n  &__input {\n    background: $input-bg;\n    &--rich {\n      text-align: center;\n      text-decoration: underline;\n      white-space: nowrap;\n      overflow: hidden;\n      text-overflow: ellipsis;\n      cursor: text;\n    }\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { BaseButtonVariant } from 'bootstrap-vue-next'\nimport HapticCopy from '@/components/HapticCopy/HapticCopy.vue'\nimport { computed, nextTick, type ShallowRef, useTemplateRef } from 'vue'\n\nimport { AdvancedLinkTab } from '@/enums'\n\nexport interface AdvancedLinkFormTabProps {\n  title: string\n  link?: string\n  type?: AdvancedLinkTab\n  compact?: boolean\n  variant?: keyof BaseButtonVariant\n}\n\ninterface TextRange {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n  moveToElementText: Function\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n  select: Function\n}\n\ninterface HTMLElementSupportingCreateRange extends HTMLElement {\n  createTextRange(): TextRange\n}\n\nconst props = withDefaults(defineProps<AdvancedLinkFormTabProps>(), {\n  type: AdvancedLinkTab.raw,\n  compact: false,\n  variant: 'primary'\n})\n\n// bootstrap-vue-next's `size` prop doesn't accept our 'md' sentinel (it only\n// covers 'sm' | 'lg', the classes it applies).\nconst size = computed(() => (props.compact ? 'sm' : undefined))\n\nconst inputRef = useTemplateRef<HTMLInputElement>('input')\n\nconst text = computed(() => {\n  switch (props.type) {\n    case AdvancedLinkTab.rich:\n    case AdvancedLinkTab.html:\n      return linkAsHtml.value\n    case AdvancedLinkTab.markdown:\n      return linkAsMarkdown.value\n    case AdvancedLinkTab.raw:\n    default:\n      return props.link\n  }\n})\n\nconst titleOrLink = computed(() => props.title || props.link)\nconst linkAsHtml = computed(\n  () => `<a href=\"${props.link}\" target=\"_blank\">${titleOrLink.value}</a>`\n)\nconst linkAsMarkdown = computed(() => `[${titleOrLink.value}](${props.link})`)\nconst isRich = computed(() => props.type === AdvancedLinkTab.rich)\nconst isHTML = computed(() => props.type === AdvancedLinkTab.html)\n\nfunction select() {\n  if (props.type === AdvancedLinkTab.rich) {\n    selectRich(inputRef)\n  }\n  else {\n    selectInput(inputRef)\n  }\n}\n\nasync function selectInput(\n  target: Readonly<ShallowRef<HTMLInputElement | null>>\n) {\n  // wait for the copy to finish to select text\n  await nextTick()\n  // The ref is on <b-form-input>, which exposes the real input as `element`;\n  // the component instance itself has no select().\n  const input = (\n    target.value as unknown as { element?: HTMLInputElement | null }\n  )?.element\n  input?.select()\n}\n\nasync function selectRich(\n  target: Readonly<ShallowRef<HTMLInputElement | null>>\n) {\n  if (!target.value) {\n    return\n  }\n  // wait for the copy to finish to select text\n  await nextTick()\n  const selection = window.getSelection ? window.getSelection() : null\n  if (selection) {\n    const range = document.createRange()\n    range.selectNodeContents(target.value)\n    selection.removeAllRanges()\n    selection.addRange(range)\n  }\n  else if (\n    (document.body as HTMLElementSupportingCreateRange).createTextRange\n  ) {\n    const range = (\n      document.body as HTMLElementSupportingCreateRange\n    ).createTextRange()\n    range.moveToElementText(target.value)\n    range.select()\n  }\n}\n</script>\n\n<template>\n  <div\n    class=\"advanced-link-form-tab\"\n    :class=\"{ small: compact }\"\n  >\n    <b-input-group :size=\"size\">\n      <a\n        v-if=\"isRich\"\n        ref=\"input\"\n        :href=\"link\"\n        class=\"form-control advanced-link-form-tab__input advanced-link-form-tab__input--rich\"\n        @click.prevent=\"select\"\n      >\n        {{ titleOrLink }}\n      </a>\n      <b-form-input\n        v-else\n        ref=\"input\"\n        readonly\n        :model-value=\"text\"\n        class=\"advanced-link-form-tab__input\"\n        @click.prevent=\"select\"\n      />\n      <haptic-copy\n        :html=\"isHTML\"\n        :text=\"text\"\n        :plain=\"link\"\n        :variant=\"variant\"\n        @attempt=\"select\"\n      />\n    </b-input-group>\n  </div>\n</template>\n\n<style scoped lang=\"scss\">\n.advanced-link-form-tab {\n  text-align: left;\n\n  &__input {\n    background: $input-bg;\n    &--rich {\n      text-align: center;\n      text-decoration: underline;\n      white-space: nowrap;\n      overflow: hidden;\n      text-overflow: ellipsis;\n      cursor: text;\n    }\n  }\n}\n</style>\n","import { computed, toValue } from 'vue'\nimport type { ComputedRef, MaybeRefOrGetter, Ref } from 'vue'\n\nimport { AdvancedLinkTab } from '@/enums'\n\n/**\n * A single tab descriptor exposed to the template: the copy format it carries\n * plus the presentation metadata (translated label and DOM id) built by the\n * caller through {@link UseFormAdvancedLinkOptions.buildTab}.\n */\nexport interface FormAdvancedLinkTabItem {\n  /**\n   * The copy format the tab is responsible for.\n   */\n  type: AdvancedLinkTab\n  /**\n   * The human-readable, translated tab label.\n   */\n  title: string\n  /**\n   * The unique DOM id of the tab, used to sync the active selection.\n   */\n  id: string\n}\n\n/**\n * Reactive inputs driving the advanced-link tab derivation. They mirror the\n * state owned by the form component, accepted as plain values, refs or getters\n * so the composable stays adaptable to how the caller wires its props.\n */\nexport interface UseFormAdvancedLinkOptions {\n  /**\n   * The copy formats to expose, in the caller's preferred subset. The composable\n   * keeps its own canonical ordering and only retains the formats listed here.\n   */\n  forms: MaybeRefOrGetter<AdvancedLinkTab[]>\n  /**\n   * Builds the presentation metadata (translated title and unique id) for a\n   * given copy format. Kept as a caller-provided mapper so the composable stays\n   * free of i18n and per-instance id concerns.\n   *\n   * @param type - The copy format to describe.\n   * @returns The label and id to attach to the tab.\n   */\n  buildTab: (type: AdvancedLinkTab) => { title: string, id: string }\n  /**\n   * Two-way binding to the active tab index. Reads pick the active tab; writes\n   * happen when the user switches tabs.\n   */\n  index: Ref<number | undefined>\n}\n\n/**\n * Reactive API returned by {@link useFormAdvancedLink}.\n */\nexport interface UseFormAdvancedLink {\n  /**\n   * The ordered, filtered tab descriptors to render.\n   */\n  tabs: ComputedRef<FormAdvancedLinkTabItem[]>\n  /**\n   * The DOM id of the currently active tab, derived from {@link index}. Falls\n   * back to the first tab when the index is out of range.\n   */\n  activeForm: ComputedRef<string>\n  /**\n   * Syncs the active index from a tab id, e.g. on a `b-tabs` model update. An\n   * unknown id resets the selection to the first tab.\n   *\n   * @param id - The id of the newly active tab, if any.\n   */\n  onUpdate: (id: string | undefined) => void\n}\n\n// Canonical tab order, independent of the subset the caller asks for.\nconst DEFAULT_TABS: readonly AdvancedLinkTab[] = [\n  AdvancedLinkTab.raw,\n  AdvancedLinkTab.rich,\n  AdvancedLinkTab.markdown,\n  AdvancedLinkTab.html\n]\n\n/**\n * Owns the tab list and the active-tab selection sync for the advanced-link\n * form: the canonical tab ordering filtered to the requested formats, the\n * mapping from the active index to the active tab id, and the reverse mapping\n * that writes the index back when the user switches tabs.\n *\n * This composable is internal to the library and not exported from the public\n * entry point; consume it from a relative path.\n *\n * @param options - Reactive tab inputs (see {@link UseFormAdvancedLinkOptions}).\n * @returns The {@link UseFormAdvancedLink} API of tab descriptors and selection\n *   sync.\n * @example\n * import { useFormAdvancedLink } from '@/composables/useFormAdvancedLink'\n *\n * const index = defineModel<number>()\n * const { tabs, activeForm, onUpdate } = useFormAdvancedLink({\n *   forms: () => props.forms,\n *   buildTab: type => ({ title: t(`advanced-link-form.${type}.tab`), id: `${formId}-${type}` }),\n *   index\n * })\n */\nexport function useFormAdvancedLink(options: UseFormAdvancedLinkOptions): UseFormAdvancedLink {\n  const { forms, buildTab, index } = options\n\n  const tabs = computed((): FormAdvancedLinkTabItem[] => {\n    const requestedForms = toValue(forms)\n    return DEFAULT_TABS\n      .filter(type => requestedForms.includes(type))\n      .map((type) => {\n        const { title, id } = buildTab(type)\n        return { type, title, id }\n      })\n  })\n\n  // Pick the active tab id from the index, guarding against an out-of-range\n  // value by falling back to the first tab.\n  const activeForm = computed((): string => {\n    if (index.value && index.value > 0 && index.value < tabs.value.length) {\n      return tabs.value[index.value].id\n    }\n    return tabs.value[0].id\n  })\n\n  const onUpdate = (id: string | undefined): void => {\n    const position = tabs.value.findIndex(tab => tab.id === id)\n    index.value = position < 0 ? 0 : position\n  }\n\n  return {\n    tabs,\n    activeForm,\n    onUpdate\n  }\n}\n\nexport default useFormAdvancedLink\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport uniqueId from 'lodash/uniqueId'\nimport { ButtonVariant } from 'bootstrap-vue-next'\n\nimport AdvancedLinkFormTab from './FormAdvancedLinkTab.vue'\nimport { useFormAdvancedLink } from '@/composables/useFormAdvancedLink'\nimport { AdvancedLinkTab } from '@/enums'\n\n/**\n * A form with tabs to offer several copy formats to users.\n */\ndefineOptions({\n  name: 'AdvancedLinkForm',\n})\n\n/**\n * Index of the selected tab\n */\nconst index = defineModel<number>()\n\nexport interface FormAdvancedLinkProps {\n  /**\n   * The link to copy\n   */\n  link?: string\n  /**\n   * Title associated with the link\n   */\n  title?: string\n  /**\n   * The forms to display\n   */\n  forms?: AdvancedLinkTab[]\n  /**\n   * Activate the card integration for the tabs\n   */\n  card?: boolean\n  /**\n   * Renders the tabs with the appearance of pill buttons\n   */\n  pills?: boolean\n  /**\n   * Makes the tabs and the panels smaller.\n   */\n  small?: boolean\n  /**\n   * Makes the tabs and the panels vertical.\n   */\n  vertical?: boolean\n  /**\n   * The variant to use for the copy button.\n   */\n  variant?: ButtonVariant\n  /**\n   * CSS class (or classes) to apply to the currently active tab.\n   */\n  activeNavItemClass?: string | null\n  /**\n   * When set to 'true', disables the fade animation on the tabs.\n   */\n  noFade?: boolean\n}\n\nconst props = withDefaults(defineProps<FormAdvancedLinkProps>(), {\n  link: undefined,\n  title: 'Link',\n  forms: () => [AdvancedLinkTab.raw, AdvancedLinkTab.markdown, AdvancedLinkTab.rich, AdvancedLinkTab.html],\n  card: false,\n  pills: false,\n  small: false,\n  vertical: false,\n  variant: 'primary',\n  activeNavItemClass: null,\n  noFade: false\n})\nconst advancedLinkFormId = uniqueId('advanced-link-form-')\n\nconst { t } = useI18n()\nconst formClasses = computed(() => {\n  const propsToCheck = ['card', 'pills', 'small', 'vertical'] as const\n  return propsToCheck.reduce((classes, prop) => {\n    classes[`advanced-link-form--${prop}`] = props[prop]\n    return classes\n  }, {} as Record<string, boolean>)\n})\n\n// Build a tab's presentation metadata: the translated label and the unique id\n// scoped to this form instance.\nfunction buildTab(type: AdvancedLinkTab): { title: string, id: string } {\n  return {\n    title: t(`advanced-link-form.${type}.tab`),\n    id: `${advancedLinkFormId}-${type}`\n  }\n}\n\nconst { tabs, activeForm, onUpdate } = useFormAdvancedLink({\n  forms: () => props.forms,\n  buildTab,\n  index\n})\n</script>\n\n<template>\n  <b-tabs\n    class=\"advanced-link-form\"\n    :content-class=\"card ? 'mt-0' : 'mt-3'\"\n    :card=\"card\"\n    :pills=\"pills\"\n    :model-value=\"activeForm\"\n    :small=\"small\"\n    :vertical=\"vertical\"\n    :active-nav-item-class=\"activeNavItemClass\"\n    :no-fade=\"noFade\"\n    :class=\"formClasses\"\n    @update:model-value=\"onUpdate\"\n  >\n    <b-tab\n      v-for=\"tab in tabs\"\n      :id=\"tab.id\"\n      :key=\"tab.id\"\n      :title=\"tab.title\"\n    >\n      <advanced-link-form-tab\n        :title=\"title\"\n        :type=\"tab.type\"\n        :data-type=\"tab.type\"\n        :compact=\"small\"\n        :variant=\"variant\"\n        :link=\"link\"\n      />\n    </b-tab>\n  </b-tabs>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport uniqueId from 'lodash/uniqueId'\nimport { ButtonVariant } from 'bootstrap-vue-next'\n\nimport AdvancedLinkFormTab from './FormAdvancedLinkTab.vue'\nimport { useFormAdvancedLink } from '@/composables/useFormAdvancedLink'\nimport { AdvancedLinkTab } from '@/enums'\n\n/**\n * A form with tabs to offer several copy formats to users.\n */\ndefineOptions({\n  name: 'AdvancedLinkForm',\n})\n\n/**\n * Index of the selected tab\n */\nconst index = defineModel<number>()\n\nexport interface FormAdvancedLinkProps {\n  /**\n   * The link to copy\n   */\n  link?: string\n  /**\n   * Title associated with the link\n   */\n  title?: string\n  /**\n   * The forms to display\n   */\n  forms?: AdvancedLinkTab[]\n  /**\n   * Activate the card integration for the tabs\n   */\n  card?: boolean\n  /**\n   * Renders the tabs with the appearance of pill buttons\n   */\n  pills?: boolean\n  /**\n   * Makes the tabs and the panels smaller.\n   */\n  small?: boolean\n  /**\n   * Makes the tabs and the panels vertical.\n   */\n  vertical?: boolean\n  /**\n   * The variant to use for the copy button.\n   */\n  variant?: ButtonVariant\n  /**\n   * CSS class (or classes) to apply to the currently active tab.\n   */\n  activeNavItemClass?: string | null\n  /**\n   * When set to 'true', disables the fade animation on the tabs.\n   */\n  noFade?: boolean\n}\n\nconst props = withDefaults(defineProps<FormAdvancedLinkProps>(), {\n  link: undefined,\n  title: 'Link',\n  forms: () => [AdvancedLinkTab.raw, AdvancedLinkTab.markdown, AdvancedLinkTab.rich, AdvancedLinkTab.html],\n  card: false,\n  pills: false,\n  small: false,\n  vertical: false,\n  variant: 'primary',\n  activeNavItemClass: null,\n  noFade: false\n})\nconst advancedLinkFormId = uniqueId('advanced-link-form-')\n\nconst { t } = useI18n()\nconst formClasses = computed(() => {\n  const propsToCheck = ['card', 'pills', 'small', 'vertical'] as const\n  return propsToCheck.reduce((classes, prop) => {\n    classes[`advanced-link-form--${prop}`] = props[prop]\n    return classes\n  }, {} as Record<string, boolean>)\n})\n\n// Build a tab's presentation metadata: the translated label and the unique id\n// scoped to this form instance.\nfunction buildTab(type: AdvancedLinkTab): { title: string, id: string } {\n  return {\n    title: t(`advanced-link-form.${type}.tab`),\n    id: `${advancedLinkFormId}-${type}`\n  }\n}\n\nconst { tabs, activeForm, onUpdate } = useFormAdvancedLink({\n  forms: () => props.forms,\n  buildTab,\n  index\n})\n</script>\n\n<template>\n  <b-tabs\n    class=\"advanced-link-form\"\n    :content-class=\"card ? 'mt-0' : 'mt-3'\"\n    :card=\"card\"\n    :pills=\"pills\"\n    :model-value=\"activeForm\"\n    :small=\"small\"\n    :vertical=\"vertical\"\n    :active-nav-item-class=\"activeNavItemClass\"\n    :no-fade=\"noFade\"\n    :class=\"formClasses\"\n    @update:model-value=\"onUpdate\"\n  >\n    <b-tab\n      v-for=\"tab in tabs\"\n      :id=\"tab.id\"\n      :key=\"tab.id\"\n      :title=\"tab.title\"\n    >\n      <advanced-link-form-tab\n        :title=\"title\"\n        :type=\"tab.type\"\n        :data-type=\"tab.type\"\n        :compact=\"small\"\n        :variant=\"variant\"\n        :link=\"link\"\n      />\n    </b-tab>\n  </b-tabs>\n</template>\n","var baseEach = require('./_baseEach'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n  var index = -1,\n      result = isArrayLike(collection) ? Array(collection.length) : [];\n\n  baseEach(collection, function(value, key, collection) {\n    result[++index] = iteratee(value, key, collection);\n  });\n  return result;\n}\n\nmodule.exports = baseMap;\n","var arrayMap = require('./_arrayMap'),\n    baseIteratee = require('./_baseIteratee'),\n    baseMap = require('./_baseMap'),\n    isArray = require('./isArray');\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n *   return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n *   { 'user': 'barney' },\n *   { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n  var func = isArray(collection) ? arrayMap : baseMap;\n  return func(collection, baseIteratee(iteratee, 3));\n}\n\nmodule.exports = map;\n","/**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n  var length = array.length;\n\n  array.sort(comparer);\n  while (length--) {\n    array[length] = array[length].value;\n  }\n  return array;\n}\n\nmodule.exports = baseSortBy;\n","var isSymbol = require('./isSymbol');\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction compareAscending(value, other) {\n  if (value !== other) {\n    var valIsDefined = value !== undefined,\n        valIsNull = value === null,\n        valIsReflexive = value === value,\n        valIsSymbol = isSymbol(value);\n\n    var othIsDefined = other !== undefined,\n        othIsNull = other === null,\n        othIsReflexive = other === other,\n        othIsSymbol = isSymbol(other);\n\n    if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n        (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n        (valIsNull && othIsDefined && othIsReflexive) ||\n        (!valIsDefined && othIsReflexive) ||\n        !valIsReflexive) {\n      return 1;\n    }\n    if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n        (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n        (othIsNull && valIsDefined && valIsReflexive) ||\n        (!othIsDefined && valIsReflexive) ||\n        !othIsReflexive) {\n      return -1;\n    }\n  }\n  return 0;\n}\n\nmodule.exports = compareAscending;\n","var compareAscending = require('./_compareAscending');\n\n/**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareMultiple(object, other, orders) {\n  var index = -1,\n      objCriteria = object.criteria,\n      othCriteria = other.criteria,\n      length = objCriteria.length,\n      ordersLength = orders.length;\n\n  while (++index < length) {\n    var result = compareAscending(objCriteria[index], othCriteria[index]);\n    if (result) {\n      if (index >= ordersLength) {\n        return result;\n      }\n      var order = orders[index];\n      return result * (order == 'desc' ? -1 : 1);\n    }\n  }\n  // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n  // that causes it, under certain circumstances, to provide the same value for\n  // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n  // for more details.\n  //\n  // This also ensures a stable sort in V8 and other engines.\n  // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n  return object.index - other.index;\n}\n\nmodule.exports = compareMultiple;\n","var arrayMap = require('./_arrayMap'),\n    baseGet = require('./_baseGet'),\n    baseIteratee = require('./_baseIteratee'),\n    baseMap = require('./_baseMap'),\n    baseSortBy = require('./_baseSortBy'),\n    baseUnary = require('./_baseUnary'),\n    compareMultiple = require('./_compareMultiple'),\n    identity = require('./identity'),\n    isArray = require('./isArray');\n\n/**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n  if (iteratees.length) {\n    iteratees = arrayMap(iteratees, function(iteratee) {\n      if (isArray(iteratee)) {\n        return function(value) {\n          return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n        };\n      }\n      return iteratee;\n    });\n  } else {\n    iteratees = [identity];\n  }\n\n  var index = -1;\n  iteratees = arrayMap(iteratees, baseUnary(baseIteratee));\n\n  var result = baseMap(collection, function(value, key, collection) {\n    var criteria = arrayMap(iteratees, function(iteratee) {\n      return iteratee(value);\n    });\n    return { 'criteria': criteria, 'index': ++index, 'value': value };\n  });\n\n  return baseSortBy(result, function(object, other) {\n    return compareMultiple(object, other, orders);\n  });\n}\n\nmodule.exports = baseOrderBy;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0: return func.call(thisArg);\n    case 1: return func.call(thisArg, args[0]);\n    case 2: return func.call(thisArg, args[0], args[1]);\n    case 3: return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        array = Array(length);\n\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = transform(array);\n    return apply(func, this, otherArgs);\n  };\n}\n\nmodule.exports = overRest;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n  return function() {\n    return value;\n  };\n}\n\nmodule.exports = constant;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var constant = require('./constant'),\n    defineProperty = require('./_defineProperty'),\n    identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n  return defineProperty(func, 'toString', {\n    'configurable': true,\n    'enumerable': false,\n    'value': constant(string),\n    'writable': true\n  });\n};\n\nmodule.exports = baseSetToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n    HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n  var count = 0,\n      lastCalled = 0;\n\n  return function() {\n    var stamp = nativeNow(),\n        remaining = HOT_SPAN - (stamp - lastCalled);\n\n    lastCalled = stamp;\n    if (remaining > 0) {\n      if (++count >= HOT_COUNT) {\n        return arguments[0];\n      }\n    } else {\n      count = 0;\n    }\n    return func.apply(undefined, arguments);\n  };\n}\n\nmodule.exports = shortOut;\n","var baseSetToString = require('./_baseSetToString'),\n    shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","var identity = require('./identity'),\n    overRest = require('./_overRest'),\n    setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n  return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","var baseFlatten = require('./_baseFlatten'),\n    baseOrderBy = require('./_baseOrderBy'),\n    baseRest = require('./_baseRest'),\n    isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n *  The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n *   { 'user': 'fred',   'age': 48 },\n *   { 'user': 'barney', 'age': 36 },\n *   { 'user': 'fred',   'age': 30 },\n *   { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\nvar sortBy = baseRest(function(collection, iteratees) {\n  if (collection == null) {\n    return [];\n  }\n  var length = iteratees.length;\n  if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n    iteratees = [];\n  } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n    iteratees = [iteratees[0]];\n  }\n  return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n});\n\nmodule.exports = sortBy;\n","import keys from 'lodash/keys'\nimport map from 'lodash/map'\nimport sortBy from 'lodash/sortBy'\nimport forEach from 'lodash/forEach'\nimport { computed, ref, watch } from 'vue'\nimport type { Ref } from 'vue'\n\n/**\n * The recurrence of a donation. `onetime` reuses the yearly thresholds for its\n * level derivation.\n */\nexport type DonationPeriod = 'onetime' | 'monthly' | 'yearly'\n\n/**\n * The membership tier a donation falls into, used to highlight the matching\n * benefit column.\n */\nexport type DonationCategory = 'conversation' | 'rules' | 'world'\n\n/**\n * Suggested donation amounts indexed by category, then by period.\n */\nexport type SuggestedDonation = Record<DonationCategory, Record<DonationPeriod, number>>\n\n/**\n * Maps an amount threshold to the category it unlocks, per period. The yearly\n * thresholds double as the `onetime` thresholds.\n */\nexport interface DonationThresholds {\n  monthly: Record<number, DonationCategory>\n  yearly: Record<number, DonationCategory>\n  onetime?: Record<number, DonationCategory>\n}\n\n/**\n * Inputs driving the donation derivation. They carry the i18n- and\n * config-sourced data the component owns, so the composable stays free of\n * translation and configuration concerns.\n */\nexport interface UseDonateFormOptions {\n  /**\n   * Amount thresholds per period that unlock each category.\n   */\n  thresholds: DonationThresholds\n  /**\n   * Suggested amounts per category and period.\n   */\n  suggestedAmount: SuggestedDonation\n}\n\n/**\n * Reactive API returned by {@link useDonateForm}.\n */\nexport interface UseDonateForm {\n  /**\n   * The current donation amount; `undefined` while the user clears the field.\n   */\n  amount: Ref<number | undefined>\n  /**\n   * The selected recurrence.\n   */\n  installmentPeriod: Ref<DonationPeriod>\n  /**\n   * The currently highlighted membership tier.\n   */\n  level: Ref<DonationCategory | null>\n  /**\n   * Picks a level and resets the amount to its suggested value. Note that the\n   * suggested value is `undefined` once the amount is no longer pristine, so\n   * selecting a level after a manual edit blanks the amount (preserved legacy\n   * behavior).\n   *\n   * @param levelSelected - The tier the user clicked.\n   */\n  selectLevel: (levelSelected: DonationCategory) => void\n  /**\n   * Flags the amount as user-edited, freezing the automatic suggestions.\n   */\n  amountIsNotPristine: () => void\n}\n\n/**\n * Owns the donation amount/period/level state machine for the `FormDonate`\n * component: derives the active membership tier from the amount, suggests an\n * amount when the user picks a tier or switches period, and stops suggesting\n * once the amount has been edited by hand.\n *\n * This composable is internal to the library and not exported from the public\n * entry point; consume it from a relative path.\n *\n * @param options - i18n/config-sourced donation data (see {@link UseDonateFormOptions}).\n * @returns The {@link UseDonateForm} API: the reactive state and the level/amount\n *   actions.\n * @example\n * import { useDonateForm } from '@/composables/useDonateForm'\n *\n * const { amount, installmentPeriod, level, selectLevel, amountIsNotPristine } =\n *   useDonateForm({ thresholds, suggestedAmount })\n */\nexport function useDonateForm(options: UseDonateFormOptions): UseDonateForm {\n  const { thresholds, suggestedAmount } = options\n\n  const amount = ref<number | undefined>(10)\n  // True until the user edits the amount field, gating the auto-suggestions.\n  const amountIsPristine = ref(true)\n  const installmentPeriod = ref<DonationPeriod>('monthly')\n  const level = ref<DonationCategory | null>('conversation')\n\n  // A one-time donation borrows the yearly thresholds.\n  const ranges = computed((): Record<number, DonationCategory> => {\n    if (installmentPeriod.value === 'onetime') {\n      return thresholds.yearly\n    }\n    return thresholds[installmentPeriod.value]\n  })\n\n  const firstRange = computed((): DonationCategory => {\n    const key = Number(keys(ranges.value)[0])\n    return ranges.value[key]\n  })\n\n  // Walk the thresholds in ascending order and keep the highest one the amount\n  // reaches.\n  const matchingLevel = computed((): DonationCategory | null => {\n    let label: DonationCategory | null = null\n    forEach(sortBy(map(keys(ranges.value), Number)), (threshold) => {\n      label = amount.value && amount.value >= threshold ? ranges.value[threshold] : label\n    })\n    return label\n  })\n\n  function getSuggestedAmount(): number | undefined {\n    // NOTE: returns undefined once the amount is no longer pristine — preserved\n    // legacy behavior; selectLevel will then blank the amount.\n    if (!amountIsPristine.value) {\n      return\n    }\n\n    if (!level.value) {\n      level.value = firstRange.value\n    }\n\n    return suggestedAmount[level.value][installmentPeriod.value]\n  }\n\n  function selectLevel(levelSelected: DonationCategory): void {\n    level.value = levelSelected\n    amount.value = getSuggestedAmount()\n  }\n\n  function amountIsNotPristine(): void {\n    amountIsPristine.value = false\n  }\n\n  // Switching period re-suggests an amount as long as the field is untouched.\n  watch(installmentPeriod, () => {\n    if (!amountIsPristine.value) {\n      return\n    }\n    amount.value = getSuggestedAmount()\n  })\n\n  // Any amount change re-derives the highlighted tier.\n  watch(amount, () => {\n    level.value = matchingLevel.value\n  })\n\n  return {\n    amount,\n    installmentPeriod,\n    level,\n    selectLevel,\n    amountIsNotPristine\n  }\n}\n\nexport default useDonateForm\n","<script setup lang=\"ts\">\nimport config from '@/config'\nimport { useI18n } from 'vue-i18n'\nimport { ref } from 'vue'\n\nimport { useDonateForm } from '@/composables/useDonateForm'\nimport type { DonationThresholds, SuggestedDonation } from '@/composables/useDonateForm'\n\n/**\n * A form to encourage donations. We usually put this form inside a modal\n */\ndefineOptions({\n  name: 'DonateForm'\n})\n\nexport interface FormDonateProps {\n  /**\n   * Title of the form.\n   */\n  noTitle?: boolean\n}\n\nwithDefaults(defineProps<FormDonateProps>(), {\n  noTitle: false\n})\n\nconst { t, locale, messages } = useI18n()\n// config.get's return type is the recursive ConfigValue; wrapping it directly\n// in ref() makes Vue's UnwrapRef choke on it (\"Type instantiation is\n// excessively deep\"). The tracker value is always a plain string.\nconst campaign = ref(config.get<string | null>('donate-form.tracker'))\n\n// t() returns the generic `string` vue-i18n infers for any translation key,\n// not the DonationCategory literal union; satisfies can't narrow it, and the\n// three translation keys used here are trusted to match DonationCategory.\nconst thresholds = {\n  monthly: {\n    1: t('donate-form.result.conversation'),\n    15: t('donate-form.result.rules'),\n    50: t('donate-form.result.world')\n  },\n  yearly: {\n    1: t('donate-form.result.conversation'),\n    180: t('donate-form.result.rules'),\n    600: t('donate-form.result.world')\n  }\n} as DonationThresholds\n\nconst localeMessages = messages.value[locale.value]\nconst suggestedAmount: SuggestedDonation = localeMessages['donate-form'].suggesteddonation\nconst listBenefits = ref<string[]>(localeMessages['donate-form'].benefits.list)\n\nconst { amount, installmentPeriod, level, selectLevel, amountIsNotPristine } = useDonateForm({\n  thresholds,\n  suggestedAmount\n})\n</script>\n\n<template>\n  <div class=\"donate-form container-fluid py-2\">\n    <h2\n      v-if=\"!noTitle\"\n      class=\"donate-form__title text-uppercase fw-bold text-primary h5\"\n    >\n      {{ t('donate-form.support') }}\n    </h2>\n    <!-- @slot Description of the form (bellow the title). -->\n    <slot name=\"introduction\">\n      <!-- eslint-disable vue/no-v-html -->\n      <p\n        class=\"donate-form__introduction\"\n        v-html=\"t('donate-form.introduction')\"\n      />\n      <!-- eslint-enable -->\n    </slot>\n\n    <div class=\"donate-form__payment mb-4 text-center\">\n      <form\n        action=\"//checkout.fundjournalism.org/memberform\"\n        method=\"get\"\n        target=\"_blank\"\n        class=\"donate-form__payment__form bg-light p-4\"\n      >\n        <div class=\"donate-form__payment__levels row\">\n          <div\n            class=\"col donate-form__payment__level donate-form__payment__level--conversation\"\n            :class=\"{ active: level === 'conversation' }\"\n            @click=\"selectLevel('conversation')\"\n          >\n            <h3\n              class=\"donate-form__payment__heading text-uppercase fw-bold text-primary h5\"\n            >\n              {{ t('donate-form.benefits.impacts.conversation.heading') }}\n            </h3>\n            <div class=\"Article\">\n              <div>\n                <!-- eslint-disable vue/no-v-html -->\n                <p\n                  class=\"donate-form__payment__highlight text-icij fw-bold\"\n                  v-html=\"\n                    t('donate-form.benefits.impacts.conversation.highlight')\n                  \"\n                />\n                <!-- eslint-enable -->\n              </div>\n            </div>\n          </div>\n          <div\n            class=\"col donate-form__payment__level donate-form__payment__level--rules\"\n            :class=\"{ active: level === 'rules' }\"\n            @click=\"selectLevel('rules')\"\n          >\n            <h3\n              class=\"donate-form__payment__heading text-uppercase fw-bold text-primary h5\"\n            >\n              {{ t('donate-form.benefits.impacts.rules.heading') }}\n            </h3>\n            <div class=\"Article\">\n              <div>\n                <!-- eslint-disable vue/no-v-html -->\n                <p\n                  class=\"donate-form__payment__highlight text-icij fw-bold\"\n                  v-html=\"t('donate-form.benefits.impacts.rules.highlight')\"\n                />\n                <!-- eslint-enable -->\n              </div>\n            </div>\n          </div>\n          <div\n            class=\"col donate-form__payment__level donate-form__payment__level--world\"\n            :class=\"{ active: level === 'world' }\"\n            @click=\"selectLevel('world')\"\n          >\n            <h3\n              class=\"donate-form__payment__heading text-uppercase fw-bold text-primary h5\"\n            >\n              {{ t('donate-form.benefits.impacts.world.heading') }}\n            </h3>\n            <div class=\"Article\">\n              <div>\n                <!-- eslint-disable vue/no-v-html -->\n                <p\n                  class=\"donate-form__payment__highlight text-icij fw-bold\"\n                  v-html=\"t('donate-form.benefits.impacts.world.highlight')\"\n                />\n                <!-- eslint-enable -->\n              </div>\n            </div>\n          </div>\n        </div>\n\n        <div>\n          <div class=\"mt-5\">\n            <span class=\"donate-form__payment__buttons\">\n              <button\n                type=\"button\"\n                class=\"btn btn-sm frequency-monthly\"\n                :class=\"{ 'btn-primary': installmentPeriod === 'monthly' }\"\n                @click=\"installmentPeriod = 'monthly'\"\n              >\n                {{ t('donate-form.frequency.monthly') }}\n              </button>\n              <button\n                type=\"button\"\n                class=\"btn btn-sm frequency-yearly\"\n                :class=\"{ 'btn-primary': installmentPeriod === 'yearly' }\"\n                @click=\"installmentPeriod = 'yearly'\"\n              >\n                {{ t('donate-form.frequency.yearly') }}\n              </button>\n              <button\n                type=\"button\"\n                class=\"btn btn-sm frequency-onetime\"\n                :class=\"{ 'btn-primary': !installmentPeriod}\"\n                @click=\"installmentPeriod = 'onetime'\"\n              >\n                {{ t('donate-form.frequency.onetime') }}\n              </button>\n            </span>\n          </div>\n          <div class=\"mt-4\">\n            <span>{{ t('donate-form.label') }}&nbsp;</span>\n            <label\n              class=\"donate-form__payment__unit input-group input-group-sm d-inline-flex\"\n            >\n              <span class=\"input-group-prepend\">\n                <span class=\"input-group-text\">$</span>\n              </span>\n              <input\n                v-model=\"amount\"\n                class=\"donate-form__payment__input form-control\"\n                name=\"amount\"\n                type=\"number\"\n                min=\"0\"\n                @change=\"amountIsNotPristine\"\n              >\n            </label>\n          </div>\n          <div class=\"mt-4\">\n            <input\n              name=\"org_id\"\n              value=\"icij\"\n              type=\"hidden\"\n            >\n            <input\n              v-model=\"campaign\"\n              name=\"campaign\"\n              type=\"hidden\"\n            >\n            <input\n              v-model=\"installmentPeriod\"\n              name=\"installmentPeriod\"\n              type=\"hidden\"\n            >\n            <button\n              type=\"submit\"\n              class=\"btn btn-primary rounded-pill text-uppercase fw-bold\"\n            >\n              {{ t('donate-form.submit') }}\n            </button>\n            <a\n              target=\"_blank\"\n              href=\"https://icij.org/donate\"\n              class=\"donate-form__payment__image\"\n            />\n          </div>\n        </div>\n      </form>\n    </div>\n\n    <div class=\"donate-form__insider\">\n      <h2 class=\"donate-form__insider__title\">\n        {{ t('donate-form.benefits.heading') }}\n      </h2>\n      <p>\n        {{ t('donate-form.benefits.introduction') }}\n      </p>\n      <div>\n        <ul class=\"donate-form__insider__list\">\n          <li\n            v-for=\"(benefit, index) in listBenefits\"\n            :key=\"index\"\n            class=\"donate-form__insider__list-item\"\n            v-html=\"benefit\"\n          />\n        </ul>\n      </div>\n      <div>\n        <hr class=\"donate-form__insider__separator\">\n        <div class=\"donate-form__insider__more text-center\">\n          <a\n            target=\"_blank\"\n            href=\"https://icij.org/donate\"\n            class=\"btn btn-primary rounded-pill text-uppercase fw-bold py-2\"\n          >\n            {{ t('donate-form.benefits.more') }}\n          </a>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\">\n\n.donate-form {\n  font-size: 0.9rem;\n\n  &__payment {\n    & &__unit {\n      width: 120px;\n      margin-right: $spacer;\n\n      @media screen and (max-width: $modal-lg) {\n        width: 100%;\n        flex: 0 0 100%;\n      }\n    }\n\n    &__buttons {\n      button {\n        margin: 0 5px;\n        border: solid 1px var(--primary);\n      }\n    }\n\n    &__level {\n      border-bottom: solid 3px $light;\n      cursor: pointer;\n\n      &.active {\n        border-bottom: solid 3px var(--primary);\n      }\n    }\n\n    &__highlight {\n      font-size: 17px;\n\n      .monthly {\n        display: block;\n        font-size: 14px;\n        font-weight: 400;\n      }\n    }\n  }\n\n  &__insider {\n    &__list {\n      padding-left: 20px;\n\n      &-item {\n        position: relative;\n        margin: 3px 0;\n        font-size: 15px;\n        list-style: none;\n\n        &:before {\n          content: '\\2713';\n          position: absolute;\n          left: -16px;\n          font-size: 14px;\n          font-weight: 700;\n          color: #333;\n          font-family: $font-family-sans-serif;\n        }\n      }\n    }\n\n    &__modal__container .col {\n      @media screen and (max-width: $modal-lg) {\n        width: 100%;\n        flex: 0 0 100%;\n      }\n    }\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport config from '@/config'\nimport { useI18n } from 'vue-i18n'\nimport { ref } from 'vue'\n\nimport { useDonateForm } from '@/composables/useDonateForm'\nimport type { DonationThresholds, SuggestedDonation } from '@/composables/useDonateForm'\n\n/**\n * A form to encourage donations. We usually put this form inside a modal\n */\ndefineOptions({\n  name: 'DonateForm'\n})\n\nexport interface FormDonateProps {\n  /**\n   * Title of the form.\n   */\n  noTitle?: boolean\n}\n\nwithDefaults(defineProps<FormDonateProps>(), {\n  noTitle: false\n})\n\nconst { t, locale, messages } = useI18n()\n// config.get's return type is the recursive ConfigValue; wrapping it directly\n// in ref() makes Vue's UnwrapRef choke on it (\"Type instantiation is\n// excessively deep\"). The tracker value is always a plain string.\nconst campaign = ref(config.get<string | null>('donate-form.tracker'))\n\n// t() returns the generic `string` vue-i18n infers for any translation key,\n// not the DonationCategory literal union; satisfies can't narrow it, and the\n// three translation keys used here are trusted to match DonationCategory.\nconst thresholds = {\n  monthly: {\n    1: t('donate-form.result.conversation'),\n    15: t('donate-form.result.rules'),\n    50: t('donate-form.result.world')\n  },\n  yearly: {\n    1: t('donate-form.result.conversation'),\n    180: t('donate-form.result.rules'),\n    600: t('donate-form.result.world')\n  }\n} as DonationThresholds\n\nconst localeMessages = messages.value[locale.value]\nconst suggestedAmount: SuggestedDonation = localeMessages['donate-form'].suggesteddonation\nconst listBenefits = ref<string[]>(localeMessages['donate-form'].benefits.list)\n\nconst { amount, installmentPeriod, level, selectLevel, amountIsNotPristine } = useDonateForm({\n  thresholds,\n  suggestedAmount\n})\n</script>\n\n<template>\n  <div class=\"donate-form container-fluid py-2\">\n    <h2\n      v-if=\"!noTitle\"\n      class=\"donate-form__title text-uppercase fw-bold text-primary h5\"\n    >\n      {{ t('donate-form.support') }}\n    </h2>\n    <!-- @slot Description of the form (bellow the title). -->\n    <slot name=\"introduction\">\n      <!-- eslint-disable vue/no-v-html -->\n      <p\n        class=\"donate-form__introduction\"\n        v-html=\"t('donate-form.introduction')\"\n      />\n      <!-- eslint-enable -->\n    </slot>\n\n    <div class=\"donate-form__payment mb-4 text-center\">\n      <form\n        action=\"//checkout.fundjournalism.org/memberform\"\n        method=\"get\"\n        target=\"_blank\"\n        class=\"donate-form__payment__form bg-light p-4\"\n      >\n        <div class=\"donate-form__payment__levels row\">\n          <div\n            class=\"col donate-form__payment__level donate-form__payment__level--conversation\"\n            :class=\"{ active: level === 'conversation' }\"\n            @click=\"selectLevel('conversation')\"\n          >\n            <h3\n              class=\"donate-form__payment__heading text-uppercase fw-bold text-primary h5\"\n            >\n              {{ t('donate-form.benefits.impacts.conversation.heading') }}\n            </h3>\n            <div class=\"Article\">\n              <div>\n                <!-- eslint-disable vue/no-v-html -->\n                <p\n                  class=\"donate-form__payment__highlight text-icij fw-bold\"\n                  v-html=\"\n                    t('donate-form.benefits.impacts.conversation.highlight')\n                  \"\n                />\n                <!-- eslint-enable -->\n              </div>\n            </div>\n          </div>\n          <div\n            class=\"col donate-form__payment__level donate-form__payment__level--rules\"\n            :class=\"{ active: level === 'rules' }\"\n            @click=\"selectLevel('rules')\"\n          >\n            <h3\n              class=\"donate-form__payment__heading text-uppercase fw-bold text-primary h5\"\n            >\n              {{ t('donate-form.benefits.impacts.rules.heading') }}\n            </h3>\n            <div class=\"Article\">\n              <div>\n                <!-- eslint-disable vue/no-v-html -->\n                <p\n                  class=\"donate-form__payment__highlight text-icij fw-bold\"\n                  v-html=\"t('donate-form.benefits.impacts.rules.highlight')\"\n                />\n                <!-- eslint-enable -->\n              </div>\n            </div>\n          </div>\n          <div\n            class=\"col donate-form__payment__level donate-form__payment__level--world\"\n            :class=\"{ active: level === 'world' }\"\n            @click=\"selectLevel('world')\"\n          >\n            <h3\n              class=\"donate-form__payment__heading text-uppercase fw-bold text-primary h5\"\n            >\n              {{ t('donate-form.benefits.impacts.world.heading') }}\n            </h3>\n            <div class=\"Article\">\n              <div>\n                <!-- eslint-disable vue/no-v-html -->\n                <p\n                  class=\"donate-form__payment__highlight text-icij fw-bold\"\n                  v-html=\"t('donate-form.benefits.impacts.world.highlight')\"\n                />\n                <!-- eslint-enable -->\n              </div>\n            </div>\n          </div>\n        </div>\n\n        <div>\n          <div class=\"mt-5\">\n            <span class=\"donate-form__payment__buttons\">\n              <button\n                type=\"button\"\n                class=\"btn btn-sm frequency-monthly\"\n                :class=\"{ 'btn-primary': installmentPeriod === 'monthly' }\"\n                @click=\"installmentPeriod = 'monthly'\"\n              >\n                {{ t('donate-form.frequency.monthly') }}\n              </button>\n              <button\n                type=\"button\"\n                class=\"btn btn-sm frequency-yearly\"\n                :class=\"{ 'btn-primary': installmentPeriod === 'yearly' }\"\n                @click=\"installmentPeriod = 'yearly'\"\n              >\n                {{ t('donate-form.frequency.yearly') }}\n              </button>\n              <button\n                type=\"button\"\n                class=\"btn btn-sm frequency-onetime\"\n                :class=\"{ 'btn-primary': !installmentPeriod}\"\n                @click=\"installmentPeriod = 'onetime'\"\n              >\n                {{ t('donate-form.frequency.onetime') }}\n              </button>\n            </span>\n          </div>\n          <div class=\"mt-4\">\n            <span>{{ t('donate-form.label') }}&nbsp;</span>\n            <label\n              class=\"donate-form__payment__unit input-group input-group-sm d-inline-flex\"\n            >\n              <span class=\"input-group-prepend\">\n                <span class=\"input-group-text\">$</span>\n              </span>\n              <input\n                v-model=\"amount\"\n                class=\"donate-form__payment__input form-control\"\n                name=\"amount\"\n                type=\"number\"\n                min=\"0\"\n                @change=\"amountIsNotPristine\"\n              >\n            </label>\n          </div>\n          <div class=\"mt-4\">\n            <input\n              name=\"org_id\"\n              value=\"icij\"\n              type=\"hidden\"\n            >\n            <input\n              v-model=\"campaign\"\n              name=\"campaign\"\n              type=\"hidden\"\n            >\n            <input\n              v-model=\"installmentPeriod\"\n              name=\"installmentPeriod\"\n              type=\"hidden\"\n            >\n            <button\n              type=\"submit\"\n              class=\"btn btn-primary rounded-pill text-uppercase fw-bold\"\n            >\n              {{ t('donate-form.submit') }}\n            </button>\n            <a\n              target=\"_blank\"\n              href=\"https://icij.org/donate\"\n              class=\"donate-form__payment__image\"\n            />\n          </div>\n        </div>\n      </form>\n    </div>\n\n    <div class=\"donate-form__insider\">\n      <h2 class=\"donate-form__insider__title\">\n        {{ t('donate-form.benefits.heading') }}\n      </h2>\n      <p>\n        {{ t('donate-form.benefits.introduction') }}\n      </p>\n      <div>\n        <ul class=\"donate-form__insider__list\">\n          <li\n            v-for=\"(benefit, index) in listBenefits\"\n            :key=\"index\"\n            class=\"donate-form__insider__list-item\"\n            v-html=\"benefit\"\n          />\n        </ul>\n      </div>\n      <div>\n        <hr class=\"donate-form__insider__separator\">\n        <div class=\"donate-form__insider__more text-center\">\n          <a\n            target=\"_blank\"\n            href=\"https://icij.org/donate\"\n            class=\"btn btn-primary rounded-pill text-uppercase fw-bold py-2\"\n          >\n            {{ t('donate-form.benefits.more') }}\n          </a>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\">\n\n.donate-form {\n  font-size: 0.9rem;\n\n  &__payment {\n    & &__unit {\n      width: 120px;\n      margin-right: $spacer;\n\n      @media screen and (max-width: $modal-lg) {\n        width: 100%;\n        flex: 0 0 100%;\n      }\n    }\n\n    &__buttons {\n      button {\n        margin: 0 5px;\n        border: solid 1px var(--primary);\n      }\n    }\n\n    &__level {\n      border-bottom: solid 3px $light;\n      cursor: pointer;\n\n      &.active {\n        border-bottom: solid 3px var(--primary);\n      }\n    }\n\n    &__highlight {\n      font-size: 17px;\n\n      .monthly {\n        display: block;\n        font-size: 14px;\n        font-weight: 400;\n      }\n    }\n  }\n\n  &__insider {\n    &__list {\n      padding-left: 20px;\n\n      &-item {\n        position: relative;\n        margin: 3px 0;\n        font-size: 15px;\n        list-style: none;\n\n        &:before {\n          content: '\\2713';\n          position: absolute;\n          left: -16px;\n          font-size: 14px;\n          font-weight: 700;\n          color: #333;\n          font-family: $font-family-sans-serif;\n        }\n      }\n    }\n\n    &__modal__container .col {\n      @media screen and (max-width: $modal-lg) {\n        width: 100%;\n        flex: 0 0 100%;\n      }\n    }\n  }\n}\n</style>\n","var baseEach = require('./_baseEach');\n\n/**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction baseFilter(collection, predicate) {\n  var result = [];\n  baseEach(collection, function(value, index, collection) {\n    if (predicate(value, index, collection)) {\n      result.push(value);\n    }\n  });\n  return result;\n}\n\nmodule.exports = baseFilter;\n","var arrayFilter = require('./_arrayFilter'),\n    baseFilter = require('./_baseFilter'),\n    baseIteratee = require('./_baseIteratee'),\n    isArray = require('./isArray');\n\n/**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n *   { 'user': 'barney', 'age': 36, 'active': true },\n *   { 'user': 'fred',   'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\nfunction filter(collection, predicate) {\n  var func = isArray(collection) ? arrayFilter : baseFilter;\n  return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = filter;\n","import filter from 'lodash/filter'\nimport { computed, ref, toValue, watch } from 'vue'\nimport type { ComputedRef, MaybeRefOrGetter, Ref } from 'vue'\n\n/**\n * Strips every non-digit character from a single cell value.\n *\n * @param value - The raw cell value.\n * @returns The value with all non-digit characters removed.\n */\nexport function keepDigitsOnly(value: string): string {\n  return String(value).replace(/\\D/g, '')\n}\n\n/**\n * Normalizes a list of digit cells and spreads any multi-digit cell across the\n * following cells, then truncates the result to `length`. A cell holding more\n * than one digit (a value greater than 9) overflows into its neighbours so each\n * cell ends up holding a single digit.\n *\n * This is the pure transform behind the digits input; it has no reactive or DOM\n * side effects.\n *\n * @param values - The current cell values.\n * @param length - The maximum number of cells to keep.\n * @returns The normalized, spread and truncated cell values.\n */\nexport function spreadDigits(values: string[], length: number): string[] {\n  // Remove anything that is not a digit from each cell.\n  const formattedValues = values.map(keepDigitsOnly)\n  // A cell holding more than one digit must overflow into the next cells.\n  formattedValues.forEach((value: string, cellIndex: number) => {\n    if (value !== null && Number(value) > 9) {\n      String(value)\n        .split('')\n        .forEach((nextValue, offset) => {\n          formattedValues[cellIndex + offset] = String(Number(nextValue))\n        })\n    }\n  })\n  return formattedValues.slice(0, length)\n}\n\n/**\n * Reactive inputs driving the digits model.\n */\nexport interface UseDigitsModelOptions {\n  /**\n   * The value backing the input, used to seed the cells.\n   */\n  modelValue: MaybeRefOrGetter<string | number>\n  /**\n   * Number of digit cells.\n   */\n  length: MaybeRefOrGetter<number>\n}\n\n/**\n * Reactive API returned by {@link useDigitsModel}.\n */\nexport interface UseDigitsModel {\n  /**\n   * The per-cell values, kept normalized (single digit per cell, spread on\n   * overflow) by an internal watcher.\n   */\n  values: Ref<string[]>\n  /**\n   * The cells joined into a single string, ignoring any non-numeric cell.\n   */\n  joinedValues: ComputedRef<string>\n}\n\n/**\n * Owns the per-cell state of the digits input: the `values` cells seeded from\n * the bound value, the `joinedValues` projection, and the normalization watcher\n * that spreads multi-digit entries across the following cells. The watcher only\n * rewrites `values` when the normalized result differs, avoiding an infinite\n * update cycle. Focus management and event emission stay in the component since\n * they are DOM and contract concerns.\n *\n * This composable is internal to the library and not exported from the public\n * entry point; consume it from a relative path.\n *\n * @param options - Reactive digit inputs (see {@link UseDigitsModelOptions}).\n * @param onNormalized - Optional callback fired after each normalization pass,\n *   used by the component to move focus to the next cell.\n * @returns The {@link UseDigitsModel} API.\n * @example\n * import { useDigitsModel } from '@/composables/useDigitsModel'\n *\n * const { values, joinedValues } = useDigitsModel(\n *   { modelValue: () => props.modelValue, length: () => props.length },\n *   focusToNextInput\n * )\n */\nexport function useDigitsModel(\n  options: UseDigitsModelOptions,\n  onNormalized?: () => void\n): UseDigitsModel {\n  const { modelValue, length } = options\n\n  const values = ref<string[]>(\n    String(toValue(modelValue)).split('').slice(0, toValue(length))\n  )\n\n  const joinedValues = computed((): string => {\n    return filter(values.value, v => !isNaN(Number(v))).join('')\n  })\n\n  // Intentionally watches the ref object itself (not `values.value`) and relies\n  // on `{ deep: true }` to traverse into it — preserved verbatim from the\n  // original; do not \"simplify\" to `values` or `() => values.value`, as that\n  // changes the watcher's firing and timing.\n  watch(\n    () => values,\n    (valuesRef: typeof values) => {\n      const normalized = spreadDigits(valuesRef.value, toValue(length))\n      // Only rewrite the cells when they actually changed to avoid an infinite\n      // update cycle.\n      if (JSON.stringify(valuesRef.value) !== JSON.stringify(normalized)) {\n        valuesRef.value = normalized\n      }\n      onNormalized?.()\n    },\n    { deep: true }\n  )\n\n  return {\n    values,\n    joinedValues\n  }\n}\n\nexport default useDigitsModel\n","<script setup lang=\"ts\">\nimport { computed, nextTick, onMounted, ref, watch } from 'vue'\nimport { useDigitsModel } from '@/composables/useDigitsModel'\n\n/**\n * Create an input for digits.\n */\ndefineOptions({\n  name: 'DigitsInput'\n})\n\nexport interface FormControlDigitsProps {\n  /**\n   * Number of digits to display\n   */\n  length?: number\n  /**\n   * Value of the input\n   */\n  modelValue?: string | number\n  /**\n   * Name of the input\n   */\n  name?: string\n}\n\nconst props = withDefaults(defineProps<FormControlDigitsProps>(), {\n  length: 6,\n  modelValue: '',\n  name: ''\n})\n\n/**\n * Define emits\n */\nconst emit = defineEmits(['update:modelValue', 'update:values'])\n\nconst inputs = ref<HTMLInputElement[]>([])\n\nonMounted(async () => {\n  await nextTick()\n})\n\n// Per-cell state and digit-spreading normalization live in a dedicated\n// composable; the component owns focus management and event emission.\nconst { values, joinedValues } = useDigitsModel(\n  {\n    modelValue: () => props.modelValue,\n    length: () => props.length\n  },\n  focusToNextInput\n)\n\nconst lastInput = computed((): HTMLElement | null => {\n  const index = inputs.value.length - 1\n  // vue-tsc infers the array-bound v-for ref as the <input>'s attrs type\n  // rather than the actual element; the runtime value is a real HTMLInputElement.\n  return (inputs.value[index] as HTMLInputElement) ?? null\n})\n\nconst nextInput = computed((): HTMLInputElement | null => {\n  if (joinedValues.value.length === props.length) {\n    return null\n  }\n\n  // Next input is the first non-empty input or the last input\n  return (inputs.value[joinedValues.value.length] as HTMLInputElement) || lastInput.value\n})\n\nconst hasNextInput = computed((): boolean => {\n  return !!nextInput.value\n})\n\nfunction focusToNextInput() {\n  if (hasNextInput.value) {\n    nextInput.value?.focus()\n  }\n}\n\nfunction focusToPreviousWhenEmpty(d: number) {\n  if (!values.value[d]) {\n    inputs.value[d - 1]?.focus()\n  }\n}\n\nwatch(\n  () => joinedValues.value,\n  () => {\n    emit('update:modelValue', joinedValues.value)\n  },\n  { deep: true }\n)\n\nwatch(\n  () => props.modelValue,\n  () => {\n    const formattedValues = String(props.modelValue)\n      .split('')\n      .slice(0, props.length)\n    emit('update:values', formattedValues)\n  }\n)\n</script>\n\n<template>\n  <div class=\"digits-input\">\n    <div class=\"d-flex digits-input__container\">\n      <input\n        v-for=\"d in length\"\n        ref=\"inputs\"\n        :key=\"d - 1\"\n        v-model=\"values[d - 1]\"\n        :class=\"`digits-input__container__input--${d - 1}`\"\n        class=\"digits-input__container__input w-0 form-control\"\n        @keyup.delete=\"focusToPreviousWhenEmpty(d - 1)\"\n      >\n      <input\n        type=\"hidden\"\n        :value=\"joinedValues\"\n        :name=\"name\"\n      >\n    </div>\n  </div>\n</template>\n\n<style scoped lang=\"scss\">\n\n.digits-input {\n  &__container {\n    &__input {\n      font-size: 3rem;\n      height: 10rem;\n      line-height: 10rem;\n      text-align: center;\n      padding: $spacer $spacer * 0.25;\n      margin: 0 $spacer * 0.25;\n\n      &:first-child {\n        margin-left: 0;\n      }\n\n      &:last-child {\n        margin-right: 0;\n      }\n    }\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, nextTick, onMounted, ref, watch } from 'vue'\nimport { useDigitsModel } from '@/composables/useDigitsModel'\n\n/**\n * Create an input for digits.\n */\ndefineOptions({\n  name: 'DigitsInput'\n})\n\nexport interface FormControlDigitsProps {\n  /**\n   * Number of digits to display\n   */\n  length?: number\n  /**\n   * Value of the input\n   */\n  modelValue?: string | number\n  /**\n   * Name of the input\n   */\n  name?: string\n}\n\nconst props = withDefaults(defineProps<FormControlDigitsProps>(), {\n  length: 6,\n  modelValue: '',\n  name: ''\n})\n\n/**\n * Define emits\n */\nconst emit = defineEmits(['update:modelValue', 'update:values'])\n\nconst inputs = ref<HTMLInputElement[]>([])\n\nonMounted(async () => {\n  await nextTick()\n})\n\n// Per-cell state and digit-spreading normalization live in a dedicated\n// composable; the component owns focus management and event emission.\nconst { values, joinedValues } = useDigitsModel(\n  {\n    modelValue: () => props.modelValue,\n    length: () => props.length\n  },\n  focusToNextInput\n)\n\nconst lastInput = computed((): HTMLElement | null => {\n  const index = inputs.value.length - 1\n  // vue-tsc infers the array-bound v-for ref as the <input>'s attrs type\n  // rather than the actual element; the runtime value is a real HTMLInputElement.\n  return (inputs.value[index] as HTMLInputElement) ?? null\n})\n\nconst nextInput = computed((): HTMLInputElement | null => {\n  if (joinedValues.value.length === props.length) {\n    return null\n  }\n\n  // Next input is the first non-empty input or the last input\n  return (inputs.value[joinedValues.value.length] as HTMLInputElement) || lastInput.value\n})\n\nconst hasNextInput = computed((): boolean => {\n  return !!nextInput.value\n})\n\nfunction focusToNextInput() {\n  if (hasNextInput.value) {\n    nextInput.value?.focus()\n  }\n}\n\nfunction focusToPreviousWhenEmpty(d: number) {\n  if (!values.value[d]) {\n    inputs.value[d - 1]?.focus()\n  }\n}\n\nwatch(\n  () => joinedValues.value,\n  () => {\n    emit('update:modelValue', joinedValues.value)\n  },\n  { deep: true }\n)\n\nwatch(\n  () => props.modelValue,\n  () => {\n    const formattedValues = String(props.modelValue)\n      .split('')\n      .slice(0, props.length)\n    emit('update:values', formattedValues)\n  }\n)\n</script>\n\n<template>\n  <div class=\"digits-input\">\n    <div class=\"d-flex digits-input__container\">\n      <input\n        v-for=\"d in length\"\n        ref=\"inputs\"\n        :key=\"d - 1\"\n        v-model=\"values[d - 1]\"\n        :class=\"`digits-input__container__input--${d - 1}`\"\n        class=\"digits-input__container__input w-0 form-control\"\n        @keyup.delete=\"focusToPreviousWhenEmpty(d - 1)\"\n      >\n      <input\n        type=\"hidden\"\n        :value=\"joinedValues\"\n        :name=\"name\"\n      >\n    </div>\n  </div>\n</template>\n\n<style scoped lang=\"scss\">\n\n.digits-input {\n  &__container {\n    &__input {\n      font-size: 3rem;\n      height: 10rem;\n      line-height: 10rem;\n      text-align: center;\n      padding: $spacer $spacer * 0.25;\n      margin: 0 $spacer * 0.25;\n\n      &:first-child {\n        margin-left: 0;\n      }\n\n      &:last-child {\n        margin-right: 0;\n      }\n    }\n  }\n}\n</style>\n","/**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\nfunction baseClamp(number, lower, upper) {\n  if (number === number) {\n    if (upper !== undefined) {\n      number = number <= upper ? number : upper;\n    }\n    if (lower !== undefined) {\n      number = number >= lower ? number : lower;\n    }\n  }\n  return number;\n}\n\nmodule.exports = baseClamp;\n","var baseClamp = require('./_baseClamp'),\n    toNumber = require('./toNumber');\n\n/**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\nfunction clamp(number, lower, upper) {\n  if (upper === undefined) {\n    upper = lower;\n    lower = undefined;\n  }\n  if (upper !== undefined) {\n    upper = toNumber(upper);\n    upper = upper === upper ? upper : 0;\n  }\n  if (lower !== undefined) {\n    lower = toNumber(lower);\n    lower = lower === lower ? lower : 0;\n  }\n  return baseClamp(toNumber(number), lower, upper);\n}\n\nmodule.exports = clamp;\n","var toNumber = require('./toNumber');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n    MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n  if (!value) {\n    return value === 0 ? value : 0;\n  }\n  value = toNumber(value);\n  if (value === INFINITY || value === -INFINITY) {\n    var sign = (value < 0 ? -1 : 1);\n    return sign * MAX_INTEGER;\n  }\n  return value === value ? value : 0;\n}\n\nmodule.exports = toFinite;\n","var toFinite = require('./toFinite');\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n  var result = toFinite(value),\n      remainder = result % 1;\n\n  return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nmodule.exports = toInteger;\n","var root = require('./_root'),\n    toInteger = require('./toInteger'),\n    toNumber = require('./toNumber'),\n    toString = require('./toString');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsFinite = root.isFinite,\n    nativeMin = Math.min;\n\n/**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\nfunction createRound(methodName) {\n  var func = Math[methodName];\n  return function(number, precision) {\n    number = toNumber(number);\n    precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n    if (precision && nativeIsFinite(number)) {\n      // Shift with exponential notation to avoid floating-point issues.\n      // See [MDN](https://mdn.io/round#Examples) for more details.\n      var pair = (toString(number) + 'e').split('e'),\n          value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n      pair = (toString(value) + 'e').split('e');\n      return +(pair[0] + 'e' + (+pair[1] - precision));\n    }\n    return func(number);\n  };\n}\n\nmodule.exports = createRound;\n","var createRound = require('./_createRound');\n\n/**\n * Computes `number` rounded to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round.\n * @param {number} [precision=0] The precision to round to.\n * @returns {number} Returns the rounded number.\n * @example\n *\n * _.round(4.006);\n * // => 4\n *\n * _.round(4.006, 2);\n * // => 4.01\n *\n * _.round(4060, -2);\n * // => 4100\n */\nvar round = createRound('round');\n\nmodule.exports = round;\n","import round from 'lodash/round'\nimport { computed, ref, toValue, watch } from 'vue'\nimport type { ComputedRef, MaybeRefOrGetter, Ref } from 'vue'\n\n/**\n * A range expressed as its `[start, end]` bounds, both normalized to the\n * `[0, 1]` interval.\n */\nexport type RangeBounds = [number, number]\n\n/**\n * Reactive inputs driving the range derivation. They mirror the props of the\n * range component, accepted as plain values, refs or getters so the composable\n * stays adaptable to how the caller wires its state.\n */\nexport interface UseRangeControlOptions {\n  /**\n   * Initial `[start, end]` bounds. A range with fewer than two entries is\n   * considered disabled.\n   */\n  range: MaybeRefOrGetter<RangeBounds>\n  /**\n   * Snap increment. For instance, with a snap of `0.1` values snap to `0`,\n   * `0.1`, `0.2`, and so on.\n   */\n  snap: MaybeRefOrGetter<number>\n  /**\n   * Number of decimal places to which bound values are rounded.\n   */\n  precision: MaybeRefOrGetter<number>\n  /**\n   * Minimum distance kept between the two bounds so they never overlap.\n   */\n  minDistance: MaybeRefOrGetter<number>\n}\n\n/**\n * Reactive API returned by {@link useRangeControl}.\n */\nexport interface UseRangeControl {\n  /**\n   * The start bound, in the `[0, 1]` interval.\n   */\n  start: Ref<number>\n  /**\n   * The end bound, in the `[0, 1]` interval.\n   */\n  end: Ref<number>\n  /**\n   * Whether the range is disabled (fewer than two bounds were provided).\n   */\n  disabled: ComputedRef<boolean>\n  /**\n   * Snaps a value to the nearest multiple of the `snap` increment.\n   *\n   * @param value - The raw value to snap.\n   * @returns The value snapped to the closest `snap` step.\n   */\n  snapValue: (value: number) => number\n  /**\n   * Computes the start bound for a pixel offset, snapping and rounding it, but\n   * keeps the previous value if the new one would come too close to the end\n   * bound.\n   *\n   * @param offset - Drag offset in pixels.\n   * @param width - Total draggable width in pixels.\n   * @returns `true` when the start bound changed, `false` otherwise.\n   */\n  moveStartTo: (offset: number, width: number) => boolean\n  /**\n   * Computes the end bound for a pixel offset, snapping and rounding it, but\n   * keeps the previous value if the new one would come too close to the start\n   * bound.\n   *\n   * @param offset - Drag offset in pixels.\n   * @param width - Total draggable width in pixels.\n   * @returns `true` when the end bound changed, `false` otherwise.\n   */\n  moveEndTo: (offset: number, width: number) => boolean\n  /**\n   * Slides the whole range to a new start offset, preserving the distance\n   * between the two bounds.\n   *\n   * @param offset - Drag offset in pixels.\n   * @param width - Total draggable width in pixels.\n   */\n  moveBoundsTo: (offset: number, width: number) => void\n}\n\n/**\n * Owns the range bounds math shared by the range component: the start/end\n * bounds in the `[0, 1]` interval, the snapping/rounding rules, and the\n * minimum-distance constraint between the two bounds. The derivation is pure\n * and deterministic — given the same offsets and width it always produces the\n * same bounds — so it holds no DOM state.\n *\n * This composable is internal to the library and not exported from the public\n * entry point; consume it from a relative path.\n *\n * @param options - Reactive range inputs (see {@link UseRangeControlOptions}).\n * @returns The {@link UseRangeControl} API of bounds refs and drag helpers.\n * @example\n * import { useRangeControl } from '@/composables/useRangeControl'\n *\n * const { start, end, moveStartTo } = useRangeControl({\n *   range: () => props.range,\n *   snap: () => props.snap,\n *   precision: () => props.precision,\n *   minDistance: () => props.minDistance\n * })\n */\nexport function useRangeControl(options: UseRangeControlOptions): UseRangeControl {\n  const { range, snap, precision, minDistance } = options\n\n  const start = ref<number>(toValue(range)[0] ?? 0)\n  const end = ref<number>(toValue(range)[1] ?? 0)\n\n  const disabled = computed((): boolean => toValue(range).length < 2)\n\n  const snapValue = (value: number): number => {\n    const step = toValue(snap)\n    return round(value / step) * step\n  }\n\n  // Convert a pixel offset into a snapped bound within the [0, 1] interval.\n  const offsetToBound = (offset: number, width: number): number => {\n    return snapValue(offset / width)\n  }\n\n  const moveStartTo = (offset: number, width: number): boolean => {\n    const newValue = offsetToBound(offset, width)\n    // Ensure the start bound doesn't get too close to the end bound.\n    if (newValue < end.value - toValue(minDistance)) {\n      start.value = round(newValue, toValue(precision))\n      return true\n    }\n    return false\n  }\n\n  const moveEndTo = (offset: number, width: number): boolean => {\n    const newValue = offsetToBound(offset, width)\n    // Ensure the end bound doesn't get too close to the start bound.\n    if (newValue > start.value + toValue(minDistance)) {\n      end.value = round(newValue, toValue(precision))\n      return true\n    }\n    return false\n  }\n\n  const moveBoundsTo = (offset: number, width: number): void => {\n    const distance = snapValue(end.value - start.value)\n    const newValue = offsetToBound(offset, width)\n    start.value = round(newValue, toValue(precision))\n    end.value = round(newValue + distance, toValue(precision))\n  }\n\n  // Keep the bounds in sync when the source range changes from the outside.\n  watch(() => toValue(range), (newRange: RangeBounds) => {\n    start.value = newRange[0] ?? 0\n    end.value = newRange[1] ?? 0\n  })\n\n  return {\n    start,\n    end,\n    disabled,\n    snapValue,\n    moveStartTo,\n    moveEndTo,\n    moveBoundsTo\n  }\n}\n\nexport default useRangeControl\n","<script setup lang=\"ts\">\nimport {\n  VNode,\n  DirectiveBinding,\n  ref,\n  computed\n} from 'vue'\nimport clamp from 'lodash/clamp'\n\nimport type { ButtonVariant } from 'bootstrap-vue-next'\nimport AppIcon from '@/components/App/AppIcon.vue'\nimport { useRangeControl } from '@/composables/useRangeControl'\nimport IPhCaretLeftBold from '~icons/ph/caret-left-bold'\nimport IPhCaretRightBold from '~icons/ph/caret-right-bold'\nimport type { Component } from 'vue'\n\ninterface DragDropValue { detail: number }\n\ndefineOptions({\n  name: 'RangePicker'\n})\n\nconst vDraggable = {\n  mounted(el: HTMLElement, binding: DirectiveBinding, vnode: VNode): void {\n    let startX: number, initialClientX: number\n    const relative = binding.modifiers?.relative ?? false\n\n    // Emit an event to the parent component\n    function emitEvent({\n      name,\n      data = null\n    }: {\n      name: string\n      data?: any\n    }) {\n      vnode.el?.dispatchEvent(new CustomEvent(name, { detail: data }))\n    }\n\n    // Handle the dragging of the element\n    function move(event: MouseEvent | TouchEvent) {\n      const clientX\n        = event instanceof MouseEvent\n          ? event.clientX\n          : event.touches[0].clientX\n      const offset = relative ? el.offsetWidth : 0\n      // binding.instance is the directive's host component (this one, via\n      // defineExpose({ rangeWidth })); narrow to just what we call on it.\n      const maxX = ((binding.instance as { rangeWidth: () => number } | null)?.rangeWidth() ?? 0) - offset\n      const data = clamp(startX + clientX - initialClientX, 0, maxX)\n      emitEvent({ name: 'dragged', data })\n      return false\n    }\n\n    // Clean up listeners once the dragging ends\n    function end(event: MouseEvent | TouchEvent) {\n      emitEvent({ name: 'ended' })\n      if (event instanceof MouseEvent) {\n        document.removeEventListener('mousemove', move)\n        document.removeEventListener('mouseup', end)\n      }\n      else {\n        document.removeEventListener('touchmove', move)\n        document.removeEventListener('touchend', end)\n      }\n    }\n\n    // Register listeners when dragging start\n    function start(event: MouseEvent | TouchEvent) {\n      emitEvent({ name: 'started' })\n      startX = el.offsetLeft\n      if (event instanceof MouseEvent) {\n        initialClientX = event.clientX\n        document.addEventListener('mousemove', move)\n        document.addEventListener('mouseup', end)\n      }\n      else {\n        initialClientX = event.touches[0].clientX\n        document.addEventListener('touchmove', move)\n        document.addEventListener('touchend', end)\n      }\n      return false\n    }\n\n    // Register the drag and touch event handlers\n    el.addEventListener('mousedown', start)\n    el.addEventListener('touchstart', start)\n  }\n}\n\nexport interface FormControlRangeProps {\n  /**\n   * Initial values of the range bounds. Should contain two numbers.\n   * indicating the start and end of the range.\n   */\n  range: [number, number]\n  /**\n   * Enables hover styling on rows.\n   */\n  hover?: boolean\n  /**\n   * Offset from the left side of the component\n   * where the dragging for the start value begins.\n   */\n  startOffset?: number | string\n  /**\n   * Offset from the right side of the component where\n   * the dragging for the end value ends.\n   */\n  endOffset?: number | string\n  /**\n   * Number of decimal places to which values should be rounded.\n   */\n  precision?: number\n  /**\n   * Snap increment value. For instance,\n   * if snap is 0.1, values will snap to 0, 0.1, 0.2, and so on.\n   */\n  snap?: number\n  /**\n   * Minimum distance between the two range bounds to ensure they\n   * don't get too close to each other.\n   */\n  minDistance?: number\n  /**\n   * Variant style of the component. Expected to be one\n   * of the predefined Bootstrap theme (e.g., 'primary', 'secondary', etc.).\n   */\n  variant?: ButtonVariant\n  /**\n   * Rounds corner edges of the range boundaries. If\n   * true, the component will have rounded corners.\n   */\n  rounded?: boolean\n  boundStartIcon?: string | Component\n  boundEndIcon?: string | Component\n}\n\nconst props = withDefaults(defineProps<FormControlRangeProps>(), {\n  hover: false,\n  startOffset: 0,\n  endOffset: 0,\n  precision: 4,\n  snap: 0.0001,\n  minDistance: 0.01,\n  variant: 'primary',\n  rounded: false,\n  boundStartIcon: () => IPhCaretLeftBold,\n  boundEndIcon: () => IPhCaretRightBold\n})\n\nconst emit = defineEmits<{\n  'update:range': [[number, number]]\n}>()\n\nconst rangePickerBounds = ref<HTMLElement | null>(null)\nconst moving = ref(false)\nconst resizing = ref(false)\n\n// Bounds math (snapping, rounding, minimum-distance constraint) lives in a\n// dedicated composable; the component keeps the DOM and emit wiring.\nconst { start, end, disabled, moveStartTo, moveEndTo, moveBoundsTo }\n  = useRangeControl({\n    range: () => props.range,\n    snap: () => props.snap,\n    precision: () => props.precision,\n    minDistance: () => props.minDistance\n  })\n\nconst overlayStyle = computed((): { left: string, right: string } => {\n  return {\n    left: `${start.value * 100}%`,\n    right: `${(1 - end.value) * 100}%`\n  }\n})\n\nconst boundsStyle = computed((): { left: string, right: string } => {\n  return {\n    left: startOffsetWithUnit.value,\n    right: endOffsetWithUnit.value\n  }\n})\n\nconst startOffsetWithUnit = computed((): string => {\n  return valueWithUnit(props.startOffset)\n})\n\nconst endOffsetWithUnit = computed((): string => {\n  return valueWithUnit(props.endOffset)\n})\n\nconst startBoundStyle = computed((): { left: string } => {\n  return { left: `${start.value * 100}% ` }\n})\n\nconst endBoundStyle = computed((): { left: string } => {\n  return { left: `${end.value * 100}%` }\n})\n\nconst classList = computed((): Record<string, boolean> => {\n  return {\n    [`range-picker--${props.variant}`]: !!props.variant,\n    'range-picker--hover': props.hover,\n    'range-picker--disabled': disabled.value,\n    'range-picker--rounded': props.rounded,\n    'range-picker--resizing': resizing.value,\n    'range-picker--moving': moving.value\n  }\n})\n\nfunction toggleMoving(value: boolean) {\n  moving.value = value ?? !moving.value\n}\n\nfunction toggleResizing(value: boolean) {\n  resizing.value = value ?? !resizing.value\n}\n\nfunction rangeWidth(): number {\n  return rangePickerBounds.value?.getBoundingClientRect().width ?? 0\n}\n\n// Emit the current bounds as the canonical range update.\nfunction emitRangeUpdate() {\n  /**\n   * Update the values of the range (both start and end)\n   * @event update\n   * @param Number[] New value of the range\n   */\n  emit('update:range', [start.value, end.value])\n}\n\nfunction dragStartBound({ detail: dx }: DragDropValue) {\n  if (moveStartTo(dx, rangeWidth())) {\n    emitRangeUpdate()\n  }\n}\n\nfunction dragEndBound({ detail: dx }: DragDropValue) {\n  if (moveEndTo(dx, rangeWidth())) {\n    emitRangeUpdate()\n  }\n}\n\nfunction dragBounds({ detail: dx }: DragDropValue) {\n  moveBoundsTo(dx, rangeWidth())\n  emitRangeUpdate()\n}\n\nfunction valueWithUnit(value: number | string): string {\n  return typeof value === 'number' ? `${value}px` : `${value}`\n}\n\ndefineExpose({\n  rangeWidth\n})\n</script>\n\n<template>\n  <div\n    class=\"range-picker\"\n    :class=\"classList\"\n  >\n    <div class=\"range-picker__wrapper\">\n      <slot />\n    </div>\n    <div\n      v-show=\"!disabled\"\n      ref=\"rangePickerBounds\"\n      class=\"range-picker__bounds\"\n      :style=\"boundsStyle\"\n    >\n      <div\n        v-draggable.relative\n        class=\"range-picker__bounds__overlay\"\n        :style=\"overlayStyle\"\n        @dragged=\"dragBounds\"\n        @started=\"toggleMoving(true)\"\n        @ended=\"toggleMoving(false)\"\n      />\n      <button\n        v-draggable\n        :style=\"startBoundStyle\"\n        class=\"range-picker__bounds__start btn\"\n        @dragged=\"dragStartBound\"\n        @started=\"toggleResizing(true)\"\n        @ended=\"toggleResizing(false)\"\n      >\n        <app-icon>\n          <component :is=\"boundStartIcon\" />\n        </app-icon>\n      </button>\n      <button\n        v-draggable\n        class=\"range-picker__bounds__end btn\"\n        :style=\"endBoundStyle\"\n        @dragged=\"dragEndBound\"\n        @started=\"toggleResizing(true)\"\n        @ended=\"toggleResizing(false)\"\n      >\n        <app-icon>\n          <component :is=\"boundEndIcon\" />\n        </app-icon>\n      </button>\n    </div>\n  </div>\n</template>\n\n<style scoped lang=\"scss\">\n\n.range-picker {\n  min-height: 1rem;\n  position: relative;\n\n  --bg: #{$component-active-bg};\n  --fg: #{$component-active-color};\n\n  @each $color, $value in $theme-colors {\n    &--#{$color} {\n      --bg: var(--#{$color}, #{$value});\n      --fg: #{color-contrast($value)};\n    }\n  }\n\n  &--rounded {\n    border-radius: $border-radius;\n  }\n\n  &--hover:hover &__bounds:after {\n    pointer-events: none;\n    content: '';\n    z-index: -1;\n    width: 100%;\n    height: 100%;\n    display: block;\n    background: var(--bg);\n    opacity: 0.1;\n    border-radius: inherit;\n  }\n\n  &--moving &__wrapper,\n  &--resizing &__wrapper {\n    &,\n    * {\n      pointer-events: none;\n    }\n  }\n\n  &--moving,\n  &__bounds__overlay,\n  &--moving &__bounds__start.btn:not(:disabled):not(.disabled),\n  &--moving &__bounds__end.btn:not(:disabled):not(.disabled) {\n    cursor: move;\n  }\n\n  &--resizing,\n  &--resizing &__bounds__overlay,\n  &__bounds__start.btn:not(:disabled):not(.disabled),\n  &__bounds__end.btn:not(:disabled):not(.disabled) {\n    cursor: col-resize;\n  }\n\n  &__bounds {\n    pointer-events: none;\n    position: absolute;\n    top: 0;\n    height: 100%;\n    border-radius: inherit;\n\n    &__overlay {\n      pointer-events: all;\n      position: absolute;\n      top: 0;\n      bottom: 0;\n      left: 0;\n      right: 0;\n      display: flex;\n      border-radius: inherit;\n      border: 1px solid var(--bg);\n      overflow: hidden;\n\n      &:after {\n        content: '';\n        width: 100%;\n        height: 100%;\n        display: block;\n        background: var(--bg);\n        opacity: 0.3;\n      }\n    }\n\n    &__start,\n    &__end {\n      pointer-events: all;\n      position: absolute;\n      top: 50%;\n      transform: translate(-50%, -50%);\n      border-radius: 50%;\n      font-size: 0.6rem;\n      width: 1.2rem;\n      height: 1.2rem;\n      line-height: 1.2rem;\n      padding: 0;\n      background: var(--bg, transparent);\n      color: var(--fg);\n      transform: translate(-50%, -50%);\n      display: inline-flex;\n      align-items: center;\n      justify-content: center;\n\n      &:hover,\n      &:active,\n      &:focus {\n        color: var(--fg);\n      }\n\n      &:active, &:focus {\n        background: var(--bg, transparent);\n      }\n    }\n\n    &__start {\n      left: 0;\n    }\n\n    &__end {\n      left: 100%;\n    }\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport {\n  VNode,\n  DirectiveBinding,\n  ref,\n  computed\n} from 'vue'\nimport clamp from 'lodash/clamp'\n\nimport type { ButtonVariant } from 'bootstrap-vue-next'\nimport AppIcon from '@/components/App/AppIcon.vue'\nimport { useRangeControl } from '@/composables/useRangeControl'\nimport IPhCaretLeftBold from '~icons/ph/caret-left-bold'\nimport IPhCaretRightBold from '~icons/ph/caret-right-bold'\nimport type { Component } from 'vue'\n\ninterface DragDropValue { detail: number }\n\ndefineOptions({\n  name: 'RangePicker'\n})\n\nconst vDraggable = {\n  mounted(el: HTMLElement, binding: DirectiveBinding, vnode: VNode): void {\n    let startX: number, initialClientX: number\n    const relative = binding.modifiers?.relative ?? false\n\n    // Emit an event to the parent component\n    function emitEvent({\n      name,\n      data = null\n    }: {\n      name: string\n      data?: any\n    }) {\n      vnode.el?.dispatchEvent(new CustomEvent(name, { detail: data }))\n    }\n\n    // Handle the dragging of the element\n    function move(event: MouseEvent | TouchEvent) {\n      const clientX\n        = event instanceof MouseEvent\n          ? event.clientX\n          : event.touches[0].clientX\n      const offset = relative ? el.offsetWidth : 0\n      // binding.instance is the directive's host component (this one, via\n      // defineExpose({ rangeWidth })); narrow to just what we call on it.\n      const maxX = ((binding.instance as { rangeWidth: () => number } | null)?.rangeWidth() ?? 0) - offset\n      const data = clamp(startX + clientX - initialClientX, 0, maxX)\n      emitEvent({ name: 'dragged', data })\n      return false\n    }\n\n    // Clean up listeners once the dragging ends\n    function end(event: MouseEvent | TouchEvent) {\n      emitEvent({ name: 'ended' })\n      if (event instanceof MouseEvent) {\n        document.removeEventListener('mousemove', move)\n        document.removeEventListener('mouseup', end)\n      }\n      else {\n        document.removeEventListener('touchmove', move)\n        document.removeEventListener('touchend', end)\n      }\n    }\n\n    // Register listeners when dragging start\n    function start(event: MouseEvent | TouchEvent) {\n      emitEvent({ name: 'started' })\n      startX = el.offsetLeft\n      if (event instanceof MouseEvent) {\n        initialClientX = event.clientX\n        document.addEventListener('mousemove', move)\n        document.addEventListener('mouseup', end)\n      }\n      else {\n        initialClientX = event.touches[0].clientX\n        document.addEventListener('touchmove', move)\n        document.addEventListener('touchend', end)\n      }\n      return false\n    }\n\n    // Register the drag and touch event handlers\n    el.addEventListener('mousedown', start)\n    el.addEventListener('touchstart', start)\n  }\n}\n\nexport interface FormControlRangeProps {\n  /**\n   * Initial values of the range bounds. Should contain two numbers.\n   * indicating the start and end of the range.\n   */\n  range: [number, number]\n  /**\n   * Enables hover styling on rows.\n   */\n  hover?: boolean\n  /**\n   * Offset from the left side of the component\n   * where the dragging for the start value begins.\n   */\n  startOffset?: number | string\n  /**\n   * Offset from the right side of the component where\n   * the dragging for the end value ends.\n   */\n  endOffset?: number | string\n  /**\n   * Number of decimal places to which values should be rounded.\n   */\n  precision?: number\n  /**\n   * Snap increment value. For instance,\n   * if snap is 0.1, values will snap to 0, 0.1, 0.2, and so on.\n   */\n  snap?: number\n  /**\n   * Minimum distance between the two range bounds to ensure they\n   * don't get too close to each other.\n   */\n  minDistance?: number\n  /**\n   * Variant style of the component. Expected to be one\n   * of the predefined Bootstrap theme (e.g., 'primary', 'secondary', etc.).\n   */\n  variant?: ButtonVariant\n  /**\n   * Rounds corner edges of the range boundaries. If\n   * true, the component will have rounded corners.\n   */\n  rounded?: boolean\n  boundStartIcon?: string | Component\n  boundEndIcon?: string | Component\n}\n\nconst props = withDefaults(defineProps<FormControlRangeProps>(), {\n  hover: false,\n  startOffset: 0,\n  endOffset: 0,\n  precision: 4,\n  snap: 0.0001,\n  minDistance: 0.01,\n  variant: 'primary',\n  rounded: false,\n  boundStartIcon: () => IPhCaretLeftBold,\n  boundEndIcon: () => IPhCaretRightBold\n})\n\nconst emit = defineEmits<{\n  'update:range': [[number, number]]\n}>()\n\nconst rangePickerBounds = ref<HTMLElement | null>(null)\nconst moving = ref(false)\nconst resizing = ref(false)\n\n// Bounds math (snapping, rounding, minimum-distance constraint) lives in a\n// dedicated composable; the component keeps the DOM and emit wiring.\nconst { start, end, disabled, moveStartTo, moveEndTo, moveBoundsTo }\n  = useRangeControl({\n    range: () => props.range,\n    snap: () => props.snap,\n    precision: () => props.precision,\n    minDistance: () => props.minDistance\n  })\n\nconst overlayStyle = computed((): { left: string, right: string } => {\n  return {\n    left: `${start.value * 100}%`,\n    right: `${(1 - end.value) * 100}%`\n  }\n})\n\nconst boundsStyle = computed((): { left: string, right: string } => {\n  return {\n    left: startOffsetWithUnit.value,\n    right: endOffsetWithUnit.value\n  }\n})\n\nconst startOffsetWithUnit = computed((): string => {\n  return valueWithUnit(props.startOffset)\n})\n\nconst endOffsetWithUnit = computed((): string => {\n  return valueWithUnit(props.endOffset)\n})\n\nconst startBoundStyle = computed((): { left: string } => {\n  return { left: `${start.value * 100}% ` }\n})\n\nconst endBoundStyle = computed((): { left: string } => {\n  return { left: `${end.value * 100}%` }\n})\n\nconst classList = computed((): Record<string, boolean> => {\n  return {\n    [`range-picker--${props.variant}`]: !!props.variant,\n    'range-picker--hover': props.hover,\n    'range-picker--disabled': disabled.value,\n    'range-picker--rounded': props.rounded,\n    'range-picker--resizing': resizing.value,\n    'range-picker--moving': moving.value\n  }\n})\n\nfunction toggleMoving(value: boolean) {\n  moving.value = value ?? !moving.value\n}\n\nfunction toggleResizing(value: boolean) {\n  resizing.value = value ?? !resizing.value\n}\n\nfunction rangeWidth(): number {\n  return rangePickerBounds.value?.getBoundingClientRect().width ?? 0\n}\n\n// Emit the current bounds as the canonical range update.\nfunction emitRangeUpdate() {\n  /**\n   * Update the values of the range (both start and end)\n   * @event update\n   * @param Number[] New value of the range\n   */\n  emit('update:range', [start.value, end.value])\n}\n\nfunction dragStartBound({ detail: dx }: DragDropValue) {\n  if (moveStartTo(dx, rangeWidth())) {\n    emitRangeUpdate()\n  }\n}\n\nfunction dragEndBound({ detail: dx }: DragDropValue) {\n  if (moveEndTo(dx, rangeWidth())) {\n    emitRangeUpdate()\n  }\n}\n\nfunction dragBounds({ detail: dx }: DragDropValue) {\n  moveBoundsTo(dx, rangeWidth())\n  emitRangeUpdate()\n}\n\nfunction valueWithUnit(value: number | string): string {\n  return typeof value === 'number' ? `${value}px` : `${value}`\n}\n\ndefineExpose({\n  rangeWidth\n})\n</script>\n\n<template>\n  <div\n    class=\"range-picker\"\n    :class=\"classList\"\n  >\n    <div class=\"range-picker__wrapper\">\n      <slot />\n    </div>\n    <div\n      v-show=\"!disabled\"\n      ref=\"rangePickerBounds\"\n      class=\"range-picker__bounds\"\n      :style=\"boundsStyle\"\n    >\n      <div\n        v-draggable.relative\n        class=\"range-picker__bounds__overlay\"\n        :style=\"overlayStyle\"\n        @dragged=\"dragBounds\"\n        @started=\"toggleMoving(true)\"\n        @ended=\"toggleMoving(false)\"\n      />\n      <button\n        v-draggable\n        :style=\"startBoundStyle\"\n        class=\"range-picker__bounds__start btn\"\n        @dragged=\"dragStartBound\"\n        @started=\"toggleResizing(true)\"\n        @ended=\"toggleResizing(false)\"\n      >\n        <app-icon>\n          <component :is=\"boundStartIcon\" />\n        </app-icon>\n      </button>\n      <button\n        v-draggable\n        class=\"range-picker__bounds__end btn\"\n        :style=\"endBoundStyle\"\n        @dragged=\"dragEndBound\"\n        @started=\"toggleResizing(true)\"\n        @ended=\"toggleResizing(false)\"\n      >\n        <app-icon>\n          <component :is=\"boundEndIcon\" />\n        </app-icon>\n      </button>\n    </div>\n  </div>\n</template>\n\n<style scoped lang=\"scss\">\n\n.range-picker {\n  min-height: 1rem;\n  position: relative;\n\n  --bg: #{$component-active-bg};\n  --fg: #{$component-active-color};\n\n  @each $color, $value in $theme-colors {\n    &--#{$color} {\n      --bg: var(--#{$color}, #{$value});\n      --fg: #{color-contrast($value)};\n    }\n  }\n\n  &--rounded {\n    border-radius: $border-radius;\n  }\n\n  &--hover:hover &__bounds:after {\n    pointer-events: none;\n    content: '';\n    z-index: -1;\n    width: 100%;\n    height: 100%;\n    display: block;\n    background: var(--bg);\n    opacity: 0.1;\n    border-radius: inherit;\n  }\n\n  &--moving &__wrapper,\n  &--resizing &__wrapper {\n    &,\n    * {\n      pointer-events: none;\n    }\n  }\n\n  &--moving,\n  &__bounds__overlay,\n  &--moving &__bounds__start.btn:not(:disabled):not(.disabled),\n  &--moving &__bounds__end.btn:not(:disabled):not(.disabled) {\n    cursor: move;\n  }\n\n  &--resizing,\n  &--resizing &__bounds__overlay,\n  &__bounds__start.btn:not(:disabled):not(.disabled),\n  &__bounds__end.btn:not(:disabled):not(.disabled) {\n    cursor: col-resize;\n  }\n\n  &__bounds {\n    pointer-events: none;\n    position: absolute;\n    top: 0;\n    height: 100%;\n    border-radius: inherit;\n\n    &__overlay {\n      pointer-events: all;\n      position: absolute;\n      top: 0;\n      bottom: 0;\n      left: 0;\n      right: 0;\n      display: flex;\n      border-radius: inherit;\n      border: 1px solid var(--bg);\n      overflow: hidden;\n\n      &:after {\n        content: '';\n        width: 100%;\n        height: 100%;\n        display: block;\n        background: var(--bg);\n        opacity: 0.3;\n      }\n    }\n\n    &__start,\n    &__end {\n      pointer-events: all;\n      position: absolute;\n      top: 50%;\n      transform: translate(-50%, -50%);\n      border-radius: 50%;\n      font-size: 0.6rem;\n      width: 1.2rem;\n      height: 1.2rem;\n      line-height: 1.2rem;\n      padding: 0;\n      background: var(--bg, transparent);\n      color: var(--fg);\n      transform: translate(-50%, -50%);\n      display: inline-flex;\n      align-items: center;\n      justify-content: center;\n\n      &:hover,\n      &:active,\n      &:focus {\n        color: var(--fg);\n      }\n\n      &:active, &:focus {\n        background: var(--bg, transparent);\n      }\n    }\n\n    &__start {\n      left: 0;\n    }\n\n    &__end {\n      left: 100%;\n    }\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref, type Component } from 'vue'\nimport HapticCopy from '@/components/HapticCopy/HapticCopy.vue'\nimport AppIcon from '@/components/App/AppIcon.vue'\nimport { SIZE } from '@/enums'\nimport IPhEye from '~icons/ph/eye'\nimport IPhEyeSlash from '~icons/ph/eye-slash'\nimport { resolveSize, type SizeWithMd } from '@/utils/size'\n\nexport interface FormControlSecretProps {\n  /**\n   * If true the value is visible by default\n   */\n  visible?: boolean\n  /**\n   * Value of the input\n   */\n  value?: string | number\n  /**\n   * Size of the input form\n   */\n  size?: SizeWithMd\n  /**\n   * Bootstrap variant of the haptic copy button\n   */\n  hapticCopyVariant?: string\n  /**\n   * Hide toggler button\n   */\n  noToggler?: boolean\n  /**\n   * Hide haptic copy button\n   */\n  noHapticCopy?: boolean\n}\n\nconst props = withDefaults(defineProps<FormControlSecretProps>(), {\n  visible: false,\n  value: '',\n  size: SIZE.md,\n  hapticCopyVariant: 'primary',\n  noToggler: false,\n  noHapticCopy: false\n})\n\nconst emit = defineEmits(['update:visible'])\n\nconst secretInput = ref<HTMLInputElement | null>(null)\nconst inputType = computed(() => {\n  return props.visible ? 'text' : 'password'\n})\nconst togglerIcon = computed((): Component => {\n  return props.visible ? IPhEyeSlash : IPhEye\n})\nconst hapticCopyClassList = computed(() => {\n  return `btn-${props.hapticCopyVariant}`\n})\n\nconst resolvedSize = computed(() => resolveSize(props.size))\n\nfunction toggle() {\n  /**\n   * Emitted when the visibility of the input changes.\n   *\n   * @event update:visible\n   * @type {Boolean}\n   */\n  emit('update:visible', !props.visible)\n}\nfunction selectInput() {\n  if (props.visible) {\n    secretInput.value?.select()\n  }\n}\n</script>\n\n<template>\n  <b-input-group\n    :size=\"resolvedSize\"\n    class=\"secret-input\"\n  >\n    <b-button\n      v-if=\"!noToggler\"\n      variant=\"link\"\n      class=\"secret-input__toggler\"\n      @click=\"toggle\"\n    >\n      <app-icon><component :is=\"togglerIcon\" /></app-icon>\n    </b-button>\n    <b-form-input\n      ref=\"secretInput\"\n      class=\"text-monospace secret-input__input\"\n      readonly\n      :type=\"inputType\"\n      :model-value=\"value\"\n      @click=\"selectInput\"\n    />\n    <haptic-copy\n      v-if=\"!noHapticCopy\"\n      class=\"secret-input__copy\"\n      hide-label\n      :class=\"hapticCopyClassList\"\n      :text=\"value\"\n      @success=\"selectInput\"\n      @error=\"selectInput\"\n    />\n  </b-input-group>\n</template>\n\n<style scoped lang=\"scss\">\n\n.secret-input {\n  &__toggler {\n    background: $input-disabled-bg;\n    border: $input-border-width solid $input-border-color;\n    border-right: 0;\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref, type Component } from 'vue'\nimport HapticCopy from '@/components/HapticCopy/HapticCopy.vue'\nimport AppIcon from '@/components/App/AppIcon.vue'\nimport { SIZE } from '@/enums'\nimport IPhEye from '~icons/ph/eye'\nimport IPhEyeSlash from '~icons/ph/eye-slash'\nimport { resolveSize, type SizeWithMd } from '@/utils/size'\n\nexport interface FormControlSecretProps {\n  /**\n   * If true the value is visible by default\n   */\n  visible?: boolean\n  /**\n   * Value of the input\n   */\n  value?: string | number\n  /**\n   * Size of the input form\n   */\n  size?: SizeWithMd\n  /**\n   * Bootstrap variant of the haptic copy button\n   */\n  hapticCopyVariant?: string\n  /**\n   * Hide toggler button\n   */\n  noToggler?: boolean\n  /**\n   * Hide haptic copy button\n   */\n  noHapticCopy?: boolean\n}\n\nconst props = withDefaults(defineProps<FormControlSecretProps>(), {\n  visible: false,\n  value: '',\n  size: SIZE.md,\n  hapticCopyVariant: 'primary',\n  noToggler: false,\n  noHapticCopy: false\n})\n\nconst emit = defineEmits(['update:visible'])\n\nconst secretInput = ref<HTMLInputElement | null>(null)\nconst inputType = computed(() => {\n  return props.visible ? 'text' : 'password'\n})\nconst togglerIcon = computed((): Component => {\n  return props.visible ? IPhEyeSlash : IPhEye\n})\nconst hapticCopyClassList = computed(() => {\n  return `btn-${props.hapticCopyVariant}`\n})\n\nconst resolvedSize = computed(() => resolveSize(props.size))\n\nfunction toggle() {\n  /**\n   * Emitted when the visibility of the input changes.\n   *\n   * @event update:visible\n   * @type {Boolean}\n   */\n  emit('update:visible', !props.visible)\n}\nfunction selectInput() {\n  if (props.visible) {\n    secretInput.value?.select()\n  }\n}\n</script>\n\n<template>\n  <b-input-group\n    :size=\"resolvedSize\"\n    class=\"secret-input\"\n  >\n    <b-button\n      v-if=\"!noToggler\"\n      variant=\"link\"\n      class=\"secret-input__toggler\"\n      @click=\"toggle\"\n    >\n      <app-icon><component :is=\"togglerIcon\" /></app-icon>\n    </b-button>\n    <b-form-input\n      ref=\"secretInput\"\n      class=\"text-monospace secret-input__input\"\n      readonly\n      :type=\"inputType\"\n      :model-value=\"value\"\n      @click=\"selectInput\"\n    />\n    <haptic-copy\n      v-if=\"!noHapticCopy\"\n      class=\"secret-input__copy\"\n      hide-label\n      :class=\"hapticCopyClassList\"\n      :text=\"value\"\n      @success=\"selectInput\"\n      @error=\"selectInput\"\n    />\n  </b-input-group>\n</template>\n\n<style scoped lang=\"scss\">\n\n.secret-input {\n  &__toggler {\n    background: $input-disabled-bg;\n    border: $input-border-width solid $input-border-color;\n    border-right: 0;\n  }\n}\n</style>\n","function u(n) {\n  return n == null ? \"null\" : typeof n == \"function\" ? \"a function\" : `'${n}'`;\n}\nfunction f(n, o, r) {\n  if (!r)\n    return o;\n  const t = typeof r == \"function\" ? r(n, o) : n == null ? void 0 : n[r];\n  if (t == null)\n    throw new Error(`Key is ${t} on item (keyField is ${u(r)})`);\n  return t;\n}\nfunction e(n, o, r) {\n  if (typeof r == \"function\" && o == null)\n    throw new Error(\"index is required when using a function keyField\");\n  return f(n, o ?? 0, r);\n}\nexport {\n  e as a,\n  f as r\n};\n//# sourceMappingURL=keyField-D6okV6nC.js.map\n","import { computed as A, toValue as K, ref as ve, onMounted as pn, nextTick as rt, onActivated as gn, onBeforeUnmount as Sn, watch as B, markRaw as yn, shallowReactive as In } from \"vue\";\nimport { r as Oe } from \"./keyField-D6okV6nC.js\";\nfunction st(n, o, s) {\n  return Oe(n, o, s);\n}\nfunction Be(n, o) {\n  return n.map((s, u) => st(s, u, o));\n}\nfunction wn(n, o, s) {\n  const u = [], l = [];\n  for (let f = 0; f < n.length; f++) {\n    const I = n[f], x = st(I, f, o), T = s(I, f, x);\n    u.push(x), l.push(typeof T == \"number\" && T > 0 ? T : null);\n  }\n  return {\n    keys: u,\n    sizes: l\n  };\n}\nfunction xn(n, o, s) {\n  if (!n || n.keys.length !== o.length || n.sizes.length !== o.length)\n    return !1;\n  for (let u = 0; u < o.length; u++)\n    if (n.keys[u] !== st(o[u], u, s))\n      return !1;\n  return !0;\n}\nfunction bn(n, o, s) {\n  if (!xn(n, o, s))\n    return {};\n  const u = {};\n  for (let l = 0; l < n.keys.length; l++) {\n    const f = n.sizes[l];\n    typeof f == \"number\" && f > 0 && (u[n.keys[l]] = f);\n  }\n  return u;\n}\nfunction zn(n, o) {\n  if (!n.length || o.length <= n.length)\n    return 0;\n  const s = n[0], u = o.indexOf(s);\n  if (u <= 0 || u + n.length < o.length && n.length > o.length - u)\n    return 0;\n  for (let l = 0; l < n.length; l++)\n    if (o[u + l] !== n[l])\n      return 0;\n  return u;\n}\nfunction At(n, o, s, u, l, f = 0) {\n  const I = l ?? \"start\";\n  if (I === \"nearest\") {\n    const x = s + u, T = n + o;\n    return n >= s && T <= x ? null : n < s ? n + f : T - u + f;\n  }\n  return I === \"end\" ? n + o - u + f : I === \"center\" ? n + (o - u) / 2 + f : n + f;\n}\nfunction Mn(n) {\n  return n.flowMode && n.direction === \"vertical\" && !n.gridItems ? \"flow\" : n.disableTransform ? \"position\" : \"transform\";\n}\nfunction Tn(n, o) {\n  const s = o.direction === \"vertical\", u = o.mode ?? \"transform\", l = {\n    visibility: n.nr.used ? \"visible\" : \"hidden\",\n    pointerEvents: n.nr.used ? void 0 : \"none\"\n  };\n  if (u === \"flow\" ? l.display = n.nr.used ? void 0 : \"none\" : (l.position = \"absolute\", l.top = \"0px\", l.left = \"0px\", l.display = void 0), u === \"position\" ? (l[s ? \"top\" : \"left\"] = `${n.position}px`, l[s ? \"left\" : \"top\"] = `${n.offset}px`, l.transform = \"none\", l.willChange = \"unset\") : u === \"transform\" && (l.transform = s ? `translateY(${n.position}px) translateX(${n.offset}px)` : `translateX(${n.position}px) translateY(${n.offset}px)`, l.willChange = \"transform\"), o.gridItems && o.itemSize != null) {\n    const f = o.itemSecondarySize || o.itemSize;\n    l.width = `${s ? f : o.itemSize}px`, l.height = `${s ? o.itemSize : f}px`;\n  }\n  return l;\n}\nfunction Ut(n) {\n  return A(() => K(n));\n}\nfunction En(n, o, s, u, l) {\n  const f = Ut(n);\n  return {\n    el: A(() => {\n      const I = f.value.el;\n      return K(o ?? I);\n    }),\n    before: A(() => {\n      const I = f.value.before;\n      return K(s ?? I);\n    }),\n    after: A(() => {\n      const I = f.value.after;\n      return K(u ?? I);\n    }),\n    scrollParent: A(() => {\n      const I = f.value.scrollParent;\n      return K(I);\n    }),\n    callbacks: {\n      onResize: () => {\n        var I;\n        return (I = (l == null ? void 0 : l.onResize) ?? f.value.onResize) == null ? void 0 : I();\n      },\n      onVisible: () => {\n        var I;\n        return (I = (l == null ? void 0 : l.onVisible) ?? f.value.onVisible) == null ? void 0 : I();\n      },\n      onHidden: () => {\n        var I;\n        return (I = (l == null ? void 0 : l.onHidden) ?? f.value.onHidden) == null ? void 0 : I();\n      },\n      onUpdate: (I, x, T, N) => {\n        var ge;\n        return (ge = (l == null ? void 0 : l.onUpdate) ?? f.value.onUpdate) == null ? void 0 : ge(I, x, T, N);\n      }\n    }\n  };\n}\nconst Vn = {\n  itemsLimit: 1e3\n};\nfunction $t(n) {\n  return typeof window < \"u\" && n === window;\n}\nconst _n = (() => {\n  if (typeof document > \"u\")\n    return \"negative\";\n  const n = document.createElement(\"div\"), o = document.createElement(\"div\");\n  n.style.width = \"4px\", n.style.height = \"1px\", n.style.overflow = \"auto\", n.style.direction = \"rtl\", o.style.width = \"8px\", o.style.height = \"1px\", n.appendChild(o), document.body.appendChild(n), n.scrollLeft = -1;\n  const s = n.scrollLeft < 0;\n  return document.body.removeChild(n), s ? \"negative\" : \"default\";\n})();\nfunction pe(n, o, s) {\n  return o !== \"horizontal\" || !s || $t(s) || getComputedStyle(s).direction !== \"rtl\" ? n : _n === \"negative\" ? -n : n;\n}\nfunction Pn(n, o, s) {\n  return pe(n, o, s);\n}\nfunction it(n, o, s, u) {\n  const l = Pn(s, o, n), f = !!(u != null && u.smooth);\n  if ($t(n)) {\n    o === \"vertical\" ? n.scrollTo({\n      top: l,\n      behavior: f ? \"smooth\" : \"auto\"\n    }) : n.scrollTo({\n      left: l,\n      behavior: f ? \"smooth\" : \"auto\"\n    });\n    return;\n  }\n  if (typeof n.scrollTo == \"function\") {\n    n.scrollTo(o === \"vertical\" ? { top: l, behavior: f ? \"smooth\" : \"auto\" } : { left: l, behavior: f ? \"smooth\" : \"auto\" });\n    return;\n  }\n  o === \"vertical\" ? n.scrollTop = l : n.scrollLeft = l;\n}\nfunction Fn(n, o, s, u) {\n  if (s) {\n    if (u && u !== window) {\n      const l = u;\n      return o === \"vertical\" ? l.clientHeight : l.clientWidth;\n    }\n    return o === \"vertical\" ? window.innerHeight : window.innerWidth;\n  }\n  return o === \"vertical\" ? n.clientHeight : n.clientWidth;\n}\nconst Ln = /auto|scroll/;\nfunction jt(n, o) {\n  return n.parentNode === null ? o : jt(n.parentNode, [...o, n]);\n}\nfunction ot(n, o) {\n  return getComputedStyle(n, null).getPropertyValue(o);\n}\nfunction Cn(n) {\n  return ot(n, \"overflow\") + ot(n, \"overflow-y\") + ot(n, \"overflow-x\");\n}\nfunction Rn(n) {\n  return Ln.test(Cn(n));\n}\nfunction Wn(n) {\n  if (!(n instanceof HTMLElement || n instanceof SVGElement))\n    return;\n  if (n.parentNode === null)\n    return document.scrollingElement || document.documentElement;\n  const o = jt(n.parentNode, []);\n  for (let s = 0; s < o.length; s += 1)\n    if (o[s] instanceof Element && Rn(o[s]))\n      return o[s];\n  return document.scrollingElement || document.documentElement;\n}\nfunction kn(n, o) {\n  if (o)\n    return o;\n  if (!n)\n    return;\n  const s = Wn(n);\n  if (s)\n    return typeof window < \"u\" && window.document && (s === window.document.documentElement || s === window.document.body) ? window : s;\n}\nlet lt = !1;\nfunction Nn() {\n  return lt;\n}\nif (typeof window < \"u\") {\n  lt = !1;\n  try {\n    const n = Object.defineProperty({}, \"passive\", {\n      get() {\n        lt = !0;\n      }\n    });\n    window.addEventListener(\"test\", null, n);\n  } catch {\n  }\n}\nfunction D(n) {\n  return typeof n == \"number\" ? n : null;\n}\nfunction Hn(n, o, s, u, l) {\n  return typeof s == \"number\" ? s : typeof s == \"function\" ? s(n, o) || u || void 0 : u || (n == null ? void 0 : n[l ?? \"size\"]) || void 0;\n}\nfunction An(n, o, s, u, l, f) {\n  return typeof s == \"function\" ? s(n, o) || u || Number(l) || 0 : u || (n == null ? void 0 : n[f ?? \"size\"]) || Number(l) || 0;\n}\nlet Bn = 0;\nconst Yn = [];\nfunction On(n) {\n  for (let o = 0; o < n.length; o++)\n    n[o];\n}\nfunction Un(n, o) {\n  return n && typeof n == \"object\" ? n[o] : void 0;\n}\nfunction Ye(n, o) {\n  return n.map((s) => Un(s, o));\n}\nfunction $n(n, o, s, u) {\n  if (n.length !== s.length || o.length !== u.length)\n    return !1;\n  for (let l = 0; l < n.length; l++)\n    if (n[l] !== s[l] || o[l] !== u[l])\n      return !1;\n  return !0;\n}\nfunction jn(n) {\n  const o = n;\n  o._vs_styleStamp++;\n}\nfunction Bt(n) {\n  const o = n;\n  o._vs_visibilityStamp++, o._vs_styleStamp++;\n}\nfunction Dn(n, o, s, u) {\n  if (s) {\n    for (const l of s)\n      u(l);\n    return;\n  }\n  for (let l = n; l < o; l++)\n    u(l);\n}\nconst Yt = 8, Ot = 1;\nfunction qn(n, o, s, u, l, f) {\n  const I = Ut(n), x = En(I, o, s, u, l), T = A(() => {\n    const e = K(v().items);\n    return On(e), e;\n  }), N = ve([]), ge = ve(0), Se = ve(0), ye = ve(0), le = ve(!1);\n  let G = 0, X = 0, at = 0, ut = 0, ct = !1, ee = null;\n  const Ue = /* @__PURE__ */ new Map(), $e = /* @__PURE__ */ new Map();\n  let Ee = !1, je = 0, dt = 0, De = !1, se = null, ae = null, q = null, Ge = 0, Ie = null, we = null, Ve = [], xe = [], te = null, Y = null, be = null, Xe = !1, ft = !1, mt = !1;\n  const _e = /* @__PURE__ */ new Set(), Pe = ve({}), qe = [], ht = {\n    accumulator: 0\n  };\n  function v() {\n    return I.value;\n  }\n  function ue() {\n    return (f == null ? void 0 : f.pageMode) ?? v().pageMode;\n  }\n  const M = A(() => K(v().enabled ?? !0)), ze = A(() => kn(\n    x.el.value,\n    x.scrollParent.value\n  )), Z = A(() => {\n    const e = T.value;\n    return e.length > 0 && typeof e[0] != \"object\";\n  }), Me = A(() => {\n    const e = v();\n    if (D(e.itemSize) === null) {\n      const r = T.value, i = Array.from({ length: r.length });\n      ht.accumulator = 0, i[-1] = ht;\n      const a = e.minItemSize, d = Pe.value, h = Z.value;\n      let S = 1e4, p = 0, z;\n      for (let c = 0, m = r.length; c < m; c++) {\n        const V = h ? c : Oe(r[c], c, e.keyField);\n        z = An(\n          r[c],\n          c,\n          e.itemSize,\n          d[V],\n          a,\n          e.sizeField\n        ), z < S && (S = z), p += z;\n        const E = qe[c] ?? (qe[c] = {\n          accumulator: 0,\n          size: void 0\n        });\n        E.accumulator = p, E.size = z, i[c] = E;\n      }\n      return qe.length = r.length, Ge = S, i;\n    }\n    return Yn;\n  }), Dt = A(\n    () => N.value.filter((e) => (e._vs_visibilityStamp, e.nr.used)).sort((e, t) => e.nr.index - t.nr.index)\n  ), Gt = A(() => {\n    const e = v(), t = Z.value ? null : e.keyField;\n    return wn(T.value, t, (r, i, a) => Hn(\n      r,\n      i,\n      e.itemSize,\n      Pe.value[a],\n      e.sizeField\n    ));\n  });\n  function J(e = v()) {\n    return e.direction ?? \"vertical\";\n  }\n  function ce(e = v()) {\n    const t = J(e);\n    let r = e.flowMode ?? !1;\n    return r && t !== \"vertical\" && (ft || (console.warn(\"[vue-recycle-scroller] flowMode only supports vertical lists. Falling back to standard positioning.\"), ft = !0), r = !1), r && e.gridItems && (mt || (console.warn(\"[vue-recycle-scroller] flowMode does not support gridItems. Falling back to standard positioning.\"), mt = !0), r = !1), Mn({\n      direction: t,\n      disableTransform: e.disableTransform ?? !1,\n      flowMode: r,\n      gridItems: e.gridItems\n    });\n  }\n  function vt() {\n    N.value.sort((e, t) => e.nr.used !== t.nr.used ? e.nr.used ? -1 : 1 : e.nr.used && t.nr.used ? e.nr.index - t.nr.index : e.nr.id - t.nr.id);\n  }\n  function Ze(e) {\n    const t = v();\n    return Pe.value = bn(e, T.value, Z.value ? null : t.keyField), Object.keys(Pe.value).length > 0;\n  }\n  function pt(e) {\n    let t = $e.get(e);\n    return t || (t = [], $e.set(e, t)), t;\n  }\n  function Xt(e, t, r, i, a) {\n    const d = yn({\n      id: Bn++,\n      index: t,\n      used: !0,\n      key: i,\n      type: a\n    }), h = In({\n      item: r,\n      position: 0,\n      offset: 0,\n      nr: d,\n      _vs_styleStamp: 0,\n      _vs_visibilityStamp: 0\n    });\n    return e.push(h), h;\n  }\n  function qt(e) {\n    const t = pt(e);\n    if (t && t.length) {\n      const r = t.pop();\n      return r.nr.used = !0, Bt(r), r;\n    }\n  }\n  function gt(e, t) {\n    const r = N.value, i = r.indexOf(e);\n    if (i === -1)\n      return;\n    const a = Math.max(0, Math.min(t, r.length - 1));\n    i !== a && (r.splice(i, 1), r.splice(a, 0, e));\n  }\n  function Zt(e) {\n    gt(e, N.value.length - 1);\n  }\n  function Jt() {\n    const e = N.value;\n    let t = 0;\n    for (; t < e.length && !e[t].nr.used; )\n      t++;\n    let r = 0;\n    for (let i = t; i < e.length && e[i].nr.used; i++)\n      r++;\n    return {\n      activeStart: t,\n      activeCount: r,\n      headInsertCount: 0\n    };\n  }\n  function Qt(e, t, r) {\n    let i = null;\n    t < G ? (i = r.activeStart + r.headInsertCount, r.headInsertCount++, r.activeCount++) : t >= X && (i = r.activeStart + r.activeCount, r.activeCount++), i != null && gt(e, i);\n  }\n  function St(e, t = !1) {\n    const r = e.nr.type;\n    pt(r).push(e), e.nr.used = !1, e.position = v().hiddenPosition ?? -999999, Bt(e), Ue.delete(e.nr.key), t && Zt(e);\n  }\n  function Kt() {\n    Ue.clear(), $e.clear();\n    for (let e = 0, t = N.value.length; e < t; e++) {\n      const r = N.value[e];\n      r && St(r);\n    }\n  }\n  function Je(e) {\n    let t = -1;\n    return t = requestAnimationFrame(() => {\n      _e.delete(t), e();\n    }), _e.add(t), t;\n  }\n  function yt() {\n    for (const e of _e)\n      cancelAnimationFrame(e);\n    _e.clear();\n  }\n  function It() {\n    se && (clearTimeout(se), se = null), ae && (clearTimeout(ae), ae = null), q && (clearTimeout(q), q = null), Y && (clearTimeout(Y), Y = null), be && (clearTimeout(be), be = null);\n  }\n  function Qe() {\n    var e, t;\n    M.value && ((t = (e = x.callbacks).onResize) == null || t.call(e), le.value && L(!1));\n  }\n  function Ke() {\n    if (!M.value)\n      return;\n    te && !Xe && ne();\n    const e = v();\n    if (!Ee) {\n      if (Ee = !0, se)\n        return;\n      const t = () => Je(() => {\n        Ee = !1;\n        const { continuous: r } = L(!1, !0);\n        r || (ae && clearTimeout(ae), ae = setTimeout(Ke, e.updateInterval + 100));\n      });\n      t(), e.updateInterval && (se = setTimeout(() => {\n        se = null, Ee && t();\n      }, e.updateInterval));\n    }\n  }\n  function en(e, t) {\n    var r, i, a, d;\n    M.value && le.value && (e || t.boundingClientRect.width !== 0 || t.boundingClientRect.height !== 0 ? ((i = (r = x.callbacks).onVisible) == null || i.call(r), Je(() => {\n      L(!1);\n    })) : (d = (a = x.callbacks).onHidden) == null || d.call(a));\n  }\n  function tn() {\n    return ze.value ?? window;\n  }\n  function Fe() {\n    const e = x.before.value;\n    if (!e)\n      return 0;\n    const t = v();\n    return J(t) === \"vertical\" ? e.scrollHeight : e.scrollWidth;\n  }\n  function de() {\n    const e = x.el.value;\n    if (!e)\n      return { start: 0, end: 0 };\n    const t = v(), r = J(t), i = r === \"vertical\";\n    let a;\n    if (ue()) {\n      const d = e.getBoundingClientRect(), h = i ? d.height : d.width, S = ze.value, p = !S || S === window, z = p ? 0 : S.getBoundingClientRect().top, c = p ? 0 : S.getBoundingClientRect().left, m = p ? window.innerHeight : S.clientHeight, V = p ? window.innerWidth : S.clientWidth;\n      let E = i ? -(d.top - z) : -(d.left - c), W = i ? m : V;\n      E < 0 && (W += E, E = 0), E + W > h && (W = h - E), a = {\n        start: E,\n        end: E + W\n      };\n    } else i ? a = {\n      start: e.scrollTop,\n      end: e.scrollTop + e.clientHeight\n    } : a = {\n      start: pe(e.scrollLeft, r, e),\n      end: pe(e.scrollLeft, r, e) + e.clientWidth\n    };\n    return a;\n  }\n  function nn() {\n    const e = x.el.value;\n    if (!e)\n      return { start: 0, end: 0 };\n    const t = v();\n    if (J(t) === \"vertical\") {\n      const r = pe(e.scrollLeft, \"horizontal\", e);\n      return {\n        start: r,\n        end: r + e.clientWidth\n      };\n    }\n    return {\n      start: e.scrollTop,\n      end: e.scrollTop + e.clientHeight\n    };\n  }\n  function rn(e, t, r, i) {\n    var S, p, z, c;\n    const a = Fe(), d = e.start - i - a, h = e.end + i - a;\n    if (G > 0) {\n      const m = ((S = r[G - 1]) == null ? void 0 : S.accumulator) ?? 0;\n      if (d <= m)\n        return !0;\n    }\n    if (G < t - 1) {\n      const m = ((p = r[G]) == null ? void 0 : p.accumulator) ?? Number.POSITIVE_INFINITY;\n      if (d > m)\n        return !0;\n    }\n    if (X > 1) {\n      const m = ((z = r[X - 2]) == null ? void 0 : z.accumulator) ?? 0;\n      if (h <= m)\n        return !0;\n    }\n    if (X < t) {\n      const m = ((c = r[X - 1]) == null ? void 0 : c.accumulator) ?? Number.POSITIVE_INFINITY;\n      if (h > m)\n        return !0;\n    }\n    return !1;\n  }\n  function Le(e) {\n    const t = v(), r = D(t.itemSize);\n    if (r !== null)\n      return r;\n    const i = Me.value[e];\n    return (i == null ? void 0 : i.size) || Number(t.minItemSize) || 0;\n  }\n  function on(e) {\n    const t = v();\n    return Tn(e, {\n      direction: J(t),\n      mode: ce(t),\n      itemSize: D(t.itemSize),\n      gridItems: t.gridItems,\n      itemSecondarySize: t.itemSecondarySize\n    });\n  }\n  function U(e) {\n    var a;\n    const t = v(), r = t.gridItems || 1, i = D(t.itemSize);\n    return e <= 0 ? 0 : i !== null ? Math.floor(e / r) * i : ((a = Me.value[e - 1]) == null ? void 0 : a.accumulator) || 0;\n  }\n  function wt(e) {\n    const t = v(), r = T.value.length, i = t.gridItems || 1, a = D(t.itemSize);\n    if (!r)\n      return 0;\n    if (a !== null) {\n      const p = Math.floor(e / a) * i;\n      return Math.min(Math.max(p, 0), r - 1);\n    }\n    let d = 0, h = r - 1, S = 0;\n    for (; d <= h; ) {\n      const p = Math.floor((d + h) / 2);\n      U(p) <= e ? (S = p, d = p + 1) : h = p - 1;\n    }\n    return S;\n  }\n  function ne() {\n    Y && (clearTimeout(Y), Y = null), te = null;\n  }\n  function ln() {\n    Y && clearTimeout(Y), Y = setTimeout(() => {\n      te = null, Y = null;\n    }, 150);\n  }\n  function sn(e, t) {\n    if (!e.length) {\n      ne();\n      return;\n    }\n    const r = Math.max(de().start - Fe(), 0), i = Math.min(wt(r), e.length - 1), a = e[i], d = t ? Oe(a, i, t) : i, h = Fe() + U(i);\n    te = {\n      key: d,\n      offset: de().start - h\n    };\n  }\n  function xt(e) {\n    if (!te)\n      return !1;\n    const t = v(), r = e ?? T.value, i = Z.value ? null : t.keyField, d = Be(r, i).indexOf(te.key);\n    if (d === -1)\n      return ne(), !1;\n    const h = Fe() + U(d) + te.offset, S = de().start;\n    return Math.abs(h - S) < 0.5 ? !1 : (Xe = !0, Ce(h), Je(() => {\n      Xe = !1;\n    }), !0);\n  }\n  function Te() {\n    if (fe(), !M.value)\n      return;\n    const e = ue() ? tn() : x.el.value;\n    e && (Ie = e, Ie.addEventListener(\"scroll\", Ke, Nn() ? { passive: !0 } : !1), ue() && e === window && (we = e, we.addEventListener(\"resize\", Qe)));\n  }\n  function fe() {\n    Ie && (Ie.removeEventListener(\"scroll\", Ke), Ie = null), we && (we.removeEventListener(\"resize\", Qe), we = null);\n  }\n  function an(e, t, r, i, a, d) {\n    const h = Math.ceil(e / t) * r, S = Math.max(0, Math.floor(a.start / r)), p = Math.min(Math.ceil(a.end / r), Math.ceil(e / t)), z = Math.max(0, Math.floor(d.start / i)), c = Math.min(Math.ceil(d.end / i), t), m = [];\n    for (let W = S; W < p; W++) {\n      const me = W * t;\n      for (let w = z; w < c; w++) {\n        const g = me + w;\n        if (g >= e)\n          break;\n        m.push(g);\n      }\n    }\n    const V = m[0] ?? 0, E = m.at(-1) ?? -1;\n    return {\n      renderedIndices: m,\n      startIndex: V,\n      endIndex: E + 1,\n      visibleStartIndex: V,\n      visibleEndIndex: E,\n      totalSize: h\n    };\n  }\n  function un() {\n    const e = v(), t = D(e.itemSize);\n    if (!e.gridItems || t == null)\n      return !1;\n    const r = x.el.value;\n    if (!r)\n      return !1;\n    const i = e.itemSecondarySize || t, a = J(e) === \"vertical\" ? r.clientWidth : r.clientHeight;\n    return i * e.gridItems > a;\n  }\n  function bt(e, t, r, i) {\n    if (Math.abs(e - t) !== 1 || t < 0 || t >= r)\n      return e;\n    const a = e > t ? U(t) + Le(t) : U(t);\n    return Math.abs(a - i) <= Yt ? t : e;\n  }\n  function zt(e, t, r, i, a) {\n    if (Math.abs(e - t) !== 1)\n      return e;\n    const d = a ? t - 1 : t;\n    if (d < 0 || d >= r)\n      return e;\n    const h = e > t ? U(d) + Le(d) : U(d);\n    return Math.abs(h - i) <= Yt ? t : e;\n  }\n  function cn(e, t, r) {\n    const i = {\n      ...e,\n      visibleStartIndex: bt(e.visibleStartIndex, at, t, r.rawViewportStart),\n      visibleEndIndex: zt(e.visibleEndIndex, ut, t, r.rawViewportEnd, !1),\n      startIndex: bt(e.startIndex, G, t, r.renderStart),\n      endIndex: zt(e.endIndex, X, t, r.renderEnd, !0)\n    };\n    i.startIndex > i.visibleStartIndex && (i.startIndex = i.visibleStartIndex);\n    const a = Math.min(t, i.visibleEndIndex + 1);\n    return i.endIndex < a && (i.endIndex = a), i.endIndex < i.startIndex && (i.endIndex = i.startIndex), i;\n  }\n  function L(e, t = !1) {\n    var Vt, _t, Pt, Ft, Lt, Ct, Rt, Wt, kt;\n    if (!M.value)\n      return { continuous: !0 };\n    const r = v(), i = D(r.itemSize), a = r.gridItems || 1, d = r.itemSecondarySize || i || 0, h = Ge, S = r.typeField, p = Z.value ? null : r.keyField, z = T.value, c = z.length, m = Me.value, V = Ue, E = N.value;\n    let W = null, me = null, w, g, H, _, P;\n    const hn = i !== null || c === 0 || m[c - 1] != null;\n    if (!c || !hn)\n      !c || !ee ? w = g = _ = P = H = 0 : (w = Math.min(ee.startIndex, c), g = Math.min(ee.endIndex, c), _ = Math.min(ee.visibleStartIndex, c), P = Math.min(ee.visibleEndIndex, c), H = ((Vt = m[c - 1]) == null ? void 0 : Vt.accumulator) ?? ee.totalSizeValue);\n    else if (De)\n      w = _ = 0, g = P = Math.min(r.prerender, z.length), H = 0;\n    else {\n      const b = de(), R = nn(), $ = je, j = dt, C = { ...b }, he = { ...R };\n      if (t) {\n        let F = b.start - $;\n        F < 0 && (F = -F);\n        let oe = R.start - j;\n        oe < 0 && (oe = -oe);\n        const Ne = i === null && rn(b, c, m, r.buffer), k = i === null && (F >= h || Ne) || i !== null && F >= i, He = a > 1 && i != null && oe >= d;\n        if (!k && !He)\n          return {\n            continuous: !0\n          };\n      }\n      je = b.start, dt = R.start;\n      const Q = r.buffer;\n      C.start -= Q, C.end += Q, he.start -= Q, he.end += Q;\n      let O = 0;\n      const Nt = x.before.value;\n      Nt && (O = Nt.scrollHeight, C.start -= O);\n      const Ht = x.after.value;\n      if (Ht) {\n        const F = Ht.scrollHeight;\n        C.end += F;\n      }\n      const vn = ce(r) === \"flow\" && i === null && !t && ct && Math.abs(b.start - $) <= Ot && Math.abs(R.start - j) <= Ot;\n      if (i === null) {\n        let F, oe = 0, Ne = c - 1, k = ~~(c / 2), He;\n        do\n          He = k, F = ((_t = m[k]) == null ? void 0 : _t.accumulator) ?? 0, F < C.start ? oe = k : k < c - 1 && (((Pt = m[k + 1]) == null ? void 0 : Pt.accumulator) ?? Number.POSITIVE_INFINITY) > C.start && (Ne = k), k = ~~((oe + Ne) / 2);\n        while (k !== He);\n        for (k < 0 && (k = 0), w = k, H = ((Ft = m[c - 1]) == null ? void 0 : Ft.accumulator) ?? 0, g = k; g < c && (((Lt = m[g]) == null ? void 0 : Lt.accumulator) ?? 0) < C.end; g++) ;\n        for (g === -1 ? g = z.length - 1 : (g++, g > c && (g = c)), _ = w; _ < c && O + (((Ct = m[_]) == null ? void 0 : Ct.accumulator) ?? Number.POSITIVE_INFINITY) < C.start; _++) ;\n        for (P = _; P < c && O + (((Rt = m[P]) == null ? void 0 : Rt.accumulator) ?? 0) < C.end; P++) ;\n        if (vn) {\n          const Ae = cn({\n            startIndex: w,\n            endIndex: g,\n            visibleStartIndex: _,\n            visibleEndIndex: P\n          }, c, {\n            rawViewportStart: b.start - O,\n            rawViewportEnd: b.end - O,\n            renderStart: b.start - Q - O,\n            renderEnd: b.end + Q - O\n          });\n          w = Ae.startIndex, g = Ae.endIndex, _ = Ae.visibleStartIndex, P = Ae.visibleEndIndex;\n        }\n        ee = {\n          startIndex: w,\n          endIndex: g,\n          visibleStartIndex: _,\n          visibleEndIndex: P,\n          totalSizeValue: H\n        };\n      } else if (a > 1) {\n        const F = an(\n          c,\n          a,\n          i,\n          d,\n          C,\n          he\n        );\n        W = F.renderedIndices, me = new Set(W), w = F.startIndex, g = F.endIndex, _ = F.visibleStartIndex, P = F.visibleEndIndex, H = F.totalSize;\n      } else {\n        w = ~~(C.start / i * a);\n        const F = w % a;\n        w -= F, g = Math.ceil(C.end / i * a), _ = Math.max(0, Math.floor((C.start - O) / i * a)), P = Math.floor((C.end - O) / i * a), w < 0 && (w = 0), g > c && (g = c), _ < 0 && (_ = 0), P > c && (P = c), H = Math.ceil(c / a) * i;\n      }\n    }\n    g - w > Vn.itemsLimit && dn(), ge.value = H, Se.value = 0, ye.value = ce(r) === \"flow\" ? H : 0;\n    let y;\n    const et = w <= X && g >= G, Tt = ce(r) === \"flow\", tt = Tt && et && !e;\n    let nt = null;\n    if (!et || e)\n      Kt();\n    else {\n      const b = (R) => {\n        const $ = E[R];\n        $ && (y = $, y.nr.used && ((me ? me.has(y.nr.index) : y.nr.index >= w && y.nr.index < g) || St(y, tt)));\n      };\n      if (tt) {\n        for (let R = E.length - 1; R >= 0; R--)\n          b(R);\n        nt = Jt();\n      } else\n        for (let R = 0, $ = E.length; R < $; R++)\n          b(R);\n    }\n    let ie, We, ke = null, Et = 0;\n    return Dn(w, g, W, (b) => {\n      var he;\n      const R = m[b] && m[b].size, $ = i || R || Ge || 1;\n      ie = z[b];\n      const j = p ? Oe(ie, b, p) : b;\n      y = V.get(j);\n      let C = !1;\n      if (y)\n        y.item !== ie && (y.item = ie), y.nr.used || console.warn(`Expected existing view's used flag to be true, got ${y.nr.used}`);\n      else {\n        if (We = ie[S], y = qt(We), y) {\n          const Q = y.nr.index !== b || y.nr.key !== j;\n          y.item = ie, y.nr.index = b, y.nr.key = j, y.nr.type !== We && console.warn(\"Reused view's type does not match pool's type\"), Q && jn(y);\n        } else\n          y = Xt(E, b, ie, j, We);\n        V.set(j, y), C = !0;\n      }\n      i === null ? (y.position = ((he = m[b - 1]) == null ? void 0 : he.accumulator) || 0, y.offset = 0) : (y.position = Math.floor(b / a) * i, y.offset = b % a * d), nt && C && Qt(y, b, nt), ke ?? (ke = y.position), Et += $;\n    }), Tt ? (ke == null ? (Se.value = 0, ye.value = H) : (Se.value = ke, ye.value = Math.max(0, H - ke - Et)), tt || vt()) : (Se.value = 0, ye.value = 0), G = w, X = g, at = _, ut = P, ct = !0, r.emitUpdate && ((kt = (Wt = x.callbacks).onUpdate) == null || kt.call(Wt, w, g, _, P)), ce(r) !== \"flow\" && (q && clearTimeout(q), q = setTimeout(Mt, r.updateInterval + 300)), {\n      continuous: et\n    };\n  }\n  function dn() {\n    throw be = setTimeout(() => {\n      be = null, console.warn(\"It seems the scroller element isn't scrolling, so it tries to render all the items at once.\", \"Scroller:\", x.el.value), console.warn(\"Make sure the scroller has a fixed height (or width) and 'overflow-y' (or 'overflow-x') set to 'auto' so it can scroll correctly and only render the items visible in the scroll viewport.\");\n    }), new Error(\"Rendered items limit reached\");\n  }\n  function fn() {\n    if (un())\n      return !1;\n    const e = N.value.filter(({ nr: t }) => t.used);\n    for (let t = 1; t < e.length; t++)\n      if (e[t].nr.index !== e[t - 1].nr.index + 1)\n        return !0;\n    return !1;\n  }\n  function Mt() {\n    if (M.value) {\n      if (ce() === \"flow\") {\n        vt();\n        return;\n      }\n      N.value.sort((e, t) => e.nr.index - t.nr.index), fn() && (L(!1), q && clearTimeout(q));\n    }\n  }\n  function mn(e, t) {\n    if (!M.value)\n      return;\n    const r = v(), i = J(r), a = x.el.value;\n    if (!a)\n      return;\n    const d = Math.max(0, Math.min(e, T.value.length - 1)), h = de().start, S = Fn(a, i, r.pageMode, ze.value), p = U(d), z = Le(d), c = At(\n      p,\n      z,\n      h,\n      S,\n      t == null ? void 0 : t.align,\n      (t == null ? void 0 : t.offset) ?? 0\n    );\n    if (c == null)\n      return;\n    Ce(c, t);\n    const m = D(r.itemSize);\n    if (r.gridItems && m != null) {\n      const V = x.el.value;\n      if (!V)\n        return;\n      const E = r.gridItems, W = r.itemSecondarySize || m, w = d % E * W, g = i === \"vertical\" ? \"horizontal\" : \"vertical\", H = g === \"horizontal\" ? pe(V.scrollLeft, \"horizontal\", V) : V.scrollTop, _ = g === \"horizontal\" ? V.clientWidth : V.clientHeight, P = At(\n        w,\n        W,\n        H,\n        _,\n        t == null ? void 0 : t.align,\n        (t == null ? void 0 : t.offset) ?? 0\n      );\n      P != null && it(V, g, P, t);\n    }\n  }\n  function Ce(e, t) {\n    if (!M.value)\n      return;\n    const r = v(), i = J(r), a = x.el.value;\n    if (a)\n      if (ue()) {\n        const d = ze.value ?? window, h = i === \"vertical\" ? \"top\" : \"left\", S = d === window, p = S ? document.scrollingElement || document.documentElement : d, z = p.getBoundingClientRect(), c = a.getBoundingClientRect(), m = S ? i === \"vertical\" ? window.scrollY : window.scrollX : pe(\n          i === \"vertical\" ? p.scrollTop : p.scrollLeft,\n          i,\n          p\n        ), V = c[h] - z[h];\n        it(S ? window : p, i, e + m + V, t);\n      } else\n        it(a, i, e, t);\n  }\n  const re = v(), Re = T.value;\n  return Ve = Be(Re, Re.length > 0 && typeof Re[0] != \"object\" ? null : re.keyField), xe = Ye(Re, re.typeField), re.cache && Ze(re.cache), M.value && re.prerender && (De = !0, L(!1)), re.gridItems && D(re.itemSize) == null && console.error(\"[vue-recycle-scroller] You must provide an itemSize when using gridItems\"), pn(() => {\n    M.value && (Te(), rt(() => {\n      De = !1, L(!0), le.value = !0;\n    }));\n  }), gn(() => {\n    if (!M.value)\n      return;\n    const e = je;\n    typeof e == \"number\" && rt(() => {\n      Ce(e);\n    });\n  }), Sn(() => {\n    It(), yt(), fe();\n  }), B(M, (e) => {\n    e ? (Te(), rt(() => {\n      L(!0), le.value = !0;\n    })) : (fe(), It(), yt(), le.value = !1);\n  }), B(() => v().cache, (e) => {\n    M.value && (Ze(e), L(!0));\n  }), B(() => K(v().items).slice(), (e, t) => {\n    if (!M.value)\n      return;\n    const r = v(), i = Z.value ? null : r.keyField, a = Be(e, i), d = Ye(e, r.typeField), h = Ve, p = !$n(\n      a,\n      d,\n      h,\n      xe\n    );\n    r.shift && zn(h, a) > 0 ? sn(t ?? [], i) : ne(), Ve = a, xe = d, xt(e), L(p);\n  }), B(() => v().keyField, () => {\n    if (!M.value)\n      return;\n    const e = v(), t = Z.value ? null : e.keyField;\n    Ve = Be(T.value, t), xe = Ye(T.value, e.typeField), ne(), L(!0);\n  }), B(() => v().typeField, () => {\n    if (!M.value)\n      return;\n    const e = v();\n    xe = Ye(T.value, e.typeField), ne(), L(!0);\n  }), B(ue, () => {\n    M.value && (fe(), Te(), L(!1));\n  }), B(x.el, () => {\n    M.value && (fe(), Te(), L(!1));\n  }), B(ze, () => {\n    !M.value || !ue() || (fe(), Te(), L(!1));\n  }), B(Me, () => {\n    M.value && (xt() && ln(), L(!1));\n  }), B(() => v().gridItems, () => {\n    M.value && L(!0);\n  }), B(() => v().itemSecondarySize, () => {\n    M.value && L(!0);\n  }), {\n    pool: N,\n    visiblePool: Dt,\n    totalSize: ge,\n    startSpacerSize: Se,\n    endSpacerSize: ye,\n    ready: le,\n    sizes: Me,\n    simpleArray: Z,\n    scrollToItem: mn,\n    scrollToPosition: Ce,\n    getScroll: de,\n    findItemIndex: wt,\n    getItemOffset: U,\n    getItemSize: Le,\n    getViewStyle: on,\n    cacheSnapshot: Gt,\n    restoreCache: Ze,\n    updateVisibleItems: L,\n    handleResize: Qe,\n    handleVisibilityChange: en,\n    sortViews: Mt\n  };\n}\nexport {\n  Ut as a,\n  Be as b,\n  Vn as c,\n  bn as d,\n  Tn as e,\n  zn as f,\n  D as g,\n  Mn as r,\n  qn as u\n};\n//# sourceMappingURL=useRecycleScroller-CXk06epd.js.map\n","import { defineComponent as v, openBlock as f, createBlock as d, resolveDynamicComponent as _, withCtx as m, renderSlot as p, ref as w, onMounted as k, onBeforeUnmount as y, createElementBlock as O } from \"vue\";\nconst l = /* @__PURE__ */ new WeakMap();\nfunction z(e) {\n  return typeof e == \"function\" ? {\n    callback: e,\n    observer: null,\n    intersection: void 0,\n    visible: null\n  } : {\n    callback: e.callback,\n    observer: null,\n    intersection: e.intersection,\n    visible: null\n  };\n}\nfunction u(e, t) {\n  b(e);\n  const n = z(t.value);\n  if (l.set(e, n), typeof IntersectionObserver > \"u\") {\n    const i = e.getBoundingClientRect();\n    n.visible = !0, n.callback(!0, {\n      boundingClientRect: i\n    });\n    return;\n  }\n  n.observer = new IntersectionObserver((i) => {\n    const r = i[0], s = !!(r != null && r.isIntersecting);\n    n.visible !== null && n.visible === s || (n.visible = s, n.callback(s, r));\n  }, n.intersection), n.observer.observe(e);\n}\nfunction b(e) {\n  const t = l.get(e);\n  t != null && t.observer && (t.observer.disconnect(), t.observer = null);\n}\nconst B = {\n  mounted(e, t) {\n    u(e, t);\n  },\n  updated(e, t) {\n    t.value !== t.oldValue && u(e, t);\n  },\n  unmounted(e) {\n    b(e), l.delete(e);\n  }\n}, C = /* @__PURE__ */ v({\n  __name: \"ItemView\",\n  props: {\n    view: {},\n    itemTag: {}\n  },\n  setup(e) {\n    const t = e;\n    return (n, i) => (f(), d(_(t.itemTag), { class: \"vue-recycle-scroller__item-view\" }, {\n      default: m(() => [\n        p(n.$slots, \"default\", {\n          item: t.view.item,\n          index: t.view.nr.index,\n          active: t.view.nr.used\n        })\n      ]),\n      _: 3\n    }));\n  }\n}), g = /* @__PURE__ */ v({\n  __name: \"ResizeObserver\",\n  emits: [\"notify\"],\n  setup(e, { emit: t }) {\n    const n = t, i = w();\n    let r = null, s = null;\n    function a() {\n      n(\"notify\");\n    }\n    return k(() => {\n      var c;\n      const o = (c = i.value) == null ? void 0 : c.parentElement;\n      if (o) {\n        if (typeof ResizeObserver < \"u\") {\n          r = new ResizeObserver(() => {\n            a();\n          }), r.observe(o);\n          return;\n        }\n        s = () => a(), window.addEventListener(\"resize\", s);\n      }\n    }), y(() => {\n      r && (r.disconnect(), r = null), s && (window.removeEventListener(\"resize\", s), s = null);\n    }), (o, c) => (f(), O(\"div\", {\n      ref_key: \"el\",\n      ref: i,\n      class: \"vue-recycle-scroller__resize-observer\",\n      \"aria-hidden\": \"true\"\n    }, null, 512));\n  }\n}), R = (e, t) => {\n  const n = e.__vccOpts || e;\n  for (const [i, r] of t)\n    n[i] = r;\n  return n;\n}, I = /* @__PURE__ */ R(g, [[\"__scopeId\", \"data-v-08cc04ab\"]]);\nexport {\n  B as O,\n  I as R,\n  C as _\n};\n//# sourceMappingURL=scroller.css_vue_type_style_index_0_src_true_lang--7gJ3zh_.js.map\n","import { defineComponent as ee, ref as c, toRef as te, computed as a, withDirectives as le, openBlock as r, createElementBlock as f, normalizeClass as I, unref as i, renderSlot as u, createCommentVNode as d, createBlock as m, resolveDynamicComponent as h, normalizeStyle as z, withCtx as T, Fragment as ie, renderList as re, mergeProps as F, toHandlers as se, createVNode as oe } from \"vue\";\nimport { u as ae, r as de, g as ne } from \"./useRecycleScroller-CXk06epd.js\";\nimport { _ as ce, R as fe, O as ue } from \"./scroller.css_vue_type_style_index_0_src_true_lang--7gJ3zh_.js\";\nconst Se = /* @__PURE__ */ ee({\n  __name: \"RecycleScroller\",\n  props: {\n    items: {},\n    keyField: { default: \"id\" },\n    direction: { default: \"vertical\" },\n    listTag: { default: \"div\" },\n    itemTag: { default: \"div\" },\n    itemSize: { default: null },\n    gridItems: { default: void 0 },\n    itemSecondarySize: { default: void 0 },\n    minItemSize: { default: null },\n    sizeField: { default: \"size\" },\n    typeField: { default: \"type\" },\n    buffer: { default: 200 },\n    pageMode: { type: Boolean, default: !1 },\n    scrollParent: { default: void 0 },\n    shift: { type: Boolean, default: !1 },\n    cache: { default: void 0 },\n    prerender: { default: 0 },\n    emitUpdate: { type: Boolean, default: !1 },\n    disableTransform: { type: Boolean, default: !1 },\n    flowMode: { type: Boolean, default: !1 },\n    hiddenPosition: { default: void 0 },\n    updateInterval: { default: 0 },\n    skipHover: { type: Boolean, default: !1 },\n    enabled: { type: Boolean, default: !0 },\n    listClass: { default: \"\" },\n    itemClass: { default: \"\" }\n  },\n  emits: [\"resize\", \"visible\", \"hidden\", \"update\", \"scrollStart\", \"scrollEnd\"],\n  setup($, { expose: w, emit: C }) {\n    const e = $, s = C, M = ue, p = c(), b = c(), _ = c(), y = c(null), B = te(e, \"items\"), P = a(() => ({\n      items: B,\n      el: p,\n      before: b,\n      after: _,\n      keyField: e.keyField,\n      direction: e.direction,\n      itemSize: e.itemSize,\n      gridItems: e.gridItems,\n      itemSecondarySize: e.itemSecondarySize,\n      minItemSize: e.minItemSize,\n      sizeField: e.sizeField,\n      typeField: e.typeField,\n      buffer: e.buffer,\n      pageMode: e.pageMode,\n      scrollParent: e.scrollParent,\n      shift: e.shift,\n      cache: e.cache,\n      prerender: e.prerender,\n      emitUpdate: e.emitUpdate,\n      disableTransform: e.disableTransform,\n      flowMode: e.flowMode,\n      hiddenPosition: e.hiddenPosition,\n      updateInterval: e.updateInterval,\n      enabled: e.enabled,\n      onResize: () => s(\"resize\"),\n      onVisible: () => s(\"visible\"),\n      onHidden: () => s(\"hidden\"),\n      onUpdate: (t, o, l, n) => {\n        s(\"update\", t, o, l, n), l <= 0 && s(\"scrollStart\"), n >= e.items.length - 1 && s(\"scrollEnd\");\n      }\n    })), H = ae(\n      P\n    ), {\n      pool: V,\n      visiblePool: R,\n      totalSize: x,\n      startSpacerSize: v,\n      endSpacerSize: S,\n      ready: k,\n      scrollToItem: O,\n      scrollToPosition: N,\n      getScroll: U,\n      findItemIndex: K,\n      getItemOffset: W,\n      getItemSize: D,\n      getViewStyle: E,\n      cacheSnapshot: A,\n      restoreCache: L,\n      updateVisibleItems: j,\n      handleResize: q,\n      handleVisibilityChange: G\n    } = H, g = a(\n      () => de({\n        direction: e.direction,\n        disableTransform: e.disableTransform,\n        flowMode: e.flowMode,\n        gridItems: e.gridItems\n      }) === \"flow\"\n    ), J = a(() => ({\n      height: `${v.value}px`\n    })), Q = a(() => ({\n      height: `${S.value}px`\n    }));\n    function X(t) {\n      y.value = t;\n    }\n    function Y() {\n      y.value = null;\n    }\n    const Z = a(() => {\n      const t = {\n        [e.direction === \"vertical\" ? \"minHeight\" : \"minWidth\"]: `${x.value}px`\n      }, o = ne(e.itemSize);\n      if (e.gridItems && o != null) {\n        const l = (e.itemSecondarySize || o) * e.gridItems;\n        t[e.direction === \"vertical\" ? \"minWidth\" : \"minHeight\"] = `${l}px`;\n      }\n      return t;\n    });\n    return w({\n      el: p,\n      visiblePool: R,\n      startSpacerSize: v,\n      endSpacerSize: S,\n      scrollToItem: O,\n      scrollToPosition: N,\n      getScroll: U,\n      findItemIndex: K,\n      getItemOffset: W,\n      getItemSize: D,\n      cacheSnapshot: A,\n      restoreCache: L,\n      updateVisibleItems: j\n    }), (t, o) => le((r(), f(\"div\", {\n      ref_key: \"el\",\n      ref: p,\n      class: I([\"vue-recycle-scroller\", {\n        \"grid-mode\": e.gridItems,\n        \"flow-mode\": g.value,\n        ready: i(k),\n        \"page-mode\": e.pageMode,\n        [`direction-${e.direction}`]: !0\n      }])\n    }, [\n      t.$slots.before ? (r(), f(\"div\", {\n        key: 0,\n        ref_key: \"before\",\n        ref: b,\n        class: \"vue-recycle-scroller__slot\"\n      }, [\n        u(t.$slots, \"before\")\n      ], 512)) : d(\"\", !0),\n      (r(), m(h(e.listTag), {\n        style: z(Z.value),\n        class: I([\"vue-recycle-scroller__item-wrapper\", e.listClass])\n      }, {\n        default: T(() => [\n          g.value && i(v) > 0 ? (r(), m(h(e.itemTag), {\n            key: 0,\n            \"aria-hidden\": \"true\",\n            class: \"vue-recycle-scroller__item-spacer\",\n            style: z(J.value)\n          }, null, 8, [\"style\"])) : d(\"\", !0),\n          (r(!0), f(ie, null, re(i(V), (l) => (r(), m(ce, F({\n            key: l.nr.id,\n            view: l,\n            \"item-tag\": e.itemTag,\n            style: i(k) ? i(E)(l) : null,\n            class: [\"vue-recycle-scroller__item-view\", [\n              e.itemClass,\n              {\n                hover: !e.skipHover && y.value === l.nr.key\n              }\n            ]]\n          }, se(e.skipHover ? {} : {\n            mouseenter: () => {\n              X(l.nr.key);\n            },\n            mouseleave: () => {\n              Y();\n            }\n          })), {\n            default: T((n) => [\n              u(t.$slots, \"default\", F({ ref_for: !0 }, n))\n            ]),\n            _: 2\n          }, 1040, [\"view\", \"item-tag\", \"style\", \"class\"]))), 128)),\n          g.value && i(S) > 0 ? (r(), m(h(e.itemTag), {\n            key: 1,\n            \"aria-hidden\": \"true\",\n            class: \"vue-recycle-scroller__item-spacer\",\n            style: z(Q.value)\n          }, null, 8, [\"style\"])) : d(\"\", !0),\n          e.items.length === 0 ? u(t.$slots, \"empty\", { key: 2 }) : d(\"\", !0)\n        ]),\n        _: 3\n      }, 8, [\"style\", \"class\"])),\n      t.$slots.after ? (r(), f(\"div\", {\n        key: 1,\n        ref_key: \"after\",\n        ref: _,\n        class: \"vue-recycle-scroller__slot\"\n      }, [\n        u(t.$slots, \"after\")\n      ], 512)) : d(\"\", !0),\n      oe(fe, { onNotify: i(q) }, null, 8, [\"onNotify\"])\n    ], 2)), [\n      [i(M), i(G)]\n    ]);\n  }\n});\nexport {\n  Se as _\n};\n//# sourceMappingURL=RecycleScroller.vue_vue_type_script_setup_true_lang-Dxq64Bue.js.map\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n  var length = array.length,\n      index = fromIndex + (fromRight ? 1 : -1);\n\n  while ((fromRight ? index-- : ++index < length)) {\n    if (predicate(array[index], index, array)) {\n      return index;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = baseFindIndex;\n","var baseFindIndex = require('./_baseFindIndex'),\n    baseIteratee = require('./_baseIteratee'),\n    toInteger = require('./toInteger');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n *   { 'user': 'barney',  'active': false },\n *   { 'user': 'fred',    'active': false },\n *   { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n  var length = array == null ? 0 : array.length;\n  if (!length) {\n    return -1;\n  }\n  var index = fromIndex == null ? 0 : toInteger(fromIndex);\n  if (index < 0) {\n    index = nativeMax(length + index, 0);\n  }\n  return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nmodule.exports = findIndex;\n","var baseIsEqual = require('./_baseIsEqual');\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n  return baseIsEqual(value, other);\n}\n\nmodule.exports = isEqual;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\nmodule.exports = baseAssignValue;\n","var baseAssignValue = require('./_baseAssignValue'),\n    eq = require('./eq');\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 * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nmodule.exports = assignValue;\n","var assignValue = require('./_assignValue'),\n    baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\n\nmodule.exports = copyObject;\n","var copyObject = require('./_copyObject'),\n    keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n  return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var isObject = require('./isObject'),\n    isPrototype = require('./_isPrototype'),\n    nativeKeysIn = require('./_nativeKeysIn');\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 * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeysIn;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeysIn = require('./_baseKeysIn'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","var copyObject = require('./_copyObject'),\n    keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n  return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\nmodule.exports = cloneBuffer;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\nmodule.exports = copyArray;\n","var copyObject = require('./_copyObject'),\n    getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n  return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","var arrayPush = require('./_arrayPush'),\n    getPrototype = require('./_getPrototype'),\n    getSymbols = require('./_getSymbols'),\n    stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n  var result = [];\n  while (object) {\n    arrayPush(result, getSymbols(object));\n    object = getPrototype(object);\n  }\n  return result;\n};\n\nmodule.exports = getSymbolsIn;\n","var copyObject = require('./_copyObject'),\n    getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n  return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n    getSymbolsIn = require('./_getSymbolsIn'),\n    keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n  return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\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 * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n  var length = array.length,\n      result = new array.constructor(length);\n\n  // Add properties assigned by `RegExp#exec`.\n  if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n    result.index = array.index;\n    result.input = array.input;\n  }\n  return result;\n}\n\nmodule.exports = initCloneArray;\n","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n  result.lastIndex = regexp.lastIndex;\n  return result;\n}\n\nmodule.exports = cloneRegExp;\n","var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n    cloneDataView = require('./_cloneDataView'),\n    cloneRegExp = require('./_cloneRegExp'),\n    cloneSymbol = require('./_cloneSymbol'),\n    cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n  var Ctor = object.constructor;\n  switch (tag) {\n    case arrayBufferTag:\n      return cloneArrayBuffer(object);\n\n    case boolTag:\n    case dateTag:\n      return new Ctor(+object);\n\n    case dataViewTag:\n      return cloneDataView(object, isDeep);\n\n    case float32Tag: case float64Tag:\n    case int8Tag: case int16Tag: case int32Tag:\n    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n      return cloneTypedArray(object, isDeep);\n\n    case mapTag:\n      return new Ctor;\n\n    case numberTag:\n    case stringTag:\n      return new Ctor(object);\n\n    case regexpTag:\n      return cloneRegExp(object);\n\n    case setTag:\n      return new Ctor;\n\n    case symbolTag:\n      return cloneSymbol(object);\n  }\n}\n\nmodule.exports = initCloneByTag;\n","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\n\nmodule.exports = baseCreate;\n","var baseCreate = require('./_baseCreate'),\n    getPrototype = require('./_getPrototype'),\n    isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\nmodule.exports = initCloneObject;\n","var getTag = require('./_getTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n  return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n","var baseIsMap = require('./_baseIsMap'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n","var getTag = require('./_getTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n  return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n","var baseIsSet = require('./_baseIsSet'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n","var Stack = require('./_Stack'),\n    arrayEach = require('./_arrayEach'),\n    assignValue = require('./_assignValue'),\n    baseAssign = require('./_baseAssign'),\n    baseAssignIn = require('./_baseAssignIn'),\n    cloneBuffer = require('./_cloneBuffer'),\n    copyArray = require('./_copyArray'),\n    copySymbols = require('./_copySymbols'),\n    copySymbolsIn = require('./_copySymbolsIn'),\n    getAllKeys = require('./_getAllKeys'),\n    getAllKeysIn = require('./_getAllKeysIn'),\n    getTag = require('./_getTag'),\n    initCloneArray = require('./_initCloneArray'),\n    initCloneByTag = require('./_initCloneByTag'),\n    initCloneObject = require('./_initCloneObject'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isMap = require('./isMap'),\n    isObject = require('./isObject'),\n    isSet = require('./isSet'),\n    keys = require('./keys'),\n    keysIn = require('./keysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Deep clone\n *  2 - Flatten inherited properties\n *  4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n  var result,\n      isDeep = bitmask & CLONE_DEEP_FLAG,\n      isFlat = bitmask & CLONE_FLAT_FLAG,\n      isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n  if (customizer) {\n    result = object ? customizer(value, key, object, stack) : customizer(value);\n  }\n  if (result !== undefined) {\n    return result;\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  var isArr = isArray(value);\n  if (isArr) {\n    result = initCloneArray(value);\n    if (!isDeep) {\n      return copyArray(value, result);\n    }\n  } else {\n    var tag = getTag(value),\n        isFunc = tag == funcTag || tag == genTag;\n\n    if (isBuffer(value)) {\n      return cloneBuffer(value, isDeep);\n    }\n    if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n      result = (isFlat || isFunc) ? {} : initCloneObject(value);\n      if (!isDeep) {\n        return isFlat\n          ? copySymbolsIn(value, baseAssignIn(result, value))\n          : copySymbols(value, baseAssign(result, value));\n      }\n    } else {\n      if (!cloneableTags[tag]) {\n        return object ? value : {};\n      }\n      result = initCloneByTag(value, tag, isDeep);\n    }\n  }\n  // Check for circular references and return its corresponding clone.\n  stack || (stack = new Stack);\n  var stacked = stack.get(value);\n  if (stacked) {\n    return stacked;\n  }\n  stack.set(value, result);\n\n  if (isSet(value)) {\n    value.forEach(function(subValue) {\n      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n    });\n  } else if (isMap(value)) {\n    value.forEach(function(subValue, key) {\n      result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n    });\n  }\n\n  var keysFunc = isFull\n    ? (isFlat ? getAllKeysIn : getAllKeys)\n    : (isFlat ? keysIn : keys);\n\n  var props = isArr ? undefined : keysFunc(value);\n  arrayEach(props || value, function(subValue, key) {\n    if (props) {\n      key = subValue;\n      subValue = value[key];\n    }\n    // Recursively populate clone (susceptible to call stack limits).\n    assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n  });\n  return result;\n}\n\nmodule.exports = baseClone;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n  var index = -1,\n      length = array.length;\n\n  if (start < 0) {\n    start = -start > length ? 0 : (length + start);\n  }\n  end = end > length ? length : end;\n  if (end < 0) {\n    end += length;\n  }\n  length = start > end ? 0 : ((end - start) >>> 0);\n  start >>>= 0;\n\n  var result = Array(length);\n  while (++index < length) {\n    result[index] = array[index + start];\n  }\n  return result;\n}\n\nmodule.exports = baseSlice;\n","var baseGet = require('./_baseGet'),\n    baseSlice = require('./_baseSlice');\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n  return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nmodule.exports = parent;\n","var castPath = require('./_castPath'),\n    last = require('./last'),\n    parent = require('./_parent'),\n    toKey = require('./_toKey');\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 * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\nfunction baseUnset(object, path) {\n  path = castPath(path, object);\n\n  // Prevent prototype pollution:\n  // https://github.com/lodash/lodash/security/advisories/GHSA-xxjr-mmjv-4gpg\n  // https://github.com/lodash/lodash/security/advisories/GHSA-f23m-r3pf-42rh\n  var index = -1,\n      length = path.length;\n\n  if (!length) {\n    return true;\n  }\n\n  while (++index < length) {\n    var key = toKey(path[index]);\n\n    // Always block \"__proto__\" anywhere in the path if it's not expected\n    if (key === '__proto__' && !hasOwnProperty.call(object, '__proto__')) {\n      return false;\n    }\n\n    // Block constructor/prototype as non-terminal traversal keys to prevent\n    // escaping the object graph into built-in constructors and prototypes.\n    if ((key === 'constructor' || key === 'prototype') && index < length - 1) {\n      return false;\n    }\n  }\n\n  var obj = parent(object, path);\n  return obj == null || delete obj[toKey(last(path))];\n}\n\nmodule.exports = baseUnset;\n","var baseGetTag = require('./_baseGetTag'),\n    getPrototype = require('./_getPrototype'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n","var isPlainObject = require('./isPlainObject');\n\n/**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\nfunction customOmitClone(value) {\n  return isPlainObject(value) ? undefined : value;\n}\n\nmodule.exports = customOmitClone;\n","var flatten = require('./flatten'),\n    overRest = require('./_overRest'),\n    setToString = require('./_setToString');\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n  return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nmodule.exports = flatRest;\n","var arrayMap = require('./_arrayMap'),\n    baseClone = require('./_baseClone'),\n    baseUnset = require('./_baseUnset'),\n    castPath = require('./_castPath'),\n    copyObject = require('./_copyObject'),\n    customOmitClone = require('./_customOmitClone'),\n    flatRest = require('./_flatRest'),\n    getAllKeysIn = require('./_getAllKeysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\nvar omit = flatRest(function(object, paths) {\n  var result = {};\n  if (object == null) {\n    return result;\n  }\n  var isDeep = false;\n  paths = arrayMap(paths, function(path) {\n    path = castPath(path, object);\n    isDeep || (isDeep = path.length > 1);\n    return path;\n  });\n  copyObject(object, getAllKeysIn(object), result);\n  if (isDeep) {\n    result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n  }\n  var length = paths.length;\n  while (length--) {\n    baseUnset(result, paths[length]);\n  }\n  return result;\n});\n\nmodule.exports = omit;\n","import castArray from 'lodash/castArray'\nimport filter from 'lodash/filter'\nimport findIndex from 'lodash/findIndex'\nimport isEqual from 'lodash/isEqual'\nimport omit from 'lodash/omit'\nimport { computed, toValue, watch } from 'vue'\nimport type { ComputedRef, MaybeRefOrGetter, Ref } from 'vue'\n\ntype Item = any\n\n/**\n * Reactive inputs driving the selectable dropdown state.\n */\nexport interface UseSelectableDropdownOptions {\n  /**\n   * Two-way model of the currently active item(s). Owned by the component\n   * (a `v-model`) and mutated by the selection actions.\n   */\n  activeItems: Ref<Item[]>\n  /**\n   * Two-way model of the canonical selection: a single item, or an array of\n   * items when `multiple` is set.\n   */\n  modelValue: Ref<Item>\n  /**\n   * The items rendered by the list, carrying their scroller ids. Used to\n   * resolve indexes for keyboard navigation and range selection.\n   */\n  items: MaybeRefOrGetter<Item[]>\n  /**\n   * Whether several items can be selected at once.\n   */\n  multiple: MaybeRefOrGetter<boolean>\n  /**\n   * Equality predicate used to compare two items.\n   */\n  eq: MaybeRefOrGetter<(a: Item, b: Item) => boolean>\n}\n\n/**\n * Reactive API returned by {@link useSelectableDropdown}.\n */\nexport interface UseSelectableDropdown {\n  /**\n   * Index of the first active item within the items list, or `-1` when none is\n   * active.\n   */\n  firstActiveItemIndex: ComputedRef<number>\n  /**\n   * Whether the given item is currently active.\n   */\n  itemActivated: (item: Item) => boolean\n  /**\n   * Whether the item at the given items-list index is currently active.\n   * Unlike {@link itemActivated}, resolves each active item to a single\n   * distinct index, so duplicate-valued items aren't all marked active.\n   */\n  itemActivatedAtIndex: (index: number) => boolean\n  /**\n   * Selects a single item, toggling it off when it is the only active one.\n   */\n  selectItem: (item: Item) => void\n  /**\n   * Adds the item to the active set, or removes it when already active.\n   */\n  addItem: (item: Item) => void\n  /**\n   * Extends the active selection as a contiguous range up to the given item.\n   */\n  selectRangeToItem: (item: Item) => void\n  /**\n   * Resets the active set from the canonical model value (or the given value).\n   */\n  activateItemOrItems: (itemOrItems?: Item) => void\n  /**\n   * Moves the active item to the previous one in the list.\n   */\n  activatePreviousItem: () => void\n  /**\n   * Moves the active item to the next one in the list.\n   */\n  activateNextItem: () => void\n  /**\n   * Clears the active set.\n   */\n  clearActiveItems: () => void\n}\n\n/**\n * Owns the selection state machine of the selectable dropdown: which items are\n * active, how single/multiple/range selection mutate that set, keyboard\n * navigation between items, and the two-way synchronization between the active\n * set and the canonical `modelValue`. DOM concerns (keyboard binding, scroller\n * ids) and event emission stay in the component.\n *\n * This composable is internal to the library and not exported from the public\n * entry point; consume it from a relative path.\n *\n * @param options - Reactive dropdown inputs (see {@link UseSelectableDropdownOptions}).\n * @returns The {@link UseSelectableDropdown} selection API.\n * @example\n * import { useSelectableDropdown } from '@/composables/useSelectableDropdown'\n *\n * const { itemActivated, selectItem } = useSelectableDropdown({\n *   activeItems,\n *   modelValue,\n *   items: () => items_.value,\n *   multiple: () => props.multiple,\n *   eq: () => props.eq\n * })\n */\nexport function useSelectableDropdown(\n  options: UseSelectableDropdownOptions\n): UseSelectableDropdown {\n  const { activeItems, modelValue, items, multiple, eq } = options\n\n  const firstActiveItemIndex = computed((): number => {\n    if (!activeItems.value.length) {\n      return -1\n    }\n    const itemsList = toValue(items)\n    const activeItem = activeItems.value[0]\n    if (typeof activeItem === 'string') {\n      return itemsList.indexOf(activeItem)\n    }\n    // activeItems may hold either a raw modelValue object (no recycle_scroller_id)\n    // or an items entry from a click/range-select (which carries it), so strip\n    // the injected key from both sides before comparing.\n    const target = omit(activeItem, 'recycle_scroller_id')\n    return itemsList.findIndex(it =>\n      isEqual(omit(it, 'recycle_scroller_id'), target)\n    )\n  })\n\n  function itemActivated(item: Item): boolean {\n    return findIndex(activeItems.value, i => toValue(eq)(item, i)) > -1\n  }\n\n  // Resolves each active item to a single, distinct items-list index (first\n  // unused match), so a value shared by several list entries only marks the\n  // one actually selected rather than every entry with that value.\n  const activeIndexes = computed((): Set<number> => {\n    const itemsList = toValue(items)\n    const usedIndexes = new Set<number>()\n    for (const activeItem of activeItems.value) {\n      const index = findIndex(itemsList, (it, i) => !usedIndexes.has(i) && toValue(eq)(it, activeItem))\n      if (index > -1) {\n        usedIndexes.add(index)\n      }\n    }\n    return usedIndexes\n  })\n\n  function itemActivatedAtIndex(index: number): boolean {\n    return activeIndexes.value.has(index)\n  }\n\n  function selectItem(item: Item): void {\n    if (itemActivated(item) && activeItems.value.length === 1) {\n      activeItems.value = filter(activeItems.value, i => !toValue(eq)(item, i))\n    }\n    else {\n      activeItems.value = [item]\n    }\n  }\n\n  function addItem(item: Item): void {\n    if (itemActivated(item)) {\n      activeItems.value = filter(activeItems.value, i => !toValue(eq)(item, i))\n    }\n    else {\n      activeItems.value = [...activeItems.value, item]\n    }\n  }\n\n  function selectRangeToItem(item: Item): void {\n    // Without an existing selection (or outside multiple mode) a range select\n    // falls back to a plain single selection.\n    if (!activeItems.value.length || !toValue(multiple)) {\n      selectItem(item)\n      return\n    }\n    const itemsList = toValue(items)\n    const index = itemsList.indexOf(item)\n    if (index > firstActiveItemIndex.value) {\n      activeItems.value = itemsList.slice(firstActiveItemIndex.value, index + 1)\n    }\n    else {\n      activeItems.value = itemsList.slice(index, firstActiveItemIndex.value + 1)\n    }\n  }\n\n  function activateItemOrItems(itemOrItems: Item = modelValue.value): void {\n    activeItems.value = [...castArray(itemOrItems)]\n  }\n\n  function activatePreviousItem(): void {\n    const itemsList = toValue(items)\n    activeItems.value = [itemsList[Math.max(firstActiveItemIndex.value - 1, -1)]]\n  }\n\n  function activateNextItem(): void {\n    const itemsList = toValue(items)\n    activeItems.value = [\n      itemsList[Math.min(firstActiveItemIndex.value + 1, itemsList.length - 1)]\n    ]\n  }\n\n  function clearActiveItems(): void {\n    activeItems.value = []\n  }\n\n  // Mirror the canonical model into the active set when it changes externally.\n  watch(modelValue, (itemOrItems: unknown) => {\n    const items = castArray(itemOrItems)\n    if (!isEqual(activeItems.value, items)) {\n      activateItemOrItems(itemOrItems)\n    }\n  }, { deep: true, immediate: false })\n\n  // Project the active set back into the canonical model.\n  watch(activeItems, (itemOrItems: unknown[]) => {\n    modelValue.value = toValue(multiple) ? itemOrItems : itemOrItems[0]\n  }, { deep: true })\n\n  return {\n    firstActiveItemIndex,\n    itemActivated,\n    itemActivatedAtIndex,\n    selectItem,\n    addItem,\n    selectRangeToItem,\n    activateItemOrItems,\n    activatePreviousItem,\n    activateNextItem,\n    clearActiveItems\n  }\n}\n\nexport default useSelectableDropdown\n","<script setup lang=\"ts\">\nimport equals from 'lodash/eq'\nimport identity from 'lodash/identity'\nimport { RecycleScroller } from 'vue-virtual-scroller'\n\nimport {\n  toRef,\n  computed,\n  watch,\n  onMounted,\n  onUnmounted\n} from 'vue'\n\nimport AppIcon from '@/components/App/AppIcon.vue'\nimport { useSelectableDropdown } from '@/composables/useSelectableDropdown'\nimport IPhCheckSquare from '~icons/ph/check-square'\nimport IPhSquare from '~icons/ph/square'\nimport type { Component } from 'vue'\n\nconst KEY_ESC_CODE = 27\nconst KEY_UP_CODE = 38\nconst KEY_DOWN_CODE = 40\n\ntype Item = any\n\n/**\n * The item marked as active.\n */\nconst activeItems = defineModel<Item[]>('activeItems', {\n  default: () => []\n})\n\n/**\n * The actual selected item.\n */\nconst modelValue = defineModel<Item>({\n  default: null\n})\n\nexport interface FormControlSelectableDropdownProps {\n  /**\n   * The items of the list.\n   */\n  items?: Item[]\n  /**\n   * If true, the dropdown is hidden and deactivated.\n   */\n  hide?: boolean\n  /**\n   * If true, the key events won't be propagated.\n   */\n  propagate?: boolean\n  /**\n   * The user can select values.\n   */\n  multiple?: boolean\n  /**\n   * A function to change the label rendering.\n   */\n  serializer?: (item: Item) => string\n  /**\n   * The class to apply to the list.\n   */\n  listClass?: string\n  /**\n   * The class to apply to each item.\n   */\n  itemClass?: string\n  /**\n   * Set to true to deactivate action when arrow keys are pressed\n   */\n  deactivateKeys?: boolean\n  /**\n   * Comparison function to verify equality between selected items.\n   */\n  eq?: (a: Item, b: Item) => boolean\n  /**\n   * Display height of the items in pixels used to calculate the scroll size and position\n   * Default value is 32 (32px)\n   */\n  itemSize?: number\n  /**\n   * Height of the scroll container to specify especially if using the virtual scroll feature\n   * Default value is 'inherit'\n   */\n  scrollerHeight?: string\n}\n\nconst props = withDefaults(defineProps<FormControlSelectableDropdownProps>(), {\n  items: () => [],\n  hide: false,\n  propagate: false,\n  multiple: false,\n  serializer: identity,\n  listClass: 'dropdown-menu',\n  itemClass: 'dropdown-item',\n  deactivateKeys: false,\n  eq: equals,\n  itemSize: 32,\n  scrollerHeight: 'inherit'\n})\n\nconst emit = defineEmits(['click', 'deactivate'])\n\nonMounted(() => {\n  activateItemOrItems()\n  toggleKeys()\n})\n\nonUnmounted(unbindKeys)\n\nconst cssProps = computed(() => {\n  return {\n    '--scroller-height': props.scrollerHeight\n  }\n})\n\nconst items_ = computed((): Item[] => {\n  if (typeof props.items[0] === 'string') {\n    return props.items\n  }\n  // Use index-based stable IDs to prevent regeneration on recompute\n  return props.items.map((item: Item, index: number) => ({\n    ...item,\n    recycle_scroller_id: `item-${index}`\n  }))\n})\n\nconst keyField = computed(() => {\n  return typeof items_.value[0] === 'string' ? undefined : 'recycle_scroller_id'\n})\n\n// Selection state machine (active set, navigation, range select, model sync)\n// lives in a dedicated composable; the component keeps DOM and emit wiring.\nconst {\n  itemActivatedAtIndex,\n  selectItem,\n  addItem,\n  selectRangeToItem,\n  activateItemOrItems,\n  activatePreviousItem,\n  activateNextItem,\n  clearActiveItems\n} = useSelectableDropdown({\n  activeItems,\n  modelValue,\n  items: () => items_.value,\n  multiple: () => props.multiple,\n  eq: () => props.eq\n})\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nconst keysMap = computed((): Record<string, Function> => {\n  return {\n    [KEY_UP_CODE]: activatePreviousItem,\n    [KEY_DOWN_CODE]: activateNextItem,\n    [KEY_ESC_CODE]: deactivateItems\n  }\n})\n\nwatch(toRef(props, 'hide'), toggleKeys)\n\nfunction indexIcon(index: number): Component {\n  return itemActivatedAtIndex(index) ? IPhCheckSquare : IPhSquare\n}\n\nfunction clickToSelectItem(item: Item) {\n  /**\n   * Fired when user click on an item\n   *\n   * @event click\n   * @type {String, Object, Array, Number}\n   */\n  emit('click', item)\n\n  if (props.multiple) {\n    addItem(item)\n  }\n  else {\n    selectItem(item)\n  }\n}\n\nfunction clickToAddItem(item: Item) {\n  /**\n   * Fired when a user clicks on an item\n   *\n   * @event click\n   * @type {String, Object, Array, Number}\n   */\n  emit('click', item)\n  addItem(item)\n}\n\nfunction clickToSelectRangeToItem(item: Item) {\n  /**\n   * Fired when a user clicks on an item\n   *\n   * @event click\n   * @type {String, Object, Array, Number}\n   */\n  emit('click', item)\n  selectRangeToItem(item)\n}\n\nfunction deactivateItems() {\n  clearActiveItems()\n  /**\n   * Fired when items selection is deactivated\n   *\n   * @event deactivate\n   */\n  emit('deactivate')\n}\n\nfunction keyDown(event: KeyboardEvent) {\n  const keyCode = event.keyCode || event.which\n  // The dropdown must be active\n  if (props.deactivateKeys || props.hide || !isKnownKey(keyCode)) return\n  // Should we stop the event propagation?\n  if (!props.propagate && event.stopPropagation) {\n    event.stopPropagation()\n    event.preventDefault()\n  }\n  // Then call the right method\n  keysMap.value[keyCode]()\n}\n\nfunction isKnownKey(keycode: number) {\n  return Object.keys(keysMap.value).map(Number).indexOf(keycode) > -1\n}\n\nfunction unbindKeys() {\n  window.removeEventListener('keydown', keyDown)\n}\n\nfunction bindKeys() {\n  window.addEventListener('keydown', keyDown)\n}\n\nfunction toggleKeys() {\n  if (props.hide) {\n    unbindKeys()\n  }\n  else {\n    bindKeys()\n  }\n}\n\nfunction itemId(item: Item) {\n  return `dropdown-item-${item.recycle_scroller_id ?? item.toLowerCase()}`\n}\n\nfunction serialize(item: Item) {\n  return props.serializer?.(item)\n}\n</script>\n\n<template>\n  <div\n    v-if=\"!hide\"\n    class=\"selectable-dropdown show\"\n    :class=\"{ 'selectable-dropdown--multiple': multiple, [listClass]: true }\"\n  >\n    <recycle-scroller\n      v-slot=\"{ item, index, active }\"\n      :style=\"cssProps\"\n      class=\"scroller\"\n      role=\"listbox\"\n      :aria-multiselectable=\"multiple\"\n      :items=\"items_\"\n      :key-field=\"keyField\"\n      :item-size=\"itemSize\"\n    >\n      <span\n        :id=\"itemId(item)\"\n        role=\"option\"\n        :aria-selected=\"itemActivatedAtIndex(index)\"\n        :aria-posinset=\"index + 1\"\n        :aria-setsize=\"items_.length\"\n        :class=\"{\n          'recycle_scroller-item--active': active,\n          active: itemActivatedAtIndex(index),\n          [itemClass]: true\n        }\"\n        class=\"selectable-dropdown__item px-3 d-flex\"\n        @click.exact=\"clickToSelectItem(item)\"\n        @click.ctrl=\"clickToAddItem(item)\"\n        @click.shift=\"clickToSelectRangeToItem(item)\"\n      >\n        <!-- @slot Item content -->\n        <slot\n          name=\"item\"\n          :item=\"item\"\n        >\n          <div\n            v-if=\"multiple\"\n            class=\"selectable-dropdown__item__check\"\n          >\n            <app-icon class=\"me-2\">\n              <component :is=\"indexIcon(index)\" />\n            </app-icon>\n          </div>\n          <div\n            class=\"flex-grow-1 text-truncate selectable-dropdown__item__label\"\n          >\n            <!-- @slot Item's label content -->\n            <slot\n              name=\"item-label\"\n              :item=\"item\"\n            >\n              {{ serialize(item) }}\n            </slot>\n          </div>\n        </slot>\n      </span>\n    </recycle-scroller>\n  </div>\n</template>\n\n<style lang=\"scss\">\n@import 'vue-virtual-scroller/dist/vue-virtual-scroller.css';\n\n.selectable-dropdown {\n  --scroller-height: 'inherit';\n  user-select: none;\n\n  &.dropdown-menu {\n    position: relative;\n    top: 0;\n    left: 0;\n    float: none;\n  }\n\n  & .scroller {\n    height: var(--scroller-height);\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport equals from 'lodash/eq'\nimport identity from 'lodash/identity'\nimport { RecycleScroller } from 'vue-virtual-scroller'\n\nimport {\n  toRef,\n  computed,\n  watch,\n  onMounted,\n  onUnmounted\n} from 'vue'\n\nimport AppIcon from '@/components/App/AppIcon.vue'\nimport { useSelectableDropdown } from '@/composables/useSelectableDropdown'\nimport IPhCheckSquare from '~icons/ph/check-square'\nimport IPhSquare from '~icons/ph/square'\nimport type { Component } from 'vue'\n\nconst KEY_ESC_CODE = 27\nconst KEY_UP_CODE = 38\nconst KEY_DOWN_CODE = 40\n\ntype Item = any\n\n/**\n * The item marked as active.\n */\nconst activeItems = defineModel<Item[]>('activeItems', {\n  default: () => []\n})\n\n/**\n * The actual selected item.\n */\nconst modelValue = defineModel<Item>({\n  default: null\n})\n\nexport interface FormControlSelectableDropdownProps {\n  /**\n   * The items of the list.\n   */\n  items?: Item[]\n  /**\n   * If true, the dropdown is hidden and deactivated.\n   */\n  hide?: boolean\n  /**\n   * If true, the key events won't be propagated.\n   */\n  propagate?: boolean\n  /**\n   * The user can select values.\n   */\n  multiple?: boolean\n  /**\n   * A function to change the label rendering.\n   */\n  serializer?: (item: Item) => string\n  /**\n   * The class to apply to the list.\n   */\n  listClass?: string\n  /**\n   * The class to apply to each item.\n   */\n  itemClass?: string\n  /**\n   * Set to true to deactivate action when arrow keys are pressed\n   */\n  deactivateKeys?: boolean\n  /**\n   * Comparison function to verify equality between selected items.\n   */\n  eq?: (a: Item, b: Item) => boolean\n  /**\n   * Display height of the items in pixels used to calculate the scroll size and position\n   * Default value is 32 (32px)\n   */\n  itemSize?: number\n  /**\n   * Height of the scroll container to specify especially if using the virtual scroll feature\n   * Default value is 'inherit'\n   */\n  scrollerHeight?: string\n}\n\nconst props = withDefaults(defineProps<FormControlSelectableDropdownProps>(), {\n  items: () => [],\n  hide: false,\n  propagate: false,\n  multiple: false,\n  serializer: identity,\n  listClass: 'dropdown-menu',\n  itemClass: 'dropdown-item',\n  deactivateKeys: false,\n  eq: equals,\n  itemSize: 32,\n  scrollerHeight: 'inherit'\n})\n\nconst emit = defineEmits(['click', 'deactivate'])\n\nonMounted(() => {\n  activateItemOrItems()\n  toggleKeys()\n})\n\nonUnmounted(unbindKeys)\n\nconst cssProps = computed(() => {\n  return {\n    '--scroller-height': props.scrollerHeight\n  }\n})\n\nconst items_ = computed((): Item[] => {\n  if (typeof props.items[0] === 'string') {\n    return props.items\n  }\n  // Use index-based stable IDs to prevent regeneration on recompute\n  return props.items.map((item: Item, index: number) => ({\n    ...item,\n    recycle_scroller_id: `item-${index}`\n  }))\n})\n\nconst keyField = computed(() => {\n  return typeof items_.value[0] === 'string' ? undefined : 'recycle_scroller_id'\n})\n\n// Selection state machine (active set, navigation, range select, model sync)\n// lives in a dedicated composable; the component keeps DOM and emit wiring.\nconst {\n  itemActivatedAtIndex,\n  selectItem,\n  addItem,\n  selectRangeToItem,\n  activateItemOrItems,\n  activatePreviousItem,\n  activateNextItem,\n  clearActiveItems\n} = useSelectableDropdown({\n  activeItems,\n  modelValue,\n  items: () => items_.value,\n  multiple: () => props.multiple,\n  eq: () => props.eq\n})\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nconst keysMap = computed((): Record<string, Function> => {\n  return {\n    [KEY_UP_CODE]: activatePreviousItem,\n    [KEY_DOWN_CODE]: activateNextItem,\n    [KEY_ESC_CODE]: deactivateItems\n  }\n})\n\nwatch(toRef(props, 'hide'), toggleKeys)\n\nfunction indexIcon(index: number): Component {\n  return itemActivatedAtIndex(index) ? IPhCheckSquare : IPhSquare\n}\n\nfunction clickToSelectItem(item: Item) {\n  /**\n   * Fired when user click on an item\n   *\n   * @event click\n   * @type {String, Object, Array, Number}\n   */\n  emit('click', item)\n\n  if (props.multiple) {\n    addItem(item)\n  }\n  else {\n    selectItem(item)\n  }\n}\n\nfunction clickToAddItem(item: Item) {\n  /**\n   * Fired when a user clicks on an item\n   *\n   * @event click\n   * @type {String, Object, Array, Number}\n   */\n  emit('click', item)\n  addItem(item)\n}\n\nfunction clickToSelectRangeToItem(item: Item) {\n  /**\n   * Fired when a user clicks on an item\n   *\n   * @event click\n   * @type {String, Object, Array, Number}\n   */\n  emit('click', item)\n  selectRangeToItem(item)\n}\n\nfunction deactivateItems() {\n  clearActiveItems()\n  /**\n   * Fired when items selection is deactivated\n   *\n   * @event deactivate\n   */\n  emit('deactivate')\n}\n\nfunction keyDown(event: KeyboardEvent) {\n  const keyCode = event.keyCode || event.which\n  // The dropdown must be active\n  if (props.deactivateKeys || props.hide || !isKnownKey(keyCode)) return\n  // Should we stop the event propagation?\n  if (!props.propagate && event.stopPropagation) {\n    event.stopPropagation()\n    event.preventDefault()\n  }\n  // Then call the right method\n  keysMap.value[keyCode]()\n}\n\nfunction isKnownKey(keycode: number) {\n  return Object.keys(keysMap.value).map(Number).indexOf(keycode) > -1\n}\n\nfunction unbindKeys() {\n  window.removeEventListener('keydown', keyDown)\n}\n\nfunction bindKeys() {\n  window.addEventListener('keydown', keyDown)\n}\n\nfunction toggleKeys() {\n  if (props.hide) {\n    unbindKeys()\n  }\n  else {\n    bindKeys()\n  }\n}\n\nfunction itemId(item: Item) {\n  return `dropdown-item-${item.recycle_scroller_id ?? item.toLowerCase()}`\n}\n\nfunction serialize(item: Item) {\n  return props.serializer?.(item)\n}\n</script>\n\n<template>\n  <div\n    v-if=\"!hide\"\n    class=\"selectable-dropdown show\"\n    :class=\"{ 'selectable-dropdown--multiple': multiple, [listClass]: true }\"\n  >\n    <recycle-scroller\n      v-slot=\"{ item, index, active }\"\n      :style=\"cssProps\"\n      class=\"scroller\"\n      role=\"listbox\"\n      :aria-multiselectable=\"multiple\"\n      :items=\"items_\"\n      :key-field=\"keyField\"\n      :item-size=\"itemSize\"\n    >\n      <span\n        :id=\"itemId(item)\"\n        role=\"option\"\n        :aria-selected=\"itemActivatedAtIndex(index)\"\n        :aria-posinset=\"index + 1\"\n        :aria-setsize=\"items_.length\"\n        :class=\"{\n          'recycle_scroller-item--active': active,\n          active: itemActivatedAtIndex(index),\n          [itemClass]: true\n        }\"\n        class=\"selectable-dropdown__item px-3 d-flex\"\n        @click.exact=\"clickToSelectItem(item)\"\n        @click.ctrl=\"clickToAddItem(item)\"\n        @click.shift=\"clickToSelectRangeToItem(item)\"\n      >\n        <!-- @slot Item content -->\n        <slot\n          name=\"item\"\n          :item=\"item\"\n        >\n          <div\n            v-if=\"multiple\"\n            class=\"selectable-dropdown__item__check\"\n          >\n            <app-icon class=\"me-2\">\n              <component :is=\"indexIcon(index)\" />\n            </app-icon>\n          </div>\n          <div\n            class=\"flex-grow-1 text-truncate selectable-dropdown__item__label\"\n          >\n            <!-- @slot Item's label content -->\n            <slot\n              name=\"item-label\"\n              :item=\"item\"\n            >\n              {{ serialize(item) }}\n            </slot>\n          </div>\n        </slot>\n      </span>\n    </recycle-scroller>\n  </div>\n</template>\n\n<style lang=\"scss\">\n@import 'vue-virtual-scroller/dist/vue-virtual-scroller.css';\n\n.selectable-dropdown {\n  --scroller-height: 'inherit';\n  user-select: none;\n\n  &.dropdown-menu {\n    position: relative;\n    top: 0;\n    left: 0;\n    float: none;\n  }\n\n  & .scroller {\n    height: var(--scroller-height);\n  }\n}\n</style>\n","<template>\n  <footer class=\"app-footer\">\n    <div class=\"container\">\n      <div class=\"row\">\n        <div class=\"col-12 col-lg-5\">\n          <h5\n            class=\"text-uppercase text-white clearfix app-footer__icij mb-3\"\n          >\n            <a\n              href=\"https://icij.org\"\n              target=\"_blank\"\n              class=\"app-footer__icij__logo text-decoration-none\"\n            >\n              <brand-expansion\n                :mode=\"mode\"\n                dark\n                :responsive=\"responsive\"\n              />\n              <span class=\"visually-hidden\">International Consortium of Investigative Journalists</span>\n            </a>\n          </h5>\n          <p>\n            <!-- @slot Override office's address  -->\n            <slot name=\"address\">\n              1800 M Street NW, Front 1 #33019<br>\n              Washington, D.C. 20033 USA\n            </slot>\n          </p>\n          <p>\n            <strong>\n              <a\n                :href=\"contactEmailMailto\"\n                class=\"\"\n              >{{ contactEmail }}</a>\n            </strong>\n          </p>\n          <!-- @slot Additional content on the left side of the footer -->\n          <slot name=\"left\" />\n        </div>\n        <div class=\"col-12 col-lg-7\">\n          <div class=\"row justify-content-end\">\n            <div\n              v-if=\"showAboutUs\"\n              class=\"col-6 col-lg-4\"\n            >\n              <h5 class=\"text-uppercase mb-3\">\n                About Us\n              </h5>\n              <ul class=\"list-unstyled\">\n                <li class=\"list-unstyled-item\">\n                  <a\n                    href=\"https://www.icij.org/about/our-team/\"\n                    target=\"_blank\"\n                  >\n                    Our team\n                  </a>\n                </li>\n                <li class=\"list-unstyled-item\">\n                  <a\n                    href=\"https://www.icij.org/about/our-supporters/\"\n                    target=\"_blank\"\n                  >\n                    Our supporters\n                  </a>\n                </li>\n                <li class=\"list-unstyled-item\">\n                  <a\n                    href=\"https://www.icij.org/about/awards/\"\n                    target=\"_blank\"\n                  >\n                    ICIJ's Awards\n                  </a>\n                </li>\n                <li class=\"list-unstyled-item\">\n                  <a\n                    href=\"https://www.icij.org/about/corporate/\"\n                    target=\"_blank\"\n                  >\n                    Corporate\n                  </a>\n                </li>\n                <li class=\"list-unstyled-item\">\n                  <a\n                    href=\"https://www.icij.org/about/work-with-us/\"\n                    target=\"_blank\"\n                  >\n                    Work with us\n                  </a>\n                </li>\n                <li class=\"list-unstyled-item\">\n                  <a\n                    href=\"https://www.icij.org/journalists/\"\n                    target=\"_blank\"\n                  >\n                    Journalists\n                  </a>\n                </li>\n              </ul>\n            </div>\n            <div class=\"col-12 col-sm-6 col-lg-4\">\n              <h5 class=\"text-uppercase mb-3\">\n                {{ $t('app-footer.investigations') }}\n              </h5>\n\n              <!-- @slot List of investigations -->\n              <slot name=\"investigations\">\n                <ul class=\"list-unstyled\">\n                  <li class=\"list-unstyled-item\">\n                    <a\n                      href=\"https://www.icij.org/investigations/uber-files/\"\n                      target=\"_blank\"\n                    >\n                      The Uber Files\n                    </a>\n                  </li>\n                  <li class=\"list-unstyled-item\">\n                    <a\n                      href=\"https://www.icij.org/investigations/russia-archive/\"\n                      target=\"_blank\"\n                    >\n                      Russia Archive\n                    </a>\n                  </li>\n                  <li class=\"list-unstyled-item\">\n                    <a\n                      href=\"https://www.icij.org/investigations/ericsson-list/\"\n                      target=\"_blank\"\n                    >\n                      The Ericsson List\n                    </a>\n                  </li>\n                  <li class=\"list-unstyled-item\">\n                    <a\n                      href=\"https://www.icij.org/investigations/pandora-papers/\"\n                      target=\"_blank\"\n                    >\n                      Pandora Papers\n                    </a>\n                  </li>\n                  <li class=\"list-unstyled-item\">\n                    <a\n                      href=\"https://www.icij.org/investigations/fincen-files/\"\n                      target=\"_blank\"\n                    >\n                      FinCEN Files\n                    </a>\n                  </li>\n                  <li class=\"list-unstyled-item\">\n                    <a\n                      href=\"https://www.icij.org/investigations/\"\n                      target=\"_blank\"\n                    >\n                      More investigations\n                    </a>\n                  </li>\n                </ul>\n              </slot>\n            </div>\n            <div class=\"col-12 col-sm-6  col-lg-4\">\n              <h5 class=\"text-uppercase mb-3\">\n                {{ $t('app-footer.follow-us') }}\n              </h5>\n              <ul class=\"list-unstyled\">\n                <li class=\"list-unstyled-item\">\n                  <a\n                    href=\"https://www.facebook.com/ICIJ.org\"\n                    target=\"_blank\"\n                  >\n                    Facebook\n                  </a>\n                </li>\n                <li class=\"list-unstyled-item\">\n                  <a\n                    href=\"https://www.linkedin.com/company/1732242/\"\n                    target=\"_blank\"\n                  >\n                    LinkedIn\n                  </a>\n                </li>\n                <li class=\"list-unstyled-item\">\n                  <a\n                    href=\"https://twitter.com/ICIJorg\"\n                    target=\"_blank\"\n                  >\n                    Twitter\n                  </a>\n                </li>\n                <li class=\"list-unstyled-item\">\n                  <a\n                    href=\"https://instagram.com/icijorg\"\n                    target=\"_blank\"\n                  >\n                    Instagram\n                  </a>\n                </li>\n                <li class=\"list-unstyled-item\">\n                  <a\n                    href=\"https://www.icij.org/signup/\"\n                    target=\"_blank\"\n                  >\n                    Sign-up\n                  </a>\n                </li>\n              </ul>\n            </div>\n          </div>\n        </div>\n      </div>\n      <p class=\"text-white text-md-right small mt-5\">\n        <strong>\n          © <span class=\"app-footer__year\">{{ year }}</span> — The\n          International Consortium of Investigative Journalists.\n        </strong>\n        {{ $t('app-footer.all-rights') }}\n        <br>\n        <span\n          v-if=\"version\"\n          class=\"text-muted app-footer__version\"\n        >\n          {{ $t('app-footer.version', { version }) }}\n        </span>\n      </p>\n    </div>\n  </footer>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { breakpointsBootstrapV5, useBreakpoints } from '@vueuse/core'\n\nimport config from '@/config'\nimport BrandExpansion from '@/components/Brand/BrandExpansion.vue'\nimport { BrandMode } from '@/enums'\n\ndefineOptions({\n  name: 'AppFooter'\n})\n\nexport interface AppFooterProps {\n  /**\n   * Version of the app to display in the bottom-right corner of the footer\n   */\n  version?: string | null\n  /**\n   * Whether to show the About Us column or not\n   */\n  showAboutUs?: boolean\n  /**\n   * If true, it resizes the brand as the display downsize.\n   */\n  responsive?: boolean\n  /**\n   * If true, on small screens it uses the short version of the brand.\n   */\n  adaptive?: boolean\n}\n\nconst props = withDefaults(defineProps<AppFooterProps>(), {\n  version: null,\n  showAboutUs: false,\n  responsive: true,\n  adaptive: true\n})\n\nconst breakpoints = useBreakpoints(breakpointsBootstrapV5)\nconst isExtraSmall = breakpoints.smaller('sm')\n\n// In adaptive mode the brand shrinks to its short variant on extra-small screens.\nconst mode = computed((): BrandMode => {\n  if (props.adaptive) {\n    return isExtraSmall.value ? BrandMode.Short : BrandMode.Long\n  }\n  return BrandMode.Long\n})\n\nconst year = computed((): number => {\n  return new Date().getFullYear()\n})\n\nconst contactEmail = computed((): string => {\n  return config.get('contact-email', '')\n})\n\nconst contactEmailMailto = computed((): string => {\n  return `mailto:${contactEmail.value}`\n})\n</script>\n\n<style lang=\"scss\" scoped>\n\n.app-footer {\n  background: $black;\n  color: $white;\n  padding: $spacer * 4 0;\n\n  @include media-breakpoint-down(md) {\n    padding: $spacer;\n  }\n\n  a {\n    color: inherit;\n    border-bottom: 0 !important;\n  }\n\n  h5 {\n    font-family: $font-family-sans-serif;\n    font-size: 1.1rem;\n    color: $gray-600;\n  }\n\n  .list-unstyled .list-unstyled-item {\n    line-height: 1.5em;\n    margin: 5px 0;\n  }\n\n  &__icij {\n    display: flex;\n    justify-content: flex-start;\n    align-items: center;\n\n    @include media-breakpoint-down(xs) {\n      display: block;\n    }\n\n    &__logo {\n      display: block;\n\n      img {\n        height: 54px;\n      }\n\n      @include media-breakpoint-down(xs) {\n        margin-bottom: $spacer;\n      }\n    }\n  }\n}\n</style>\n","<template>\n  <footer class=\"app-footer\">\n    <div class=\"container\">\n      <div class=\"row\">\n        <div class=\"col-12 col-lg-5\">\n          <h5\n            class=\"text-uppercase text-white clearfix app-footer__icij mb-3\"\n          >\n            <a\n              href=\"https://icij.org\"\n              target=\"_blank\"\n              class=\"app-footer__icij__logo text-decoration-none\"\n            >\n              <brand-expansion\n                :mode=\"mode\"\n                dark\n                :responsive=\"responsive\"\n              />\n              <span class=\"visually-hidden\">International Consortium of Investigative Journalists</span>\n            </a>\n          </h5>\n          <p>\n            <!-- @slot Override office's address  -->\n            <slot name=\"address\">\n              1800 M Street NW, Front 1 #33019<br>\n              Washington, D.C. 20033 USA\n            </slot>\n          </p>\n          <p>\n            <strong>\n              <a\n                :href=\"contactEmailMailto\"\n                class=\"\"\n              >{{ contactEmail }}</a>\n            </strong>\n          </p>\n          <!-- @slot Additional content on the left side of the footer -->\n          <slot name=\"left\" />\n        </div>\n        <div class=\"col-12 col-lg-7\">\n          <div class=\"row justify-content-end\">\n            <div\n              v-if=\"showAboutUs\"\n              class=\"col-6 col-lg-4\"\n            >\n              <h5 class=\"text-uppercase mb-3\">\n                About Us\n              </h5>\n              <ul class=\"list-unstyled\">\n                <li class=\"list-unstyled-item\">\n                  <a\n                    href=\"https://www.icij.org/about/our-team/\"\n                    target=\"_blank\"\n                  >\n                    Our team\n                  </a>\n                </li>\n                <li class=\"list-unstyled-item\">\n                  <a\n                    href=\"https://www.icij.org/about/our-supporters/\"\n                    target=\"_blank\"\n                  >\n                    Our supporters\n                  </a>\n                </li>\n                <li class=\"list-unstyled-item\">\n                  <a\n                    href=\"https://www.icij.org/about/awards/\"\n                    target=\"_blank\"\n                  >\n                    ICIJ's Awards\n                  </a>\n                </li>\n                <li class=\"list-unstyled-item\">\n                  <a\n                    href=\"https://www.icij.org/about/corporate/\"\n                    target=\"_blank\"\n                  >\n                    Corporate\n                  </a>\n                </li>\n                <li class=\"list-unstyled-item\">\n                  <a\n                    href=\"https://www.icij.org/about/work-with-us/\"\n                    target=\"_blank\"\n                  >\n                    Work with us\n                  </a>\n                </li>\n                <li class=\"list-unstyled-item\">\n                  <a\n                    href=\"https://www.icij.org/journalists/\"\n                    target=\"_blank\"\n                  >\n                    Journalists\n                  </a>\n                </li>\n              </ul>\n            </div>\n            <div class=\"col-12 col-sm-6 col-lg-4\">\n              <h5 class=\"text-uppercase mb-3\">\n                {{ $t('app-footer.investigations') }}\n              </h5>\n\n              <!-- @slot List of investigations -->\n              <slot name=\"investigations\">\n                <ul class=\"list-unstyled\">\n                  <li class=\"list-unstyled-item\">\n                    <a\n                      href=\"https://www.icij.org/investigations/uber-files/\"\n                      target=\"_blank\"\n                    >\n                      The Uber Files\n                    </a>\n                  </li>\n                  <li class=\"list-unstyled-item\">\n                    <a\n                      href=\"https://www.icij.org/investigations/russia-archive/\"\n                      target=\"_blank\"\n                    >\n                      Russia Archive\n                    </a>\n                  </li>\n                  <li class=\"list-unstyled-item\">\n                    <a\n                      href=\"https://www.icij.org/investigations/ericsson-list/\"\n                      target=\"_blank\"\n                    >\n                      The Ericsson List\n                    </a>\n                  </li>\n                  <li class=\"list-unstyled-item\">\n                    <a\n                      href=\"https://www.icij.org/investigations/pandora-papers/\"\n                      target=\"_blank\"\n                    >\n                      Pandora Papers\n                    </a>\n                  </li>\n                  <li class=\"list-unstyled-item\">\n                    <a\n                      href=\"https://www.icij.org/investigations/fincen-files/\"\n                      target=\"_blank\"\n                    >\n                      FinCEN Files\n                    </a>\n                  </li>\n                  <li class=\"list-unstyled-item\">\n                    <a\n                      href=\"https://www.icij.org/investigations/\"\n                      target=\"_blank\"\n                    >\n                      More investigations\n                    </a>\n                  </li>\n                </ul>\n              </slot>\n            </div>\n            <div class=\"col-12 col-sm-6  col-lg-4\">\n              <h5 class=\"text-uppercase mb-3\">\n                {{ $t('app-footer.follow-us') }}\n              </h5>\n              <ul class=\"list-unstyled\">\n                <li class=\"list-unstyled-item\">\n                  <a\n                    href=\"https://www.facebook.com/ICIJ.org\"\n                    target=\"_blank\"\n                  >\n                    Facebook\n                  </a>\n                </li>\n                <li class=\"list-unstyled-item\">\n                  <a\n                    href=\"https://www.linkedin.com/company/1732242/\"\n                    target=\"_blank\"\n                  >\n                    LinkedIn\n                  </a>\n                </li>\n                <li class=\"list-unstyled-item\">\n                  <a\n                    href=\"https://twitter.com/ICIJorg\"\n                    target=\"_blank\"\n                  >\n                    Twitter\n                  </a>\n                </li>\n                <li class=\"list-unstyled-item\">\n                  <a\n                    href=\"https://instagram.com/icijorg\"\n                    target=\"_blank\"\n                  >\n                    Instagram\n                  </a>\n                </li>\n                <li class=\"list-unstyled-item\">\n                  <a\n                    href=\"https://www.icij.org/signup/\"\n                    target=\"_blank\"\n                  >\n                    Sign-up\n                  </a>\n                </li>\n              </ul>\n            </div>\n          </div>\n        </div>\n      </div>\n      <p class=\"text-white text-md-right small mt-5\">\n        <strong>\n          © <span class=\"app-footer__year\">{{ year }}</span> — The\n          International Consortium of Investigative Journalists.\n        </strong>\n        {{ $t('app-footer.all-rights') }}\n        <br>\n        <span\n          v-if=\"version\"\n          class=\"text-muted app-footer__version\"\n        >\n          {{ $t('app-footer.version', { version }) }}\n        </span>\n      </p>\n    </div>\n  </footer>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { breakpointsBootstrapV5, useBreakpoints } from '@vueuse/core'\n\nimport config from '@/config'\nimport BrandExpansion from '@/components/Brand/BrandExpansion.vue'\nimport { BrandMode } from '@/enums'\n\ndefineOptions({\n  name: 'AppFooter'\n})\n\nexport interface AppFooterProps {\n  /**\n   * Version of the app to display in the bottom-right corner of the footer\n   */\n  version?: string | null\n  /**\n   * Whether to show the About Us column or not\n   */\n  showAboutUs?: boolean\n  /**\n   * If true, it resizes the brand as the display downsize.\n   */\n  responsive?: boolean\n  /**\n   * If true, on small screens it uses the short version of the brand.\n   */\n  adaptive?: boolean\n}\n\nconst props = withDefaults(defineProps<AppFooterProps>(), {\n  version: null,\n  showAboutUs: false,\n  responsive: true,\n  adaptive: true\n})\n\nconst breakpoints = useBreakpoints(breakpointsBootstrapV5)\nconst isExtraSmall = breakpoints.smaller('sm')\n\n// In adaptive mode the brand shrinks to its short variant on extra-small screens.\nconst mode = computed((): BrandMode => {\n  if (props.adaptive) {\n    return isExtraSmall.value ? BrandMode.Short : BrandMode.Long\n  }\n  return BrandMode.Long\n})\n\nconst year = computed((): number => {\n  return new Date().getFullYear()\n})\n\nconst contactEmail = computed((): string => {\n  return config.get('contact-email', '')\n})\n\nconst contactEmailMailto = computed((): string => {\n  return `mailto:${contactEmail.value}`\n})\n</script>\n\n<style lang=\"scss\" scoped>\n\n.app-footer {\n  background: $black;\n  color: $white;\n  padding: $spacer * 4 0;\n\n  @include media-breakpoint-down(md) {\n    padding: $spacer;\n  }\n\n  a {\n    color: inherit;\n    border-bottom: 0 !important;\n  }\n\n  h5 {\n    font-family: $font-family-sans-serif;\n    font-size: 1.1rem;\n    color: $gray-600;\n  }\n\n  .list-unstyled .list-unstyled-item {\n    line-height: 1.5em;\n    margin: 5px 0;\n  }\n\n  &__icij {\n    display: flex;\n    justify-content: flex-start;\n    align-items: center;\n\n    @include media-breakpoint-down(xs) {\n      display: block;\n    }\n\n    &__logo {\n      display: block;\n\n      img {\n        height: 54px;\n      }\n\n      @include media-breakpoint-down(xs) {\n        margin-bottom: $spacer;\n      }\n    }\n  }\n}\n</style>\n","function checkActions(states) {\n  const direction = states.currentScrollY.value >= states.lastScrollY.value ? 'down' : 'up'\n  const distanceScrolled = Math.abs(states.currentScrollY.value - states.lastScrollY.value)\n  const isInit = states.lastScrollY.value === undefined\n\n  let action\n\n  if (\n    states.currentScrollY.value > states.height.value + states.offset.value &&\n    states.state.value === 'unfixed' &&\n    isInit\n  ) {\n    action = 'pin'\n\n    // At the top and not fixed yet.\n  } else if (states.currentScrollY.value <= states.offset.value && states.state.value !== 'unfixed') {\n    action = 'unfix'\n\n    // Unfixed and headed down. Carry on.\n  } else if (\n    states.currentScrollY.value <= states.height.value &&\n    direction === 'down' &&\n    states.state.value === 'unfixed'\n  ) {\n    action = 'none'\n  } else if (\n    states.currentScrollY.value > states.height.value + states.offset.value &&\n    direction === 'down' &&\n    states.state.value === 'unfixed' &&\n    !isInit\n  ) {\n    action = 'unpin-snap'\n\n    // Scrolling down and past the offset.\n    // Unpinned the header.\n  } else if (\n    direction === 'down' &&\n    ['pinned', 'unfixed'].indexOf(states.state.value) >= 0 &&\n    states.currentScrollY.value > states.height.value + states.offset.value &&\n    distanceScrolled > states.downTolerance.value\n  ) {\n    action = 'unpin'\n\n    // Now, it's time to up.\n    // Pin the header.\n  } else if (\n    direction === 'up' &&\n    distanceScrolled > states.upTolerance.value &&\n    ['pinned', 'unfixed'].indexOf(states.state.value) < 0\n  ) {\n    action = 'pin'\n\n    // Still scrolling up, and inside the header.\n    // Pin the header regardless of upTolerance\n  } else if (\n    direction === 'up' &&\n    states.currentScrollY.value <= states.height.value &&\n    ['pinned', 'unfixed'].indexOf(states.state.value) < 0\n  ) {\n    action = 'pin'\n  } else {\n    action = 'none'\n  }\n\n  return action\n}\n\nexport default checkActions\n","// borrowed from modernizr\n// https://github.com/Modernizr/Modernizr/blob/master/feature-detects/css/transforms3d.js\n\nfunction supports3d() {\n  const div = document.createElement('div')\n  let ret = false\n  const properties = ['perspectiveProperty', 'WebkitPerspective']\n\n  for (let i = properties.length - 1; i >= 0; i--) {\n    ret = ret || div.style[properties[i]] !== undefined\n  }\n\n  if (ret) {\n    const st = document.createElement('style')\n\n    st.textContent =\n      '#modernizr{width:0;height:0} @media (transform-3d),(-webkit-transform-3d){#modernizr{width:7px;height:18px;margin:0;padding:0;border:0}}'\n    document.getElementsByTagName('head')[0].appendChild(st)\n    div.id = 'modernizr'\n    document.body.appendChild(div)\n\n    ret = div.offsetWidth === 7 && div.offsetHeight === 18\n\n    st.parentNode.removeChild(st)\n    div.parentNode.removeChild(div)\n  }\n\n  return ret\n}\n\nexport default supports3d\n","<template>\n  <div :style=\"{ height: height + 'px' }\">\n    <div :class=\"cls\" :style=\"style\" ref=\"main\">\n      <slot>test</slot>\n    </div>\n  </div>\n</template>\n\n<script>\nimport checkActions from './checkActions'\nimport support3d from './support3d'\nimport {computed, defineComponent, nextTick, onBeforeUnmount, onMounted, onUpdated, ref, toRef, watch} from \"vue\";\n\nconst defaultCls = {\n  pinned: 'headroom--pinned',\n  unpinned: 'headroom--unpinned',\n  unfixed: 'headroom--unfixed',\n  top: 'headroom--top',\n  notTop: 'headroom--not-top',\n  bottom: 'headroom--bottom',\n  notBottom: 'headroom--not-bottom',\n  initial: 'headroom'\n}\n\nexport default defineComponent({\n  name: 'vueHeadroom',\n  props: {\n    scroller: {\n      type: Function,\n      default: () => window\n    },\n    disabled: {\n      type: Boolean,\n      default: false\n    },\n    upTolerance: {\n      type: Number,\n      default: 5\n    },\n    downTolerance: {\n      type: Number,\n      default: 0\n    },\n    speed: {\n      type: Number,\n      default: 250\n    },\n    easing: {\n      type: String,\n      default: 'ease-in-out'\n    },\n    zIndex: {\n      type: Number,\n      default: 9999\n    },\n    offset: {\n      type: Number,\n      default: 0\n    },\n    classes: {\n      type: Object,\n      default () {\n        return defaultCls\n      }\n    },\n    footroom: {\n      type: Boolean,\n      default: false\n    }\n  },\n\n  setup(props,{emit}){\n    const isTop = ref(false)\n    const isNotTop = ref(false)\n    const isBottom = ref(false)\n    const isNotBottom = ref(false)\n    const isPinned = ref(false)\n    const isUnpinned = ref(false)\n    const currentScrollY = ref(0)\n    const lastScrollY = ref(undefined)\n    const state = ref('unfixed')\n    const translate = ref(0)\n    const height = ref('')\n    const animation = ref(true)\n    const isSupport3d = ref(false)\n    const main = ref(null)\n    onMounted(()=>{\n      isSupport3d.value = support3d()\n      _setHeightOffset()\n\n      if (!props.disabled) {\n        props.scroller().addEventListener('scroll', _handleScroll)\n      }\n\n      // When headroom is mounted, call handleScroll to set initial state.\n      _handleScroll()\n    })\n    onUpdated(()=>{\n      nextTick(function () {\n        _setHeightOffset()\n      })\n    })\n\n    onBeforeUnmount(()=>{\n      props.scroller().removeEventListener('scroll', _handleScroll)\n    })\n\n    const style = computed(()=> {\n      let styles = {\n        'position': props.disabled || state.value === 'unfixed'\n          ? 'relative'\n          : 'fixed',\n        'top': '0',\n        'left': '0',\n        'right': '0',\n        'z-index': props.zIndex\n      }\n\n      if (props.footroom) {\n        styles = { ...styles, 'top': 'unset', 'bottom': '0' }\n      }\n\n      // SSR cannot detect scroll position. To prevent flash when component mounted,\n      // just add transition styles in browser.\n      const isServer = typeof window === 'undefined';\n      if (!isServer) {\n        styles.transform = isSupport3d.value && !isServer\n          ? `translate3d(0, ${translate.value}, 0)`\n          : `translateY(${translate.value})`\n\n        if (animation.value) {\n          styles.transition = `all ${props.speed}ms ${props.easing}`\n        }\n      }\n\n      return styles\n    })\n    const clsOpts = computed(()=> {\n      return {\n        ...defaultCls,\n        ...props.classes\n      }\n    })\n    const cls = computed(()=> {\n        let cls = clsOpts.value\n        return props.disabled\n          ? {}\n          : {\n            [cls.top]: isTop.value,\n            [cls.notTop]: isNotTop.value,\n            [cls.bottom]: isBottom.value,\n            [cls.notBottom]: isNotBottom.value,\n            [cls.pinned]: isPinned.value,\n            [cls.unpinned]: isUnpinned.value,\n            [cls.initial]: true\n          }\n      }\n    )\n    const _getViewportHeight= () => {\n      return window.innerHeight\n      || document.documentElement.clientHeight\n      || document.body.clientHeight\n    }\n\n    const _getElementPhysicalHeight= elm => Math.max(elm.offsetHeight,elm.clientHeight)\n\n    const _getDocumentHeight= () => {\n      const body = document.body\n      const documentElement = document.documentElement\n\n      return Math.max(\n        body.scrollHeight, documentElement.scrollHeight,\n        body.offsetHeight, documentElement.offsetHeight,\n        body.clientHeight, documentElement.clientHeight\n      )\n    }\n\n    const _getElementHeight = elm => Math.max(\n      elm.scrollHeight,\n      elm.offsetHeight,\n      elm.clientHeight\n    )\n\n    function _getScrollerPhysicalHeight () {\n      const parent = props.scroller()\n\n      return (parent === window || parent === document.body)\n        ? _getViewportHeight()\n        : _getElementPhysicalHeight(parent)\n    }\n\n    function _getScrollerHeight () {\n      const parent = props.scroller()\n\n      return (parent === window || parent === document.body)\n        ? _getDocumentHeight()\n        : _getElementHeight(parent)\n    }\n\n    function _isOutOfBound (currentScrollY) {\n      const pastTop = currentScrollY < 0\n\n      const scrollerPhysicalHeight = _getScrollerPhysicalHeight()\n      const scrollerHeight = _getScrollerHeight()\n\n      const pastBottom = currentScrollY + scrollerPhysicalHeight > scrollerHeight\n\n      return pastTop || pastBottom\n    }\n\n    function _handleScroll () {\n      window.requestAnimationFrame(update)\n    }\n\n    function _setHeightOffset () {\n      height.value = main.value?.offsetHeight ??\"\"\n    }\n\n    function _getScrollY () {\n      let top\n      if (props.scroller().pageYOffset !== undefined) {\n        top = props.scroller().pageYOffset\n      } else if (props.scroller().scrollTop !== undefined) {\n        top = props.scroller().scrollTop\n      } else {\n        top = (\n          document.documentElement ||\n          document.body.parentNode ||\n          document.body\n        ).scrollTop\n      }\n      return top\n    }\n\n    function update () {\n      currentScrollY.value = _getScrollY()\n\n      if (_isOutOfBound(currentScrollY.value)) {\n        return\n      }\n\n      if (currentScrollY.value <= props.offset) {\n        top()\n      } else {\n        notTop()\n      }\n\n      if (currentScrollY.value + _getViewportHeight() >= _getScrollerHeight()) {\n        bottom()\n      } else {\n        notBottom()\n      }\n\n      const action = checkActions({\n        currentScrollY,\n        lastScrollY,\n        height,\n        offset:toRef(props.offset),\n        downTolerance:toRef(props.downTolerance),\n        upTolerance:toRef(props.upTolerance),\n        state\n\n      })\n\n      if (action === 'pin') {\n        pin()\n      } else if (action === 'unpin-snap') {\n        unpinSnap()\n      } else if (action === 'unpin') {\n        unpin()\n      } else if (action === 'unfix') {\n        unfix()\n      }\n      lastScrollY.value = currentScrollY.value\n    }\n\n    function top () {\n      isTop.value = true\n      isNotTop.value = false\n      emit('top')\n    }\n\n    function notTop () {\n      isTop.value = false\n      isNotTop.value = true\n      emit('not-top')\n    }\n\n    function bottom () {\n      isBottom.value = true\n      isNotBottom.value = false\n      emit('bottom')\n    }\n\n    function notBottom () {\n      isNotBottom.value = true\n      isBottom.value = false\n      emit('not-bottom')\n    }\n\n    function pin () {\n      isPinned.value = true\n      isUnpinned.value = false\n      animation.value = true\n      emit('pin')\n      translate.value = 0\n      nextTick(() => {\n        state.value = 'pinned'\n      })\n    }\n\n    function unpin () {\n      isUnpinned.value = true\n      isPinned.value = false\n      animation.value = true\n      emit('unpin')\n      translate.value = props.footroom ? '100%' : '-100%'\n      nextTick(() => {\n        state.value = 'unpinned'\n      })\n    }\n\n    function unpinSnap () {\n      isUnpinned.value = true\n      isPinned.value = false\n      animation.value = false\n      emit('unpin')\n      translate.value = props.footroom ? '100%' : '-100%'\n      nextTick(() => {\n        state.value = 'unpinned'\n      })\n    }\n\n    function unfix () {\n      translate.value = 0\n      animation.value = false\n      emit('unfix')\n      nextTick(() => {\n        state.value = 'unfixed'\n      })\n    }\n    watch(()=>props.disabled, (newVal) =>{\n      if (newVal) {\n        props.scroller().removeEventListener('scroll', _handleScroll)\n      } else {\n        props.scroller().addEventListener('scroll', _handleScroll)\n      }\n    })\n\n    return {\n      main,\n      height,\n      cls,\n      style\n    }\n  }\n\n})\n</script>\n","import { ref } from 'vue'\nimport type { Ref } from 'vue'\n\n/**\n * Reactive API returned by {@link useAppHeader}.\n */\nexport interface UseAppHeader {\n  showFollowUsPopover: Ref<boolean>\n  collapseNavbar: Ref<boolean>\n  closeFollowUsPopover: () => void\n  toggleNavbar: () => void\n}\n\n/**\n * Manages the `AppHeader` interactive state: the collapsed/expanded navbar and\n * the \"follow us\" popover visibility. Toggling the navbar always dismisses the\n * popover so the two never overlap on small screens.\n *\n * Internal building block for `AppHeader`; not exported from `@icij/murmur-next`.\n *\n * @returns The {@link UseAppHeader} API: the `showFollowUsPopover` and\n *   `collapseNavbar` flags plus the `closeFollowUsPopover` and `toggleNavbar`\n *   actions.\n * @example\n * import { useAppHeader } from '@/composables/useAppHeader'\n *\n * const { showFollowUsPopover, collapseNavbar, closeFollowUsPopover, toggleNavbar } = useAppHeader()\n */\nexport function useAppHeader(): UseAppHeader {\n  const showFollowUsPopover = ref(false)\n  const collapseNavbar = ref(true)\n\n  function closeFollowUsPopover(): void {\n    showFollowUsPopover.value = false\n  }\n\n  // Opening or closing the navbar also dismisses the popover to avoid overlap.\n  function toggleNavbar(): void {\n    collapseNavbar.value = !collapseNavbar.value\n    closeFollowUsPopover()\n  }\n\n  return { showFollowUsPopover, collapseNavbar, closeFollowUsPopover, toggleNavbar }\n}\n\nexport default useAppHeader\n","<template>\n  <div>\n    <component\n      :is=\"rootElement\"\n      id=\"app-header\"\n      data-turbolinks-permanent\n      class=\"navbar navbar-expand-lg navbar-light app-header\"\n      :offset=\"100\"\n      :z-index=\"1020\"\n      :on-unpin=\"closeFollowUsPopover\"\n      :class=\"{\n        'headroom--frozen': !collapseNavbar,\n        'app-header--collapsed': collapseNavbar\n      }\"\n      :style=\"{ position: position }\"\n    >\n      <!-- @slot Redefines brand -->\n      <slot name=\"brand\">\n        <a\n          :href=\"homeUrl\"\n          class=\"navbar-brand app-header__brand\"\n        >\n          <brand-expansion\n            :size=\"45\"\n            :mode=\"shortMode\"\n            class=\"d-inline-block d-sm-none\"\n          />\n          <brand-expansion\n            :size=\"45\"\n            :mode=\"longMode\"\n            class=\"d-none d-sm-inline-block\"\n          />\n          <span class=\"visually-hidden\">International Consortium of Investigative Journalists</span>\n        </a>\n      </slot>\n      <button\n        class=\"navbar-toggler border-0\"\n        type=\"button\"\n        aria-label=\"Toggle navigation\"\n        @click=\"toggleNavbar\"\n      >\n        <app-icon\n          size=\"2rem\"\n          class=\"text-primary\"\n        >\n          <i-ph-list />\n        </app-icon>\n      </button>\n      <div\n        class=\"navbar-collapse\"\n        :class=\"{ collapse: collapseNavbar }\"\n      >\n        <ul class=\"navbar-nav ms-auto\">\n          <li class=\"nav-item\">\n            <a\n              href=\"https://www.icij.org/investigations/\"\n              target=\"_blank\"\n              class=\"nav-link text-uppercase\"\n            >\n              {{ t('app-header.navbar.investigations') }}\n            </a>\n          </li>\n          <li class=\"nav-item\">\n            <a\n              href=\"https://www.icij.org/leak/\"\n              target=\"_blank\"\n              class=\"nav-link text-uppercase\"\n            >\n              {{ t('app-header.navbar.leak') }}\n            </a>\n          </li>\n          <li class=\"nav-item\">\n            <a\n              id=\"follow-us-toggler\"\n              class=\"nav-link text-uppercase\"\n              @mouseenter=\"showFollowUsPopover = true\"\n            >\n              {{ t('app-header.navbar.follow') }}\n            </a>\n          </li>\n          <li class=\"nav-item me-lg-3\">\n            <slot name=\"donate-link\">\n              <a\n                class=\"text-uppercase btn btn-primary fw-bold\"\n                target=\"_blank\"\n                :href=\"donateUrl\"\n              >\n                {{ t('app-header.navbar.support') }}\n              </a>\n            </slot>\n          </li>\n        </ul>\n        <b-popover\n          v-model=\"showFollowUsPopover\"\n          target=\"follow-us-toggler\"\n          placement=\"bottom-end\"\n          click\n        >\n          <follow-us-popover\n            :compact=\"compactSignUp\"\n            @update:close=\"closeFollowUsPopover\"\n            @keydown.esc=\"closeFollowUsPopover\"\n          />\n        </b-popover>\n      </div>\n    </component>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { useI18n } from 'vue-i18n'\nimport { BPopover } from 'bootstrap-vue-next'\nimport Headroom from 'vue-headroom/src/headroom.vue'\nimport { computed, ref } from 'vue'\nimport type { Component } from 'vue'\n\nimport config from '@/config'\nimport configDefaults from '@/config.default'\nimport BrandExpansion from '@/components/Brand/BrandExpansion.vue'\nimport FollowUsPopover from '@/components/FollowUsPopover/FollowUsPopover.vue'\nimport AppIcon from '@/components/App/AppIcon.vue'\nimport { useAppHeader } from '@/composables/useAppHeader'\nimport { BrandMode } from '@/enums'\n\nexport interface AppHeaderProps {\n  /**\n   * CSS position of the header. Can be 'absolute', 'relative', 'static' or 'fixed' (default).\n   */\n  position?: string\n  /**\n   * Disable Headroom for hiding header until needed.\n   */\n  noHeadroom?: boolean\n  /**\n   * Target link of the ICIJ logo and project name.\n   */\n  homeUrl?: string\n  /**\n   * Target link of the donate button.\n   */\n  donateUrl?: string\n  /**\n   * Compact layout for the sign-up form in the follow-us popover.\n   */\n  compactSignUp?: boolean\n}\n\nconst props = withDefaults(defineProps<AppHeaderProps>(), {\n  position: 'fixed',\n  noHeadroom: false,\n  homeUrl: () => config.get('app.home', configDefaults['app.home']),\n  donateUrl: () => config.get('app.donate-url', configDefaults['app.donate-url']),\n  compactSignUp: false\n})\n\nconst { t } = useI18n()\nconst shortMode = ref(BrandMode.Short)\nconst longMode = ref(BrandMode.Long)\nconst rootElement = computed((): string | Component => props.noHeadroom ? 'div' : Headroom)\n\n// Navbar collapse and popover visibility are managed by useAppHeader.\nconst { showFollowUsPopover, collapseNavbar, closeFollowUsPopover, toggleNavbar } = useAppHeader()\n</script>\n\n<style lang=\"scss\">\n\n.app-header {\n  background: white;\n  position: relative;\n  top: 0;\n  width: 100%;\n  z-index: $zindex-sticky;\n\n  .popover {\n    width: 100%;\n  }\n\n  & .headroom {\n    will-change: transform;\n    transition: transform 200ms linear;\n    @include media-breakpoint-up(lg) {\n      display: flex;\n    }\n    flex-grow: 1;\n\n    &--unpinned {\n      transform: translateY(-100%) !important;\n    }\n\n    &--pinned {\n      transform: translateY(0%);\n    }\n\n    &--frozen {\n      transform: translateY(0%) !important;\n    }\n  }\n\n  &__brand {\n    position: relative;\n    font-weight: bolder;\n    padding: $spacer;\n    font-size: 1rem;\n    display: inline-block;\n  }\n\n  .navbar-toggler {\n    position: absolute;\n    right: $spacer;\n    top: $spacer;\n    margin: 1px 0 0;\n  }\n\n  .nav-item {\n    margin: 0 $spacer * 0.5;\n    font-weight: bold;\n    text-transform: uppercase;\n    color: black;\n\n    .nav-link {\n      color: inherit;\n      cursor: pointer;\n    }\n  }\n}\n</style>\n","<template>\n  <div>\n    <component\n      :is=\"rootElement\"\n      id=\"app-header\"\n      data-turbolinks-permanent\n      class=\"navbar navbar-expand-lg navbar-light app-header\"\n      :offset=\"100\"\n      :z-index=\"1020\"\n      :on-unpin=\"closeFollowUsPopover\"\n      :class=\"{\n        'headroom--frozen': !collapseNavbar,\n        'app-header--collapsed': collapseNavbar\n      }\"\n      :style=\"{ position: position }\"\n    >\n      <!-- @slot Redefines brand -->\n      <slot name=\"brand\">\n        <a\n          :href=\"homeUrl\"\n          class=\"navbar-brand app-header__brand\"\n        >\n          <brand-expansion\n            :size=\"45\"\n            :mode=\"shortMode\"\n            class=\"d-inline-block d-sm-none\"\n          />\n          <brand-expansion\n            :size=\"45\"\n            :mode=\"longMode\"\n            class=\"d-none d-sm-inline-block\"\n          />\n          <span class=\"visually-hidden\">International Consortium of Investigative Journalists</span>\n        </a>\n      </slot>\n      <button\n        class=\"navbar-toggler border-0\"\n        type=\"button\"\n        aria-label=\"Toggle navigation\"\n        @click=\"toggleNavbar\"\n      >\n        <app-icon\n          size=\"2rem\"\n          class=\"text-primary\"\n        >\n          <i-ph-list />\n        </app-icon>\n      </button>\n      <div\n        class=\"navbar-collapse\"\n        :class=\"{ collapse: collapseNavbar }\"\n      >\n        <ul class=\"navbar-nav ms-auto\">\n          <li class=\"nav-item\">\n            <a\n              href=\"https://www.icij.org/investigations/\"\n              target=\"_blank\"\n              class=\"nav-link text-uppercase\"\n            >\n              {{ t('app-header.navbar.investigations') }}\n            </a>\n          </li>\n          <li class=\"nav-item\">\n            <a\n              href=\"https://www.icij.org/leak/\"\n              target=\"_blank\"\n              class=\"nav-link text-uppercase\"\n            >\n              {{ t('app-header.navbar.leak') }}\n            </a>\n          </li>\n          <li class=\"nav-item\">\n            <a\n              id=\"follow-us-toggler\"\n              class=\"nav-link text-uppercase\"\n              @mouseenter=\"showFollowUsPopover = true\"\n            >\n              {{ t('app-header.navbar.follow') }}\n            </a>\n          </li>\n          <li class=\"nav-item me-lg-3\">\n            <slot name=\"donate-link\">\n              <a\n                class=\"text-uppercase btn btn-primary fw-bold\"\n                target=\"_blank\"\n                :href=\"donateUrl\"\n              >\n                {{ t('app-header.navbar.support') }}\n              </a>\n            </slot>\n          </li>\n        </ul>\n        <b-popover\n          v-model=\"showFollowUsPopover\"\n          target=\"follow-us-toggler\"\n          placement=\"bottom-end\"\n          click\n        >\n          <follow-us-popover\n            :compact=\"compactSignUp\"\n            @update:close=\"closeFollowUsPopover\"\n            @keydown.esc=\"closeFollowUsPopover\"\n          />\n        </b-popover>\n      </div>\n    </component>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { useI18n } from 'vue-i18n'\nimport { BPopover } from 'bootstrap-vue-next'\nimport Headroom from 'vue-headroom/src/headroom.vue'\nimport { computed, ref } from 'vue'\nimport type { Component } from 'vue'\n\nimport config from '@/config'\nimport configDefaults from '@/config.default'\nimport BrandExpansion from '@/components/Brand/BrandExpansion.vue'\nimport FollowUsPopover from '@/components/FollowUsPopover/FollowUsPopover.vue'\nimport AppIcon from '@/components/App/AppIcon.vue'\nimport { useAppHeader } from '@/composables/useAppHeader'\nimport { BrandMode } from '@/enums'\n\nexport interface AppHeaderProps {\n  /**\n   * CSS position of the header. Can be 'absolute', 'relative', 'static' or 'fixed' (default).\n   */\n  position?: string\n  /**\n   * Disable Headroom for hiding header until needed.\n   */\n  noHeadroom?: boolean\n  /**\n   * Target link of the ICIJ logo and project name.\n   */\n  homeUrl?: string\n  /**\n   * Target link of the donate button.\n   */\n  donateUrl?: string\n  /**\n   * Compact layout for the sign-up form in the follow-us popover.\n   */\n  compactSignUp?: boolean\n}\n\nconst props = withDefaults(defineProps<AppHeaderProps>(), {\n  position: 'fixed',\n  noHeadroom: false,\n  homeUrl: () => config.get('app.home', configDefaults['app.home']),\n  donateUrl: () => config.get('app.donate-url', configDefaults['app.donate-url']),\n  compactSignUp: false\n})\n\nconst { t } = useI18n()\nconst shortMode = ref(BrandMode.Short)\nconst longMode = ref(BrandMode.Long)\nconst rootElement = computed((): string | Component => props.noHeadroom ? 'div' : Headroom)\n\n// Navbar collapse and popover visibility are managed by useAppHeader.\nconst { showFollowUsPopover, collapseNavbar, closeFollowUsPopover, toggleNavbar } = useAppHeader()\n</script>\n\n<style lang=\"scss\">\n\n.app-header {\n  background: white;\n  position: relative;\n  top: 0;\n  width: 100%;\n  z-index: $zindex-sticky;\n\n  .popover {\n    width: 100%;\n  }\n\n  & .headroom {\n    will-change: transform;\n    transition: transform 200ms linear;\n    @include media-breakpoint-up(lg) {\n      display: flex;\n    }\n    flex-grow: 1;\n\n    &--unpinned {\n      transform: translateY(-100%) !important;\n    }\n\n    &--pinned {\n      transform: translateY(0%);\n    }\n\n    &--frozen {\n      transform: translateY(0%) !important;\n    }\n  }\n\n  &__brand {\n    position: relative;\n    font-weight: bolder;\n    padding: $spacer;\n    font-size: 1rem;\n    display: inline-block;\n  }\n\n  .navbar-toggler {\n    position: absolute;\n    right: $spacer;\n    top: $spacer;\n    margin: 1px 0 0;\n  }\n\n  .nav-item {\n    margin: 0 $spacer * 0.5;\n    font-weight: bold;\n    text-transform: uppercase;\n    color: black;\n\n    .nav-link {\n      color: inherit;\n      cursor: pointer;\n    }\n  }\n}\n</style>\n","import { ref, toRef, onMounted, onUnmounted } from 'vue'\nimport type { MaybeRefOrGetter } from 'vue'\n\nconst THEME_ATTRIBUTE = 'data-bs-theme'\n\n/**\n * Tracks the Bootstrap color mode (`data-bs-theme`) of the closest themed ancestor.\n *\n * @param element - Element to resolve the color mode from; defaults to the document body.\n * @param defaultColorMode - Color mode to fall back on when no themed ancestor exists.\n * @returns An object with a reactive `colorMode` ref that stays in sync with the ancestor's theme.\n * @example\n * <script setup>\n * import { useColorMode } from '@icij/murmur-next'\n *\n * const { colorMode } = useColorMode()\n * </script>\n */\nexport function useColorMode(\n  element: MaybeRefOrGetter<HTMLElement | null | undefined> = window?.document?.body,\n  defaultColorMode = 'light'\n) {\n  const elementRef = toRef(element)\n  const colorMode = ref(defaultColorMode)\n\n  const findClosestThemeElement = () => elementRef.value?.closest(`[${THEME_ATTRIBUTE}]`)\n\n  const updateColorMode = () => {\n    colorMode.value = findClosestThemeElement()?.getAttribute(THEME_ATTRIBUTE) ?? defaultColorMode\n  }\n\n  let observer: MutationObserver | null = null\n\n  onMounted(() => {\n    updateColorMode()\n    observer = new MutationObserver(updateColorMode)\n    const themeElement = findClosestThemeElement()\n    if (themeElement) {\n      observer.observe(themeElement, { attributes: true, attributeFilter: [THEME_ATTRIBUTE] })\n    }\n  })\n\n  onUnmounted(() => observer && observer.disconnect())\n\n  return { colorMode }\n}\n","/**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\nfunction head(array) {\n  return (array && array.length) ? array[0] : undefined;\n}\n\nmodule.exports = head;\n","module.exports = require('./head');\n","import { computed, onScopeDispose, reactive, toRef, watch } from 'vue'\nimport type { MaybeRefOrGetter } from 'vue'\nimport first from 'lodash/first'\nimport get from 'lodash/get'\n\ntype ElementMap = Record<string, HTMLElement[]>\ntype ObserverMap = Record<string, MutationObserver>\n\n/**\n * Reactively tracks DOM elements matching CSS selectors via `MutationObserver`.\n *\n * @param root - Root node whose subtree is observed; defaults to `window.document`.\n * @param once - When `true`, stops observing a selector as soon as it matches at least one element.\n * @returns An object with `querySelector` (first match) and `querySelectorAll` (all matches), both returning reactive computed refs.\n * @example\n * <script setup>\n * import { useQueryObserver } from '@icij/murmur-next'\n *\n * const { querySelector, querySelectorAll } = useQueryObserver()\n * const heading = querySelector('h1')\n * const links = querySelectorAll('a')\n * </script>\n */\nexport function useQueryObserver(root: MaybeRefOrGetter<Document | HTMLElement | null | undefined> = window.document, once = false) {\n  const rootRef = toRef(root)\n  const elements = reactive<ElementMap>({})\n  const observers = reactive<ObserverMap>({})\n\n  const hasElements = (selector: string) => {\n    return get(elements, [selector, 'length'], 0) > 0\n  }\n\n  const hasObserver = (selector: string) => {\n    return selector in observers\n  }\n\n  const updateElements = (selector: string) => {\n    if (rootRef.value) {\n      elements[selector] = Array.from(rootRef.value.querySelectorAll(selector))\n    }\n    return elements[selector] ?? null\n  }\n\n  const observerCallback = (selector: string) => {\n    return () => {\n      updateElements(selector)\n      if (once && hasElements(selector)) {\n        observers[selector].disconnect()\n      }\n    }\n  }\n\n  const observe = (selector: string) => {\n    updateElements(selector)\n    // Create the observer once, even if the rootRef doesn't exist yet\n    if (!hasObserver(selector)) {\n      observers[selector] = new MutationObserver(observerCallback(selector))\n    }\n    // Wait for the root ref to exist and only create the observer once by selector\n    if (rootRef.value && rootRef.value instanceof Node) {\n      observers[selector].disconnect()\n      observers[selector].observe(rootRef.value, { childList: true, subtree: true })\n    }\n    return observers[selector]\n  }\n\n  const querySelector = (selector: string, options = { immediate: true }) => {\n    const elements = querySelectorAll(selector, options)\n    return computed(() => first(elements.value))\n  }\n\n  const querySelectorAll = (selector: string, options = { immediate: true }) => {\n    watch(rootRef, () => observe(selector), options)\n    return computed(() => get(elements, selector, []))\n  }\n\n  onScopeDispose(() => {\n    for (const selector in observers) {\n      observers[selector].disconnect()\n    }\n  })\n\n  return {\n    querySelector,\n    querySelectorAll\n  }\n}\n","import { computed, toValue, type MaybeRefOrGetter, type Ref } from 'vue'\n\nimport { useColorMode } from '@/composables/useColorMode'\nimport { useQueryObserver } from '@/composables/useQueryObserver'\n\nconst SOURCE_SELECTOR = '.image-mode-source'\n\n/**\n * Resolves the image source to display based on the active Bootstrap color mode.\n *\n * Internal building block for the `ImageMode` component. It observes the\n * `.image-mode-source` descendants rendered by `ImageModeSource`, tracks the\n * color mode of the closest themed ancestor, and picks the matching source URL\n * (falling back to the default-mode source, then to the provided `src`).\n *\n * Not exported from `@icij/murmur-next`: it relies on the `.image-mode-source`\n * DOM convention and is only useful inside `ImageMode`.\n *\n * @param element - Element whose color mode and source descendants are observed.\n * @param defaultColorMode - Color mode to resolve the fallback source from.\n * @param fallbackSrc - Source URL used when no matching color-mode source exists.\n * @returns Reactive `colorMode` and the resolved `src` to render.\n * @example\n * <script setup>\n * import { useImageMode } from '@/composables/useImageMode'\n *\n * const element = useTemplateRef('element')\n * const { colorMode, src } = useImageMode(element, 'light', () => props.src)\n * </script>\n */\nexport function useImageMode(\n  element: Ref<HTMLElement | null>,\n  defaultColorMode = 'light',\n  fallbackSrc?: MaybeRefOrGetter<string | undefined>\n) {\n  const { colorMode } = useColorMode(element, defaultColorMode)\n  const { querySelectorAll } = useQueryObserver(element)\n  const sourceElements = querySelectorAll(SOURCE_SELECTOR)\n\n  // Expose each source's `data-*` attributes (color mode + src) instead of the raw nodes.\n  const sources = computed(() => {\n    return sourceElements.value.map((source: HTMLElement) => source.dataset)\n  })\n\n  const sourceForColorMode = computed(() => {\n    return sources.value.find((source: DOMStringMap) => source.colorMode === colorMode.value)\n  })\n\n  // The default source matches the default color mode, or carries no explicit color mode.\n  const defaultSource = computed(() => {\n    return sources.value.find((source: DOMStringMap) => source.colorMode === defaultColorMode || !source.colorMode)\n  })\n\n  const src = computed(() => {\n    return sourceForColorMode.value?.src ?? defaultSource.value?.src ?? toValue(fallbackSrc)\n  })\n\n  return { colorMode, src }\n}\n","<script setup lang=\"ts\">\nimport { computed, useTemplateRef } from 'vue'\n\nimport { useImageMode } from '@/composables/useImageMode'\n\nexport interface ImageModeProps {\n  /**\n   * The default color mode to use when no matching source is found.\n   */\n  defaultColorMode?: string\n  /**\n   * The default image source URL, used as fallback when no matching color mode source exists.\n   */\n  src?: string\n  /**\n   * Alternative text description of the image for accessibility.\n   */\n  alt?: string\n  /**\n   * The intrinsic height of the image in pixels or CSS units.\n   */\n  height?: string | number\n  /**\n   * The intrinsic width of the image in pixels or CSS units.\n   */\n  width?: string | number\n  /**\n   * CSS classes to apply to the inner img element.\n   */\n  imageClass?: string | string[] | Record<string, boolean>\n}\n\nconst props = withDefaults(defineProps<ImageModeProps>(), {\n  defaultColorMode: 'light',\n  src: undefined,\n  alt: undefined,\n  height: undefined,\n  width: undefined,\n  imageClass: undefined\n})\n\nconst element = useTemplateRef<HTMLElement>('element')\n\nconst { colorMode, src } = useImageMode(element, props.defaultColorMode, () => props.src)\n\nconst classList = computed(() => {\n  return [`image-mode--${colorMode.value}`]\n})\n</script>\n\n<template>\n  <picture\n    ref=\"element\"\n    :class=\"classList\"\n  >\n    <slot />\n    <img\n      :src=\"src\"\n      :alt=\"alt\"\n      :height=\"height\"\n      :width=\"width\"\n      :class=\"imageClass\"\n    >\n  </picture>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useTemplateRef } from 'vue'\n\nimport { useImageMode } from '@/composables/useImageMode'\n\nexport interface ImageModeProps {\n  /**\n   * The default color mode to use when no matching source is found.\n   */\n  defaultColorMode?: string\n  /**\n   * The default image source URL, used as fallback when no matching color mode source exists.\n   */\n  src?: string\n  /**\n   * Alternative text description of the image for accessibility.\n   */\n  alt?: string\n  /**\n   * The intrinsic height of the image in pixels or CSS units.\n   */\n  height?: string | number\n  /**\n   * The intrinsic width of the image in pixels or CSS units.\n   */\n  width?: string | number\n  /**\n   * CSS classes to apply to the inner img element.\n   */\n  imageClass?: string | string[] | Record<string, boolean>\n}\n\nconst props = withDefaults(defineProps<ImageModeProps>(), {\n  defaultColorMode: 'light',\n  src: undefined,\n  alt: undefined,\n  height: undefined,\n  width: undefined,\n  imageClass: undefined\n})\n\nconst element = useTemplateRef<HTMLElement>('element')\n\nconst { colorMode, src } = useImageMode(element, props.defaultColorMode, () => props.src)\n\nconst classList = computed(() => {\n  return [`image-mode--${colorMode.value}`]\n})\n</script>\n\n<template>\n  <picture\n    ref=\"element\"\n    :class=\"classList\"\n  >\n    <slot />\n    <img\n      :src=\"src\"\n      :alt=\"alt\"\n      :height=\"height\"\n      :width=\"width\"\n      :class=\"imageClass\"\n    >\n  </picture>\n</template>\n","<script setup lang=\"ts\">\nexport interface ImageModeSourceProps {\n  /**\n   * The image source URL for this color mode variant.\n   */\n  src: string\n  /**\n   * The color mode this source should be displayed for (e.g., 'light' or 'dark').\n   */\n  colorMode?: string\n}\n\nconst props = withDefaults(defineProps<ImageModeSourceProps>(), {\n  colorMode: 'light'\n})\n\ndefineExpose({ ...props })\n</script>\n\n<template>\n  <source\n    class=\"image-mode-source\"\n    :src=\"src\"\n    :data-src=\"src\"\n    :data-color-mode=\"colorMode\"\n  >\n</template>\n","<script setup lang=\"ts\">\nexport interface ImageModeSourceProps {\n  /**\n   * The image source URL for this color mode variant.\n   */\n  src: string\n  /**\n   * The color mode this source should be displayed for (e.g., 'light' or 'dark').\n   */\n  colorMode?: string\n}\n\nconst props = withDefaults(defineProps<ImageModeSourceProps>(), {\n  colorMode: 'light'\n})\n\ndefineExpose({ ...props })\n</script>\n\n<template>\n  <source\n    class=\"image-mode-source\"\n    :src=\"src\"\n    :data-src=\"src\"\n    :data-color-mode=\"colorMode\"\n  >\n</template>\n","/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n  return function(key) {\n    return object == null ? undefined : object[key];\n  };\n}\n\nmodule.exports = basePropertyOf;\n","var basePropertyOf = require('./_basePropertyOf');\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n  // Latin-1 Supplement block.\n  '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n  '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n  '\\xc7': 'C',  '\\xe7': 'c',\n  '\\xd0': 'D',  '\\xf0': 'd',\n  '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n  '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n  '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n  '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n  '\\xd1': 'N',  '\\xf1': 'n',\n  '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n  '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n  '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n  '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n  '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n  '\\xc6': 'Ae', '\\xe6': 'ae',\n  '\\xde': 'Th', '\\xfe': 'th',\n  '\\xdf': 'ss',\n  // Latin Extended-A block.\n  '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n  '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n  '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n  '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n  '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n  '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n  '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n  '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n  '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n  '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n  '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n  '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n  '\\u0134': 'J',  '\\u0135': 'j',\n  '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n  '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n  '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n  '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n  '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n  '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n  '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n  '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n  '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n  '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n  '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n  '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n  '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n  '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n  '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n  '\\u0174': 'W',  '\\u0175': 'w',\n  '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n  '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n  '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n  '\\u0132': 'IJ', '\\u0133': 'ij',\n  '\\u0152': 'Oe', '\\u0153': 'oe',\n  '\\u0149': \"'n\", '\\u017f': 's'\n};\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\nmodule.exports = deburrLetter;\n","var deburrLetter = require('./_deburrLetter'),\n    toString = require('./toString');\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;\n\n/** Used to compose unicode capture groups. */\nvar rsCombo = '[' + rsComboRange + ']';\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n  string = toString(string);\n  return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\nmodule.exports = deburr;\n","/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n  return string.match(reAsciiWord) || [];\n}\n\nmodule.exports = asciiWords;\n","/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n  return reHasUnicodeWord.test(string);\n}\n\nmodule.exports = hasUnicodeWord;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsDingbatRange = '\\\\u2700-\\\\u27bf',\n    rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n    rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n    rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n    rsPunctuationRange = '\\\\u2000-\\\\u206f',\n    rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n    rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n    rsVarRange = '\\\\ufe0e\\\\ufe0f',\n    rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n    rsBreak = '[' + rsBreakRange + ']',\n    rsCombo = '[' + rsComboRange + ']',\n    rsDigits = '\\\\d+',\n    rsDingbat = '[' + rsDingbatRange + ']',\n    rsLower = '[' + rsLowerRange + ']',\n    rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n    rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n    rsNonAstral = '[^' + rsAstralRange + ']',\n    rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n    rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n    rsUpper = '[' + rsUpperRange + ']',\n    rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n    rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n    rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n    rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n    reOptMod = rsModifier + '?',\n    rsOptVar = '[' + rsVarRange + ']?',\n    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n    rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n    rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n    rsSeq = rsOptVar + reOptMod + rsOptJoin,\n    rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq;\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n  rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n  rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n  rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n  rsUpper + '+' + rsOptContrUpper,\n  rsOrdUpper,\n  rsOrdLower,\n  rsDigits,\n  rsEmoji\n].join('|'), 'g');\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n  return string.match(reUnicodeWord) || [];\n}\n\nmodule.exports = unicodeWords;\n","var asciiWords = require('./_asciiWords'),\n    hasUnicodeWord = require('./_hasUnicodeWord'),\n    toString = require('./toString'),\n    unicodeWords = require('./_unicodeWords');\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n  string = toString(string);\n  pattern = guard ? undefined : pattern;\n\n  if (pattern === undefined) {\n    return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n  }\n  return string.match(pattern) || [];\n}\n\nmodule.exports = words;\n","var arrayReduce = require('./_arrayReduce'),\n    deburr = require('./deburr'),\n    words = require('./words');\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\";\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n  return function(string) {\n    return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n  };\n}\n\nmodule.exports = createCompounder;\n","var createCompounder = require('./_createCompounder');\n\n/**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\nvar kebabCase = createCompounder(function(result, word, index) {\n  return result + (index ? '-' : '') + word.toLowerCase();\n});\n\nmodule.exports = kebabCase;\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n  svg: \"http://www.w3.org/2000/svg\",\n  xhtml: xhtml,\n  xlink: \"http://www.w3.org/1999/xlink\",\n  xml: \"http://www.w3.org/XML/1998/namespace\",\n  xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n  var prefix = name += \"\", i = prefix.indexOf(\":\");\n  if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n  return function() {\n    var document = this.ownerDocument,\n        uri = this.namespaceURI;\n    return uri === xhtml && document.documentElement.namespaceURI === xhtml\n        ? document.createElement(name)\n        : document.createElementNS(uri, name);\n  };\n}\n\nfunction creatorFixed(fullname) {\n  return function() {\n    return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n  };\n}\n\nexport default function(name) {\n  var fullname = namespace(name);\n  return (fullname.local\n      ? creatorFixed\n      : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n  return selector == null ? none : function() {\n    return this.querySelector(selector);\n  };\n}\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n  return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","function empty() {\n  return [];\n}\n\nexport default function(selector) {\n  return selector == null ? empty : function() {\n    return this.querySelectorAll(selector);\n  };\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n  return function() {\n    return array(select.apply(this, arguments));\n  };\n}\n\nexport default function(select) {\n  if (typeof select === \"function\") select = arrayAll(select);\n  else select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        subgroups.push(select.call(node, node.__data__, i, group));\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, parents);\n}\n","export default function(selector) {\n  return function() {\n    return this.matches(selector);\n  };\n}\n\nexport function childMatcher(selector) {\n  return function(node) {\n    return node.matches(selector);\n  };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n  return function() {\n    return find.call(this.children, match);\n  };\n}\n\nfunction childFirst() {\n  return this.firstElementChild;\n}\n\nexport default function(match) {\n  return this.select(match == null ? childFirst\n      : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n  return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n  return function() {\n    return filter.call(this.children, match);\n  };\n}\n\nexport default function(match) {\n  return this.selectAll(match == null ? children\n      : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n","export default function(update) {\n  return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n  this.ownerDocument = parent.ownerDocument;\n  this.namespaceURI = parent.namespaceURI;\n  this._next = null;\n  this._parent = parent;\n  this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n  constructor: EnterNode,\n  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n  querySelector: function(selector) { return this._parent.querySelector(selector); },\n  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n  var i = 0,\n      node,\n      groupLength = group.length,\n      dataLength = data.length;\n\n  // Put any non-null nodes that fit into update.\n  // Put any null nodes into enter.\n  // Put any remaining data into enter.\n  for (; i < dataLength; ++i) {\n    if (node = group[i]) {\n      node.__data__ = data[i];\n      update[i] = node;\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Put any non-null nodes that don’t fit into exit.\n  for (; i < groupLength; ++i) {\n    if (node = group[i]) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n  var i,\n      node,\n      nodeByKeyValue = new Map,\n      groupLength = group.length,\n      dataLength = data.length,\n      keyValues = new Array(groupLength),\n      keyValue;\n\n  // Compute the key for each node.\n  // If multiple nodes have the same key, the duplicates are added to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if (node = group[i]) {\n      keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n      if (nodeByKeyValue.has(keyValue)) {\n        exit[i] = node;\n      } else {\n        nodeByKeyValue.set(keyValue, node);\n      }\n    }\n  }\n\n  // Compute the key for each datum.\n  // If there a node associated with this key, join and add it to update.\n  // If there is not (or the key is a duplicate), add it to enter.\n  for (i = 0; i < dataLength; ++i) {\n    keyValue = key.call(parent, data[i], i, data) + \"\";\n    if (node = nodeByKeyValue.get(keyValue)) {\n      update[i] = node;\n      node.__data__ = data[i];\n      nodeByKeyValue.delete(keyValue);\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Add any remaining nodes that were not bound to data to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction datum(node) {\n  return node.__data__;\n}\n\nexport default function(value, key) {\n  if (!arguments.length) return Array.from(this, datum);\n\n  var bind = key ? bindKey : bindIndex,\n      parents = this._parents,\n      groups = this._groups;\n\n  if (typeof value !== \"function\") value = constant(value);\n\n  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n    var parent = parents[j],\n        group = groups[j],\n        groupLength = group.length,\n        data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n        dataLength = data.length,\n        enterGroup = enter[j] = new Array(dataLength),\n        updateGroup = update[j] = new Array(dataLength),\n        exitGroup = exit[j] = new Array(groupLength);\n\n    bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n    // Now connect the enter nodes to their following update node, such that\n    // appendChild can insert the materialized enter node before this node,\n    // rather than at the end of the parent node.\n    for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n      if (previous = enterGroup[i0]) {\n        if (i0 >= i1) i1 = i0 + 1;\n        while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n        previous._next = next || null;\n      }\n    }\n  }\n\n  update = new Selection(update, parents);\n  update._enter = enter;\n  update._exit = exit;\n  return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n  return typeof data === \"object\" && \"length\" in data\n    ? data // Array, TypedArray, NodeList, array-like\n    : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n  var enter = this.enter(), update = this, exit = this.exit();\n  if (typeof onenter === \"function\") {\n    enter = onenter(enter);\n    if (enter) enter = enter.selection();\n  } else {\n    enter = enter.append(onenter + \"\");\n  }\n  if (onupdate != null) {\n    update = onupdate(update);\n    if (update) update = update.selection();\n  }\n  if (onexit == null) exit.remove(); else onexit(exit);\n  return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n  var selection = context.selection ? context.selection() : context;\n\n  for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Selection(merges, this._parents);\n}\n","export default function() {\n\n  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n    for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n      if (node = group[i]) {\n        if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n        next = node;\n      }\n    }\n  }\n\n  return this;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n  if (!compare) compare = ascending;\n\n  function compareNode(a, b) {\n    return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n  }\n\n  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        sortgroup[i] = node;\n      }\n    }\n    sortgroup.sort(compareNode);\n  }\n\n  return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n  var callback = arguments[0];\n  arguments[0] = this;\n  callback.apply(null, arguments);\n  return this;\n}\n","export default function() {\n  return Array.from(this);\n}\n","export default function() {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n      var node = group[i];\n      if (node) return node;\n    }\n  }\n\n  return null;\n}\n","export default function() {\n  let size = 0;\n  for (const node of this) ++size; // eslint-disable-line no-unused-vars\n  return size;\n}\n","export default function() {\n  return !this.node();\n}\n","export default function(callback) {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) callback.call(node, node.__data__, i, group);\n    }\n  }\n\n  return this;\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, value) {\n  return function() {\n    this.setAttribute(name, value);\n  };\n}\n\nfunction attrConstantNS(fullname, value) {\n  return function() {\n    this.setAttributeNS(fullname.space, fullname.local, value);\n  };\n}\n\nfunction attrFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttribute(name);\n    else this.setAttribute(name, v);\n  };\n}\n\nfunction attrFunctionNS(fullname, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n    else this.setAttributeNS(fullname.space, fullname.local, v);\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name);\n\n  if (arguments.length < 2) {\n    var node = this.node();\n    return fullname.local\n        ? node.getAttributeNS(fullname.space, fullname.local)\n        : node.getAttribute(fullname);\n  }\n\n  return this.each((value == null\n      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)\n      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n      || (node.document && node) // node is a Window\n      || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, value, priority) {\n  return function() {\n    this.style.setProperty(name, value, priority);\n  };\n}\n\nfunction styleFunction(name, value, priority) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.style.removeProperty(name);\n    else this.style.setProperty(name, v, priority);\n  };\n}\n\nexport default function(name, value, priority) {\n  return arguments.length > 1\n      ? this.each((value == null\n            ? styleRemove : typeof value === \"function\"\n            ? styleFunction\n            : styleConstant)(name, value, priority == null ? \"\" : priority))\n      : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n  return node.style.getPropertyValue(name)\n      || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n  return function() {\n    delete this[name];\n  };\n}\n\nfunction propertyConstant(name, value) {\n  return function() {\n    this[name] = value;\n  };\n}\n\nfunction propertyFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) delete this[name];\n    else this[name] = v;\n  };\n}\n\nexport default function(name, value) {\n  return arguments.length > 1\n      ? this.each((value == null\n          ? propertyRemove : typeof value === \"function\"\n          ? propertyFunction\n          : propertyConstant)(name, value))\n      : this.node()[name];\n}\n","function classArray(string) {\n  return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n  return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n  this._node = node;\n  this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n  add: function(name) {\n    var i = this._names.indexOf(name);\n    if (i < 0) {\n      this._names.push(name);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  remove: function(name) {\n    var i = this._names.indexOf(name);\n    if (i >= 0) {\n      this._names.splice(i, 1);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  contains: function(name) {\n    return this._names.indexOf(name) >= 0;\n  }\n};\n\nfunction classedAdd(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n  return function() {\n    classedAdd(this, names);\n  };\n}\n\nfunction classedFalse(names) {\n  return function() {\n    classedRemove(this, names);\n  };\n}\n\nfunction classedFunction(names, value) {\n  return function() {\n    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n  };\n}\n\nexport default function(name, value) {\n  var names = classArray(name + \"\");\n\n  if (arguments.length < 2) {\n    var list = classList(this.node()), i = -1, n = names.length;\n    while (++i < n) if (!list.contains(names[i])) return false;\n    return true;\n  }\n\n  return this.each((typeof value === \"function\"\n      ? classedFunction : value\n      ? classedTrue\n      : classedFalse)(names, value));\n}\n","function textRemove() {\n  this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.textContent = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? textRemove : (typeof value === \"function\"\n          ? textFunction\n          : textConstant)(value))\n      : this.node().textContent;\n}\n","function htmlRemove() {\n  this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n  return function() {\n    this.innerHTML = value;\n  };\n}\n\nfunction htmlFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.innerHTML = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? htmlRemove : (typeof value === \"function\"\n          ? htmlFunction\n          : htmlConstant)(value))\n      : this.node().innerHTML;\n}\n","function raise() {\n  if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n  return this.each(raise);\n}\n","function lower() {\n  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n  return this.each(lower);\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n  var create = typeof name === \"function\" ? name : creator(name);\n  return this.select(function() {\n    return this.appendChild(create.apply(this, arguments));\n  });\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n  return null;\n}\n\nexport default function(name, before) {\n  var create = typeof name === \"function\" ? name : creator(name),\n      select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n  return this.select(function() {\n    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n  });\n}\n","function remove() {\n  var parent = this.parentNode;\n  if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n  return this.each(remove);\n}\n","function selection_cloneShallow() {\n  var clone = this.cloneNode(false), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n  var clone = this.cloneNode(true), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n  return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","export default function(value) {\n  return arguments.length\n      ? this.property(\"__data__\", value)\n      : this.node().__data__;\n}\n","function contextListener(listener) {\n  return function(event) {\n    listener.call(this, event, this.__data__);\n  };\n}\n\nfunction parseTypenames(typenames) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    return {type: t, name: name};\n  });\n}\n\nfunction onRemove(typename) {\n  return function() {\n    var on = this.__on;\n    if (!on) return;\n    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n      } else {\n        on[++i] = o;\n      }\n    }\n    if (++i) on.length = i;\n    else delete this.__on;\n  };\n}\n\nfunction onAdd(typename, value, options) {\n  return function() {\n    var on = this.__on, o, listener = contextListener(value);\n    if (on) for (var j = 0, m = on.length; j < m; ++j) {\n      if ((o = on[j]).type === typename.type && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n        this.addEventListener(o.type, o.listener = listener, o.options = options);\n        o.value = value;\n        return;\n      }\n    }\n    this.addEventListener(typename.type, listener, options);\n    o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n    if (!on) this.__on = [o];\n    else on.push(o);\n  };\n}\n\nexport default function(typename, value, options) {\n  var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n  if (arguments.length < 2) {\n    var on = this.node().__on;\n    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n      for (i = 0, o = on[j]; i < n; ++i) {\n        if ((t = typenames[i]).type === o.type && t.name === o.name) {\n          return o.value;\n        }\n      }\n    }\n    return;\n  }\n\n  on = value ? onAdd : onRemove;\n  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n  return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n  var window = defaultView(node),\n      event = window.CustomEvent;\n\n  if (typeof event === \"function\") {\n    event = new event(type, params);\n  } else {\n    event = window.document.createEvent(\"Event\");\n    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n    else event.initEvent(type, false, false);\n  }\n\n  node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params);\n  };\n}\n\nfunction dispatchFunction(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params.apply(this, arguments));\n  };\n}\n\nexport default function(type, params) {\n  return this.each((typeof params === \"function\"\n      ? dispatchFunction\n      : dispatchConstant)(type, params));\n}\n","export default function*() {\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) yield node;\n    }\n  }\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n  this._groups = groups;\n  this._parents = parents;\n}\n\nfunction selection() {\n  return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n  return this;\n}\n\nSelection.prototype = selection.prototype = {\n  constructor: Selection,\n  select: selection_select,\n  selectAll: selection_selectAll,\n  selectChild: selection_selectChild,\n  selectChildren: selection_selectChildren,\n  filter: selection_filter,\n  data: selection_data,\n  enter: selection_enter,\n  exit: selection_exit,\n  join: selection_join,\n  merge: selection_merge,\n  selection: selection_selection,\n  order: selection_order,\n  sort: selection_sort,\n  call: selection_call,\n  nodes: selection_nodes,\n  node: selection_node,\n  size: selection_size,\n  empty: selection_empty,\n  each: selection_each,\n  attr: selection_attr,\n  style: selection_style,\n  property: selection_property,\n  classed: selection_classed,\n  text: selection_text,\n  html: selection_html,\n  raise: selection_raise,\n  lower: selection_lower,\n  append: selection_append,\n  insert: selection_insert,\n  remove: selection_remove,\n  clone: selection_clone,\n  datum: selection_datum,\n  on: selection_on,\n  dispatch: selection_dispatch,\n  [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n      : new Selection([[selector]], root);\n}\n","import creator from \"./creator.js\";\nimport select from \"./select.js\";\n\nexport default function(name) {\n  return select(creator(name).call(document.documentElement));\n}\n","export default function(event) {\n  let sourceEvent;\n  while (sourceEvent = event.sourceEvent) event = sourceEvent;\n  return event;\n}\n","import sourceEvent from \"./sourceEvent.js\";\n\nexport default function(event, node) {\n  event = sourceEvent(event);\n  if (node === undefined) node = event.currentTarget;\n  if (node) {\n    var svg = node.ownerSVGElement || node;\n    if (svg.createSVGPoint) {\n      var point = svg.createSVGPoint();\n      point.x = event.clientX, point.y = event.clientY;\n      point = point.matrixTransform(node.getScreenCTM().inverse());\n      return [point.x, point.y];\n    }\n    if (node.getBoundingClientRect) {\n      var rect = node.getBoundingClientRect();\n      return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n    }\n  }\n  return [event.pageX, event.pageY];\n}\n","import isFunction from 'lodash/isFunction'\nimport { select } from 'd3-selection'\nimport { computed, toValue } from 'vue'\nimport type { ComputedRef, MaybeRefOrGetter } from 'vue'\n\n/**\n * A single legend entry. Mirrors the `Datum` shape consumed by the\n * `LegendOrdinal` component.\n */\nexport interface LegendMarkerDatum {\n  id?: string | number\n  color: string\n  path?: string\n  label: string\n}\n\n/**\n * Resolves the SVG path for a marker, either a constant path string or a\n * per-datum path function.\n */\nexport type MarkerPath = string | ((d: LegendMarkerDatum) => string)\n\n/**\n * Reactive API returned by {@link useLegendMarker}.\n */\nexport interface UseLegendMarker {\n  /**\n   * SVG `viewBox` string sized to the default marker path, measured by\n   * rendering it once off-screen.\n   */\n  markerViewbox: ComputedRef<string>\n  /**\n   * Resolves the marker path for a given datum. When `markerPath` is a\n   * function it is only applied if a datum is provided; otherwise the constant\n   * path string is returned.\n   *\n   * @param d - The datum to resolve the path for, when `markerPath` is a function.\n   * @returns The SVG path data string.\n   */\n  markerPathFunction: (d?: LegendMarkerDatum) => string\n}\n\n/**\n * Owns the marker geometry derivation of the `LegendOrdinal` component: it\n * resolves the per-datum SVG path and measures the default marker to build the\n * shared `viewBox`. The measurement renders an off-screen SVG to read the\n * marker bounding box, so it depends on a DOM being available.\n *\n * @param markerPath - The marker path, as a constant string or a per-datum\n *   function (see {@link MarkerPath}), accepted as a plain value, ref or getter.\n * @returns The {@link UseLegendMarker} API: the shared `markerViewbox` and the\n *   `markerPathFunction` resolver.\n * @example\n * // Internal building block of the `LegendOrdinal` component; not exported\n * // from the package root. Inside a `<script setup>` block:\n * import { toRef } from 'vue'\n * import { useLegendMarker } from '@/composables/useLegendMarker'\n *\n * const props = defineProps<{ markerPath?: string }>()\n * const { markerViewbox, markerPathFunction } = useLegendMarker(\n *   toRef(() => props.markerPath)\n * )\n */\nexport function useLegendMarker(\n  markerPath: MaybeRefOrGetter<MarkerPath>\n): UseLegendMarker {\n  function markerPathFunction(d?: LegendMarkerDatum): string {\n    const path = toValue(markerPath)\n    return isFunction(path) && d ? path(d) : (path as string)\n  }\n\n  // Measure the default marker by rendering it once in a detached SVG, then\n  // remove it; the resulting box drives the shared `viewBox` for every marker.\n  const markerBoundingClientRect = computed((): DOMRect | undefined => {\n    const svg = select('body')\n      .append('svg')\n      .attr('width', 2046)\n      .attr('height', 2046)\n    const marker = svg.append('path').attr('d', markerPathFunction())\n    const rect: DOMRect | undefined = marker.node()?.getBoundingClientRect()\n    svg.remove()\n    return rect\n  })\n\n  const markerViewbox = computed((): string => {\n    const { width, height } = markerBoundingClientRect.value ?? {\n      width: 0,\n      height: 0\n    }\n    return `0 0 ${width} ${height}`\n  })\n\n  return { markerViewbox, markerPathFunction }\n}\n\nexport default useLegendMarker\n","<script setup lang=\"ts\">\nimport get from 'lodash/get'\nimport kebabCase from 'lodash/kebabCase'\nimport { computed, toRef } from 'vue'\n\nimport { useLegendMarker } from '@/composables/useLegendMarker'\nimport { LegendCategory } from '@/enums'\n\ndefineOptions({\n  name: 'OrdinalLegend'\n})\n\nexport interface Datum { id?: string | number, color: string, path?: string, label: string }\n\nexport interface LegendOrdinalProps {\n  data?: Datum[]\n  horizontal?: boolean\n  markerPath?: string | ((d: Datum) => string)\n  categoryObjectsPath?: LegendCategory\n  highlight?: string | number | null\n  value?: string | number | null\n}\n\nconst props = withDefaults(defineProps<LegendOrdinalProps>(), {\n  data: () => [],\n  horizontal: false,\n  markerPath: 'M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256z',\n  categoryObjectsPath: LegendCategory.id,\n  highlight: null,\n  value: null\n})\n\nconst emit = defineEmits<{\n  'update': [value: string | number | null]\n  'update:highlight': [value: string | number | null]\n}>()\n\nconst { markerViewbox, markerPathFunction } = useLegendMarker(\n  toRef(() => props.markerPath)\n)\n\nconst classList = computed(() => {\n  return {\n    'ordinal-legend--horizontal': props.horizontal,\n    'ordinal-legend--has-highlight': props.highlight !== null,\n    'ordinal-legend--has-value': props.value !== null\n  }\n})\n\nfunction itemClassList(d: Datum) {\n  const id = d[props.categoryObjectsPath as LegendCategory] as string | number | undefined\n  return {\n    [`ordinal-legend__item--identifier-${kebabCase(d.label)}`]: true,\n    'ordinal-legend__item--highlighted': id === props.highlight,\n    'ordinal-legend__item--selected': id === props.value\n  }\n}\n\nfunction update(d: Datum) {\n  /**\n   * Fired when user clicks on an item\n   * @event update\n   * @param Mixed Value of the category identifier\n   */\n  emit('update', get(d, props.categoryObjectsPath, null))\n}\n\nfunction updateHighlight(d: Datum | Record<string, never> = {}) {\n  /**\n   * Fired when user hover an item\n   * @event update:highlight\n   * @param Mixed Value of the category identifier\n   */\n  emit('update:highlight', get(d, props.categoryObjectsPath, null))\n}\n</script>\n\n<template>\n  <ul\n    class=\"ordinal-legend list-unstyled\"\n    :class=\"classList\"\n  >\n    <li\n      v-for=\"d in data\"\n      :key=\"d[categoryObjectsPath]\"\n      class=\"ordinal-legend__item\"\n      :class=\"itemClassList(d)\"\n    >\n      <a\n        @click=\"update(d)\"\n        @mouseover=\"updateHighlight(d)\"\n        @mouseleave=\"updateHighlight()\"\n      >\n        <span class=\"ordinal-legend__item__marker me-1\">\n          <slot\n            name=\"marker\"\n            :marker=\"{ path: d.path, color: d.color }\"\n          >\n            <svg :viewBox=\"markerViewbox\">\n              <path\n                :d=\"markerPathFunction(d)\"\n                :fill=\"d.color\"\n                class=\"ordinal-legend__item__marker__path\"\n              />\n            </svg>\n          </slot>\n        </span>\n        <span class=\"ordinal-legend__item__label\">\n          <slot\n            name=\"label\"\n            v-bind=\"d\"\n          >\n            {{ d.label }}\n          </slot>\n        </span>\n      </a>\n    </li>\n  </ul>\n</template>\n\n<style lang=\"scss\" scoped>\n\n.ordinal-legend {\n  $muted-item-opacity: 0.2;\n  $muted-item-filter: grayscale(30%) brightness(10%);\n  $muted-item-transition:\n    opacity 0.2s,\n    filter 0.2s;\n\n  font-size: $font-size-sm;\n\n  &--horizontal &__item {\n    display: inline-block;\n\n    &:not(:last-child) {\n      margin-right: $spacer;\n    }\n  }\n\n  &__item {\n    transition: $muted-item-transition;\n\n    .ordinal-legend--has-highlight &:not(&--highlighted) {\n      opacity: $muted-item-opacity;\n      filter: $muted-item-filter;\n    }\n\n    &--selected {\n      font-weight: bold;\n    }\n\n    a {\n      color: inherit;\n    }\n\n    &__marker svg {\n      height: 1em;\n      width: 1em;\n    }\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport get from 'lodash/get'\nimport kebabCase from 'lodash/kebabCase'\nimport { computed, toRef } from 'vue'\n\nimport { useLegendMarker } from '@/composables/useLegendMarker'\nimport { LegendCategory } from '@/enums'\n\ndefineOptions({\n  name: 'OrdinalLegend'\n})\n\nexport interface Datum { id?: string | number, color: string, path?: string, label: string }\n\nexport interface LegendOrdinalProps {\n  data?: Datum[]\n  horizontal?: boolean\n  markerPath?: string | ((d: Datum) => string)\n  categoryObjectsPath?: LegendCategory\n  highlight?: string | number | null\n  value?: string | number | null\n}\n\nconst props = withDefaults(defineProps<LegendOrdinalProps>(), {\n  data: () => [],\n  horizontal: false,\n  markerPath: 'M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256z',\n  categoryObjectsPath: LegendCategory.id,\n  highlight: null,\n  value: null\n})\n\nconst emit = defineEmits<{\n  'update': [value: string | number | null]\n  'update:highlight': [value: string | number | null]\n}>()\n\nconst { markerViewbox, markerPathFunction } = useLegendMarker(\n  toRef(() => props.markerPath)\n)\n\nconst classList = computed(() => {\n  return {\n    'ordinal-legend--horizontal': props.horizontal,\n    'ordinal-legend--has-highlight': props.highlight !== null,\n    'ordinal-legend--has-value': props.value !== null\n  }\n})\n\nfunction itemClassList(d: Datum) {\n  const id = d[props.categoryObjectsPath as LegendCategory] as string | number | undefined\n  return {\n    [`ordinal-legend__item--identifier-${kebabCase(d.label)}`]: true,\n    'ordinal-legend__item--highlighted': id === props.highlight,\n    'ordinal-legend__item--selected': id === props.value\n  }\n}\n\nfunction update(d: Datum) {\n  /**\n   * Fired when user clicks on an item\n   * @event update\n   * @param Mixed Value of the category identifier\n   */\n  emit('update', get(d, props.categoryObjectsPath, null))\n}\n\nfunction updateHighlight(d: Datum | Record<string, never> = {}) {\n  /**\n   * Fired when user hover an item\n   * @event update:highlight\n   * @param Mixed Value of the category identifier\n   */\n  emit('update:highlight', get(d, props.categoryObjectsPath, null))\n}\n</script>\n\n<template>\n  <ul\n    class=\"ordinal-legend list-unstyled\"\n    :class=\"classList\"\n  >\n    <li\n      v-for=\"d in data\"\n      :key=\"d[categoryObjectsPath]\"\n      class=\"ordinal-legend__item\"\n      :class=\"itemClassList(d)\"\n    >\n      <a\n        @click=\"update(d)\"\n        @mouseover=\"updateHighlight(d)\"\n        @mouseleave=\"updateHighlight()\"\n      >\n        <span class=\"ordinal-legend__item__marker me-1\">\n          <slot\n            name=\"marker\"\n            :marker=\"{ path: d.path, color: d.color }\"\n          >\n            <svg :viewBox=\"markerViewbox\">\n              <path\n                :d=\"markerPathFunction(d)\"\n                :fill=\"d.color\"\n                class=\"ordinal-legend__item__marker__path\"\n              />\n            </svg>\n          </slot>\n        </span>\n        <span class=\"ordinal-legend__item__label\">\n          <slot\n            name=\"label\"\n            v-bind=\"d\"\n          >\n            {{ d.label }}\n          </slot>\n        </span>\n      </a>\n    </li>\n  </ul>\n</template>\n\n<style lang=\"scss\" scoped>\n\n.ordinal-legend {\n  $muted-item-opacity: 0.2;\n  $muted-item-filter: grayscale(30%) brightness(10%);\n  $muted-item-transition:\n    opacity 0.2s,\n    filter 0.2s;\n\n  font-size: $font-size-sm;\n\n  &--horizontal &__item {\n    display: inline-block;\n\n    &:not(:last-child) {\n      margin-right: $spacer;\n    }\n  }\n\n  &__item {\n    transition: $muted-item-transition;\n\n    .ordinal-legend--has-highlight &:not(&--highlighted) {\n      opacity: $muted-item-opacity;\n      filter: $muted-item-filter;\n    }\n\n    &--selected {\n      font-weight: bold;\n    }\n\n    a {\n      color: inherit;\n    }\n\n    &__marker svg {\n      height: 1em;\n      width: 1em;\n    }\n  }\n}\n</style>\n","export default function(x) {\n  return Math.abs(x = Math.round(x)) >= 1e21\n      ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n      : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n  if (!isFinite(x) || x === 0) return null; // NaN, ±Infinity, ±0\n  var i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\"), coefficient = x.slice(0, i);\n\n  // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n  // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n  return [\n    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n    +x.slice(i + 1)\n  ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n  return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(grouping, thousands) {\n  return function(value, width) {\n    var i = value.length,\n        t = [],\n        j = 0,\n        g = grouping[0],\n        length = 0;\n\n    while (i > 0 && g > 0) {\n      if (length + g + 1 > width) g = Math.max(1, width - length);\n      t.push(value.substring(i -= g, i + g));\n      if ((length += g + 1) > width) break;\n      g = grouping[j = (j + 1) % grouping.length];\n    }\n\n    return t.reverse().join(thousands);\n  };\n}\n","export default function(numerals) {\n  return function(value) {\n    return value.replace(/[0-9]/g, function(i) {\n      return numerals[+i];\n    });\n  };\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n  if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n  var match;\n  return new FormatSpecifier({\n    fill: match[1],\n    align: match[2],\n    sign: match[3],\n    symbol: match[4],\n    zero: match[5],\n    width: match[6],\n    comma: match[7],\n    precision: match[8] && match[8].slice(1),\n    trim: match[9],\n    type: match[10]\n  });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n  this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n  this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n  this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n  this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n  this.zero = !!specifier.zero;\n  this.width = specifier.width === undefined ? undefined : +specifier.width;\n  this.comma = !!specifier.comma;\n  this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n  this.trim = !!specifier.trim;\n  this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n  return this.fill\n      + this.align\n      + this.sign\n      + this.symbol\n      + (this.zero ? \"0\" : \"\")\n      + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n      + (this.comma ? \",\" : \"\")\n      + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n      + (this.trim ? \"~\" : \"\")\n      + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n    switch (s[i]) {\n      case \".\": i0 = i1 = i; break;\n      case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n      default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n    }\n  }\n  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return prefixExponent = undefined, x.toPrecision(p);\n  var coefficient = d[0],\n      exponent = d[1],\n      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n      n = coefficient.length;\n  return i === n ? coefficient\n      : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n      : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n      : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1];\n  return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n      : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n  \"%\": (x, p) => (x * 100).toFixed(p),\n  \"b\": (x) => Math.round(x).toString(2),\n  \"c\": (x) => x + \"\",\n  \"d\": formatDecimal,\n  \"e\": (x, p) => x.toExponential(p),\n  \"f\": (x, p) => x.toFixed(p),\n  \"g\": (x, p) => x.toPrecision(p),\n  \"o\": (x) => Math.round(x).toString(8),\n  \"p\": (x, p) => formatRounded(x * 100, p),\n  \"r\": formatRounded,\n  \"s\": formatPrefixAuto,\n  \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n  \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n  return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n    prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n  var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n      currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n      currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n      decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n      numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n      percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n      minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n      nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n  function newFormat(specifier, options) {\n    specifier = formatSpecifier(specifier);\n\n    var fill = specifier.fill,\n        align = specifier.align,\n        sign = specifier.sign,\n        symbol = specifier.symbol,\n        zero = specifier.zero,\n        width = specifier.width,\n        comma = specifier.comma,\n        precision = specifier.precision,\n        trim = specifier.trim,\n        type = specifier.type;\n\n    // The \"n\" type is an alias for \",g\".\n    if (type === \"n\") comma = true, type = \"g\";\n\n    // The \"\" type, and any invalid type, is an alias for \".12~g\".\n    else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n    // If zero fill is specified, padding goes after sign and before digits.\n    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n    // Compute the prefix and suffix.\n    // For SI-prefix, the suffix is lazily computed.\n    var prefix = (options && options.prefix !== undefined ? options.prefix : \"\") + (symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\"),\n        suffix = (symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\") + (options && options.suffix !== undefined ? options.suffix : \"\");\n\n    // What format function should we use?\n    // Is this an integer type?\n    // Can this type generate exponential notation?\n    var formatType = formatTypes[type],\n        maybeSuffix = /[defgprs%]/.test(type);\n\n    // Set the default precision if not specified,\n    // or clamp the specified precision to the supported range.\n    // For significant precision, it must be in [1, 21].\n    // For fixed precision, it must be in [0, 20].\n    precision = precision === undefined ? 6\n        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n        : Math.max(0, Math.min(20, precision));\n\n    function format(value) {\n      var valuePrefix = prefix,\n          valueSuffix = suffix,\n          i, n, c;\n\n      if (type === \"c\") {\n        valueSuffix = formatType(value) + valueSuffix;\n        value = \"\";\n      } else {\n        value = +value;\n\n        // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n        var valueNegative = value < 0 || 1 / value < 0;\n\n        // Perform the initial formatting.\n        value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n        // Trim insignificant zeros.\n        if (trim) value = formatTrim(value);\n\n        // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n        if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n        // Compute the prefix and suffix.\n        valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n        valueSuffix = (type === \"s\" && !isNaN(value) && prefixExponent !== undefined ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n        // Break the formatted value into the integer “value” part that can be\n        // grouped, and fractional or exponential “suffix” part that is not.\n        if (maybeSuffix) {\n          i = -1, n = value.length;\n          while (++i < n) {\n            if (c = value.charCodeAt(i), 48 > c || c > 57) {\n              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n              value = value.slice(0, i);\n              break;\n            }\n          }\n        }\n      }\n\n      // If the fill character is not \"0\", grouping is applied before padding.\n      if (comma && !zero) value = group(value, Infinity);\n\n      // Compute the padding.\n      var length = valuePrefix.length + value.length + valueSuffix.length,\n          padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n      // If the fill character is \"0\", grouping is applied after padding.\n      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n      // Reconstruct the final output based on the desired alignment.\n      switch (align) {\n        case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n        case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n        case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n        default: value = padding + valuePrefix + value + valueSuffix; break;\n      }\n\n      return numerals(value);\n    }\n\n    format.toString = function() {\n      return specifier + \"\";\n    };\n\n    return format;\n  }\n\n  function formatPrefix(specifier, value) {\n    var e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n        k = Math.pow(10, -e),\n        f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier), {suffix: prefixes[8 + e / 3]});\n    return function(value) {\n      return f(k * value);\n    };\n  }\n\n  return {\n    format: newFormat,\n    formatPrefix: formatPrefix\n  };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n  thousands: \",\",\n  grouping: [3],\n  currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  format = locale.format;\n  formatPrefix = locale.formatPrefix;\n  return locale;\n}\n","export default function ascending(a, b) {\n  return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function descending(a, b) {\n  return a == null || b == null ? NaN\n    : b < a ? -1\n    : b > a ? 1\n    : b >= a ? 0\n    : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n  let compare1, compare2, delta;\n\n  // If an accessor is specified, promote it to a comparator. In this case we\n  // can test whether the search value is (self-) comparable. We can’t do this\n  // for a comparator (except for specific, known comparators) because we can’t\n  // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n  // used to test whether a single value is comparable.\n  if (f.length !== 2) {\n    compare1 = ascending;\n    compare2 = (d, x) => ascending(f(d), x);\n    delta = (d, x) => f(d) - x;\n  } else {\n    compare1 = f === ascending || f === descending ? f : zero;\n    compare2 = f;\n    delta = f;\n  }\n\n  function left(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) < 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function right(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) <= 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function center(a, x, lo = 0, hi = a.length) {\n    const i = left(a, x, lo, hi - 1);\n    return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n  }\n\n  return {left, center, right};\n}\n\nfunction zero() {\n  return 0;\n}\n","export default function number(x) {\n  return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  }\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","export default function extent(values, valueof) {\n  let min;\n  let max;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null) {\n        if (min === undefined) {\n          if (value >= value) min = max = value;\n        } else {\n          if (min > value) min = value;\n          if (max < value) max = value;\n        }\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null) {\n        if (min === undefined) {\n          if (value >= value) min = max = value;\n        } else {\n          if (min > value) min = value;\n          if (max < value) max = value;\n        }\n      }\n    }\n  }\n  return [min, max];\n}\n","// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\nexport class Adder {\n  constructor() {\n    this._partials = new Float64Array(32);\n    this._n = 0;\n  }\n  add(x) {\n    const p = this._partials;\n    let i = 0;\n    for (let j = 0; j < this._n && j < 32; j++) {\n      const y = p[j],\n        hi = x + y,\n        lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\n      if (lo) p[i++] = lo;\n      x = hi;\n    }\n    p[i] = x;\n    this._n = i + 1;\n    return this;\n  }\n  valueOf() {\n    const p = this._partials;\n    let n = this._n, x, y, lo, hi = 0;\n    if (n > 0) {\n      hi = p[--n];\n      while (n > 0) {\n        x = hi;\n        y = p[--n];\n        hi = x + y;\n        lo = y - (hi - x);\n        if (lo) break;\n      }\n      if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) {\n        y = lo * 2;\n        x = hi + y;\n        if (y == x - hi) hi = x;\n      }\n    }\n    return hi;\n  }\n}\n\nexport function fsum(values, valueof) {\n  const adder = new Adder();\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value = +value) {\n        adder.add(value);\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if (value = +valueof(value, ++index, values)) {\n        adder.add(value);\n      }\n    }\n  }\n  return +adder;\n}\n\nexport function fcumsum(values, valueof) {\n  const adder = new Adder();\n  let index = -1;\n  return Float64Array.from(values, valueof === undefined\n      ? v => adder.add(+v || 0)\n      : v => adder.add(+valueof(v, ++index, values) || 0)\n  );\n}\n","export class InternMap extends Map {\n  constructor(entries, key = keyof) {\n    super();\n    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n    if (entries != null) for (const [key, value] of entries) this.set(key, value);\n  }\n  get(key) {\n    return super.get(intern_get(this, key));\n  }\n  has(key) {\n    return super.has(intern_get(this, key));\n  }\n  set(key, value) {\n    return super.set(intern_set(this, key), value);\n  }\n  delete(key) {\n    return super.delete(intern_delete(this, key));\n  }\n}\n\nexport class InternSet extends Set {\n  constructor(values, key = keyof) {\n    super();\n    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n    if (values != null) for (const value of values) this.add(value);\n  }\n  has(value) {\n    return super.has(intern_get(this, value));\n  }\n  add(value) {\n    return super.add(intern_set(this, value));\n  }\n  delete(value) {\n    return super.delete(intern_delete(this, value));\n  }\n}\n\nfunction intern_get({_intern, _key}, value) {\n  const key = _key(value);\n  return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n  const key = _key(value);\n  if (_intern.has(key)) return _intern.get(key);\n  _intern.set(key, value);\n  return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n  const key = _key(value);\n  if (_intern.has(key)) {\n    value = _intern.get(key);\n    _intern.delete(key);\n  }\n  return value;\n}\n\nfunction keyof(value) {\n  return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n","const e10 = Math.sqrt(50),\n    e5 = Math.sqrt(10),\n    e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n  const step = (stop - start) / Math.max(0, count),\n      power = Math.floor(Math.log10(step)),\n      error = step / Math.pow(10, power),\n      factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n  let i1, i2, inc;\n  if (power < 0) {\n    inc = Math.pow(10, -power) / factor;\n    i1 = Math.round(start * inc);\n    i2 = Math.round(stop * inc);\n    if (i1 / inc < start) ++i1;\n    if (i2 / inc > stop) --i2;\n    inc = -inc;\n  } else {\n    inc = Math.pow(10, power) * factor;\n    i1 = Math.round(start / inc);\n    i2 = Math.round(stop / inc);\n    if (i1 * inc < start) ++i1;\n    if (i2 * inc > stop) --i2;\n  }\n  if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n  return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  if (!(count > 0)) return [];\n  if (start === stop) return [start];\n  const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n  if (!(i2 >= i1)) return [];\n  const n = i2 - i1 + 1, ticks = new Array(n);\n  if (reverse) {\n    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n    else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n  } else {\n    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n    else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n  }\n  return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n  return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","export default function max(values, valueof) {\n  let max;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  }\n  return max;\n}\n","function* flatten(arrays) {\n  for (const array of arrays) {\n    yield* array;\n  }\n}\n\nexport default function merge(arrays) {\n  return Array.from(flatten(arrays));\n}\n","export default function range(start, stop, step) {\n  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n  var i = -1,\n      n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n      range = new Array(n);\n\n  while (++i < n) {\n    range[i] = start + i * step;\n  }\n\n  return range;\n}\n","export default function sum(values, valueof) {\n  let sum = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value = +value) {\n        sum += value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if (value = +valueof(value, ++index, values)) {\n        sum += value;\n      }\n    }\n  }\n  return sum;\n}\n","export default function(constructor, factory, prototype) {\n  constructor.prototype = factory.prototype = prototype;\n  prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n  var prototype = Object.create(parent.prototype);\n  for (var key in definition) prototype[key] = definition[key];\n  return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n    reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n    reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n    reHex = /^#([0-9a-f]{3,8})$/,\n    reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n    reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n    reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n    reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n    reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n    reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n  aliceblue: 0xf0f8ff,\n  antiquewhite: 0xfaebd7,\n  aqua: 0x00ffff,\n  aquamarine: 0x7fffd4,\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000,\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff,\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000,\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff,\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00,\n  yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n  copy(channels) {\n    return Object.assign(new this.constructor, this, channels);\n  },\n  displayable() {\n    return this.rgb().displayable();\n  },\n  hex: color_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: color_formatHex,\n  formatHex8: color_formatHex8,\n  formatHsl: color_formatHsl,\n  formatRgb: color_formatRgb,\n  toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n  return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n  return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n  return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n  return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n  var m, l;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n      : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n      : null) // invalid hex\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n      : null;\n}\n\nfunction rgbn(n) {\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n  if (a <= 0) r = g = b = NaN;\n  return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Rgb;\n  o = o.rgb();\n  return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n  this.r = +r;\n  this.g = +g;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  rgb() {\n    return this;\n  },\n  clamp() {\n    return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n  },\n  displayable() {\n    return (-0.5 <= this.r && this.r < 255.5)\n        && (-0.5 <= this.g && this.g < 255.5)\n        && (-0.5 <= this.b && this.b < 255.5)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: rgb_formatHex,\n  formatHex8: rgb_formatHex8,\n  formatRgb: rgb_formatRgb,\n  toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n  const a = clampa(this.opacity);\n  return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n  return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n  return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n  value = clampi(value);\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n  if (a <= 0) h = s = l = NaN;\n  else if (l <= 0 || l >= 1) h = s = NaN;\n  else if (s <= 0) h = NaN;\n  return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Hsl;\n  if (o instanceof Hsl) return o;\n  o = o.rgb();\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      h = NaN,\n      s = max - min,\n      l = (max + min) / 2;\n  if (s) {\n    if (r === max) h = (g - b) / s + (g < b) * 6;\n    else if (g === max) h = (b - r) / s + 2;\n    else h = (r - g) / s + 4;\n    s /= l < 0.5 ? max + min : 2 - max - min;\n    h *= 60;\n  } else {\n    s = l > 0 && l < 1 ? 0 : h;\n  }\n  return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb() {\n    var h = this.h % 360 + (this.h < 0) * 360,\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n        l = this.l,\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\n        m1 = 2 * l - m2;\n    return new Rgb(\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n      hsl2rgb(h, m1, m2),\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n      this.opacity\n    );\n  },\n  clamp() {\n    return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n  },\n  displayable() {\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n        && (0 <= this.l && this.l <= 1)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  formatHsl() {\n    const a = clampa(this.opacity);\n    return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n  }\n}));\n\nfunction clamph(value) {\n  value = (value || 0) % 360;\n  return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n  return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\n      : h < 180 ? m2\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n      : m1) * 255;\n}\n","export function basis(t1, v0, v1, v2, v3) {\n  var t2 = t1 * t1, t3 = t2 * t1;\n  return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n      + (4 - 6 * t2 + 3 * t3) * v1\n      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n      + t3 * v3) / 6;\n}\n\nexport default function(values) {\n  var n = values.length - 1;\n  return function(t) {\n    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n        v1 = values[i],\n        v2 = values[i + 1],\n        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n  var n = values.length;\n  return function(t) {\n    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n        v0 = values[(i + n - 1) % n],\n        v1 = values[i % n],\n        v2 = values[(i + 1) % n],\n        v3 = values[(i + 2) % n];\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nexport function hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n  };\n}\n\nexport default function nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n  var color = gamma(y);\n\n  function rgb(start, end) {\n    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n        g = color(start.g, end.g),\n        b = color(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb.gamma = rgbGamma;\n\n  return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color;\n    for (i = 0; i < n; ++i) {\n      color = colorRgb(colors[i]);\n      r[i] = color.r || 0;\n      g[i] = color.g || 0;\n      b[i] = color.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color.opacity = 1;\n    return function(t) {\n      color.r = r(t);\n      color.g = g(t);\n      color.b = b(t);\n      return color + \"\";\n    };\n  };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n  if (!b) b = [];\n  var n = a ? Math.min(b.length, a.length) : 0,\n      c = b.slice(),\n      i;\n  return function(t) {\n    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n    return c;\n  };\n}\n\nexport function isNumberArray(x) {\n  return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n  var nb = b ? b.length : 0,\n      na = a ? Math.min(nb, a.length) : 0,\n      x = new Array(na),\n      c = new Array(nb),\n      i;\n\n  for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n  for (; i < nb; ++i) c[i] = b[i];\n\n  return function(t) {\n    for (i = 0; i < na; ++i) c[i] = x[i](t);\n    return c;\n  };\n}\n","export default function(a, b) {\n  var d = new Date;\n  return a = +a, b = +b, function(t) {\n    return d.setTime(a * (1 - t) + b * t), d;\n  };\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return a * (1 - t) + b * t;\n  };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n  var i = {},\n      c = {},\n      k;\n\n  if (a === null || typeof a !== \"object\") a = {};\n  if (b === null || typeof b !== \"object\") b = {};\n\n  for (k in b) {\n    if (k in a) {\n      i[k] = value(a[k], b[k]);\n    } else {\n      c[k] = b[k];\n    }\n  }\n\n  return function(t) {\n    for (k in i) c[k] = i[k](t);\n    return c;\n  };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nexport default function(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: number(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  var t = typeof b, c;\n  return b == null || t === \"boolean\" ? constant(b)\n      : (t === \"number\" ? number\n      : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n      : b instanceof color ? rgb\n      : b instanceof Date ? date\n      : isNumberArray(b) ? numberArray\n      : Array.isArray(b) ? genericArray\n      : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n      : number)(a, b);\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return Math.round(a * (1 - t) + b * t);\n  };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n  translateX: 0,\n  translateY: 0,\n  rotate: 0,\n  skewX: 0,\n  scaleX: 1,\n  scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n  var scaleX, scaleY, skewX;\n  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n  return {\n    translateX: e,\n    translateY: f,\n    rotate: Math.atan2(b, a) * degrees,\n    skewX: Math.atan(skewX) * degrees,\n    scaleX: scaleX,\n    scaleY: scaleY\n  };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n  const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n  return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n  if (value == null) return identity;\n  if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n  svgNode.setAttribute(\"transform\", value);\n  if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n  value = value.matrix;\n  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n  function pop(s) {\n    return s.length ? s.pop() + \" \" : \"\";\n  }\n\n  function translate(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb || yb) {\n      s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n    }\n  }\n\n  function rotate(a, b, s, q) {\n    if (a !== b) {\n      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n      q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"rotate(\" + b + degParen);\n    }\n  }\n\n  function skewX(a, b, s, q) {\n    if (a !== b) {\n      q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"skewX(\" + b + degParen);\n    }\n  }\n\n  function scale(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb !== 1 || yb !== 1) {\n      s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n    }\n  }\n\n  return function(a, b) {\n    var s = [], // string constants and placeholders\n        q = []; // number interpolators\n    a = parse(a), b = parse(b);\n    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n    rotate(a.rotate, b.rotate, s, q);\n    skewX(a.skewX, b.skewX, s, q);\n    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n    a = b = null; // gc\n    return function(t) {\n      var i = -1, n = q.length, o;\n      while (++i < n) s[(o = q[i]).i] = o.x(t);\n      return s.join(\"\");\n    };\n  };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n  return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n  return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n  return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n  // p0 = [ux0, uy0, w0]\n  // p1 = [ux1, uy1, w1]\n  function zoom(p0, p1) {\n    var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n        ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n        dx = ux1 - ux0,\n        dy = uy1 - uy0,\n        d2 = dx * dx + dy * dy,\n        i,\n        S;\n\n    // Special case for u0 ≅ u1.\n    if (d2 < epsilon2) {\n      S = Math.log(w1 / w0) / rho;\n      i = function(t) {\n        return [\n          ux0 + t * dx,\n          uy0 + t * dy,\n          w0 * Math.exp(rho * t * S)\n        ];\n      }\n    }\n\n    // General case.\n    else {\n      var d1 = Math.sqrt(d2),\n          b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n          b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n          r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n          r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n      S = (r1 - r0) / rho;\n      i = function(t) {\n        var s = t * S,\n            coshr0 = cosh(r0),\n            u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n        return [\n          ux0 + u * dx,\n          uy0 + u * dy,\n          w0 * coshr0 / cosh(rho * s + r0)\n        ];\n      }\n    }\n\n    i.duration = S * 1000 * rho / Math.SQRT2;\n\n    return i;\n  }\n\n  zoom.rho = function(_) {\n    var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n    return zoomRho(_1, _2, _4);\n  };\n\n  return zoom;\n})(Math.SQRT2, 2, 4);\n","export function initRange(domain, range) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.range(domain); break;\n    default: this.range(range).domain(domain); break;\n  }\n  return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: {\n      if (typeof domain === \"function\") this.interpolator(domain);\n      else this.range(domain);\n      break;\n    }\n    default: {\n      this.domain(domain);\n      if (typeof interpolator === \"function\") this.interpolator(interpolator);\n      else this.range(interpolator);\n      break;\n    }\n  }\n  return this;\n}\n","import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n  var index = new InternMap(),\n      domain = [],\n      range = [],\n      unknown = implicit;\n\n  function scale(d) {\n    let i = index.get(d);\n    if (i === undefined) {\n      if (unknown !== implicit) return unknown;\n      index.set(d, i = domain.push(d) - 1);\n    }\n    return range[i % range.length];\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [], index = new InternMap();\n    for (const value of _) {\n      if (index.has(value)) continue;\n      index.set(value, domain.push(value) - 1);\n    }\n    return scale;\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), scale) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return ordinal(domain, range).unknown(unknown);\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init.js\";\nimport ordinal from \"./ordinal.js\";\n\nexport default function band() {\n  var scale = ordinal().unknown(undefined),\n      domain = scale.domain,\n      ordinalRange = scale.range,\n      r0 = 0,\n      r1 = 1,\n      step,\n      bandwidth,\n      round = false,\n      paddingInner = 0,\n      paddingOuter = 0,\n      align = 0.5;\n\n  delete scale.unknown;\n\n  function rescale() {\n    var n = domain().length,\n        reverse = r1 < r0,\n        start = reverse ? r1 : r0,\n        stop = reverse ? r0 : r1;\n    step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n    if (round) step = Math.floor(step);\n    start += (stop - start - step * (n - paddingInner)) * align;\n    bandwidth = step * (1 - paddingInner);\n    if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n    var values = sequence(n).map(function(i) { return start + step * i; });\n    return ordinalRange(reverse ? values.reverse() : values);\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n  };\n\n  scale.rangeRound = function(_) {\n    return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n  };\n\n  scale.bandwidth = function() {\n    return bandwidth;\n  };\n\n  scale.step = function() {\n    return step;\n  };\n\n  scale.round = function(_) {\n    return arguments.length ? (round = !!_, rescale()) : round;\n  };\n\n  scale.padding = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n  };\n\n  scale.paddingInner = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n  };\n\n  scale.paddingOuter = function(_) {\n    return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n  };\n\n  scale.align = function(_) {\n    return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n  };\n\n  scale.copy = function() {\n    return band(domain(), [r0, r1])\n        .round(round)\n        .paddingInner(paddingInner)\n        .paddingOuter(paddingOuter)\n        .align(align);\n  };\n\n  return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n  var copy = scale.copy;\n\n  scale.padding = scale.paddingOuter;\n  delete scale.paddingInner;\n  delete scale.paddingOuter;\n\n  scale.copy = function() {\n    return pointish(copy());\n  };\n\n  return scale;\n}\n\nexport function point() {\n  return pointish(band.apply(null, arguments).paddingInner(1));\n}\n","export default function constants(x) {\n  return function() {\n    return x;\n  };\n}\n","export default function number(x) {\n  return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n  return x;\n}\n\nfunction normalize(a, b) {\n  return (b -= (a = +a))\n      ? function(x) { return (x - a) / b; }\n      : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n  var t;\n  if (a > b) t = a, a = b, b = t;\n  return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n  var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n  if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n  else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n  return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n  var j = Math.min(domain.length, range.length) - 1,\n      d = new Array(j),\n      r = new Array(j),\n      i = -1;\n\n  // Reverse descending domains.\n  if (domain[j] < domain[0]) {\n    domain = domain.slice().reverse();\n    range = range.slice().reverse();\n  }\n\n  while (++i < j) {\n    d[i] = normalize(domain[i], domain[i + 1]);\n    r[i] = interpolate(range[i], range[i + 1]);\n  }\n\n  return function(x) {\n    var i = bisect(domain, x, 1, j) - 1;\n    return r[i](d[i](x));\n  };\n}\n\nexport function copy(source, target) {\n  return target\n      .domain(source.domain())\n      .range(source.range())\n      .interpolate(source.interpolate())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nexport function transformer() {\n  var domain = unit,\n      range = unit,\n      interpolate = interpolateValue,\n      transform,\n      untransform,\n      unknown,\n      clamp = identity,\n      piecewise,\n      output,\n      input;\n\n  function rescale() {\n    var n = Math.min(domain.length, range.length);\n    if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n    piecewise = n > 2 ? polymap : bimap;\n    output = input = null;\n    return scale;\n  }\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n  }\n\n  scale.invert = function(y) {\n    return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range = Array.from(_), interpolate = interpolateRound, rescale();\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n  };\n\n  scale.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, rescale()) : interpolate;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t, u) {\n    transform = t, untransform = u;\n    return rescale();\n  };\n}\n\nexport default function continuous() {\n  return transformer()(identity, identity);\n}\n","export default function(x) {\n  return Math.abs(x = Math.round(x)) >= 1e21\n      ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n      : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n  var i, coefficient = x.slice(0, i);\n\n  // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n  // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n  return [\n    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n    +x.slice(i + 1)\n  ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n  return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(grouping, thousands) {\n  return function(value, width) {\n    var i = value.length,\n        t = [],\n        j = 0,\n        g = grouping[0],\n        length = 0;\n\n    while (i > 0 && g > 0) {\n      if (length + g + 1 > width) g = Math.max(1, width - length);\n      t.push(value.substring(i -= g, i + g));\n      if ((length += g + 1) > width) break;\n      g = grouping[j = (j + 1) % grouping.length];\n    }\n\n    return t.reverse().join(thousands);\n  };\n}\n","export default function(numerals) {\n  return function(value) {\n    return value.replace(/[0-9]/g, function(i) {\n      return numerals[+i];\n    });\n  };\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n  if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n  var match;\n  return new FormatSpecifier({\n    fill: match[1],\n    align: match[2],\n    sign: match[3],\n    symbol: match[4],\n    zero: match[5],\n    width: match[6],\n    comma: match[7],\n    precision: match[8] && match[8].slice(1),\n    trim: match[9],\n    type: match[10]\n  });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n  this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n  this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n  this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n  this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n  this.zero = !!specifier.zero;\n  this.width = specifier.width === undefined ? undefined : +specifier.width;\n  this.comma = !!specifier.comma;\n  this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n  this.trim = !!specifier.trim;\n  this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n  return this.fill\n      + this.align\n      + this.sign\n      + this.symbol\n      + (this.zero ? \"0\" : \"\")\n      + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n      + (this.comma ? \",\" : \"\")\n      + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n      + (this.trim ? \"~\" : \"\")\n      + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n    switch (s[i]) {\n      case \".\": i0 = i1 = i; break;\n      case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n      default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n    }\n  }\n  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1],\n      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n      n = coefficient.length;\n  return i === n ? coefficient\n      : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n      : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n      : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1];\n  return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n      : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n  \"%\": (x, p) => (x * 100).toFixed(p),\n  \"b\": (x) => Math.round(x).toString(2),\n  \"c\": (x) => x + \"\",\n  \"d\": formatDecimal,\n  \"e\": (x, p) => x.toExponential(p),\n  \"f\": (x, p) => x.toFixed(p),\n  \"g\": (x, p) => x.toPrecision(p),\n  \"o\": (x) => Math.round(x).toString(8),\n  \"p\": (x, p) => formatRounded(x * 100, p),\n  \"r\": formatRounded,\n  \"s\": formatPrefixAuto,\n  \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n  \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n  return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n    prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n  var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n      currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n      currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n      decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n      numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n      percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n      minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n      nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n  function newFormat(specifier) {\n    specifier = formatSpecifier(specifier);\n\n    var fill = specifier.fill,\n        align = specifier.align,\n        sign = specifier.sign,\n        symbol = specifier.symbol,\n        zero = specifier.zero,\n        width = specifier.width,\n        comma = specifier.comma,\n        precision = specifier.precision,\n        trim = specifier.trim,\n        type = specifier.type;\n\n    // The \"n\" type is an alias for \",g\".\n    if (type === \"n\") comma = true, type = \"g\";\n\n    // The \"\" type, and any invalid type, is an alias for \".12~g\".\n    else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n    // If zero fill is specified, padding goes after sign and before digits.\n    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n    // Compute the prefix and suffix.\n    // For SI-prefix, the suffix is lazily computed.\n    var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n        suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n    // What format function should we use?\n    // Is this an integer type?\n    // Can this type generate exponential notation?\n    var formatType = formatTypes[type],\n        maybeSuffix = /[defgprs%]/.test(type);\n\n    // Set the default precision if not specified,\n    // or clamp the specified precision to the supported range.\n    // For significant precision, it must be in [1, 21].\n    // For fixed precision, it must be in [0, 20].\n    precision = precision === undefined ? 6\n        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n        : Math.max(0, Math.min(20, precision));\n\n    function format(value) {\n      var valuePrefix = prefix,\n          valueSuffix = suffix,\n          i, n, c;\n\n      if (type === \"c\") {\n        valueSuffix = formatType(value) + valueSuffix;\n        value = \"\";\n      } else {\n        value = +value;\n\n        // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n        var valueNegative = value < 0 || 1 / value < 0;\n\n        // Perform the initial formatting.\n        value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n        // Trim insignificant zeros.\n        if (trim) value = formatTrim(value);\n\n        // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n        if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n        // Compute the prefix and suffix.\n        valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n        valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n        // Break the formatted value into the integer “value” part that can be\n        // grouped, and fractional or exponential “suffix” part that is not.\n        if (maybeSuffix) {\n          i = -1, n = value.length;\n          while (++i < n) {\n            if (c = value.charCodeAt(i), 48 > c || c > 57) {\n              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n              value = value.slice(0, i);\n              break;\n            }\n          }\n        }\n      }\n\n      // If the fill character is not \"0\", grouping is applied before padding.\n      if (comma && !zero) value = group(value, Infinity);\n\n      // Compute the padding.\n      var length = valuePrefix.length + value.length + valueSuffix.length,\n          padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n      // If the fill character is \"0\", grouping is applied after padding.\n      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n      // Reconstruct the final output based on the desired alignment.\n      switch (align) {\n        case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n        case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n        case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n        default: value = padding + valuePrefix + value + valueSuffix; break;\n      }\n\n      return numerals(value);\n    }\n\n    format.toString = function() {\n      return specifier + \"\";\n    };\n\n    return format;\n  }\n\n  function formatPrefix(specifier, value) {\n    var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n        e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n        k = Math.pow(10, -e),\n        prefix = prefixes[8 + e / 3];\n    return function(value) {\n      return f(k * value) + prefix;\n    };\n  }\n\n  return {\n    format: newFormat,\n    formatPrefix: formatPrefix\n  };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n  thousands: \",\",\n  grouping: [3],\n  currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  format = locale.format;\n  formatPrefix = locale.formatPrefix;\n  return locale;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n  return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n  step = Math.abs(step), max = Math.abs(max) - step;\n  return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n  var step = tickStep(start, stop, count),\n      precision;\n  specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n  switch (specifier.type) {\n    case \"s\": {\n      var value = Math.max(Math.abs(start), Math.abs(stop));\n      if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n      return formatPrefix(specifier, value);\n    }\n    case \"\":\n    case \"e\":\n    case \"g\":\n    case \"p\":\n    case \"r\": {\n      if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n      break;\n    }\n    case \"f\":\n    case \"%\": {\n      if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n      break;\n    }\n  }\n  return format(specifier);\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n  var domain = scale.domain;\n\n  scale.ticks = function(count) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    var d = domain();\n    return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n  };\n\n  scale.nice = function(count) {\n    if (count == null) count = 10;\n\n    var d = domain();\n    var i0 = 0;\n    var i1 = d.length - 1;\n    var start = d[i0];\n    var stop = d[i1];\n    var prestep;\n    var step;\n    var maxIter = 10;\n\n    if (stop < start) {\n      step = start, start = stop, stop = step;\n      step = i0, i0 = i1, i1 = step;\n    }\n    \n    while (maxIter-- > 0) {\n      step = tickIncrement(start, stop, count);\n      if (step === prestep) {\n        d[i0] = start\n        d[i1] = stop\n        return domain(d);\n      } else if (step > 0) {\n        start = Math.floor(start / step) * step;\n        stop = Math.ceil(stop / step) * step;\n      } else if (step < 0) {\n        start = Math.ceil(start * step) / step;\n        stop = Math.floor(stop * step) / step;\n      } else {\n        break;\n      }\n      prestep = step;\n    }\n\n    return scale;\n  };\n\n  return scale;\n}\n\nexport default function linear() {\n  var scale = continuous();\n\n  scale.copy = function() {\n    return copy(scale, linear());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return linearish(scale);\n}\n","export default function nice(domain, interval) {\n  domain = domain.slice();\n\n  var i0 = 0,\n      i1 = domain.length - 1,\n      x0 = domain[i0],\n      x1 = domain[i1],\n      t;\n\n  if (x1 < x0) {\n    t = i0, i0 = i1, i1 = t;\n    t = x0, x0 = x1, x1 = t;\n  }\n\n  domain[i0] = interval.floor(x0);\n  domain[i1] = interval.ceil(x1);\n  return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format, formatSpecifier} from \"d3-format\";\nimport nice from \"./nice.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformLog(x) {\n  return Math.log(x);\n}\n\nfunction transformExp(x) {\n  return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n  return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n  return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n  return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n  return base === 10 ? pow10\n      : base === Math.E ? Math.exp\n      : x => Math.pow(base, x);\n}\n\nfunction logp(base) {\n  return base === Math.E ? Math.log\n      : base === 10 && Math.log10\n      || base === 2 && Math.log2\n      || (base = Math.log(base), x => Math.log(x) / base);\n}\n\nfunction reflect(f) {\n  return (x, k) => -f(-x, k);\n}\n\nexport function loggish(transform) {\n  const scale = transform(transformLog, transformExp);\n  const domain = scale.domain;\n  let base = 10;\n  let logs;\n  let pows;\n\n  function rescale() {\n    logs = logp(base), pows = powp(base);\n    if (domain()[0] < 0) {\n      logs = reflect(logs), pows = reflect(pows);\n      transform(transformLogn, transformExpn);\n    } else {\n      transform(transformLog, transformExp);\n    }\n    return scale;\n  }\n\n  scale.base = function(_) {\n    return arguments.length ? (base = +_, rescale()) : base;\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.ticks = count => {\n    const d = domain();\n    let u = d[0];\n    let v = d[d.length - 1];\n    const r = v < u;\n\n    if (r) ([u, v] = [v, u]);\n\n    let i = logs(u);\n    let j = logs(v);\n    let k;\n    let t;\n    const n = count == null ? 10 : +count;\n    let z = [];\n\n    if (!(base % 1) && j - i < n) {\n      i = Math.floor(i), j = Math.ceil(j);\n      if (u > 0) for (; i <= j; ++i) {\n        for (k = 1; k < base; ++k) {\n          t = i < 0 ? k / pows(-i) : k * pows(i);\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      } else for (; i <= j; ++i) {\n        for (k = base - 1; k >= 1; --k) {\n          t = i > 0 ? k / pows(-i) : k * pows(i);\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      }\n      if (z.length * 2 < n) z = ticks(u, v, n);\n    } else {\n      z = ticks(i, j, Math.min(j - i, n)).map(pows);\n    }\n    return r ? z.reverse() : z;\n  };\n\n  scale.tickFormat = (count, specifier) => {\n    if (count == null) count = 10;\n    if (specifier == null) specifier = base === 10 ? \"s\" : \",\";\n    if (typeof specifier !== \"function\") {\n      if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true;\n      specifier = format(specifier);\n    }\n    if (count === Infinity) return specifier;\n    const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n    return d => {\n      let i = d / pows(Math.round(logs(d)));\n      if (i * base < base - 0.5) i *= base;\n      return i <= k ? specifier(d) : \"\";\n    };\n  };\n\n  scale.nice = () => {\n    return domain(nice(domain(), {\n      floor: x => pows(Math.floor(logs(x))),\n      ceil: x => pows(Math.ceil(logs(x)))\n    }));\n  };\n\n  return scale;\n}\n\nexport default function log() {\n  const scale = loggish(transformer()).domain([1, 10]);\n  scale.copy = () => copy(scale, log()).base(scale.base());\n  initRange.apply(scale, arguments);\n  return scale;\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformSymlog(c) {\n  return function(x) {\n    return Math.sign(x) * Math.log1p(Math.abs(x / c));\n  };\n}\n\nfunction transformSymexp(c) {\n  return function(x) {\n    return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n  };\n}\n\nexport function symlogish(transform) {\n  var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n  scale.constant = function(_) {\n    return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n  };\n\n  return linearish(scale);\n}\n\nexport default function symlog() {\n  var scale = symlogish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, symlog()).constant(scale.constant());\n  };\n\n  return initRange.apply(scale, arguments);\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, identity, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformPow(exponent) {\n  return function(x) {\n    return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n  };\n}\n\nfunction transformSqrt(x) {\n  return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n  return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n  var scale = transform(identity, identity),\n      exponent = 1;\n\n  function rescale() {\n    return exponent === 1 ? transform(identity, identity)\n        : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n        : transform(transformPow(exponent), transformPow(1 / exponent));\n  }\n\n  scale.exponent = function(_) {\n    return arguments.length ? (exponent = +_, rescale()) : exponent;\n  };\n\n  return linearish(scale);\n}\n\nexport default function pow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, pow()).exponent(scale.exponent());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n\nexport function sqrt() {\n  return pow.apply(null, arguments).exponent(0.5);\n}\n","import continuous from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nfunction square(x) {\n  return Math.sign(x) * x * x;\n}\n\nfunction unsquare(x) {\n  return Math.sign(x) * Math.sqrt(Math.abs(x));\n}\n\nexport default function radial() {\n  var squared = continuous(),\n      range = [0, 1],\n      round = false,\n      unknown;\n\n  function scale(x) {\n    var y = unsquare(squared(x));\n    return isNaN(y) ? unknown : round ? Math.round(y) : y;\n  }\n\n  scale.invert = function(y) {\n    return squared.invert(square(y));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (squared.domain(_), scale) : squared.domain();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (squared.range((range = Array.from(_, number)).map(square)), scale) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return scale.range(_).round(true);\n  };\n\n  scale.round = function(_) {\n    return arguments.length ? (round = !!_, scale) : round;\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (squared.clamp(_), scale) : squared.clamp();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return radial(squared.domain(), range)\n        .round(round)\n        .clamp(squared.clamp())\n        .unknown(unknown);\n  };\n\n  initRange.apply(scale, arguments);\n\n  return linearish(scale);\n}\n","const t0 = new Date, t1 = new Date;\n\nexport function timeInterval(floori, offseti, count, field) {\n\n  function interval(date) {\n    return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n  }\n\n  interval.floor = (date) => {\n    return floori(date = new Date(+date)), date;\n  };\n\n  interval.ceil = (date) => {\n    return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n  };\n\n  interval.round = (date) => {\n    const d0 = interval(date), d1 = interval.ceil(date);\n    return date - d0 < d1 - date ? d0 : d1;\n  };\n\n  interval.offset = (date, step) => {\n    return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n  };\n\n  interval.range = (start, stop, step) => {\n    const range = [];\n    start = interval.ceil(start);\n    step = step == null ? 1 : Math.floor(step);\n    if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n    let previous;\n    do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n    while (previous < start && start < stop);\n    return range;\n  };\n\n  interval.filter = (test) => {\n    return timeInterval((date) => {\n      if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n    }, (date, step) => {\n      if (date >= date) {\n        if (step < 0) while (++step <= 0) {\n          while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n        } else while (--step >= 0) {\n          while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n        }\n      }\n    });\n  };\n\n  if (count) {\n    interval.count = (start, end) => {\n      t0.setTime(+start), t1.setTime(+end);\n      floori(t0), floori(t1);\n      return Math.floor(count(t0, t1));\n    };\n\n    interval.every = (step) => {\n      step = Math.floor(step);\n      return !isFinite(step) || !(step > 0) ? null\n          : !(step > 1) ? interval\n          : interval.filter(field\n              ? (d) => field(d) % step === 0\n              : (d) => interval.count(0, d) % step === 0);\n    };\n  }\n\n  return interval;\n}\n","import {timeInterval} from \"./interval.js\";\n\nexport const millisecond = timeInterval(() => {\n  // noop\n}, (date, step) => {\n  date.setTime(+date + step);\n}, (start, end) => {\n  return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n  k = Math.floor(k);\n  if (!isFinite(k) || !(k > 0)) return null;\n  if (!(k > 1)) return millisecond;\n  return timeInterval((date) => {\n    date.setTime(Math.floor(date / k) * k);\n  }, (date, step) => {\n    date.setTime(+date + step * k);\n  }, (start, end) => {\n    return (end - start) / k;\n  });\n};\n\nexport const milliseconds = millisecond.range;\n","export const durationSecond = 1000;\nexport const durationMinute = durationSecond * 60;\nexport const durationHour = durationMinute * 60;\nexport const durationDay = durationHour * 24;\nexport const durationWeek = durationDay * 7;\nexport const durationMonth = durationDay * 30;\nexport const durationYear = durationDay * 365;\n","import {timeInterval} from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nexport const second = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n  date.setTime(+date + step * durationSecond);\n}, (start, end) => {\n  return (end - start) / durationSecond;\n}, (date) => {\n  return date.getUTCSeconds();\n});\n\nexport const seconds = second.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeMinute = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, (date, step) => {\n  date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n  return (end - start) / durationMinute;\n}, (date) => {\n  return date.getMinutes();\n});\n\nexport const timeMinutes = timeMinute.range;\n\nexport const utcMinute = timeInterval((date) => {\n  date.setUTCSeconds(0, 0);\n}, (date, step) => {\n  date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n  return (end - start) / durationMinute;\n}, (date) => {\n  return date.getUTCMinutes();\n});\n\nexport const utcMinutes = utcMinute.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeHour = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, (date, step) => {\n  date.setTime(+date + step * durationHour);\n}, (start, end) => {\n  return (end - start) / durationHour;\n}, (date) => {\n  return date.getHours();\n});\n\nexport const timeHours = timeHour.range;\n\nexport const utcHour = timeInterval((date) => {\n  date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n  date.setTime(+date + step * durationHour);\n}, (start, end) => {\n  return (end - start) / durationHour;\n}, (date) => {\n  return date.getUTCHours();\n});\n\nexport const utcHours = utcHour.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nexport const timeDay = timeInterval(\n  date => date.setHours(0, 0, 0, 0),\n  (date, step) => date.setDate(date.getDate() + step),\n  (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n  date => date.getDate() - 1\n);\n\nexport const timeDays = timeDay.range;\n\nexport const utcDay = timeInterval((date) => {\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n  return (end - start) / durationDay;\n}, (date) => {\n  return date.getUTCDate() - 1;\n});\n\nexport const utcDays = utcDay.range;\n\nexport const unixDay = timeInterval((date) => {\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n  return (end - start) / durationDay;\n}, (date) => {\n  return Math.floor(date / durationDay);\n});\n\nexport const unixDays = unixDay.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction timeWeekday(i) {\n  return timeInterval((date) => {\n    date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n    date.setHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setDate(date.getDate() + step * 7);\n  }, (start, end) => {\n    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n  });\n}\n\nexport const timeSunday = timeWeekday(0);\nexport const timeMonday = timeWeekday(1);\nexport const timeTuesday = timeWeekday(2);\nexport const timeWednesday = timeWeekday(3);\nexport const timeThursday = timeWeekday(4);\nexport const timeFriday = timeWeekday(5);\nexport const timeSaturday = timeWeekday(6);\n\nexport const timeSundays = timeSunday.range;\nexport const timeMondays = timeMonday.range;\nexport const timeTuesdays = timeTuesday.range;\nexport const timeWednesdays = timeWednesday.range;\nexport const timeThursdays = timeThursday.range;\nexport const timeFridays = timeFriday.range;\nexport const timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n  return timeInterval((date) => {\n    date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n    date.setUTCHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setUTCDate(date.getUTCDate() + step * 7);\n  }, (start, end) => {\n    return (end - start) / durationWeek;\n  });\n}\n\nexport const utcSunday = utcWeekday(0);\nexport const utcMonday = utcWeekday(1);\nexport const utcTuesday = utcWeekday(2);\nexport const utcWednesday = utcWeekday(3);\nexport const utcThursday = utcWeekday(4);\nexport const utcFriday = utcWeekday(5);\nexport const utcSaturday = utcWeekday(6);\n\nexport const utcSundays = utcSunday.range;\nexport const utcMondays = utcMonday.range;\nexport const utcTuesdays = utcTuesday.range;\nexport const utcWednesdays = utcWednesday.range;\nexport const utcThursdays = utcThursday.range;\nexport const utcFridays = utcFriday.range;\nexport const utcSaturdays = utcSaturday.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeMonth = timeInterval((date) => {\n  date.setDate(1);\n  date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n  return date.getMonth();\n});\n\nexport const timeMonths = timeMonth.range;\n\nexport const utcMonth = timeInterval((date) => {\n  date.setUTCDate(1);\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n  return date.getUTCMonth();\n});\n\nexport const utcMonths = utcMonth.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeYear = timeInterval((date) => {\n  date.setMonth(0, 1);\n  date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n  return end.getFullYear() - start.getFullYear();\n}, (date) => {\n  return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n    date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n    date.setMonth(0, 1);\n    date.setHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setFullYear(date.getFullYear() + step * k);\n  });\n};\n\nexport const timeYears = timeYear.range;\n\nexport const utcYear = timeInterval((date) => {\n  date.setUTCMonth(0, 1);\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n  return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n  return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n    date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n    date.setUTCMonth(0, 1);\n    date.setUTCHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setUTCFullYear(date.getUTCFullYear() + step * k);\n  });\n};\n\nexport const utcYears = utcYear.range;\n","import {bisector, tickStep} from \"d3-array\";\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\nimport {millisecond} from \"./millisecond.js\";\nimport {second} from \"./second.js\";\nimport {timeMinute, utcMinute} from \"./minute.js\";\nimport {timeHour, utcHour} from \"./hour.js\";\nimport {timeDay, unixDay} from \"./day.js\";\nimport {timeSunday, utcSunday} from \"./week.js\";\nimport {timeMonth, utcMonth} from \"./month.js\";\nimport {timeYear, utcYear} from \"./year.js\";\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n  const tickIntervals = [\n    [second,  1,      durationSecond],\n    [second,  5,  5 * durationSecond],\n    [second, 15, 15 * durationSecond],\n    [second, 30, 30 * durationSecond],\n    [minute,  1,      durationMinute],\n    [minute,  5,  5 * durationMinute],\n    [minute, 15, 15 * durationMinute],\n    [minute, 30, 30 * durationMinute],\n    [  hour,  1,      durationHour  ],\n    [  hour,  3,  3 * durationHour  ],\n    [  hour,  6,  6 * durationHour  ],\n    [  hour, 12, 12 * durationHour  ],\n    [   day,  1,      durationDay   ],\n    [   day,  2,  2 * durationDay   ],\n    [  week,  1,      durationWeek  ],\n    [ month,  1,      durationMonth ],\n    [ month,  3,  3 * durationMonth ],\n    [  year,  1,      durationYear  ]\n  ];\n\n  function ticks(start, stop, count) {\n    const reverse = stop < start;\n    if (reverse) [start, stop] = [stop, start];\n    const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n    const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n    return reverse ? ticks.reverse() : ticks;\n  }\n\n  function tickInterval(start, stop, count) {\n    const target = Math.abs(stop - start) / count;\n    const i = bisector(([,, step]) => step).right(tickIntervals, target);\n    if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n    if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n    const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n    return t.every(step);\n  }\n\n  return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);\n\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\n","import {\n  timeDay,\n  timeSunday,\n  timeMonday,\n  timeThursday,\n  timeYear,\n  utcDay,\n  utcSunday,\n  utcMonday,\n  utcThursday,\n  utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n    date.setFullYear(d.y);\n    return date;\n  }\n  return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n    date.setUTCFullYear(d.y);\n    return date;\n  }\n  return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n  return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n  var locale_dateTime = locale.dateTime,\n      locale_date = locale.date,\n      locale_time = locale.time,\n      locale_periods = locale.periods,\n      locale_weekdays = locale.days,\n      locale_shortWeekdays = locale.shortDays,\n      locale_months = locale.months,\n      locale_shortMonths = locale.shortMonths;\n\n  var periodRe = formatRe(locale_periods),\n      periodLookup = formatLookup(locale_periods),\n      weekdayRe = formatRe(locale_weekdays),\n      weekdayLookup = formatLookup(locale_weekdays),\n      shortWeekdayRe = formatRe(locale_shortWeekdays),\n      shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n      monthRe = formatRe(locale_months),\n      monthLookup = formatLookup(locale_months),\n      shortMonthRe = formatRe(locale_shortMonths),\n      shortMonthLookup = formatLookup(locale_shortMonths);\n\n  var formats = {\n    \"a\": formatShortWeekday,\n    \"A\": formatWeekday,\n    \"b\": formatShortMonth,\n    \"B\": formatMonth,\n    \"c\": null,\n    \"d\": formatDayOfMonth,\n    \"e\": formatDayOfMonth,\n    \"f\": formatMicroseconds,\n    \"g\": formatYearISO,\n    \"G\": formatFullYearISO,\n    \"H\": formatHour24,\n    \"I\": formatHour12,\n    \"j\": formatDayOfYear,\n    \"L\": formatMilliseconds,\n    \"m\": formatMonthNumber,\n    \"M\": formatMinutes,\n    \"p\": formatPeriod,\n    \"q\": formatQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatSeconds,\n    \"u\": formatWeekdayNumberMonday,\n    \"U\": formatWeekNumberSunday,\n    \"V\": formatWeekNumberISO,\n    \"w\": formatWeekdayNumberSunday,\n    \"W\": formatWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatYear,\n    \"Y\": formatFullYear,\n    \"Z\": formatZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var utcFormats = {\n    \"a\": formatUTCShortWeekday,\n    \"A\": formatUTCWeekday,\n    \"b\": formatUTCShortMonth,\n    \"B\": formatUTCMonth,\n    \"c\": null,\n    \"d\": formatUTCDayOfMonth,\n    \"e\": formatUTCDayOfMonth,\n    \"f\": formatUTCMicroseconds,\n    \"g\": formatUTCYearISO,\n    \"G\": formatUTCFullYearISO,\n    \"H\": formatUTCHour24,\n    \"I\": formatUTCHour12,\n    \"j\": formatUTCDayOfYear,\n    \"L\": formatUTCMilliseconds,\n    \"m\": formatUTCMonthNumber,\n    \"M\": formatUTCMinutes,\n    \"p\": formatUTCPeriod,\n    \"q\": formatUTCQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatUTCSeconds,\n    \"u\": formatUTCWeekdayNumberMonday,\n    \"U\": formatUTCWeekNumberSunday,\n    \"V\": formatUTCWeekNumberISO,\n    \"w\": formatUTCWeekdayNumberSunday,\n    \"W\": formatUTCWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatUTCYear,\n    \"Y\": formatUTCFullYear,\n    \"Z\": formatUTCZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var parses = {\n    \"a\": parseShortWeekday,\n    \"A\": parseWeekday,\n    \"b\": parseShortMonth,\n    \"B\": parseMonth,\n    \"c\": parseLocaleDateTime,\n    \"d\": parseDayOfMonth,\n    \"e\": parseDayOfMonth,\n    \"f\": parseMicroseconds,\n    \"g\": parseYear,\n    \"G\": parseFullYear,\n    \"H\": parseHour24,\n    \"I\": parseHour24,\n    \"j\": parseDayOfYear,\n    \"L\": parseMilliseconds,\n    \"m\": parseMonthNumber,\n    \"M\": parseMinutes,\n    \"p\": parsePeriod,\n    \"q\": parseQuarter,\n    \"Q\": parseUnixTimestamp,\n    \"s\": parseUnixTimestampSeconds,\n    \"S\": parseSeconds,\n    \"u\": parseWeekdayNumberMonday,\n    \"U\": parseWeekNumberSunday,\n    \"V\": parseWeekNumberISO,\n    \"w\": parseWeekdayNumberSunday,\n    \"W\": parseWeekNumberMonday,\n    \"x\": parseLocaleDate,\n    \"X\": parseLocaleTime,\n    \"y\": parseYear,\n    \"Y\": parseFullYear,\n    \"Z\": parseZone,\n    \"%\": parseLiteralPercent\n  };\n\n  // These recursive directive definitions must be deferred.\n  formats.x = newFormat(locale_date, formats);\n  formats.X = newFormat(locale_time, formats);\n  formats.c = newFormat(locale_dateTime, formats);\n  utcFormats.x = newFormat(locale_date, utcFormats);\n  utcFormats.X = newFormat(locale_time, utcFormats);\n  utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n  function newFormat(specifier, formats) {\n    return function(date) {\n      var string = [],\n          i = -1,\n          j = 0,\n          n = specifier.length,\n          c,\n          pad,\n          format;\n\n      if (!(date instanceof Date)) date = new Date(+date);\n\n      while (++i < n) {\n        if (specifier.charCodeAt(i) === 37) {\n          string.push(specifier.slice(j, i));\n          if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n          else pad = c === \"e\" ? \" \" : \"0\";\n          if (format = formats[c]) c = format(date, pad);\n          string.push(c);\n          j = i + 1;\n        }\n      }\n\n      string.push(specifier.slice(j, i));\n      return string.join(\"\");\n    };\n  }\n\n  function newParse(specifier, Z) {\n    return function(string) {\n      var d = newDate(1900, undefined, 1),\n          i = parseSpecifier(d, specifier, string += \"\", 0),\n          week, day;\n      if (i != string.length) return null;\n\n      // If a UNIX timestamp is specified, return it.\n      if (\"Q\" in d) return new Date(d.Q);\n      if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n      // If this is utcParse, never use the local timezone.\n      if (Z && !(\"Z\" in d)) d.Z = 0;\n\n      // The am-pm flag is 0 for AM, and 1 for PM.\n      if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n      // If the month was not specified, inherit from the quarter.\n      if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n      // Convert day-of-week and week-of-year to day-of-year.\n      if (\"V\" in d) {\n        if (d.V < 1 || d.V > 53) return null;\n        if (!(\"w\" in d)) d.w = 1;\n        if (\"Z\" in d) {\n          week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n          week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n          week = utcDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getUTCFullYear();\n          d.m = week.getUTCMonth();\n          d.d = week.getUTCDate() + (d.w + 6) % 7;\n        } else {\n          week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n          week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n          week = timeDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getFullYear();\n          d.m = week.getMonth();\n          d.d = week.getDate() + (d.w + 6) % 7;\n        }\n      } else if (\"W\" in d || \"U\" in d) {\n        if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n        day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n        d.m = 0;\n        d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n      }\n\n      // If a time zone is specified, all fields are interpreted as UTC and then\n      // offset according to the specified time zone.\n      if (\"Z\" in d) {\n        d.H += d.Z / 100 | 0;\n        d.M += d.Z % 100;\n        return utcDate(d);\n      }\n\n      // Otherwise, all fields are in local time.\n      return localDate(d);\n    };\n  }\n\n  function parseSpecifier(d, specifier, string, j) {\n    var i = 0,\n        n = specifier.length,\n        m = string.length,\n        c,\n        parse;\n\n    while (i < n) {\n      if (j >= m) return -1;\n      c = specifier.charCodeAt(i++);\n      if (c === 37) {\n        c = specifier.charAt(i++);\n        parse = parses[c in pads ? specifier.charAt(i++) : c];\n        if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n      } else if (c != string.charCodeAt(j++)) {\n        return -1;\n      }\n    }\n\n    return j;\n  }\n\n  function parsePeriod(d, string, i) {\n    var n = periodRe.exec(string.slice(i));\n    return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseShortWeekday(d, string, i) {\n    var n = shortWeekdayRe.exec(string.slice(i));\n    return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseWeekday(d, string, i) {\n    var n = weekdayRe.exec(string.slice(i));\n    return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseShortMonth(d, string, i) {\n    var n = shortMonthRe.exec(string.slice(i));\n    return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseMonth(d, string, i) {\n    var n = monthRe.exec(string.slice(i));\n    return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseLocaleDateTime(d, string, i) {\n    return parseSpecifier(d, locale_dateTime, string, i);\n  }\n\n  function parseLocaleDate(d, string, i) {\n    return parseSpecifier(d, locale_date, string, i);\n  }\n\n  function parseLocaleTime(d, string, i) {\n    return parseSpecifier(d, locale_time, string, i);\n  }\n\n  function formatShortWeekday(d) {\n    return locale_shortWeekdays[d.getDay()];\n  }\n\n  function formatWeekday(d) {\n    return locale_weekdays[d.getDay()];\n  }\n\n  function formatShortMonth(d) {\n    return locale_shortMonths[d.getMonth()];\n  }\n\n  function formatMonth(d) {\n    return locale_months[d.getMonth()];\n  }\n\n  function formatPeriod(d) {\n    return locale_periods[+(d.getHours() >= 12)];\n  }\n\n  function formatQuarter(d) {\n    return 1 + ~~(d.getMonth() / 3);\n  }\n\n  function formatUTCShortWeekday(d) {\n    return locale_shortWeekdays[d.getUTCDay()];\n  }\n\n  function formatUTCWeekday(d) {\n    return locale_weekdays[d.getUTCDay()];\n  }\n\n  function formatUTCShortMonth(d) {\n    return locale_shortMonths[d.getUTCMonth()];\n  }\n\n  function formatUTCMonth(d) {\n    return locale_months[d.getUTCMonth()];\n  }\n\n  function formatUTCPeriod(d) {\n    return locale_periods[+(d.getUTCHours() >= 12)];\n  }\n\n  function formatUTCQuarter(d) {\n    return 1 + ~~(d.getUTCMonth() / 3);\n  }\n\n  return {\n    format: function(specifier) {\n      var f = newFormat(specifier += \"\", formats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    parse: function(specifier) {\n      var p = newParse(specifier += \"\", false);\n      p.toString = function() { return specifier; };\n      return p;\n    },\n    utcFormat: function(specifier) {\n      var f = newFormat(specifier += \"\", utcFormats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    utcParse: function(specifier) {\n      var p = newParse(specifier += \"\", true);\n      p.toString = function() { return specifier; };\n      return p;\n    }\n  };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n    numberRe = /^\\s*\\d+/, // note: ignores next directive\n    percentRe = /^%/,\n    requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n  var sign = value < 0 ? \"-\" : \"\",\n      string = (sign ? -value : value) + \"\",\n      length = string.length;\n  return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n  return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n  return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n  return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 4));\n  return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n  var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n  return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 6));\n  return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n  var n = percentRe.exec(string.slice(i, i + 1));\n  return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n  return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n  return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n  return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n  return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n  return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n  return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n  return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n  return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n  return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n  var day = d.getDay();\n  return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n  return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n  var day = d.getDay();\n  return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n  d = dISO(d);\n  return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n  return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n  return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n  d = dISO(d);\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n  var day = d.getDay();\n  d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n  var z = d.getTimezoneOffset();\n  return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n      + pad(z / 60 | 0, \"0\", 2)\n      + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n  return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n  return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n  return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n  return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n  return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n  return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n  return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n  return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n  return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n  var dow = d.getUTCDay();\n  return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n  return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n  var day = d.getUTCDay();\n  return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n  d = UTCdISO(d);\n  return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n  return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n  return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n  d = UTCdISO(d);\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n  var day = d.getUTCDay();\n  d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n  return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n  return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n  return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n  return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n  dateTime: \"%x, %X\",\n  date: \"%-m/%-d/%Y\",\n  time: \"%-I:%M:%S %p\",\n  periods: [\"AM\", \"PM\"],\n  days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n  shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n  months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n  shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  timeFormat = locale.format;\n  timeParse = locale.parse;\n  utcFormat = locale.utcFormat;\n  utcParse = locale.utcParse;\n  return locale;\n}\n","import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nfunction date(t) {\n  return new Date(t);\n}\n\nfunction number(t) {\n  return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n  var scale = continuous(),\n      invert = scale.invert,\n      domain = scale.domain;\n\n  var formatMillisecond = format(\".%L\"),\n      formatSecond = format(\":%S\"),\n      formatMinute = format(\"%I:%M\"),\n      formatHour = format(\"%I %p\"),\n      formatDay = format(\"%a %d\"),\n      formatWeek = format(\"%b %d\"),\n      formatMonth = format(\"%B\"),\n      formatYear = format(\"%Y\");\n\n  function tickFormat(date) {\n    return (second(date) < date ? formatMillisecond\n        : minute(date) < date ? formatSecond\n        : hour(date) < date ? formatMinute\n        : day(date) < date ? formatHour\n        : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n        : year(date) < date ? formatMonth\n        : formatYear)(date);\n  }\n\n  scale.invert = function(y) {\n    return new Date(invert(y));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n  };\n\n  scale.ticks = function(interval) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    return specifier == null ? tickFormat : format(specifier);\n  };\n\n  scale.nice = function(interval) {\n    var d = domain();\n    if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n    return interval ? domain(nice(d, interval)) : scale;\n  };\n\n  scale.copy = function() {\n    return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n  };\n\n  return scale;\n}\n\nexport default function time() {\n  return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","import {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcTicks, utcTickInterval} from \"d3-time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {calendar} from \"./time.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function utcTime() {\n  return initRange.apply(calendar(utcTicks, utcTickInterval, utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n","import {interpolate, interpolateRound} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n  var x0 = 0,\n      x1 = 1,\n      t0,\n      t1,\n      k10,\n      transform,\n      interpolator = identity,\n      clamp = false,\n      unknown;\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = !!_, scale) : clamp;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  function range(interpolate) {\n    return function(_) {\n      var r0, r1;\n      return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n    };\n  }\n\n  scale.range = range(interpolate);\n\n  scale.rangeRound = range(interpolateRound);\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t) {\n    transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n    return scale;\n  };\n}\n\nexport function copy(source, target) {\n  return target\n      .domain(source.domain())\n      .interpolator(source.interpolator())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nexport default function sequential() {\n  var scale = linearish(transformer()(identity));\n\n  scale.copy = function() {\n    return copy(scale, sequential());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialLog() {\n  var scale = loggish(transformer()).domain([1, 10]);\n\n  scale.copy = function() {\n    return copy(scale, sequentialLog()).base(scale.base());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSymlog() {\n  var scale = symlogish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, sequentialSymlog()).constant(scale.constant());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialPow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, sequentialPow()).exponent(scale.exponent());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSqrt() {\n  return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n","import isString from 'lodash/isString'\nimport { range } from 'd3-array'\nimport { interpolateRound } from 'd3-interpolate'\nimport { scaleLinear, scaleLog, scalePow, scaleRadial, scaleSqrt, scaleSequential, scaleSymlog, scaleTime, scaleUtc } from 'd3-scale'\nimport type { ScaleLinear } from 'd3-scale'\nimport { computed, toValue } from 'vue'\nimport type { ComputedRef, MaybeRefOrGetter } from 'vue'\n\n// The continuous numeric d3-scale factories that share this composable's\n// domain()/range() shape — the only scale kinds `colorScale` supports by\n// name. Anything else must be passed as a ready-made scale function instead.\nconst SCALE_FACTORIES: Record<string, () => any> = {\n  scaleLinear,\n  scaleLog,\n  scalePow,\n  scaleRadial,\n  scaleSqrt,\n  scaleSequential,\n  scaleSymlog,\n  scaleTime,\n  scaleUtc\n}\n\n/**\n * Maps a numeric value to a CSS color string. This is the shape returned by\n * d3 sequential/threshold scales as well as the function callers can pass\n * directly through the `colorScale` prop.\n */\nexport type ColorScaleFn = (v?: number) => string\n\n/**\n * Maps a horizontal canvas pixel offset to the color painted at that column.\n */\nexport type WidthScaleFn = (x: number) => string\n\n/**\n * Reactive options driving the scale legend derivation. They mirror the props\n * of the `LegendScale` component, accepted as plain values, refs or getters so\n * the composable stays adaptable to how the caller wires its state.\n */\nexport interface UseLegendScaleOptions {\n  /**\n   * Width of the legend (and of its color canvas), in pixels.\n   */\n  width: MaybeRefOrGetter<number>\n  /**\n   * Lower bound of the value domain.\n   */\n  min: MaybeRefOrGetter<number>\n  /**\n   * Upper bound of the value domain.\n   */\n  max: MaybeRefOrGetter<number>\n  /**\n   * Current cursor value, or `null`/`undefined` when no cursor is shown.\n   */\n  cursorValue: MaybeRefOrGetter<number | null | undefined>\n  /**\n   * Either a ready-made color scale function, or the name of one of the\n   * supported continuous d3-scale factories (`'scaleLinear'`, `'scaleLog'`,\n   * `'scalePow'`, `'scaleRadial'`, `'scaleSqrt'`, `'scaleSequential'`,\n   * `'scaleSymlog'`, `'scaleTime'`, `'scaleUtc'`) to build a two-stop scale\n   * from. Any other factory name must be passed as a ready-made function\n   * instead (e.g. `scaleQuantize(...)`).\n   */\n  colorScale: MaybeRefOrGetter<ColorScaleFn | string>\n  /**\n   * Start color of the built-in two-stop scale (used when `colorScale` is a\n   * factory name).\n   */\n  colorScaleStart: MaybeRefOrGetter<string>\n  /**\n   * End color of the built-in two-stop scale (used when `colorScale` is a\n   * factory name).\n   */\n  colorScaleEnd: MaybeRefOrGetter<string>\n}\n\n/**\n * Reactive API returned by {@link useLegendScale}.\n */\nexport interface UseLegendScale {\n  /**\n   * Color scale mapping a value of the domain to a CSS color. When the\n   * `colorScale` option is a factory name, it is a two-stop scale spanning\n   * `[min, max]`; otherwise it is the caller-provided function.\n   */\n  colorScaleFunction: ComputedRef<ColorScaleFn>\n  /**\n   * Maps a canvas pixel column to the value it represents on the `[min, max]`\n   * domain.\n   */\n  widthScale: ComputedRef<ScaleLinear<number, number>>\n  /**\n   * Maps a canvas pixel column directly to the color painted there, composing\n   * {@link widthScale} with {@link colorScaleFunction}.\n   */\n  widthScaleColor: ComputedRef<WidthScaleFn>\n  /**\n   * Pixel columns to paint, from `0` to `width - 1` inclusive: the canvas is\n   * sized to exactly `width`, so those are its only valid columns.\n   */\n  colorScaleWidthRange: ComputedRef<number[]>\n  /**\n   * Whether a cursor value is set (and therefore the cursor should render).\n   */\n  hasCursor: ComputedRef<boolean>\n  /**\n   * Left offset of the cursor as a CSS percentage string (e.g. `'33%'`),\n   * falling back to `'0%'` when the value is not a number.\n   */\n  cursorLeft: ComputedRef<string>\n}\n\n/**\n * Owns the d3 scale and color-domain derivation of the `LegendScale`\n * component: it builds the color scale over the value domain, the linear scale\n * mapping canvas pixels to values (and to colors), and the cursor positioning\n * scale. It holds no DOM state — canvas rendering stays in the component.\n *\n * @param options - Reactive scale options (see {@link UseLegendScaleOptions}).\n * @returns The {@link UseLegendScale} API of derived d3 scales and the cursor\n *   placement helpers.\n * @example\n * // Internal building block of the `LegendScale` component; not exported from\n * // the package root. Inside a `<script setup>` block:\n * import { toRef } from 'vue'\n * import { useLegendScale } from '@/composables/useLegendScale'\n *\n * const props = defineProps<{ min?: number, max?: number }>()\n * const { widthScaleColor, cursorLeft } = useLegendScale({\n *   width: toRef(() => props.width),\n *   min: toRef(() => props.min),\n *   max: toRef(() => props.max),\n *   cursorValue: toRef(() => props.cursorValue),\n *   colorScale: toRef(() => props.colorScale),\n *   colorScaleStart: toRef(() => props.colorScaleStart),\n *   colorScaleEnd: toRef(() => props.colorScaleEnd)\n * })\n */\nexport function useLegendScale(options: UseLegendScaleOptions): UseLegendScale {\n  const {\n    width,\n    min,\n    max,\n    cursorValue,\n    colorScale,\n    colorScaleStart,\n    colorScaleEnd\n  } = options\n\n  // Use the caller-provided color function as-is, or build a two-stop scale\n  // from the named d3-scale factory spanning the value domain.\n  const colorScaleFunction = computed((): ColorScaleFn => {\n    const scale = toValue(colorScale)\n    if (isString(scale)) {\n      const factory = SCALE_FACTORIES[scale]\n      if (!factory) {\n        throw new Error(`unsupported colorScale name \"${scale}\": expected one of ${Object.keys(SCALE_FACTORIES).join(', ')}, or a scale function`)\n      }\n      return factory()\n        .domain([toValue(min), toValue(max)])\n        .range([toValue(colorScaleStart), toValue(colorScaleEnd)])\n    }\n    return scale\n  })\n\n  // Map canvas pixel columns to values on the domain. The canvas is sized to\n  // exactly `width`, so its columns are 0..width-1 — the domain's upper bound\n  // must be width - 1, not width, or the last painted column falls short of\n  // the true max (e.g. width=150 maps column 149 to ~99.3, not 100).\n  const widthScale = computed((): ScaleLinear<number, number> => {\n    return scaleLinear()\n      .domain([0, Math.max(1, toValue(width) - 1)])\n      .range([toValue(min), toValue(max)])\n  })\n\n  const widthScaleColor = computed((): WidthScaleFn => {\n    return (x: number) => colorScaleFunction.value(widthScale.value(x))\n  })\n\n  const colorScaleWidthRange = computed((): number[] => {\n    return range(toValue(width))\n  })\n\n  const hasCursor = computed((): boolean => {\n    return toValue(cursorValue) != null // double equal also tests undefined\n  })\n\n  // Map the cursor value to a [0, 100] percentage, rounding to integers.\n  const cursorLeftScale = computed((): ScaleLinear<number, number> => {\n    return scaleLinear()\n      .domain([toValue(min), toValue(max)])\n      .range([0, 100])\n      .interpolate(interpolateRound)\n  })\n\n  const cursorLeft = computed((): string => {\n    const left = cursorLeftScale.value(toValue(cursorValue) as number)\n    return isNaN(left) ? '0%' : `${left}%`\n  })\n\n  return {\n    colorScaleFunction,\n    widthScale,\n    widthScaleColor,\n    colorScaleWidthRange,\n    hasCursor,\n    cursorLeft\n  }\n}\n\nexport default useLegendScale\n","<script setup lang=\"ts\">\nimport { create } from 'd3-selection'\nimport { format } from 'd3-format'\nimport {\n  ref,\n  computed,\n  onMounted,\n  watch,\n  nextTick,\n  toRef\n} from 'vue'\n\nimport { useLegendScale } from '@/composables/useLegendScale'\nimport type { ColorScaleFn } from '@/composables/useLegendScale'\n\ndefineOptions({\n  name: 'ScaleLegend'\n})\n\nexport interface LegendScaleProps {\n  width?: number\n  height?: number\n  cursorValue?: number | null\n  max?: number\n  min?: number\n  colorScale?: ColorScaleFn | string\n  colorScaleEnd?: string\n  colorScaleStart?: string\n}\n\nconst props = withDefaults(defineProps<LegendScaleProps>(), {\n  width: 150,\n  height: 16,\n  cursorValue: null,\n  max: 100,\n  min: 0,\n  colorScale: 'scaleLinear',\n  colorScaleEnd: () => {\n    const computedStyle = window.getComputedStyle(document.body)\n    return computedStyle.getPropertyValue('--bs-primary') || '#000'\n  },\n  colorScaleStart: '#fff'\n})\n\nconst {\n  colorScaleFunction,\n  widthScale,\n  widthScaleColor,\n  colorScaleWidthRange,\n  hasCursor,\n  cursorLeft\n} = useLegendScale({\n  width: toRef(() => props.width),\n  min: toRef(() => props.min),\n  max: toRef(() => props.max),\n  cursorValue: toRef(() => props.cursorValue),\n  colorScale: toRef(() => props.colorScale),\n  colorScaleStart: toRef(() => props.colorScaleStart),\n  colorScaleEnd: toRef(() => props.colorScaleEnd)\n})\n\nconst cursorWrapperOffset = ref(0)\nconst mounted = ref(false)\nconst el = ref<Element | null>(null)\n\nconst classList = computed((): { 'scale-legend--has-cursor': boolean } => {\n  return {\n    'scale-legend--has-cursor': hasCursor.value\n  }\n})\n\nconst cursorValue = toRef(() => props.cursorValue)\n\nonMounted(async () => {\n  await nextTick()\n  setCursorWrapperOffset()\n  setColorScaleCanvas()\n  mounted.value = true\n})\n\nconst colorScaleBaseCanvas = computed((): HTMLCanvasElement | null => {\n  return create('canvas')\n    .attr('width', props.width)\n    .attr('height', props.height)\n    .node()\n})\n\nconst colorScaleContext = computed((): CanvasRenderingContext2D | null => {\n  return colorScaleBaseCanvas.value?.getContext('2d') ?? null\n})\n\nconst colorScaleBase64 = computed((): string | undefined => {\n  if (mounted.value) {\n    return colorScaleBaseCanvas.value?.toDataURL() ?? undefined\n  }\n  return undefined\n})\n\nconst formatNumber = format(',')\n\nfunction setCursorWrapperOffset(): void {\n  const cursor = el.value?.querySelector('.scale-legend__cursor')\n  if (cursor && el.value) {\n    const { x: cursorX, width: cursorWidth }\n      = cursor.getBoundingClientRect()\n    const { x: legendX, width: legendWidth }\n      = el.value.getBoundingClientRect()\n    const left = legendX - cursorX - 6\n    const right = legendX + legendWidth - (cursorX + cursorWidth) + 6\n    cursorWrapperOffset.value = Math.max(0, left) || Math.min(0, right)\n  }\n  else {\n    cursorWrapperOffset.value = 0\n  }\n}\n\nfunction setColorScaleCanvas(): void {\n  if (!colorScaleContext.value) {\n    return\n  }\n  for (const x of colorScaleWidthRange.value) {\n    colorScaleContext.value.fillStyle = widthScaleColor.value(x)\n    colorScaleContext.value.fillRect(x, 0, 1, props.height)\n  }\n}\n\nwatch(cursorValue, async () => {\n  await nextTick()\n  setCursorWrapperOffset()\n})\n\ndefineExpose({\n  widthScale,\n  colorScaleFunction,\n  widthScaleColor,\n  hasCursor,\n  cursorLeft\n})\n</script>\n\n<template>\n  <div\n    ref=\"el\"\n    :class=\"classList\"\n    class=\"scale-legend\"\n  >\n    <div class=\"scale-legend__bound scale-legend__bound--min\">\n      <slot\n        name=\"legend-cursor-min\"\n        v-bind=\"{ min }\"\n      >\n        {{ formatNumber(min) }}\n      </slot>\n    </div>\n    <img\n      :height=\"height\"\n      :src=\"colorScaleBase64\"\n      :width=\"width\"\n      class=\"scale-legend__scale\"\n      alt=\"legend scale\"\n    >\n    <div class=\"scale-legend__bound scale-legend__bound--max\">\n      <slot\n        name=\"legend-cursor-max\"\n        v-bind=\"{ max }\"\n      >\n        {{ formatNumber(max) }}\n      </slot>\n    </div>\n    <div\n      v-if=\"hasCursor\"\n      :style=\"{ left: cursorLeft }\"\n      class=\"scale-legend__cursor\"\n    >\n      <div\n        :style=\"{ transform: `translateX(${cursorWrapperOffset}px)` }\"\n        class=\"scale-legend__cursor__wrapper\"\n      >\n        <slot\n          name=\"cursor\"\n          v-bind=\"{ value: cursorValue }\"\n        >\n          {{ formatNumber(cursorValue ?? 0) }}\n        </slot>\n      </div>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n\n.scale-legend {\n  position: relative;\n  display: inline-block;\n\n  &__bound,\n  &__cursor {\n    position: absolute;\n    bottom: 100%;\n    font-size: 0.8rem;\n\n    &--min {\n      left: 0;\n    }\n\n    &--max {\n      right: 0;\n    }\n  }\n\n  .choropleth-map--has-cursor &__bound {\n    color: $text-muted;\n    opacity: 0.6;\n  }\n\n  &__cursor {\n    font-weight: bold;\n    transform: translateX(-50%);\n    left: 50%;\n\n    &:after {\n      content: '';\n      border: 5px solid transparent;\n      border-top-color: var(--dark, currentColor);\n      position: absolute;\n      left: 50%;\n      top: 100%;\n      transform: translateX(-50%);\n    }\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { create } from 'd3-selection'\nimport { format } from 'd3-format'\nimport {\n  ref,\n  computed,\n  onMounted,\n  watch,\n  nextTick,\n  toRef\n} from 'vue'\n\nimport { useLegendScale } from '@/composables/useLegendScale'\nimport type { ColorScaleFn } from '@/composables/useLegendScale'\n\ndefineOptions({\n  name: 'ScaleLegend'\n})\n\nexport interface LegendScaleProps {\n  width?: number\n  height?: number\n  cursorValue?: number | null\n  max?: number\n  min?: number\n  colorScale?: ColorScaleFn | string\n  colorScaleEnd?: string\n  colorScaleStart?: string\n}\n\nconst props = withDefaults(defineProps<LegendScaleProps>(), {\n  width: 150,\n  height: 16,\n  cursorValue: null,\n  max: 100,\n  min: 0,\n  colorScale: 'scaleLinear',\n  colorScaleEnd: () => {\n    const computedStyle = window.getComputedStyle(document.body)\n    return computedStyle.getPropertyValue('--bs-primary') || '#000'\n  },\n  colorScaleStart: '#fff'\n})\n\nconst {\n  colorScaleFunction,\n  widthScale,\n  widthScaleColor,\n  colorScaleWidthRange,\n  hasCursor,\n  cursorLeft\n} = useLegendScale({\n  width: toRef(() => props.width),\n  min: toRef(() => props.min),\n  max: toRef(() => props.max),\n  cursorValue: toRef(() => props.cursorValue),\n  colorScale: toRef(() => props.colorScale),\n  colorScaleStart: toRef(() => props.colorScaleStart),\n  colorScaleEnd: toRef(() => props.colorScaleEnd)\n})\n\nconst cursorWrapperOffset = ref(0)\nconst mounted = ref(false)\nconst el = ref<Element | null>(null)\n\nconst classList = computed((): { 'scale-legend--has-cursor': boolean } => {\n  return {\n    'scale-legend--has-cursor': hasCursor.value\n  }\n})\n\nconst cursorValue = toRef(() => props.cursorValue)\n\nonMounted(async () => {\n  await nextTick()\n  setCursorWrapperOffset()\n  setColorScaleCanvas()\n  mounted.value = true\n})\n\nconst colorScaleBaseCanvas = computed((): HTMLCanvasElement | null => {\n  return create('canvas')\n    .attr('width', props.width)\n    .attr('height', props.height)\n    .node()\n})\n\nconst colorScaleContext = computed((): CanvasRenderingContext2D | null => {\n  return colorScaleBaseCanvas.value?.getContext('2d') ?? null\n})\n\nconst colorScaleBase64 = computed((): string | undefined => {\n  if (mounted.value) {\n    return colorScaleBaseCanvas.value?.toDataURL() ?? undefined\n  }\n  return undefined\n})\n\nconst formatNumber = format(',')\n\nfunction setCursorWrapperOffset(): void {\n  const cursor = el.value?.querySelector('.scale-legend__cursor')\n  if (cursor && el.value) {\n    const { x: cursorX, width: cursorWidth }\n      = cursor.getBoundingClientRect()\n    const { x: legendX, width: legendWidth }\n      = el.value.getBoundingClientRect()\n    const left = legendX - cursorX - 6\n    const right = legendX + legendWidth - (cursorX + cursorWidth) + 6\n    cursorWrapperOffset.value = Math.max(0, left) || Math.min(0, right)\n  }\n  else {\n    cursorWrapperOffset.value = 0\n  }\n}\n\nfunction setColorScaleCanvas(): void {\n  if (!colorScaleContext.value) {\n    return\n  }\n  for (const x of colorScaleWidthRange.value) {\n    colorScaleContext.value.fillStyle = widthScaleColor.value(x)\n    colorScaleContext.value.fillRect(x, 0, 1, props.height)\n  }\n}\n\nwatch(cursorValue, async () => {\n  await nextTick()\n  setCursorWrapperOffset()\n})\n\ndefineExpose({\n  widthScale,\n  colorScaleFunction,\n  widthScaleColor,\n  hasCursor,\n  cursorLeft\n})\n</script>\n\n<template>\n  <div\n    ref=\"el\"\n    :class=\"classList\"\n    class=\"scale-legend\"\n  >\n    <div class=\"scale-legend__bound scale-legend__bound--min\">\n      <slot\n        name=\"legend-cursor-min\"\n        v-bind=\"{ min }\"\n      >\n        {{ formatNumber(min) }}\n      </slot>\n    </div>\n    <img\n      :height=\"height\"\n      :src=\"colorScaleBase64\"\n      :width=\"width\"\n      class=\"scale-legend__scale\"\n      alt=\"legend scale\"\n    >\n    <div class=\"scale-legend__bound scale-legend__bound--max\">\n      <slot\n        name=\"legend-cursor-max\"\n        v-bind=\"{ max }\"\n      >\n        {{ formatNumber(max) }}\n      </slot>\n    </div>\n    <div\n      v-if=\"hasCursor\"\n      :style=\"{ left: cursorLeft }\"\n      class=\"scale-legend__cursor\"\n    >\n      <div\n        :style=\"{ transform: `translateX(${cursorWrapperOffset}px)` }\"\n        class=\"scale-legend__cursor__wrapper\"\n      >\n        <slot\n          name=\"cursor\"\n          v-bind=\"{ value: cursorValue }\"\n        >\n          {{ formatNumber(cursorValue ?? 0) }}\n        </slot>\n      </div>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n\n.scale-legend {\n  position: relative;\n  display: inline-block;\n\n  &__bound,\n  &__cursor {\n    position: absolute;\n    bottom: 100%;\n    font-size: 0.8rem;\n\n    &--min {\n      left: 0;\n    }\n\n    &--max {\n      right: 0;\n    }\n  }\n\n  .choropleth-map--has-cursor &__bound {\n    color: $text-muted;\n    opacity: 0.6;\n  }\n\n  &__cursor {\n    font-weight: bold;\n    transform: translateX(-50%);\n    left: 50%;\n\n    &:after {\n      content: '';\n      border: 5px solid transparent;\n      border-top-color: var(--dark, currentColor);\n      position: absolute;\n      left: 50%;\n      top: 100%;\n      transform: translateX(-50%);\n    }\n  }\n}\n</style>\n","import clamp from 'lodash/clamp'\nimport { computed, toValue } from 'vue'\nimport type { ComputedRef, MaybeRefOrGetter } from 'vue'\n\n/**\n * Reactive inputs driving the pagination derivation. They mirror the props\n * shared by the pagination components, accepted as plain values, refs or\n * getters so the composable stays adaptable to how the caller wires its state.\n */\nexport interface UsePaginationOptions {\n  /**\n   * The current page, 1-based. Accepts a number or a numeric string (as it may\n   * come straight from a `v-model` bound to a text input).\n   */\n  currentPage: MaybeRefOrGetter<number | string>\n  /**\n   * Total number of rows spread across the pages.\n   */\n  totalRows: MaybeRefOrGetter<number>\n  /**\n   * Number of rows displayed per page.\n   */\n  perPage: MaybeRefOrGetter<number>\n  /**\n   * Explicit number of pages. When `null` (the default), the page count is\n   * derived from `totalRows` and `perPage`; otherwise this value wins.\n   */\n  pages?: MaybeRefOrGetter<number | string | null>\n}\n\n/**\n * Reactive API returned by {@link usePagination}.\n */\nexport interface UsePagination {\n  /**\n   * The current page coerced to a number.\n   */\n  pageValue: ComputedRef<number>\n  /**\n   * The total number of pages. Derived from `totalRows` / `perPage` unless an\n   * explicit `pages` input is provided.\n   */\n  numberOfPages: ComputedRef<number>\n  /**\n   * The 1-based index of the last row covered by the current page\n   * (`pageValue * perPage`).\n   */\n  lastRangeRow: ComputedRef<number>\n  /**\n   * Whether a page exists before the current one (i.e. not on the first page).\n   */\n  hasFirst: ComputedRef<boolean>\n  /**\n   * Whether a previous page exists. Alias of {@link UsePagination.hasFirst}.\n   */\n  hasPrevious: ComputedRef<boolean>\n  /**\n   * Whether a page exists after the current one (i.e. not on the last page).\n   */\n  hasLast: ComputedRef<boolean>\n  /**\n   * Whether a next page exists. Alias of {@link UsePagination.hasLast}.\n   */\n  hasNext: ComputedRef<boolean>\n  /**\n   * Clamps an arbitrary (possibly fractional or out-of-range) page number to a\n   * valid integer page within `[1, numberOfPages]`.\n   *\n   * @param page - The candidate page number.\n   * @returns The page clamped to the valid range, floored to an integer.\n   */\n  clampPage: (page: number) => number\n}\n\n/**\n * Owns the page-range math shared by the pagination components: the total page\n * count, the normalized current page, the row range it covers, and the\n * navigation bound flags. The derivation is pure and deterministic — identical\n * inputs always produce identical outputs — so it holds no DOM nor i18n state.\n *\n * This composable is internal to the library and not exported from the public\n * entry point; consume it from a relative path.\n *\n * @param options - Reactive pagination inputs (see {@link UsePaginationOptions}).\n * @returns The {@link UsePagination} API of derived page math and the\n *   {@link UsePagination.clampPage} helper.\n * @example\n * import { usePagination } from '@/composables/usePagination'\n *\n * const { numberOfPages, hasNext, clampPage } = usePagination({\n *   currentPage: () => modelValue.value,\n *   totalRows: () => props.totalRows,\n *   perPage: () => props.perPage,\n *   pages: () => props.pages\n * })\n */\nexport function usePagination(options: UsePaginationOptions): UsePagination {\n  const { currentPage, totalRows, perPage, pages } = options\n\n  const pageValue = computed((): number => +toValue(currentPage))\n\n  // Honor an explicit page count when provided, otherwise derive it from the\n  // total rows and the page size.\n  const numberOfPages = computed((): number => {\n    const explicitPages = toValue(pages)\n    if (explicitPages == null) {\n      return Math.ceil(toValue(totalRows) / toValue(perPage))\n    }\n    return Number(explicitPages)\n  })\n\n  const lastRangeRow = computed((): number => pageValue.value * toValue(perPage))\n\n  const hasFirst = computed((): boolean => pageValue.value > 1)\n  const hasPrevious = computed((): boolean => hasFirst.value)\n\n  const hasLast = computed((): boolean => pageValue.value < numberOfPages.value)\n  const hasNext = computed((): boolean => hasLast.value)\n\n  const clampPage = (page: number): number => {\n    return clamp(Math.floor(page), 1, numberOfPages.value)\n  }\n\n  return {\n    pageValue,\n    numberOfPages,\n    lastRangeRow,\n    hasFirst,\n    hasPrevious,\n    hasLast,\n    hasNext,\n    clampPage\n  }\n}\n\nexport default usePagination\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\n\nimport { BPagination } from 'bootstrap-vue-next'\n\nimport AppIcon from '@/components/App/AppIcon.vue'\nimport IPhCaretLeft from '~icons/ph/caret-left'\nimport IPhCaretRight from '~icons/ph/caret-right'\nimport { SIZE } from '@/enums'\nimport { usePagination } from '@/composables/usePagination'\nimport { resolveSize, type SizeWithMd } from '@/utils/size'\n\n/**\n * Define options\n */\ndefineOptions({\n  name: 'CustomPagination'\n})\n\nexport interface PaginationProps {\n  /**\n   * Total items to be stored in pages\n   */\n  totalRows?: number\n  /**\n   * Sets the quantity of items per page\n   */\n  perPage?: number\n  /**\n   * Grabs and syncs the currentPage variable passed down from the parent in v-model\n   */\n  modelValue?: number\n  /**\n   * Displays the pagination element in pills styling as opposed to the default boxes\n   */\n  pills?: boolean\n  /**\n   * Set the size of the input: 'sm', 'md' (default), or 'lg'.\n   */\n  size?: SizeWithMd\n  /**\n   * Compact layout\n   */\n  compact?: boolean\n  /**\n   * (Optional) Number of page. Property `size` is required for this to work\n   * properly. If `pages` is empty, it will be calculated using the size.\n   */\n  pages?: number | string | null\n}\n\nconst props = withDefaults(defineProps<PaginationProps>(), {\n  totalRows: 0,\n  perPage: 20,\n  modelValue: 1,\n  pills: false,\n  size: SIZE.md,\n  compact: false,\n  pages: null\n})\n\nconst emit = defineEmits(['update:modelValue'])\n\nconst { t } = useI18n()\nconst customPaginationForm = ref<HTMLFormElement | null>(null)\nconst currentPageInput = ref('')\nconst invalidNumberError = t('custom-pagination.invalid-number-error')\nconst errors = ref<string[]>([])\n\nconst inputPlaceholder = computed((): string => {\n  const compact = props.compact ? 'compact-' : ''\n  return t(`custom-pagination.${compact}placeholder`) as string\n})\n\n// Page count shared with the other pagination components. Only the derived\n// total is reused here; the jump form keeps its own reject-on-invalid logic.\nconst { numberOfPages } = usePagination({\n  currentPage: () => props.modelValue,\n  totalRows: () => props.totalRows,\n  perPage: () => props.perPage,\n  pages: () => props.pages\n})\n\nconst paginationClassList = computed((): string[] => {\n  return props.size === SIZE.sm ? ['float-end', 'me-1'] : []\n})\n\nconst resolvedSize = computed(() => resolveSize(props.size))\n\nfunction applyJumpFormPage(): void {\n  const number = isNaN(parseInt(currentPageInput.value))\n    ? 0\n    : parseInt(currentPageInput.value)\n  errors.value = []\n  if (number > numberOfPages.value || number < 1) {\n    errors.value.push(invalidNumberError)\n  }\n  if (errors.value.length === 0) {\n    updateModelValue(parseInt(currentPageInput.value))\n  }\n}\n\nfunction updateModelValue(value: string | number): void {\n  emit('update:modelValue', value)\n}\n\n// Expose the page-form internals so consumers (and the test suite) can read the\n// derived page count and drive the page-jump form programmatically.\ndefineExpose({\n  numberOfPages,\n  currentPageInput,\n  applyJumpFormPage\n})\n</script>\n\n<template>\n  <div\n    class=\"custom-pagination container-fluid\"\n    :class=\"{\n      'custom-pagination--compact': compact,\n      'custom-pagination--pills': pills\n    }\"\n  >\n    <div\n      class=\"row justify-content-center align-items-stretch\"\n      :class=\"{ 'no-gutters': compact && !pills }\"\n    >\n      <div class=\"col-auto custom-pagination__pages\">\n        <b-pagination\n          :total-rows=\"perPage * numberOfPages\"\n          :per-page=\"perPage\"\n          :model-value=\"modelValue\"\n          :pills=\"pills\"\n          :class=\"paginationClassList\"\n          :size=\"resolvedSize\"\n          class=\"m-0\"\n          first-number\n          last-number\n          @update:model-value=\"updateModelValue\"\n        >\n          <template #prev-text=\"{ disabled, index, page }\">\n            <!-- @slot The 'Go to previous page' button content -->\n            <slot\n              name=\"prev-text\"\n              v-bind=\"{ disabled, index, page }\"\n            >\n              <app-icon size=\"0.75em\">\n                <i-ph-caret-left />\n              </app-icon>\n            </slot>\n          </template>\n          <template #next-text=\"{ disabled, index, page }\">\n            <!-- @slot The 'Go to next page' button content -->\n            <slot\n              name=\"next-text\"\n              v-bind=\"{ disabled, index, page }\"\n            >\n              <app-icon size=\"0.75em\">\n                <i-ph-caret-right />\n              </app-icon>\n            </slot>\n          </template>\n          <template #page=\"{ active, content, disabled, index, page }\">\n            <!-- @slot Page number button content -->\n            <slot\n              name=\"page\"\n              v-bind=\"{ active, content, disabled, index, page }\"\n            />\n          </template>\n          <template #ellipsis-text>\n            <!-- @slot The '...' indicator content. Overrides the `ellipsis-text` prop -->\n            <slot name=\"ellipsis-text\" />\n          </template>\n        </b-pagination>\n      </div>\n      <div class=\"col-auto\">\n        <div class=\"custom-pagination__form\">\n          <form\n            ref=\"customPaginationForm\"\n            class=\"input-group\"\n            @submit.prevent=\"applyJumpFormPage\"\n          >\n            <b-input-group :size=\"resolvedSize\">\n              <input\n                v-model=\"currentPageInput\"\n                type=\"number\"\n                class=\"form-control\"\n                :placeholder=\"inputPlaceholder\"\n                aria-label=\"Jump to page\"\n              >\n              <button\n                v-if=\"!compact\"\n                class=\"btn btn-secondary btn-sm\"\n                type=\"submit\"\n              >\n                <span class=\"px-1 py-3\"> Go </span>\n              </button>\n            </b-input-group>\n          </form>\n          <template v-if=\"!compact\">\n            <small\n              v-if=\"errors.length\"\n              id=\"invalid-number-error\"\n              class=\"custom-pagination__errors float-start mt-1 ms-1 text-danger\"\n            >\n              {{ errors[0] }}\n            </small>\n            <small\n              v-else\n              class=\"custom-pagination__number-of-pages float-start mt-1 ms-1 text-muted\"\n            >\n              {{ t('custom-pagination.total-pages', { count: numberOfPages }) }}\n            </small>\n          </template>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n\n.custom-pagination {\n  /* Chrome, Safari, Edge, Opera */\n  input::-webkit-outer-spin-button,\n  input::-webkit-inner-spin-button {\n    -webkit-appearance: none;\n    margin: 0;\n  }\n\n  /* Firefox */\n  input[type='number'] {\n    -moz-appearance: textfield;\n  }\n\n  &:not(.custom-pagination--compact) &__pages {\n    border-right: 1px solid $border-color;\n  }\n\n  &--compact &__pages:deep(.page-item:last-of-type .page-link) {\n    border-right: 0;\n    border-radius: 0;\n  }\n\n  &--compact &__form {\n    max-width: 105px;\n\n    &,\n    & > .input-group {\n      height: 100%;\n    }\n  }\n\n  &--compact &__form input {\n    height: 100%;\n  }\n\n  &--compact > .row {\n    align-items: center;\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\n\nimport { BPagination } from 'bootstrap-vue-next'\n\nimport AppIcon from '@/components/App/AppIcon.vue'\nimport IPhCaretLeft from '~icons/ph/caret-left'\nimport IPhCaretRight from '~icons/ph/caret-right'\nimport { SIZE } from '@/enums'\nimport { usePagination } from '@/composables/usePagination'\nimport { resolveSize, type SizeWithMd } from '@/utils/size'\n\n/**\n * Define options\n */\ndefineOptions({\n  name: 'CustomPagination'\n})\n\nexport interface PaginationProps {\n  /**\n   * Total items to be stored in pages\n   */\n  totalRows?: number\n  /**\n   * Sets the quantity of items per page\n   */\n  perPage?: number\n  /**\n   * Grabs and syncs the currentPage variable passed down from the parent in v-model\n   */\n  modelValue?: number\n  /**\n   * Displays the pagination element in pills styling as opposed to the default boxes\n   */\n  pills?: boolean\n  /**\n   * Set the size of the input: 'sm', 'md' (default), or 'lg'.\n   */\n  size?: SizeWithMd\n  /**\n   * Compact layout\n   */\n  compact?: boolean\n  /**\n   * (Optional) Number of page. Property `size` is required for this to work\n   * properly. If `pages` is empty, it will be calculated using the size.\n   */\n  pages?: number | string | null\n}\n\nconst props = withDefaults(defineProps<PaginationProps>(), {\n  totalRows: 0,\n  perPage: 20,\n  modelValue: 1,\n  pills: false,\n  size: SIZE.md,\n  compact: false,\n  pages: null\n})\n\nconst emit = defineEmits(['update:modelValue'])\n\nconst { t } = useI18n()\nconst customPaginationForm = ref<HTMLFormElement | null>(null)\nconst currentPageInput = ref('')\nconst invalidNumberError = t('custom-pagination.invalid-number-error')\nconst errors = ref<string[]>([])\n\nconst inputPlaceholder = computed((): string => {\n  const compact = props.compact ? 'compact-' : ''\n  return t(`custom-pagination.${compact}placeholder`) as string\n})\n\n// Page count shared with the other pagination components. Only the derived\n// total is reused here; the jump form keeps its own reject-on-invalid logic.\nconst { numberOfPages } = usePagination({\n  currentPage: () => props.modelValue,\n  totalRows: () => props.totalRows,\n  perPage: () => props.perPage,\n  pages: () => props.pages\n})\n\nconst paginationClassList = computed((): string[] => {\n  return props.size === SIZE.sm ? ['float-end', 'me-1'] : []\n})\n\nconst resolvedSize = computed(() => resolveSize(props.size))\n\nfunction applyJumpFormPage(): void {\n  const number = isNaN(parseInt(currentPageInput.value))\n    ? 0\n    : parseInt(currentPageInput.value)\n  errors.value = []\n  if (number > numberOfPages.value || number < 1) {\n    errors.value.push(invalidNumberError)\n  }\n  if (errors.value.length === 0) {\n    updateModelValue(parseInt(currentPageInput.value))\n  }\n}\n\nfunction updateModelValue(value: string | number): void {\n  emit('update:modelValue', value)\n}\n\n// Expose the page-form internals so consumers (and the test suite) can read the\n// derived page count and drive the page-jump form programmatically.\ndefineExpose({\n  numberOfPages,\n  currentPageInput,\n  applyJumpFormPage\n})\n</script>\n\n<template>\n  <div\n    class=\"custom-pagination container-fluid\"\n    :class=\"{\n      'custom-pagination--compact': compact,\n      'custom-pagination--pills': pills\n    }\"\n  >\n    <div\n      class=\"row justify-content-center align-items-stretch\"\n      :class=\"{ 'no-gutters': compact && !pills }\"\n    >\n      <div class=\"col-auto custom-pagination__pages\">\n        <b-pagination\n          :total-rows=\"perPage * numberOfPages\"\n          :per-page=\"perPage\"\n          :model-value=\"modelValue\"\n          :pills=\"pills\"\n          :class=\"paginationClassList\"\n          :size=\"resolvedSize\"\n          class=\"m-0\"\n          first-number\n          last-number\n          @update:model-value=\"updateModelValue\"\n        >\n          <template #prev-text=\"{ disabled, index, page }\">\n            <!-- @slot The 'Go to previous page' button content -->\n            <slot\n              name=\"prev-text\"\n              v-bind=\"{ disabled, index, page }\"\n            >\n              <app-icon size=\"0.75em\">\n                <i-ph-caret-left />\n              </app-icon>\n            </slot>\n          </template>\n          <template #next-text=\"{ disabled, index, page }\">\n            <!-- @slot The 'Go to next page' button content -->\n            <slot\n              name=\"next-text\"\n              v-bind=\"{ disabled, index, page }\"\n            >\n              <app-icon size=\"0.75em\">\n                <i-ph-caret-right />\n              </app-icon>\n            </slot>\n          </template>\n          <template #page=\"{ active, content, disabled, index, page }\">\n            <!-- @slot Page number button content -->\n            <slot\n              name=\"page\"\n              v-bind=\"{ active, content, disabled, index, page }\"\n            />\n          </template>\n          <template #ellipsis-text>\n            <!-- @slot The '...' indicator content. Overrides the `ellipsis-text` prop -->\n            <slot name=\"ellipsis-text\" />\n          </template>\n        </b-pagination>\n      </div>\n      <div class=\"col-auto\">\n        <div class=\"custom-pagination__form\">\n          <form\n            ref=\"customPaginationForm\"\n            class=\"input-group\"\n            @submit.prevent=\"applyJumpFormPage\"\n          >\n            <b-input-group :size=\"resolvedSize\">\n              <input\n                v-model=\"currentPageInput\"\n                type=\"number\"\n                class=\"form-control\"\n                :placeholder=\"inputPlaceholder\"\n                aria-label=\"Jump to page\"\n              >\n              <button\n                v-if=\"!compact\"\n                class=\"btn btn-secondary btn-sm\"\n                type=\"submit\"\n              >\n                <span class=\"px-1 py-3\"> Go </span>\n              </button>\n            </b-input-group>\n          </form>\n          <template v-if=\"!compact\">\n            <small\n              v-if=\"errors.length\"\n              id=\"invalid-number-error\"\n              class=\"custom-pagination__errors float-start mt-1 ms-1 text-danger\"\n            >\n              {{ errors[0] }}\n            </small>\n            <small\n              v-else\n              class=\"custom-pagination__number-of-pages float-start mt-1 ms-1 text-muted\"\n            >\n              {{ t('custom-pagination.total-pages', { count: numberOfPages }) }}\n            </small>\n          </template>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n\n.custom-pagination {\n  /* Chrome, Safari, Edge, Opera */\n  input::-webkit-outer-spin-button,\n  input::-webkit-inner-spin-button {\n    -webkit-appearance: none;\n    margin: 0;\n  }\n\n  /* Firefox */\n  input[type='number'] {\n    -moz-appearance: textfield;\n  }\n\n  &:not(.custom-pagination--compact) &__pages {\n    border-right: 1px solid $border-color;\n  }\n\n  &--compact &__pages:deep(.page-item:last-of-type .page-link) {\n    border-right: 0;\n    border-radius: 0;\n  }\n\n  &--compact &__form {\n    max-width: 105px;\n\n    &,\n    & > .input-group {\n      height: 100%;\n    }\n  }\n\n  &--compact &__form input {\n    height: 100%;\n  }\n\n  &--compact > .row {\n    align-items: center;\n  }\n}\n</style>\n","const e={maxWidth:void 0,minWidth:void 0,comfortZone:\"0px\",watchWindowSize:!1,windowResizeHandlerDebounceTime:150,disableNonInputWarning:!1},i=e=>{const{mirror:i,options:t}=e;t.maxWidth&&(e.style.maxWidth=t.maxWidth),t.minWidth&&(e.style.minWidth=t.minWidth);let n=e.value;for(n||(n=e.placeholder||\"\");i.childNodes.length;)i.removeChild(i.childNodes[0]);i.appendChild(document.createTextNode(n));const o=i.scrollWidth+2;o!=e.scrollWidth&&(e.style.width=`${o}px`)},t=e=>{const i=window.getComputedStyle(e),{options:t}=e;Object.assign(e.mirror.style,{position:\"absolute\",top:\"0\",left:\"0\",visibility:\"hidden\",height:\"0\",overflow:\"hidden\",whiteSpace:\"pre\",fontSize:i.fontSize,fontFamily:i.fontFamily,fontWeight:i.fontWeight,fontStyle:i.fontStyle,letterSpacing:i.letterSpacing,textTransform:i.textTransform,paddingRight:`calc(${t.comfortZone} + ${i.paddingRight} + ${i.borderRightWidth})`,paddingLeft:`calc(${i.paddingLeft} + ${i.borderLeftWidth})`})},n=e=>{t(e),i(e)};var o={beforeMount:function(i,t){var n;if(i.options=(n=t.value,Object.assign({},e,n)),!i.options.disableNonInputWarning&&\"INPUT\"!==i.tagName.toLocaleUpperCase())throw new Error(\"v-input-autowidth can only be used on input elements.\")},mounted:function(e,o,r){const d=Object.prototype.hasOwnProperty.call(r.props,\"@onUpdate:modelValue\");if(e.sizerFunc=t=>i(e),e.mirror=document.createElement(\"div\"),t(e),e.mirror.setAttribute(\"aria-hidden\",\"true\"),document.body.appendChild(e.mirror),n(e),d||e.addEventListener(\"input\",e.sizerFunc),e.options.watchWindowSize&&void 0!==e.options.windowResizeHandlerDebounceTime){const i=i=>n(e);e.windowResizeHandler=((e,i)=>{let t;return(...n)=>{let o;return t&&clearTimeout(t),t=setTimeout((()=>{o=e(...n)}),i),o}})(i,e.options.windowResizeHandlerDebounceTime),window.addEventListener(\"resize\",e.windowResizeHandler,{passive:!0})}},updated:function(e){e.sizerFunc&&e.sizerFunc()},unmounted:function(e){document.body.removeChild(e.mirror),e.sizerFunc&&e.removeEventListener(\"input\",e.sizerFunc),e.options.watchWindowSize&&e.windowResizeHandler&&window.removeEventListener(\"resize\",e.windowResizeHandler)}};const r={install:e=>{Number(e.version.split(\".\")[0])<3&&console.warn(\"This plugin requires Vue 3\"),e.directive(\"autowidth\",o)}};export{o as directive,r as plugin};\n","/**\n * floatingUI from https://github.com/bootstrap-vue-next/bootstrap-vue-next/blob/main/packages/bootstrap-vue-next/src/utils/floatingUi.ts\n * It's no longer exported by BVN so we need to copy it.\n */\n\nimport type { Boundary, Placement, RootBoundary } from '@floating-ui/vue'\nexport { autoUpdate } from '@floating-ui/vue'\n\nimport { type DirectiveBinding, h, render } from 'vue'\nimport { BPopover, BPopoverProps } from 'bootstrap-vue-next'\n\n/**\n * Map a Floating UI placement to its Bootstrap placement keyword.\n *\n * @param placement - The Floating UI placement (e.g. `'left-start'`).\n * @returns The Bootstrap placement keyword (`'start'`, `'end'`, or the side).\n */\nexport const resolveBootstrapPlacement = (placement: Placement): string => {\n  const [side] = placement.split('-')\n  switch (side) {\n    case 'left':\n      return 'start'\n    case 'right':\n      return 'end'\n    default:\n      return side\n  }\n}\n\n/**\n * Map a Floating UI placement to its Bootstrap caret direction keyword.\n *\n * @param placement - The Floating UI placement (e.g. `'top-start'`).\n * @returns The Bootstrap caret keyword (`'start'`, `'end'`, `'up'`, `'down'`, or the side).\n */\nexport const resolveBootstrapCaret = (placement: Placement): string => {\n  const [side] = placement.split('-')\n  switch (side) {\n    case 'left':\n      return 'start'\n    case 'right':\n      return 'end'\n    case 'top':\n      return 'up'\n    case 'bottom':\n      return 'down'\n    default:\n      return side\n  }\n}\n\n/**\n * Tell whether a directive binding leaves the popover/tooltip active.\n *\n * @param values - The directive binding value.\n * @returns `false` only when the value is an object with `active: false`.\n */\nexport const resolveActiveStatus = (values: DirectiveBinding['value']): boolean =>\n  typeof values !== 'object' || values.active !== false\n\n/**\n * Resolve the title and body content for a popover/tooltip directive.\n *\n * Falls back to the element's `title` attribute (moved to `data-original-title`)\n * when the binding provides no content of its own.\n *\n * @param values - The directive binding value.\n * @param el - The element the directive is bound to.\n * @returns The resolved `title` and `body`, or an empty object when inactive.\n */\nexport const resolveContent = (\n  values: DirectiveBinding['value'],\n  el: HTMLElement\n): { title?: string, body?: string } => {\n  const isActive = resolveActiveStatus(values)\n  if (!isActive) {\n    return {}\n  }\n\n  const missingBindingValue\n    = typeof values === 'undefined'\n      || (typeof values === 'object' && !values.title && !values.content && !values.body)\n  const title = el.getAttribute('title') || el.getAttribute('data-original-title')\n  if (missingBindingValue) {\n    if (title) {\n      el.removeAttribute('title')\n      el.setAttribute('data-original-title', title)\n\n      return {\n        body: title,\n      }\n    }\n    return {}\n  }\n  if (typeof values === 'string') {\n    return {\n      body: values,\n    }\n  }\n\n  // TODO: remove this deprecation warning after 2025-07.\n  if (values?.content) {\n    console.warn('v-b-popover/v-b-tooltip: `content` is deprecated, use `body` instead')\n  }\n\n  return {\n    title: values?.title ? values?.title : undefined,\n    body: values?.body ? values?.body : values?.content ? values?.content : undefined,\n  }\n}\n\n/**\n * Build the `BPopover` props from a directive binding and its element.\n *\n * @param binding - The directive binding, whose modifiers drive placement and behavior.\n * @param el - The element the popover targets.\n * @returns The props passed to the rendered `BPopover`.\n */\nexport const resolveDirectiveProps = (\n  binding: Readonly<DirectiveBinding>,\n  el: Readonly<HTMLElement>\n) => ({\n  target: el,\n  modelValue: binding.modifiers.show,\n  inline: binding.modifiers.inline,\n  click: binding.modifiers.click,\n  realtime: binding.modifiers.realtime,\n  lazy: binding.modifiers.lazy,\n  placement: binding.modifiers.left\n    ? 'left'\n    : binding.modifiers.right\n      ? 'right'\n      : binding.modifiers.bottom\n        ? 'bottom'\n        : binding.modifiers.top\n          ? 'top'\n          : undefined,\n  ...(typeof binding.value === 'object' ? binding.value : undefined),\n  ...(binding.modifiers.interactive ? { noninteractive: false } : undefined),\n  title: null,\n  body: null,\n})\n\nexport interface ElementWithPopper extends HTMLElement {\n  $__element?: HTMLElement\n  $__binding?: string\n}\n\n/**\n * Render a `BPopover` into a fresh container placed relative to the element.\n *\n * The container goes on `document.body`, inside the element, or after it,\n * depending on the `body`/`child` modifiers, and is stored on the element\n * for later teardown.\n *\n * @param el - The element the popover is bound to.\n * @param binding - The directive binding whose modifiers pick the mount point.\n * @param props - The `BPopover` props to render.\n */\nexport const bind = (\n  el: ElementWithPopper,\n  binding: Readonly<DirectiveBinding>,\n  props: BPopoverProps\n) => {\n  const div = document.createElement('span')\n  if (binding.modifiers.body) {\n    document.body.appendChild(div)\n  }\n  else if (binding.modifiers.child) {\n    el.appendChild(div)\n  }\n  else {\n    el.parentNode?.insertBefore(div, el.nextSibling)\n  }\n  render(h(BPopover, props), div)\n  el.$__element = div\n}\n\n/**\n * Unmount the popover previously rendered by `bind` and remove its container.\n *\n * @param el - The element the popover was bound to.\n */\nexport const unbind = (el: ElementWithPopper) => {\n  const div = el.$__element\n  if (div) {\n    render(null, div)\n  }\n  setTimeout(() => {\n    div?.remove()\n  }, 0)\n  delete el.$__element\n}\n\n/**\n * Tell whether an input is a Floating UI `Boundary`.\n *\n * @param input - The value to test.\n * @returns `true` for `'clippingAncestors'`, an `Element`, or an array.\n */\nexport const isBoundary = (input: unknown): input is Boundary =>\n  input === 'clippingAncestors' || input instanceof Element || Array.isArray(input)\n\n/**\n * Tell whether an input is a Floating UI `RootBoundary` rather than a `Boundary`.\n *\n * @param input - The value to test.\n * @returns `true` when the value is not a `Boundary`.\n */\nexport const isRootBoundary = (input: Boundary | RootBoundary): input is RootBoundary =>\n  !isBoundary(input)\n","import { type Directive, type DirectiveBinding } from 'vue'\nimport { type BPopoverProps } from 'bootstrap-vue-next'\n\nimport {\n  bind,\n  type ElementWithPopper,\n  resolveActiveStatus,\n  resolveContent,\n  resolveDirectiveProps,\n  unbind,\n} from '@/utils/floatingUi'\n\ninterface ElementWithResizeObserver extends ElementWithPopper {\n  $__ellipsisResizeObserver?: ResizeObserver\n}\n\n// An element is truncated when its rendered width is narrower than the width\n// its content would occupy without clipping (e.g. `text-overflow: ellipsis`).\nconst isTruncated = (el: HTMLElement): boolean => el.offsetWidth < el.scrollWidth\n\n/**\n * Show the tooltip only while the element is truncated; remove it otherwise.\n *\n * @param el - The element whose truncation state drives the tooltip.\n * @param binding - The directive binding passed to the Vue hook.\n * @param props - Resolved popper props (title, tooltip flag, placement, …).\n */\nfunction syncTooltipWithTruncation(\n  el: HTMLElement,\n  binding: DirectiveBinding,\n  props: BPopoverProps,\n): void {\n  if (isTruncated(el)) {\n    bind(el, binding, props)\n  }\n  else {\n    unbind(el)\n  }\n}\n\n/**\n * Watch the element for size changes and keep its tooltip in sync.\n *\n * The observer is returned so the caller can store it on the element and\n * disconnect it when the directive unmounts.\n *\n * @param el - The element to observe.\n * @param binding - The directive binding passed to the Vue hook.\n * @param props - Resolved popper props applied when binding the tooltip.\n * @returns The active `ResizeObserver` observing the element.\n */\nfunction observeTruncation(\n  el: HTMLElement,\n  binding: DirectiveBinding,\n  props: BPopoverProps,\n): ResizeObserver {\n  const resizeObserver = new ResizeObserver((entries) => {\n    for (const entry of entries) {\n      syncTooltipWithTruncation(entry.target as HTMLElement, binding, props)\n    }\n  })\n  resizeObserver.observe(el)\n  return resizeObserver\n}\n\n/**\n * Directive that attaches a tooltip to an element, but only while its text is\n * truncated (overflowing its box). The tooltip appears when the element is\n * clipped and disappears once it fits, tracked live through a `ResizeObserver`.\n *\n * @example\n * ```html\n * <div class=\"text-truncate\" v-ellipsis-tooltip title=\"Full text here\">\n *   Full text here\n * </div>\n * ```\n */\nexport default {\n  mounted(el: ElementWithResizeObserver, binding: DirectiveBinding) {\n    const tooltip = resolveActiveStatus(binding.value)\n    const text = resolveContent(binding.value, el)\n    const title = text.title ?? text.body\n    if (!tooltip) {\n      return\n    }\n    if (!title) {\n      return\n    }\n\n    // Tooltips driven by truncation must stay noninteractive so hovering the\n    // popper itself never keeps it open once the text no longer overflows.\n    const props = { noninteractive: true, ...resolveDirectiveProps(binding, el), title, tooltip }\n\n    el.$__ellipsisResizeObserver = observeTruncation(el, binding, props)\n    syncTooltipWithTruncation(el, binding, props)\n  },\n  beforeUnmount(el: ElementWithResizeObserver) {\n    el.$__ellipsisResizeObserver?.disconnect()\n    delete el.$__ellipsisResizeObserver\n    unbind(el)\n  },\n} satisfies Directive<ElementWithResizeObserver>\n","<template>\n  <div\n    class=\"tiny-pagination\"\n    :class=\"paginationClassList\"\n  >\n    <b-button\n      v-if=\"!noFirst\"\n      class=\"tiny-pagination__nav tiny-pagination__nav--bound  tiny-pagination__nav--first\"\n      :size=\"resolvedSize\"\n      :disabled=\"!hasFirst\"\n      :variant=\"navVariant\"\n      @click=\"applyFirstPage\"\n    >\n      <!-- @slot Previous button content -->\n      <slot\n        name=\"first\"\n        v-bind=\"{ modelValue, numberOfPages, hasFirst, hasPrevious, hasNext, hasLast }\"\n      >\n        <app-icon>\n          <component :is=\"firstPageIcon\" />\n        </app-icon>\n        <span class=\"visually-hidden\">{{ firstLabel ?? t('tiny-pagination.first') }}</span>\n      </slot>\n    </b-button>\n    <b-button\n      v-if=\"!noPrevious\"\n      class=\"tiny-pagination__nav\"\n      :size=\"resolvedSize\"\n      :disabled=\"!hasPrevious\"\n      :variant=\"navVariant\"\n      @click=\"applyPreviousPage\"\n    >\n      <!-- @slot Previous button content -->\n      <slot\n        name=\"previous\"\n        v-bind=\"{ modelValue, numberOfPages, hasPrevious, hasNext }\"\n      >\n        <app-icon>\n          <component :is=\"previousPageIcon\" />\n        </app-icon>\n        <span class=\"visually-hidden\">{{ previousLabel ?? t('tiny-pagination.previous') }}</span>\n      </slot>\n    </b-button>\n    <form\n      v-if=\"row\"\n      class=\"tiny-pagination__form form-inline\"\n      @submit.prevent=\"applyRowForm\"\n    >\n      <b-form-input\n        v-model=\"currentRowInput\"\n        v-input-autowidth=\"{ minWidth: '2em' }\"\n        :size=\"resolvedSize\"\n        class=\"tiny-pagination__form__input tiny-pagination__form__input--row me-1\"\n        type=\"number\"\n        step=\"1\"\n        :disabled=\"!totalRows\"\n        :min=\"1\"\n        :max=\"totalRows - 1\"\n        :aria-label=\"t('tiny-pagination.ariaRow')\"\n      />\n      <div\n        v-ellipsis-tooltip=\"{ title }\"\n        class=\"tiny-pagination__form__label\"\n      >\n        <!-- @slot Display number of rows and current range -->\n        <slot\n          name=\"number-of-rows\"\n          v-bind=\"{ modelValue, lastRangeRow, numberOfPages, totalRows }\"\n        >\n          {{ title }}\n        </slot>\n      </div>\n    </form>\n    <form\n      v-else\n      class=\"tiny-pagination__form form-inline\"\n      @submit.prevent=\"applyPageForm\"\n    >\n      <label\n        v-show=\"!compact\"\n        class=\"tiny-pagination__form__label me-1 mb-0\"\n      >\n        <!-- @slot Display page label -->\n        <slot\n          name=\"page\"\n          v-bind=\"{ modelValue, numberOfPages }\"\n        >\n          {{ t('tiny-pagination.page') }}\n        </slot>\n      </label>\n      <b-form-input\n        v-model=\"currentPageInput\"\n        v-input-autowidth=\"{ minWidth: '2em' }\"\n        :size=\"resolvedSize\"\n        class=\"tiny-pagination__form__input tiny-pagination__form__input--item me-1\"\n        type=\"number\"\n        step=\"1\"\n        :disabled=\"!totalRows\"\n        :min=\"1\"\n        :max=\"numberOfPages\"\n        :aria-label=\"inputAriaLabel ?? t('tiny-pagination.aria')\"\n      />\n      <div\n        v-ellipsis-tooltip=\"{ title }\"\n        class=\"tiny-pagination__form__label\"\n      >\n        <!-- @slot Display number of pages -->\n        <slot\n          name=\"number-of-pages\"\n          v-bind=\"{ modelValue, numberOfPages }\"\n        >\n          {{ title }}\n        </slot>\n      </div>\n    </form>\n    <b-button\n      v-if=\"!noNext\"\n      class=\"tiny-pagination__nav\"\n      :size=\"resolvedSize\"\n      :disabled=\"!hasNext\"\n      :variant=\"navVariant\"\n      @click=\"applyNextPage\"\n    >\n      <!-- @slot Next button content -->\n      <slot\n        name=\"next\"\n        v-bind=\"{ modelValue, numberOfPages, hasPrevious, hasNext }\"\n      >\n        <app-icon>\n          <component :is=\"nextPageIcon\" />\n        </app-icon>\n        <span class=\"visually-hidden\">{{ nextLabel ?? t('tiny-pagination.next') }}</span>\n      </slot>\n    </b-button>\n    <b-button\n      v-if=\"!noLast\"\n      class=\"tiny-pagination__nav tiny-pagination__nav--bound  tiny-pagination__nav--last\"\n      :size=\"resolvedSize\"\n      :disabled=\"!hasLast\"\n      :variant=\"navVariant\"\n      @click=\"applyLastPage\"\n    >\n      <!-- @slot Previous button content -->\n      <slot\n        name=\"last\"\n        v-bind=\"{ modelValue, numberOfPages, hasFirst, hasPrevious, hasNext, hasLast }\"\n      >\n        <app-icon>\n          <component :is=\"lastPageIcon\" />\n        </app-icon>\n        <span class=\"visually-hidden\">{{ lastLabel ?? t('tiny-pagination.last') }}</span>\n      </slot>\n    </b-button>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { BButton, BFormInput } from 'bootstrap-vue-next'\nimport { computed, ref, watch, type Component } from 'vue'\nimport { directive as vInputAutowidth } from 'vue-input-autowidth'\nimport { useI18n } from 'vue-i18n'\nimport type { ButtonVariant } from 'bootstrap-vue-next'\n\nimport { SIZE } from '@/enums'\nimport { usePagination } from '@/composables/usePagination'\nimport vEllipsisTooltip from '@/directives/EllipsisTooltip'\nimport { resolveSize, type SizeWithMd } from '@/utils/size'\nimport AppIcon from '@/components/App/AppIcon.vue'\nimport IPhCaretDoubleLeft from '~icons/ph/caret-double-left'\nimport IPhCaretDoubleRight from '~icons/ph/caret-double-right'\nimport IPhCaretLeft from '~icons/ph/caret-left'\nimport IPhCaretRight from '~icons/ph/caret-right'\n\n/**\n * Grabs and syncs the currentPage variable passed down from the parent in v-model\n */\nconst modelValue = defineModel<number | string>({\n  default: 1\n})\n\nexport interface PaginationTinyProps {\n  /**\n   * Total items to be stored in pages\n   */\n  totalRows?: number\n  /**\n   * Sets the quantity of items per page\n   */\n  perPage?: number\n  /**\n   * Use an input to set the row number\n   */\n  row?: boolean\n  /**\n   * Set the size of the input: 'sm', 'md' (default), or 'lg'.\n   */\n  size?: SizeWithMd\n  /**\n   * (Optional) Number of page. Property `size` is required for this to work\n   * properly. If `pages` is empty, it will be calculated using the size.\n   */\n  pages?: number | string | null\n  /**\n   * Hide navigation buttons (next and previous)\n   */\n  noNav?: boolean\n  /**\n   * Hide bounds navigation buttons (first and last)\n   */\n  noNavBounds?: boolean\n  /**\n   * Hide the first page button\n   */\n  noFirst?: boolean\n  /**\n   * Hide the last page button\n   */\n  noLast?: boolean\n  /**\n   * Hide the previous page button\n   */\n  noPrevious?: boolean\n  /**\n   * Hide the next page button\n   */\n  noNext?: boolean\n  /**\n   * Icon of the previous page button\n   */\n  previousPageIcon?: string | string[] | Component\n  /**\n   * Icon of the next page button\n   */\n  nextPageIcon?: string | string[] | Component\n  /**\n   * Icon of the first page button\n   */\n  firstPageIcon?: string | string[] | Component\n  /**\n   * Icon of the last page button\n   */\n  lastPageIcon?: string | string[] | Component\n  /**\n   * Navigation button variants\n   */\n  navVariant?: ButtonVariant\n  /**\n   * Display pagination as a block (full width)\n   */\n  block?: boolean\n  /**\n   * Compact mode with a grouped nav\n   */\n  compact?: boolean\n  /**\n   * Label for the previous page button\n   */\n  previousLabel?: string | null\n  /**\n   * Label for the next page button\n   */\n  nextLabel?: string | null\n  /**\n   * Label for the first page button\n   */\n  firstLabel?: string | null\n  /**\n   * Label for the last page button\n   */\n  lastLabel?: string | null\n  /**\n   * ARIA label for the input field\n   */\n  inputAriaLabel?: string | null\n  /**\n   * Title label for the pagination component\n   */\n  titleLabel?: string | null\n}\n\nconst props = withDefaults(defineProps<PaginationTinyProps>(), {\n  totalRows: 0,\n  perPage: 20,\n  row: false,\n  size: SIZE.md,\n  pages: null,\n  noNav: false,\n  noNavBounds: false,\n  noFirst: false,\n  noLast: false,\n  noPrevious: false,\n  noNext: false,\n  previousPageIcon: () => IPhCaretLeft,\n  nextPageIcon: () => IPhCaretRight,\n  firstPageIcon: () => IPhCaretDoubleLeft,\n  lastPageIcon: () => IPhCaretDoubleRight,\n  navVariant: 'link',\n  block: false,\n  compact: false,\n  previousLabel: null,\n  nextLabel: null,\n  firstLabel: null,\n  lastLabel: null,\n  inputAriaLabel: null,\n  titleLabel: null\n})\n\nconst { t, n } = useI18n()\n\n// Page-range math shared with the other pagination components.\nconst {\n  pageValue,\n  numberOfPages,\n  lastRangeRow,\n  hasFirst,\n  hasPrevious,\n  hasLast,\n  hasNext,\n  clampPage\n} = usePagination({\n  currentPage: modelValue,\n  totalRows: () => props.totalRows,\n  perPage: () => props.perPage,\n  pages: () => props.pages\n})\n\nconst resolvedSize = computed(() => resolveSize(props.size))\n\nconst paginationClassList = computed((): object => {\n  return {\n    [`tiny-pagination--${props.size}`]: true,\n    [`tiny-pagination--no-nav`]: props.noNav,\n    [`tiny-pagination--no-nav-bounds`]: props.noNavBounds,\n    [`tiny-pagination--block`]: props.block,\n    [`tiny-pagination--compact`]: props.compact\n  }\n})\n\nconst currentPageInput = ref<number>(0)\nconst currentRowInput = ref<number>(0)\n\nwatch(modelValue, (value: number | string) => {\n  // Update currentPageInput value based on totalRows\n  currentPageInput.value = props.totalRows ? +value : 0\n  // Determine the row offset based on the perPage value.\n  if (props.perPage === 1) {\n    currentRowInput.value = +value\n  }\n  else {\n    // Update currentRowInput value based on totalRows and calculated rowOffset\n    currentRowInput.value = props.totalRows ? +props.perPage * (+value - 1) + 1 : 0\n  }\n}, { immediate: true })\n\nconst title = computed(() => {\n  if (props.titleLabel) {\n    return props.titleLabel\n  }\n\n  if (props.row) {\n    const locales = { lastRangeRow: n(lastRangeRow.value), totalRows: n(props.totalRows) }\n\n    // Only one per page, meaning we navigate through rows one by one\n    if (props.perPage === 1) {\n      return props.compact ? '' : t('tiny-pagination.uniqueRowRange', locales, props.totalRows)\n    }\n\n    // The total is less or equal than the current row range\n    if (props.totalRows <= (props.perPage * pageValue.value)) {\n      return t('tiny-pagination.rowRangeFewer', locales, props.totalRows)\n    }\n\n    return t(props.compact ? 'tiny-pagination.compactRowRange' : 'tiny-pagination.rowRange', locales, props.totalRows)\n  }\n\n  const locales = { numberOfPages: n(numberOfPages.value) }\n\n  return t('tiny-pagination.total', locales, props.totalRows)\n})\n\nfunction applyPageForm(): void {\n  const { value } = currentPageInput\n  if (!isNaN(value as number)) {\n    modelValue.value = clampPage(+value)\n  }\n}\n\nfunction applyRowForm(): void {\n  const { value } = currentRowInput\n  if (!isNaN(value as number)) {\n    currentPageInput.value = clampPage(+value / +props.perPage + 1)\n    currentRowInput.value = +props.perPage * (+currentPageInput.value - 1) + 1\n    modelValue.value = +currentPageInput.value\n  }\n}\n\nfunction applyNextPage(): void {\n  modelValue.value = pageValue.value + 1\n}\n\nfunction applyPreviousPage(): void {\n  modelValue.value = pageValue.value - 1\n}\n\nfunction applyFirstPage(): void {\n  modelValue.value = 1\n}\n\nfunction applyLastPage(): void {\n  modelValue.value = numberOfPages.value\n}\n\n// Expose the page-form internals so consumers (and the test suite) can read the\n// derived page count and drive the page-jump form programmatically.\ndefineExpose({\n  numberOfPages,\n  currentPageInput,\n  applyPageForm\n})\n</script>\n\n<style lang=\"scss\" scoped>\n\n.tiny-pagination {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  text-align: center;\n  white-space: nowrap;\n  flex-wrap: nowrap;\n  max-width: 100%;\n\n  &__nav {\n    padding-left: 0.25em;\n    padding-right: 0.25em;\n    color: var(--bs-body-color);\n\n    &:hover {\n      color: var(--bs-link-hover-color);\n    }\n  }\n\n  &--block {\n    display: flex;\n  }\n\n  &--sm {\n    font-size: $font-size-sm;\n  }\n\n  &--lg {\n    font-size: $font-size-lg;\n  }\n\n  &--no-nav &__nav {\n    display: none;\n  }\n\n  &--compact &__nav--bound,\n  &--no-nav-bounds &__nav--bound {\n    display: none;\n  }\n\n  &--no-nav &__form {\n    margin: 0;\n  }\n\n  &--compact &__nav {\n    order: 0;\n  }\n\n  &--compact &__form {\n    order: 10;\n  }\n\n  &__form {\n    margin: 0 $spacer * 0.25;\n    width: 100%;\n    display: flex;\n    flex-wrap: nowrap;\n    align-items: center;\n    justify-content: center;\n    min-width: 0;\n\n    &__input {\n      padding-left: 0.5em;\n      padding-right: 0.5em;\n      text-align: center;\n\n      &[type='number'] {\n        -moz-appearance: textfield;\n\n        &::-webkit-outer-spin-button,\n        &::-webkit-inner-spin-button {\n          -webkit-appearance: none;\n          margin: 0;\n        }\n      }\n    }\n\n    &__label {\n      white-space: nowrap;\n      text-overflow: ellipsis;\n      overflow: hidden;\n    }\n  }\n}\n</style>\n","<template>\n  <div\n    class=\"tiny-pagination\"\n    :class=\"paginationClassList\"\n  >\n    <b-button\n      v-if=\"!noFirst\"\n      class=\"tiny-pagination__nav tiny-pagination__nav--bound  tiny-pagination__nav--first\"\n      :size=\"resolvedSize\"\n      :disabled=\"!hasFirst\"\n      :variant=\"navVariant\"\n      @click=\"applyFirstPage\"\n    >\n      <!-- @slot Previous button content -->\n      <slot\n        name=\"first\"\n        v-bind=\"{ modelValue, numberOfPages, hasFirst, hasPrevious, hasNext, hasLast }\"\n      >\n        <app-icon>\n          <component :is=\"firstPageIcon\" />\n        </app-icon>\n        <span class=\"visually-hidden\">{{ firstLabel ?? t('tiny-pagination.first') }}</span>\n      </slot>\n    </b-button>\n    <b-button\n      v-if=\"!noPrevious\"\n      class=\"tiny-pagination__nav\"\n      :size=\"resolvedSize\"\n      :disabled=\"!hasPrevious\"\n      :variant=\"navVariant\"\n      @click=\"applyPreviousPage\"\n    >\n      <!-- @slot Previous button content -->\n      <slot\n        name=\"previous\"\n        v-bind=\"{ modelValue, numberOfPages, hasPrevious, hasNext }\"\n      >\n        <app-icon>\n          <component :is=\"previousPageIcon\" />\n        </app-icon>\n        <span class=\"visually-hidden\">{{ previousLabel ?? t('tiny-pagination.previous') }}</span>\n      </slot>\n    </b-button>\n    <form\n      v-if=\"row\"\n      class=\"tiny-pagination__form form-inline\"\n      @submit.prevent=\"applyRowForm\"\n    >\n      <b-form-input\n        v-model=\"currentRowInput\"\n        v-input-autowidth=\"{ minWidth: '2em' }\"\n        :size=\"resolvedSize\"\n        class=\"tiny-pagination__form__input tiny-pagination__form__input--row me-1\"\n        type=\"number\"\n        step=\"1\"\n        :disabled=\"!totalRows\"\n        :min=\"1\"\n        :max=\"totalRows - 1\"\n        :aria-label=\"t('tiny-pagination.ariaRow')\"\n      />\n      <div\n        v-ellipsis-tooltip=\"{ title }\"\n        class=\"tiny-pagination__form__label\"\n      >\n        <!-- @slot Display number of rows and current range -->\n        <slot\n          name=\"number-of-rows\"\n          v-bind=\"{ modelValue, lastRangeRow, numberOfPages, totalRows }\"\n        >\n          {{ title }}\n        </slot>\n      </div>\n    </form>\n    <form\n      v-else\n      class=\"tiny-pagination__form form-inline\"\n      @submit.prevent=\"applyPageForm\"\n    >\n      <label\n        v-show=\"!compact\"\n        class=\"tiny-pagination__form__label me-1 mb-0\"\n      >\n        <!-- @slot Display page label -->\n        <slot\n          name=\"page\"\n          v-bind=\"{ modelValue, numberOfPages }\"\n        >\n          {{ t('tiny-pagination.page') }}\n        </slot>\n      </label>\n      <b-form-input\n        v-model=\"currentPageInput\"\n        v-input-autowidth=\"{ minWidth: '2em' }\"\n        :size=\"resolvedSize\"\n        class=\"tiny-pagination__form__input tiny-pagination__form__input--item me-1\"\n        type=\"number\"\n        step=\"1\"\n        :disabled=\"!totalRows\"\n        :min=\"1\"\n        :max=\"numberOfPages\"\n        :aria-label=\"inputAriaLabel ?? t('tiny-pagination.aria')\"\n      />\n      <div\n        v-ellipsis-tooltip=\"{ title }\"\n        class=\"tiny-pagination__form__label\"\n      >\n        <!-- @slot Display number of pages -->\n        <slot\n          name=\"number-of-pages\"\n          v-bind=\"{ modelValue, numberOfPages }\"\n        >\n          {{ title }}\n        </slot>\n      </div>\n    </form>\n    <b-button\n      v-if=\"!noNext\"\n      class=\"tiny-pagination__nav\"\n      :size=\"resolvedSize\"\n      :disabled=\"!hasNext\"\n      :variant=\"navVariant\"\n      @click=\"applyNextPage\"\n    >\n      <!-- @slot Next button content -->\n      <slot\n        name=\"next\"\n        v-bind=\"{ modelValue, numberOfPages, hasPrevious, hasNext }\"\n      >\n        <app-icon>\n          <component :is=\"nextPageIcon\" />\n        </app-icon>\n        <span class=\"visually-hidden\">{{ nextLabel ?? t('tiny-pagination.next') }}</span>\n      </slot>\n    </b-button>\n    <b-button\n      v-if=\"!noLast\"\n      class=\"tiny-pagination__nav tiny-pagination__nav--bound  tiny-pagination__nav--last\"\n      :size=\"resolvedSize\"\n      :disabled=\"!hasLast\"\n      :variant=\"navVariant\"\n      @click=\"applyLastPage\"\n    >\n      <!-- @slot Previous button content -->\n      <slot\n        name=\"last\"\n        v-bind=\"{ modelValue, numberOfPages, hasFirst, hasPrevious, hasNext, hasLast }\"\n      >\n        <app-icon>\n          <component :is=\"lastPageIcon\" />\n        </app-icon>\n        <span class=\"visually-hidden\">{{ lastLabel ?? t('tiny-pagination.last') }}</span>\n      </slot>\n    </b-button>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { BButton, BFormInput } from 'bootstrap-vue-next'\nimport { computed, ref, watch, type Component } from 'vue'\nimport { directive as vInputAutowidth } from 'vue-input-autowidth'\nimport { useI18n } from 'vue-i18n'\nimport type { ButtonVariant } from 'bootstrap-vue-next'\n\nimport { SIZE } from '@/enums'\nimport { usePagination } from '@/composables/usePagination'\nimport vEllipsisTooltip from '@/directives/EllipsisTooltip'\nimport { resolveSize, type SizeWithMd } from '@/utils/size'\nimport AppIcon from '@/components/App/AppIcon.vue'\nimport IPhCaretDoubleLeft from '~icons/ph/caret-double-left'\nimport IPhCaretDoubleRight from '~icons/ph/caret-double-right'\nimport IPhCaretLeft from '~icons/ph/caret-left'\nimport IPhCaretRight from '~icons/ph/caret-right'\n\n/**\n * Grabs and syncs the currentPage variable passed down from the parent in v-model\n */\nconst modelValue = defineModel<number | string>({\n  default: 1\n})\n\nexport interface PaginationTinyProps {\n  /**\n   * Total items to be stored in pages\n   */\n  totalRows?: number\n  /**\n   * Sets the quantity of items per page\n   */\n  perPage?: number\n  /**\n   * Use an input to set the row number\n   */\n  row?: boolean\n  /**\n   * Set the size of the input: 'sm', 'md' (default), or 'lg'.\n   */\n  size?: SizeWithMd\n  /**\n   * (Optional) Number of page. Property `size` is required for this to work\n   * properly. If `pages` is empty, it will be calculated using the size.\n   */\n  pages?: number | string | null\n  /**\n   * Hide navigation buttons (next and previous)\n   */\n  noNav?: boolean\n  /**\n   * Hide bounds navigation buttons (first and last)\n   */\n  noNavBounds?: boolean\n  /**\n   * Hide the first page button\n   */\n  noFirst?: boolean\n  /**\n   * Hide the last page button\n   */\n  noLast?: boolean\n  /**\n   * Hide the previous page button\n   */\n  noPrevious?: boolean\n  /**\n   * Hide the next page button\n   */\n  noNext?: boolean\n  /**\n   * Icon of the previous page button\n   */\n  previousPageIcon?: string | string[] | Component\n  /**\n   * Icon of the next page button\n   */\n  nextPageIcon?: string | string[] | Component\n  /**\n   * Icon of the first page button\n   */\n  firstPageIcon?: string | string[] | Component\n  /**\n   * Icon of the last page button\n   */\n  lastPageIcon?: string | string[] | Component\n  /**\n   * Navigation button variants\n   */\n  navVariant?: ButtonVariant\n  /**\n   * Display pagination as a block (full width)\n   */\n  block?: boolean\n  /**\n   * Compact mode with a grouped nav\n   */\n  compact?: boolean\n  /**\n   * Label for the previous page button\n   */\n  previousLabel?: string | null\n  /**\n   * Label for the next page button\n   */\n  nextLabel?: string | null\n  /**\n   * Label for the first page button\n   */\n  firstLabel?: string | null\n  /**\n   * Label for the last page button\n   */\n  lastLabel?: string | null\n  /**\n   * ARIA label for the input field\n   */\n  inputAriaLabel?: string | null\n  /**\n   * Title label for the pagination component\n   */\n  titleLabel?: string | null\n}\n\nconst props = withDefaults(defineProps<PaginationTinyProps>(), {\n  totalRows: 0,\n  perPage: 20,\n  row: false,\n  size: SIZE.md,\n  pages: null,\n  noNav: false,\n  noNavBounds: false,\n  noFirst: false,\n  noLast: false,\n  noPrevious: false,\n  noNext: false,\n  previousPageIcon: () => IPhCaretLeft,\n  nextPageIcon: () => IPhCaretRight,\n  firstPageIcon: () => IPhCaretDoubleLeft,\n  lastPageIcon: () => IPhCaretDoubleRight,\n  navVariant: 'link',\n  block: false,\n  compact: false,\n  previousLabel: null,\n  nextLabel: null,\n  firstLabel: null,\n  lastLabel: null,\n  inputAriaLabel: null,\n  titleLabel: null\n})\n\nconst { t, n } = useI18n()\n\n// Page-range math shared with the other pagination components.\nconst {\n  pageValue,\n  numberOfPages,\n  lastRangeRow,\n  hasFirst,\n  hasPrevious,\n  hasLast,\n  hasNext,\n  clampPage\n} = usePagination({\n  currentPage: modelValue,\n  totalRows: () => props.totalRows,\n  perPage: () => props.perPage,\n  pages: () => props.pages\n})\n\nconst resolvedSize = computed(() => resolveSize(props.size))\n\nconst paginationClassList = computed((): object => {\n  return {\n    [`tiny-pagination--${props.size}`]: true,\n    [`tiny-pagination--no-nav`]: props.noNav,\n    [`tiny-pagination--no-nav-bounds`]: props.noNavBounds,\n    [`tiny-pagination--block`]: props.block,\n    [`tiny-pagination--compact`]: props.compact\n  }\n})\n\nconst currentPageInput = ref<number>(0)\nconst currentRowInput = ref<number>(0)\n\nwatch(modelValue, (value: number | string) => {\n  // Update currentPageInput value based on totalRows\n  currentPageInput.value = props.totalRows ? +value : 0\n  // Determine the row offset based on the perPage value.\n  if (props.perPage === 1) {\n    currentRowInput.value = +value\n  }\n  else {\n    // Update currentRowInput value based on totalRows and calculated rowOffset\n    currentRowInput.value = props.totalRows ? +props.perPage * (+value - 1) + 1 : 0\n  }\n}, { immediate: true })\n\nconst title = computed(() => {\n  if (props.titleLabel) {\n    return props.titleLabel\n  }\n\n  if (props.row) {\n    const locales = { lastRangeRow: n(lastRangeRow.value), totalRows: n(props.totalRows) }\n\n    // Only one per page, meaning we navigate through rows one by one\n    if (props.perPage === 1) {\n      return props.compact ? '' : t('tiny-pagination.uniqueRowRange', locales, props.totalRows)\n    }\n\n    // The total is less or equal than the current row range\n    if (props.totalRows <= (props.perPage * pageValue.value)) {\n      return t('tiny-pagination.rowRangeFewer', locales, props.totalRows)\n    }\n\n    return t(props.compact ? 'tiny-pagination.compactRowRange' : 'tiny-pagination.rowRange', locales, props.totalRows)\n  }\n\n  const locales = { numberOfPages: n(numberOfPages.value) }\n\n  return t('tiny-pagination.total', locales, props.totalRows)\n})\n\nfunction applyPageForm(): void {\n  const { value } = currentPageInput\n  if (!isNaN(value as number)) {\n    modelValue.value = clampPage(+value)\n  }\n}\n\nfunction applyRowForm(): void {\n  const { value } = currentRowInput\n  if (!isNaN(value as number)) {\n    currentPageInput.value = clampPage(+value / +props.perPage + 1)\n    currentRowInput.value = +props.perPage * (+currentPageInput.value - 1) + 1\n    modelValue.value = +currentPageInput.value\n  }\n}\n\nfunction applyNextPage(): void {\n  modelValue.value = pageValue.value + 1\n}\n\nfunction applyPreviousPage(): void {\n  modelValue.value = pageValue.value - 1\n}\n\nfunction applyFirstPage(): void {\n  modelValue.value = 1\n}\n\nfunction applyLastPage(): void {\n  modelValue.value = numberOfPages.value\n}\n\n// Expose the page-form internals so consumers (and the test suite) can read the\n// derived page count and drive the page-jump form programmatically.\ndefineExpose({\n  numberOfPages,\n  currentPageInput,\n  applyPageForm\n})\n</script>\n\n<style lang=\"scss\" scoped>\n\n.tiny-pagination {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  text-align: center;\n  white-space: nowrap;\n  flex-wrap: nowrap;\n  max-width: 100%;\n\n  &__nav {\n    padding-left: 0.25em;\n    padding-right: 0.25em;\n    color: var(--bs-body-color);\n\n    &:hover {\n      color: var(--bs-link-hover-color);\n    }\n  }\n\n  &--block {\n    display: flex;\n  }\n\n  &--sm {\n    font-size: $font-size-sm;\n  }\n\n  &--lg {\n    font-size: $font-size-lg;\n  }\n\n  &--no-nav &__nav {\n    display: none;\n  }\n\n  &--compact &__nav--bound,\n  &--no-nav-bounds &__nav--bound {\n    display: none;\n  }\n\n  &--no-nav &__form {\n    margin: 0;\n  }\n\n  &--compact &__nav {\n    order: 0;\n  }\n\n  &--compact &__form {\n    order: 10;\n  }\n\n  &__form {\n    margin: 0 $spacer * 0.25;\n    width: 100%;\n    display: flex;\n    flex-wrap: nowrap;\n    align-items: center;\n    justify-content: center;\n    min-width: 0;\n\n    &__input {\n      padding-left: 0.5em;\n      padding-right: 0.5em;\n      text-align: center;\n\n      &[type='number'] {\n        -moz-appearance: textfield;\n\n        &::-webkit-outer-spin-button,\n        &::-webkit-inner-spin-button {\n          -webkit-appearance: none;\n          margin: 0;\n        }\n      }\n    }\n\n    &__label {\n      white-space: nowrap;\n      text-overflow: ellipsis;\n      overflow: hidden;\n    }\n  }\n}\n</style>\n","import { getCurrentInstance, onMounted, onUnmounted, ref } from 'vue'\nimport type { MaybeRefOrGetter, Ref } from 'vue'\nimport { toValue } from 'vue'\nimport type { Parent } from 'pym.js'\n\nimport { injectAssets } from '@/utils/assets'\n\ndeclare global {\n  interface Window {\n    pym: { Parent: new (id: string, url: string, options: object) => Parent }\n  }\n}\n\n// Hosted Pym.js parent bundle; embedding ICIJ pages report their height through it.\nconst PYM_PARENT_SCRIPT_URL = 'https://pym.nprapps.org/pym.v1.min.js'\n\n/**\n * Prefix shared by every container id so generated ids stay recognisable and\n * collision-free across ICIJ embeds.\n */\ntype StartsWithIcijIframe = `icij-iframe-${string}`\n\n/**\n * Reactive options driving the responsive iframe. They mirror the `url` and\n * `options` props of the `ResponsiveIframe` component.\n */\nexport interface UseResponsiveIframeOptions {\n  /**\n   * URL of the generated iframe code, loaded by the Pym parent.\n   */\n  url: MaybeRefOrGetter<string>\n  /**\n   * Options forwarded to the constructor of the Pym parent instance.\n   */\n  options?: MaybeRefOrGetter<object | undefined>\n}\n\n/**\n * Reactive API returned by {@link useResponsiveIframe}.\n */\nexport interface UseResponsiveIframe {\n  /**\n   * Unique id to bind on the container element the Pym parent mounts into.\n   */\n  iframeId: Ref<StartsWithIcijIframe>\n  /**\n   * The live Pym parent instance, or `null` until it is created on mount.\n   */\n  pymParent: Ref<Parent | null>\n}\n\n// Build a unique container id from the host component instance id, falling back\n// to a random value when no instance is available (for example outside setup).\nfunction generateIframeId(): StartsWithIcijIframe {\n  const instance = getCurrentInstance()\n  return `icij-iframe-${instance?.uid ?? Math.random()}`\n}\n\n/**\n * Owns the parent side of the Pym.js resize messaging for the\n * `ResponsiveIframe` component: generates a unique container id, lazily loads\n * the Pym parent bundle on mount, creates the Pym parent that listens for\n * height messages from the embedded page, and tears it down on unmount.\n *\n * @param options - Reactive iframe options (see {@link UseResponsiveIframeOptions}).\n * @returns The {@link UseResponsiveIframe} API: the `iframeId` ref to bind on\n *   the container element and the live `pymParent` ref.\n * @example\n * // Internal building block of the `ResponsiveIframe` component; not exported\n * // from the package root. Inside a `<script setup>` block:\n * import { useResponsiveIframe } from '@/composables/useResponsiveIframe'\n *\n * const props = defineProps<{ url: string, options?: object }>()\n * const { iframeId } = useResponsiveIframe({\n *   url: () => props.url,\n *   options: () => props.options\n * })\n */\nexport function useResponsiveIframe(\n  options: UseResponsiveIframeOptions\n): UseResponsiveIframe {\n  const { url, options: parentOptions } = options\n\n  const iframeId = ref<StartsWithIcijIframe>(generateIframeId())\n  const pymParent = ref<Parent | null>(null)\n\n  onMounted(async (): Promise<void> => {\n    await injectAssets(PYM_PARENT_SCRIPT_URL)\n    pymParent.value = new window.pym.Parent(\n      iframeId.value,\n      toValue(url),\n      toValue(parentOptions) ?? {}\n    )\n  })\n\n  onUnmounted(() => {\n    pymParent.value?.remove?.()\n  })\n\n  return { iframeId, pymParent }\n}\n\nexport default useResponsiveIframe\n","<script setup lang=\"ts\">\nimport { useResponsiveIframe } from '@/composables/useResponsiveIframe'\n\ndefineOptions({\n  name: 'ResponsiveIframe'\n})\n\nexport interface ResponsiveIframeProps {\n  /**\n   * URL of the generated iframe code.\n   */\n  url: string\n  /**\n   * Option to pass to the constructor of the pymParent instance\n   */\n  options?: object\n}\n\nconst props = defineProps<ResponsiveIframeProps>()\n\nconst { iframeId } = useResponsiveIframe({\n  url: () => props.url,\n  options: () => props.options\n})\n</script>\n\n<template>\n  <div :id=\"iframeId\" />\n</template>\n","<script setup lang=\"ts\">\nimport { useResponsiveIframe } from '@/composables/useResponsiveIframe'\n\ndefineOptions({\n  name: 'ResponsiveIframe'\n})\n\nexport interface ResponsiveIframeProps {\n  /**\n   * URL of the generated iframe code.\n   */\n  url: string\n  /**\n   * Option to pass to the constructor of the pymParent instance\n   */\n  options?: object\n}\n\nconst props = defineProps<ResponsiveIframeProps>()\n\nconst { iframeId } = useResponsiveIframe({\n  url: () => props.url,\n  options: () => props.options\n})\n</script>\n\n<template>\n  <div :id=\"iframeId\" />\n</template>\n","import clamp from 'lodash/clamp'\nimport { computed, toValue } from 'vue'\nimport type { ComputedRef, CSSProperties, MaybeRefOrGetter } from 'vue'\n\nimport { DeckTexture } from '@/enums'\n\n/**\n * Value selecting a texture: either a {@link DeckTexture} name or the numeric\n * index of a texture in the {@link DeckTexture} enumeration order.\n */\nexport type TexturedDeckValue = DeckTexture | number\n\n/**\n * Reactive inputs driving the textured background. They mirror the\n * `modelValue`, `size`, `black`, and `backgroundBaseUrl` props of the\n * `TexturedDeck` component.\n */\nexport interface UseTexturedDeckOptions {\n  /**\n   * Texture name or numeric index selecting which texture to display.\n   */\n  modelValue: MaybeRefOrGetter<TexturedDeckValue>\n  /**\n   * CSS `background-size` value (cover, contain, auto, 50%, 50% auto, ...).\n   */\n  size: MaybeRefOrGetter<string>\n  /**\n   * Whether to use the black variant of the texture file.\n   */\n  black: MaybeRefOrGetter<boolean>\n  /**\n   * Host where the textures are served from (without trailing slash).\n   */\n  backgroundBaseUrl: MaybeRefOrGetter<string>\n}\n\n/**\n * Reactive API returned by {@link useTexturedDeck}.\n */\nexport interface UseTexturedDeck {\n  /**\n   * Name of the resolved texture (one of the {@link DeckTexture} values).\n   */\n  textureName: ComputedRef<DeckTexture>\n  /**\n   * Texture file name derived from the texture name and the black variant.\n   */\n  filename: ComputedRef<string>\n  /**\n   * Absolute URL of the texture image, combining the base URL and file name.\n   */\n  backgroundUrl: ComputedRef<string>\n  /**\n   * Inline style applying the resolved texture as the background image and\n   * propagating the requested background size.\n   */\n  style: ComputedRef<CSSProperties>\n}\n\n/**\n * Derives the background image of the `TexturedDeck` component from a texture\n * selection: resolves the texture name (accepting either a name or a numeric\n * index clamped to the available textures), builds the texture file name and\n * its absolute URL, and exposes the inline style to apply on the host element.\n *\n * @param options - Reactive texture options (see {@link UseTexturedDeckOptions}).\n * @returns The {@link UseTexturedDeck} API: the resolved `textureName`, the\n *   `filename`, the absolute `backgroundUrl`, and the `style` computed for the\n *   template.\n * @example\n * // Internal building block of the `TexturedDeck` component; not exported from\n * // the package root. Inside a `<script setup>` block:\n * import { toRef } from 'vue'\n * import { useTexturedDeck } from '@/composables/useTexturedDeck'\n *\n * const props = defineProps<{\n *   modelValue?: string | number\n *   size?: string\n *   black?: boolean\n *   backgroundBaseUrl?: string\n * }>()\n * const { style } = useTexturedDeck({\n *   modelValue: toRef(props, 'modelValue'),\n *   size: toRef(props, 'size'),\n *   black: toRef(props, 'black'),\n *   backgroundBaseUrl: toRef(props, 'backgroundBaseUrl')\n * })\n */\nexport function useTexturedDeck(options: UseTexturedDeckOptions): UseTexturedDeck {\n  const { modelValue, size, black, backgroundBaseUrl } = options\n\n  const textureNames = computed((): DeckTexture[] => {\n    return Object.values(DeckTexture)\n  })\n\n  // A texture can be selected by name or by numeric index. A name is mapped\n  // back to its index and clamped so an unknown name falls back to a valid\n  // texture. A numeric index is used as-is and is intentionally NOT clamped,\n  // so an out-of-range number yields an undefined texture name (latent edge\n  // preserved).\n  const textureIndex = computed((): number => {\n    const value = toValue(modelValue)\n    if (typeof value !== 'number') {\n      return clamp(\n        textureNames.value.indexOf(value),\n        0,\n        textureNames.value.length - 1\n      )\n    }\n    return value\n  })\n\n  const textureName = computed((): DeckTexture => {\n    return textureNames.value[textureIndex.value]\n  })\n\n  const filename = computed((): string => {\n    if (toValue(black)) {\n      return `texture-${textureName.value}-black.jpg`\n    }\n    return `texture-${textureName.value}.jpg`\n  })\n\n  const backgroundUrl = computed((): string => {\n    return `${toValue(backgroundBaseUrl)}/assets/img/${filename.value}`\n  })\n\n  const style = computed((): CSSProperties => {\n    return {\n      backgroundSize: toValue(size),\n      backgroundImage: `url(\"${backgroundUrl.value}\")`\n    }\n  })\n\n  return { textureName, filename, backgroundUrl, style }\n}\n\nexport default useTexturedDeck\n","<script setup lang=\"ts\">\nimport { computed, toRef, useAttrs } from 'vue'\n\nimport { useTexturedDeck } from '@/composables/useTexturedDeck'\nimport type { TexturedDeckValue } from '@/composables/useTexturedDeck'\nimport { DeckTexture } from '@/enums'\nimport config from '@/config'\n\ndefineOptions({\n  name: 'TexturedDeck'\n})\n\nexport interface TexturedDeckProps {\n  /**\n   * Name of the texture file ('silk', 'brick', 'rock', 'sand', 'crack', 'carbon')\n   */\n  modelValue?: TexturedDeckValue\n  /**\n   * CSS background-size property (cover, contain, auto, 50%, 50% auto, ...)\n   */\n  size?: string\n  /**\n   * Tag/Component to use as root tag.\n   */\n  tag?: string | object\n  /**\n   * Either or note we should use the black version of the texture\n   */\n  black?: boolean\n  /**\n   * Host where to find the textures (without tailing slash)\n   */\n  backgroundBaseUrl?: string\n}\n\nconst props = withDefaults(defineProps<TexturedDeckProps>(), {\n  modelValue: DeckTexture.Brick,\n  size: 'cover',\n  tag: 'div',\n  black: false,\n  backgroundBaseUrl: () => config.get('textured-deck.background-base-url', window.location.origin)\n})\n\nconst attrs = useAttrs()\n\nconst { style } = useTexturedDeck({\n  modelValue: toRef(props, 'modelValue'),\n  size: toRef(props, 'size'),\n  black: toRef(props, 'black'),\n  backgroundBaseUrl: toRef(props, 'backgroundBaseUrl')\n})\n\n// NOTE: latent behaviour preserved — every prop (modelValue, size, black,\n// backgroundBaseUrl) is forwarded onto the root element as an attribute, on\n// top of Vue's automatic attribute fallthrough. The `tag` prop is dropped so\n// it does not surface as an attribute on the rendered element.\nconst inheritedProps = computed((): object => {\n  return { ...attrs, ...props, tag: undefined }\n})\n</script>\n\n<template>\n  <component\n    :is=\"tag\"\n    :style=\"style\"\n    v-bind=\"inheritedProps\"\n    class=\"textured-deck\"\n  >\n    <slot />\n  </component>\n</template>\n\n<style lang=\"scss\" scoped>\n.textured-deck {\n  background: #000 no-repeat center center;\n  background-size: cover;\n  color: #fff;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, toRef, useAttrs } from 'vue'\n\nimport { useTexturedDeck } from '@/composables/useTexturedDeck'\nimport type { TexturedDeckValue } from '@/composables/useTexturedDeck'\nimport { DeckTexture } from '@/enums'\nimport config from '@/config'\n\ndefineOptions({\n  name: 'TexturedDeck'\n})\n\nexport interface TexturedDeckProps {\n  /**\n   * Name of the texture file ('silk', 'brick', 'rock', 'sand', 'crack', 'carbon')\n   */\n  modelValue?: TexturedDeckValue\n  /**\n   * CSS background-size property (cover, contain, auto, 50%, 50% auto, ...)\n   */\n  size?: string\n  /**\n   * Tag/Component to use as root tag.\n   */\n  tag?: string | object\n  /**\n   * Either or note we should use the black version of the texture\n   */\n  black?: boolean\n  /**\n   * Host where to find the textures (without tailing slash)\n   */\n  backgroundBaseUrl?: string\n}\n\nconst props = withDefaults(defineProps<TexturedDeckProps>(), {\n  modelValue: DeckTexture.Brick,\n  size: 'cover',\n  tag: 'div',\n  black: false,\n  backgroundBaseUrl: () => config.get('textured-deck.background-base-url', window.location.origin)\n})\n\nconst attrs = useAttrs()\n\nconst { style } = useTexturedDeck({\n  modelValue: toRef(props, 'modelValue'),\n  size: toRef(props, 'size'),\n  black: toRef(props, 'black'),\n  backgroundBaseUrl: toRef(props, 'backgroundBaseUrl')\n})\n\n// NOTE: latent behaviour preserved — every prop (modelValue, size, black,\n// backgroundBaseUrl) is forwarded onto the root element as an attribute, on\n// top of Vue's automatic attribute fallthrough. The `tag` prop is dropped so\n// it does not surface as an attribute on the rendered element.\nconst inheritedProps = computed((): object => {\n  return { ...attrs, ...props, tag: undefined }\n})\n</script>\n\n<template>\n  <component\n    :is=\"tag\"\n    :style=\"style\"\n    v-bind=\"inheritedProps\"\n    class=\"textured-deck\"\n  >\n    <slot />\n  </component>\n</template>\n\n<style lang=\"scss\" scoped>\n.textured-deck {\n  background: #000 no-repeat center center;\n  background-size: cover;\n  color: #fff;\n}\n</style>\n","var isSymbol = require('./isSymbol');\n\n/**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\nfunction baseExtremum(array, iteratee, comparator) {\n  var index = -1,\n      length = array.length;\n\n  while (++index < length) {\n    var value = array[index],\n        current = iteratee(value);\n\n    if (current != null && (computed === undefined\n          ? (current === current && !isSymbol(current))\n          : comparator(current, computed)\n        )) {\n      var computed = current,\n          result = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseExtremum;\n","/**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n *  else `false`.\n */\nfunction baseGt(value, other) {\n  return value > other;\n}\n\nmodule.exports = baseGt;\n","var baseExtremum = require('./_baseExtremum'),\n    baseGt = require('./_baseGt'),\n    identity = require('./identity');\n\n/**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\nfunction max(array) {\n  return (array && array.length)\n    ? baseExtremum(array, identity, baseGt)\n    : undefined;\n}\n\nmodule.exports = max;\n","var EOL = {},\n    EOF = {},\n    QUOTE = 34,\n    NEWLINE = 10,\n    RETURN = 13;\n\nfunction objectConverter(columns) {\n  return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n    return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n  }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n  var object = objectConverter(columns);\n  return function(row, i) {\n    return f(object(row), i, columns);\n  };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n  var columnSet = Object.create(null),\n      columns = [];\n\n  rows.forEach(function(row) {\n    for (var column in row) {\n      if (!(column in columnSet)) {\n        columns.push(columnSet[column] = column);\n      }\n    }\n  });\n\n  return columns;\n}\n\nfunction pad(value, width) {\n  var s = value + \"\", length = s.length;\n  return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n  return year < 0 ? \"-\" + pad(-year, 6)\n    : year > 9999 ? \"+\" + pad(year, 6)\n    : pad(year, 4);\n}\n\nfunction formatDate(date) {\n  var hours = date.getUTCHours(),\n      minutes = date.getUTCMinutes(),\n      seconds = date.getUTCSeconds(),\n      milliseconds = date.getUTCMilliseconds();\n  return isNaN(date) ? \"Invalid Date\"\n      : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n      + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n      : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n      : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n      : \"\");\n}\n\nexport default function(delimiter) {\n  var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n      DELIMITER = delimiter.charCodeAt(0);\n\n  function parse(text, f) {\n    var convert, columns, rows = parseRows(text, function(row, i) {\n      if (convert) return convert(row, i - 1);\n      columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n    });\n    rows.columns = columns || [];\n    return rows;\n  }\n\n  function parseRows(text, f) {\n    var rows = [], // output rows\n        N = text.length,\n        I = 0, // current character index\n        n = 0, // current line number\n        t, // current token\n        eof = N <= 0, // current token followed by EOF?\n        eol = false; // current token followed by EOL?\n\n    // Strip the trailing newline.\n    if (text.charCodeAt(N - 1) === NEWLINE) --N;\n    if (text.charCodeAt(N - 1) === RETURN) --N;\n\n    function token() {\n      if (eof) return EOF;\n      if (eol) return eol = false, EOL;\n\n      // Unescape quotes.\n      var i, j = I, c;\n      if (text.charCodeAt(j) === QUOTE) {\n        while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n        if ((i = I) >= N) eof = true;\n        else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n        else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n        return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n      }\n\n      // Find next delimiter or newline.\n      while (I < N) {\n        if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n        else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n        else if (c !== DELIMITER) continue;\n        return text.slice(j, i);\n      }\n\n      // Return last token before EOF.\n      return eof = true, text.slice(j, N);\n    }\n\n    while ((t = token()) !== EOF) {\n      var row = [];\n      while (t !== EOL && t !== EOF) row.push(t), t = token();\n      if (f && (row = f(row, n++)) == null) continue;\n      rows.push(row);\n    }\n\n    return rows;\n  }\n\n  function preformatBody(rows, columns) {\n    return rows.map(function(row) {\n      return columns.map(function(column) {\n        return formatValue(row[column]);\n      }).join(delimiter);\n    });\n  }\n\n  function format(rows, columns) {\n    if (columns == null) columns = inferColumns(rows);\n    return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n  }\n\n  function formatBody(rows, columns) {\n    if (columns == null) columns = inferColumns(rows);\n    return preformatBody(rows, columns).join(\"\\n\");\n  }\n\n  function formatRows(rows) {\n    return rows.map(formatRow).join(\"\\n\");\n  }\n\n  function formatRow(row) {\n    return row.map(formatValue).join(delimiter);\n  }\n\n  function formatValue(value) {\n    return value == null ? \"\"\n        : value instanceof Date ? formatDate(value)\n        : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n        : value;\n  }\n\n  return {\n    parse: parse,\n    parseRows: parseRows,\n    format: format,\n    formatBody: formatBody,\n    formatRows: formatRows,\n    formatRow: formatRow,\n    formatValue: formatValue\n  };\n}\n","import dsv from \"./dsv.js\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatBody = csv.formatBody;\nexport var csvFormatRows = csv.formatRows;\nexport var csvFormatRow = csv.formatRow;\nexport var csvFormatValue = csv.formatValue;\n","import dsv from \"./dsv.js\";\n\nvar tsv = dsv(\"\\t\");\n\nexport var tsvParse = tsv.parse;\nexport var tsvParseRows = tsv.parseRows;\nexport var tsvFormat = tsv.format;\nexport var tsvFormatBody = tsv.formatBody;\nexport var tsvFormatRows = tsv.formatRows;\nexport var tsvFormatRow = tsv.formatRow;\nexport var tsvFormatValue = tsv.formatValue;\n","function responseText(response) {\n  if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n  return response.text();\n}\n\nexport default function(input, init) {\n  return fetch(input, init).then(responseText);\n}\n","import {csvParse, dsvFormat, tsvParse} from \"d3-dsv\";\nimport text from \"./text.js\";\n\nfunction dsvParse(parse) {\n  return function(input, init, row) {\n    if (arguments.length === 2 && typeof init === \"function\") row = init, init = undefined;\n    return text(input, init).then(function(response) {\n      return parse(response, row);\n    });\n  };\n}\n\nexport default function dsv(delimiter, input, init, row) {\n  if (arguments.length === 3 && typeof init === \"function\") row = init, init = undefined;\n  var format = dsvFormat(delimiter);\n  return text(input, init).then(function(response) {\n    return format.parse(response, row);\n  });\n}\n\nexport var csv = dsvParse(csvParse);\nexport var tsv = dsvParse(tsvParse);\n","function responseJson(response) {\n  if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n  if (response.status === 204 || response.status === 205) return;\n  return response.json();\n}\n\nexport default function(input, init) {\n  return fetch(input, init).then(responseJson);\n}\n","import { json, csv, tsv } from 'd3-fetch'\nimport isString from 'lodash/isString'\nimport { shallowRef, toRef, toValue, watch } from 'vue'\nimport type { Ref } from 'vue'\n\n/**\n * Data a chart can be fed: an array of rows, a keyed record of numbers, a URL\n * string to fetch from, or `null` before anything is provided.\n */\nexport type ChartData = Record<string, unknown>[] | Record<string, number> | string | null\n\n/**\n * Data a chart holds once loading has settled: the inline value passed through,\n * or the parsed result of a fetched URL, narrowed to the caller's own datum\n * shape `T` (e.g. `BarChartDatum[]`), or `null` before the first load.\n */\nexport type LoadedData<T = Record<string, unknown>[] | Record<string, number>> = T | null\n\n/**\n * Reactive inputs driving {@link useChartData}: the raw chart data and the file\n * format to parse when that data is a URL.\n */\nexport interface UseChartDataOptions {\n  data: Ref<ChartData>\n  dataUrlType: Ref<'json' | 'csv' | 'tsv'>\n}\n\n/**\n * Reactive API returned by {@link useChartData}.\n */\nexport interface UseChartData<T = Record<string, unknown>[] | Record<string, number>> {\n  /**\n   * The chart's resolved data: inline data passed through, or the parsed result\n   * of a fetched URL. `null` until the first load settles.\n   */\n  loadedData: Ref<LoadedData<T>>\n}\n\n/**\n * Owns a chart's data-loading concern: it watches the data and format inputs\n * and, whenever they change, either fetches and parses a URL through d3 or\n * passes inline data through untouched. A caller-supplied `onLoaded` hook is\n * awaited after each settled load so the parent can run its own side effects\n * (emitting events, sizing) in a predictable order.\n *\n * @param options - The reactive data and URL-type inputs (see {@link UseChartDataOptions}).\n * @param onLoaded - Hook awaited after every settled load, receiving the freshly loaded data.\n * @returns The {@link UseChartData} API exposing `loadedData`.\n * @remarks Internal building block consumed by {@link useChart}; not exported from the package root.\n * @example\n * // Inside useChart, wiring the load hook to lifecycle events:\n * import { useChartData } from '@/composables/useChartData'\n *\n * const { loadedData } = useChartData(\n *   { data: props.data, dataUrlType: props.dataUrlType },\n *   async (data) => {\n *     // simplified — see useChart for the full load→emit ordering\n *     // (afterLoaded → isLoaded → emit('loaded') → onResized → emit('resized'))\n *     await afterLoaded?.()\n *     emit('loaded', data)\n *   }\n * )\n */\nexport function useChartData<T = Record<string, unknown>[] | Record<string, number>>(\n  options: UseChartDataOptions,\n  onLoaded: (data: LoadedData<T>) => void | Promise<void>\n): UseChartData<T> {\n  const dataRef = toRef(options.data)\n  const dataUrlTypeRef = toRef(options.dataUrlType)\n  // shallowRef: loadedData is always replaced wholesale on load, never mutated\n  // in place, and it sidesteps a Vue/TS UnwrapRef quirk on the generic T.\n  const loadedData = shallowRef<LoadedData<T>>(null)\n\n  // Reload whenever the data or its format changes: a URL string is fetched and\n  // parsed through the matching d3 loader, while inline data is passed through.\n  watch([dataRef, dataUrlTypeRef], async () => {\n    await document.fonts?.ready\n\n    const data = toValue(dataRef)\n    const dataUrlType = toValue(dataUrlTypeRef)\n\n    if (isString(data)) {\n      const loaders: Record<string, (url: string) => Promise<unknown>> = { json, csv, tsv }\n      const loader = loaders[dataUrlType as string]\n      if (!loader) {\n        throw new Error(`unsupported dataUrlType \"${dataUrlType}\": expected json, csv or tsv`)\n      }\n      // Trust boundary: the fetched/parsed payload's actual shape is asserted by\n      // the caller's T type argument to useChart<T>, not verified at runtime.\n      loadedData.value = (await loader(data)) as unknown as LoadedData<T>\n    }\n    else {\n      // Same trust boundary: props.data is declared as the wide ChartData union\n      // by each component's own props, but T asserts the concrete shape that\n      // component actually feeds in.\n      loadedData.value = data as unknown as LoadedData<T>\n    }\n\n    await onLoaded(loadedData.value)\n  }, { immediate: true })\n\n  return { loadedData }\n}\n\nexport default useChartData\n","var baseEach = require('./_baseEach');\n\n/**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction baseSome(collection, predicate) {\n  var result;\n\n  baseEach(collection, function(value, index, collection) {\n    result = predicate(value, index, collection);\n    return !result;\n  });\n  return !!result;\n}\n\nmodule.exports = baseSome;\n","var arraySome = require('./_arraySome'),\n    baseIteratee = require('./_baseIteratee'),\n    baseSome = require('./_baseSome'),\n    isArray = require('./isArray'),\n    isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n *   { 'user': 'barney', 'active': true },\n *   { 'user': 'fred',   'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\nfunction some(collection, predicate, guard) {\n  var func = isArray(collection) ? arraySome : baseSome;\n  if (guard && isIterateeCall(collection, predicate, guard)) {\n    predicate = undefined;\n  }\n  return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = some;\n","import { format } from 'd3-format'\nimport isFunction from 'lodash/isFunction'\nimport isString from 'lodash/isString'\nimport some from 'lodash/some'\nimport { computed, toValue } from 'vue'\nimport type { ComputedRef, Ref } from 'vue'\n\n/**\n * Reactive inputs driving {@link useChartFormat}: the chart's loaded data (used\n * to detect highlights) and the height-ratio props feeding {@link baseHeightRatio}.\n */\nexport interface UseChartFormatOptions {\n  // Only ever feature-tested with Array.isArray() below, so this stays\n  // unknown rather than depending on the caller's loaded-data shape.\n  loadedData: Ref<unknown>\n  rawData: Ref<unknown>\n  chartHeightRatio: Ref<number | undefined>\n  socialMode: Ref<boolean>\n  socialModeRatio: Ref<number>\n}\n\n/**\n * Reactive API returned by {@link useChartFormat}.\n */\nexport interface UseChartFormat {\n  /**\n   * Whether at least one datum is flagged `highlight`.\n   */\n  dataHasHighlights: ComputedRef<boolean>\n  /**\n   * The chart's base height-to-width ratio, honouring an explicit ratio first,\n   * then social mode, then the default 16:9.\n   */\n  baseHeightRatio: ComputedRef<number>\n  /**\n   * Formats a value with a d3 format string or a custom function, returning the\n   * value untouched when no usable formatter is given.\n   */\n  d3Formatter: (value: number | string, formatter?: ((v: number | string) => string) | string) => string | number\n}\n\n/**\n * Whether a datum is flagged as highlighted.\n */\nfunction highlighted(datum: { highlight: boolean }) {\n  return datum.highlight\n}\n\n/**\n * Owns a chart's pure formatting and derivation concern: it exposes the value\n * formatter, the base height ratio, and highlight detection. It holds no DOM\n * state and reads only from the reactive inputs it is given.\n *\n * @param options - The reactive data and height-ratio inputs (see {@link UseChartFormatOptions}).\n * @returns The {@link UseChartFormat} API of formatting and derived-config helpers.\n * @remarks Internal building block consumed by {@link useChart}; not exported from the package root.\n * @example\n * // Inside useChart, fed the loaded data and the height-ratio props:\n * import { useChartFormat } from '@/composables/useChartFormat'\n *\n * const { d3Formatter, baseHeightRatio, dataHasHighlights } = useChartFormat({\n *   loadedData,\n *   rawData: props.data,\n *   chartHeightRatio: props.chartHeightRatio,\n *   socialMode: props.socialMode,\n *   socialModeRatio: props.socialModeRatio\n * })\n */\nexport function useChartFormat(options: UseChartFormatOptions): UseChartFormat {\n  const { loadedData, rawData, chartHeightRatio, socialMode, socialModeRatio } = options\n\n  function d3Formatter(value: any, formatter: any) {\n    if (isFunction(formatter)) {\n      return formatter(value)\n    }\n    else if (isString(formatter)) {\n      return format(formatter)(value)\n    }\n    return value\n  }\n\n  const baseHeightRatio = computed(() => {\n    const ratio = toValue(chartHeightRatio)\n    const isSocialMode = toValue(socialMode)\n    const socialRatio = toValue(socialModeRatio)\n    return ratio || (isSocialMode ? socialRatio : 9 / 16)\n  })\n\n  const dataHasHighlights = computed(() => {\n    // Prefer loadedData (so URL-fetched data is inspected), but fall back to the\n    // raw prop so a synchronously-passed array reports highlights on first paint\n    // rather than flickering once the load watcher resolves.\n    const data = loadedData.value ?? toValue(rawData)\n    if (Array.isArray(data)) {\n      return some(data, highlighted)\n    }\n    return false\n  })\n\n  return { dataHasHighlights, baseHeightRatio, d3Formatter }\n}\n\nexport default useChartFormat\n","import isObject from 'lodash/isObject'\nimport isString from 'lodash/isString'\nimport max from 'lodash/max'\nimport { ComponentPublicInstance, toRef, ref, onMounted, nextTick, watch } from 'vue'\nimport { isUrl } from '@/utils/strings'\nimport type { Ref, ComputedRef } from 'vue'\nimport { useResizeObserver } from '@/composables/useResizeObserver'\nimport { useChartData } from '@/composables/useChartData'\nimport { useChartFormat } from '@/composables/useChartFormat'\nimport type { ChartData, LoadedData } from '@/composables/useChartData'\n\n// Re-exported so the public type surface of this module is unchanged even\n// though the underlying definitions now live in the data sub-composable.\nexport type { ChartData, LoadedData }\n\ninterface ChartEmit<T = Record<string, unknown>[] | Record<string, number>> {\n  emit: {\n    (event: 'resized'): void\n    (event: 'loaded', data: LoadedData<T>): void\n  }\n}\n\ninterface ChartPropsDefinition {\n  chartHeightRatio: { type: NumberConstructor }\n  data: {\n    default: () => object[] | string\n    validator(value: string): boolean\n    type: (ArrayConstructor | StringConstructor | ObjectConstructor)[]\n  }\n  dataUrlType: {\n    default: string\n    validator(value: string): boolean\n    type: StringConstructor\n  }\n  socialMode: { type: BooleanConstructor }\n  socialModeRatio: { default: number, type: NumberConstructor }\n}\n\nexport interface ChartPropsRefs {\n  chartHeightRatio: Ref<number | undefined>\n  data: Ref<ChartData>\n  dataUrlType: Ref<'json' | 'csv' | 'tsv'>\n  socialMode: Ref<boolean>\n  socialModeRatio: Ref<number>\n}\n\n/**\n * Wraps a chart component's raw props into individual refs consumable by {@link useChart}.\n *\n * @param props - The chart component props (typically from `defineProps`).\n * @returns A {@link ChartPropsRefs} object exposing each chart prop as its own ref.\n * @remarks Internal building block consumed by {@link useChart}; not exported from the package root.\n * @example\n * // Inside a chart component, alongside chartProps() and useChart():\n * const props = defineProps(chartProps())\n * const chart = useChart(resizableRef, getChartProps(props), { emit }, isLoaded)\n */\nexport function getChartProps(props: {\n  chartHeightRatio?: number\n  data?: ChartData\n  dataUrlType?: 'json' | 'csv' | 'tsv'\n  socialMode?: boolean\n  socialModeRatio?: number\n}): ChartPropsRefs {\n  return {\n    chartHeightRatio: toRef(props, 'chartHeightRatio'),\n    // toRef() infers `| undefined` from each optional prop; withDefaults() at the\n    // call site guarantees a value, so these casts drop the undefined it can't see.\n    data: toRef(props, 'data') as Ref<ChartData>,\n    dataUrlType: toRef(props, 'dataUrlType') as Ref<'json' | 'csv' | 'tsv'>,\n    socialMode: toRef(props, 'socialMode') as Ref<boolean>,\n    socialModeRatio: toRef(props, 'socialModeRatio') as Ref<number>\n  }\n}\n\n/**\n * Builds the shared Vue prop definitions every chart component accepts.\n *\n * @returns A {@link ChartPropsDefinition} object passable to `defineProps`.\n * @remarks Internal building block used by chart components together with {@link useChart}; not exported from the package root.\n * @example\n * // Inside a chart component's <script setup>:\n * const props = defineProps(chartProps())\n */\nexport const chartProps = (): ChartPropsDefinition => ({\n  data: {\n    type: [Array, String, Object],\n    default: () => [],\n    validator(value: string) {\n      return isObject(value) || (isString(value) && isUrl(value))\n    }\n  },\n  /**\n   * Format of the data to load.\n   */\n  dataUrlType: {\n    type: String,\n    default: 'json',\n    validator(value: string) {\n      return ['json', 'csv', 'tsv'].indexOf(value) > -1\n    }\n  },\n  /**\n   * When applicable, default chart's height ratio\n   */\n  chartHeightRatio: {\n    type: Number\n  },\n  /**\n   * If true, the chart will be display on social mode\n   */\n  socialMode: {\n    type: Boolean\n  },\n  /**\n   * Ratio to use in social mode\n   */\n  socialModeRatio: {\n    type: Number,\n    default: 5 / 4\n  }\n})\n\nexport const chartEmits = ['resized', 'loaded']\n\nexport interface ElementsMaxBBoxOptions {\n  selector?: string\n  defaultWidth?: number | null\n  defaultHeight?: number | null\n}\n\nexport interface ElementsMaxBBox {\n  width: number | null | undefined\n  height: number | null | undefined\n}\n\nexport interface UseChartReturn<T = Record<string, unknown>[] | Record<string, number>> {\n  dataHasHighlights: ComputedRef<boolean>\n  loadedData: Ref<LoadedData<T>>\n  mounted: Ref<boolean>\n  xAxisYearFormat: (year: number | string) => number | string\n  elementsMaxBBox: (options?: ElementsMaxBBoxOptions) => ElementsMaxBBox\n  d3Formatter: (value: number | string, formatter?: ((v: number | string) => string) | string) => string | number\n  baseHeightRatio: ComputedRef<number>\n}\n\n/**\n * Powers a chart component: loads data (inline or from a URL), tracks size, and emits lifecycle events.\n *\n * @param resizableRef - Ref to the chart's resizable root element, observed for size changes.\n * @param props - The chart props as refs, typically produced by {@link getChartProps}.\n * @param context - The setup context providing `emit`, used to fire `loaded` and `resized`.\n * @param isLoaded - Ref flipped to `true` once data has finished loading; shared with the component.\n * @param onResized - Optional callback run after each settled resize and after the initial load.\n * @param afterLoaded - Optional async hook awaited after data loads but before `loaded` is emitted.\n * @returns A {@link UseChartReturn} with reactive state (`loadedData`, `mounted`, `dataHasHighlights`, `baseHeightRatio`) and helpers (`elementsMaxBBox`, `xAxisYearFormat`, `d3Formatter`).\n * @example\n * <script setup>\n * import { ref } from 'vue'\n * import { useChart } from '@icij/murmur-next'\n *\n * const resizableRef = ref()\n * const emit = defineEmits(['resized', 'loaded'])\n * const isLoaded = ref(false)\n * const chartProps = {\n *   data: ref([]),\n *   dataUrlType: ref('json'),\n *   chartHeightRatio: ref(undefined),\n *   socialMode: ref(false),\n *   socialModeRatio: ref(5 / 4)\n * }\n * const { loadedData, baseHeightRatio } = useChart(resizableRef, chartProps, { emit }, isLoaded)\n * </script>\n *\n * <template>\n *   <div ref=\"resizableRef\">{{ loadedData }}</div>\n * </template>\n */\nexport function useChart<T = Record<string, unknown>[] | Record<string, number>>(\n  resizableRef: Ref<ComponentPublicInstance<HTMLElement> | null>,\n  props: ChartPropsRefs,\n  { emit }: ChartEmit<T>,\n  isLoaded: Ref<boolean>,\n  onResized?: () => void,\n  afterLoaded?: () => Promise<void>\n): UseChartReturn<T> {\n  const { resizeRef, resizeState } = useResizeObserver(resizableRef)\n  const mounted = ref<boolean>(false)\n\n  onMounted(() => {\n    return nextTick(() => {\n      mounted.value = true\n    })\n  })\n\n  // Data loading: delegate fetching/parsing to the data sub-composable and run\n  // the lifecycle side effects in the order consumers depend on once a load\n  // settles (after the optional afterLoaded hook, flip isLoaded, emit loaded,\n  // then run the initial resize).\n  const { loadedData } = useChartData<T>(\n    { data: props.data, dataUrlType: props.dataUrlType },\n    async (data) => {\n      await afterLoaded?.()\n      isLoaded.value = true\n      emit('loaded', data)\n\n      if (onResized) {\n        onResized()\n        emit('resized')\n      }\n    }\n  )\n\n  // Formatting and derived config (value formatter, base height ratio, highlight\n  // detection) live in the format sub-composable; they hold no DOM state.\n  const { dataHasHighlights, baseHeightRatio, d3Formatter } = useChartFormat({\n    loadedData,\n    rawData: toRef(props.data),\n    chartHeightRatio: props.chartHeightRatio,\n    socialMode: props.socialMode,\n    socialModeRatio: props.socialModeRatio\n  })\n\n  function elementsMaxBBox({\n    selector = 'text',\n    defaultWidth = null,\n    defaultHeight = null\n  }: ElementsMaxBBoxOptions = {}): ElementsMaxBBox {\n    const returnDefault = { width: defaultWidth, height: defaultHeight }\n    if (!isLoaded.value || !resizeRef.value) {\n      return returnDefault\n    }\n    const elements: NodeListOf<SVGGraphicsElement> = resizeRef.value.querySelectorAll(selector)\n\n    if (elements.length == 0) {\n      return returnDefault\n    }\n    const width = max(\n      [...elements].map((element) => {\n        return element.getBBox ? element.getBBox().width : defaultWidth\n      })\n    )\n    const height = max(\n      [...elements].map((element) => {\n        return element.getBBox ? element.getBBox().height : defaultHeight\n      })\n    )\n    return { width, height }\n  }\n\n  function xAxisYearFormat(year: number | string) {\n    // previously using narrowWidth, but it is automatically updated through resizeObserver state reactivity\n    return resizeState.narrowWidth ? '’' + String(year).slice(2, 4) : year\n  }\n\n  watch(resizeState.dimensions, () => {\n    if (isLoaded.value && onResized) {\n      onResized()\n      emit('resized')\n    }\n  })\n\n  return {\n    loadedData,\n    mounted,\n    elementsMaxBBox,\n    xAxisYearFormat,\n    d3Formatter,\n    baseHeightRatio,\n    dataHasHighlights\n  }\n}\n","import { max } from 'd3-array'\nimport { scaleLinear } from 'd3-scale'\nimport type { ScaleLinear } from 'd3-scale'\nimport sortByFn from 'lodash/sortBy'\nimport { computed, toValue } from 'vue'\nimport type { ComputedRef, MaybeRefOrGetter } from 'vue'\n\n/**\n * A single datum of a horizontal bar chart. `value` is the measured quantity;\n * `label` and `highlight` are optional presentation hints.\n */\nexport interface BarChartDatum {\n  value: number | number[]\n  highlight?: boolean\n  label?: string\n}\n\n/**\n * The geometry of a single rendered bar, in canvas pixels, carrying the source\n * datum's value and highlight flag for the template.\n */\nexport type BarChartBar = {\n  width: number\n  height: number\n  x: number\n  y: number\n} & BarChartDatum\n\n/**\n * The geometry of a single rendered label, in canvas pixels.\n */\nexport interface BarChartLabel {\n  label?: string\n  x: number\n  y: number\n}\n\n/**\n * The chart's inner padding box, once the axis margins are subtracted.\n */\nexport interface BarChartPadded {\n  width: number\n  height: number\n}\n\n/**\n * The chart's margins, in canvas pixels. Only the left margin is non-zero (it\n * reserves room for the labels); the others are kept for symmetry with the\n * padded-box computation.\n */\nexport interface BarChartMargin {\n  left: number\n  right: number\n  top: number\n  bottom: number\n}\n\n/**\n * Reactive inputs driving {@link useBarChart}. They mirror the `BarChart`\n * component's loaded data, its measured dimensions and the geometry-affecting\n * props, accepted as plain values, refs or getters so the composable adapts to\n * how the caller wires its state.\n */\nexport interface UseBarChartOptions {\n  /**\n   * The chart's loaded data (inline array or fetched), as exposed by `useChart`.\n   */\n  loadedData: MaybeRefOrGetter<BarChartDatum[] | null>\n  /**\n   * Measured outer width of the chart, in pixels.\n   */\n  width: MaybeRefOrGetter<number>\n  /**\n   * Measured (or fixed) width reserved for the labels column, in pixels.\n   */\n  labelWidth: MaybeRefOrGetter<number>\n  /**\n   * Measured (or fixed) width reserved for the values, in pixels. Already\n   * includes the value gap.\n   */\n  valueWidth: MaybeRefOrGetter<number>\n  /**\n   * Field name(s) to sort the data by, or `null`/`undefined` to keep the\n   * loaded order.\n   */\n  sortBy: MaybeRefOrGetter<string | string[] | null | undefined>\n  /**\n   * Height of each bar, in pixels.\n   */\n  barHeight: MaybeRefOrGetter<number>\n  /**\n   * Vertical gap between consecutive bars, in pixels.\n   */\n  barGap: MaybeRefOrGetter<number>\n  /**\n   * Horizontal gap between the labels and the bars, in pixels.\n   */\n  labelGap: MaybeRefOrGetter<number>\n}\n\n/**\n * Reactive API returned by {@link useBarChart}.\n */\nexport interface UseBarChart {\n  /**\n   * The loaded data, optionally sorted by the `sortBy` option.\n   */\n  sortedData: ComputedRef<BarChartDatum[]>\n  /**\n   * The chart's margins (only the left margin reserves label room).\n   */\n  margin: ComputedRef<BarChartMargin>\n  /**\n   * The inner padding box, after subtracting the margins.\n   */\n  padded: ComputedRef<BarChartPadded>\n  /**\n   * The linear scale mapping a datum value to a bar width in pixels.\n   */\n  scale: ComputedRef<{ x: ScaleLinear<number, number> }>\n  /**\n   * The geometry of every bar, in source-data order (after sorting).\n   */\n  bars: ComputedRef<BarChartBar[]>\n  /**\n   * The geometry of every label, in source-data order (after sorting).\n   */\n  labels: ComputedRef<BarChartLabel[]>\n  /**\n   * The total SVG height needed to stack every bar.\n   */\n  height: ComputedRef<number>\n}\n\n/**\n * Owns the pure d3 geometry of the `BarChart` component: it sorts the data,\n * builds the linear value scale, and derives the bar, label, margin and padded\n * boxes. It holds no DOM state — the measured `width`/`labelWidth`/`valueWidth`\n * are passed in, and rendering stays in the component.\n *\n * @param options - Reactive geometry options (see {@link UseBarChartOptions}).\n * @returns The {@link UseBarChart} API of derived geometry.\n * @example\n * // Internal building block of the `BarChart` component; not exported from the\n * // package root. Inside a `<script setup>` block:\n * import { toRef } from 'vue'\n * import { useBarChart } from '@/composables/useBarChart'\n *\n * const { bars, height } = useBarChart({\n *   loadedData,\n *   width,\n *   labelWidth,\n *   valueWidth,\n *   sortBy: toRef(() => props.sortBy),\n *   barHeight: toRef(() => props.barHeight),\n *   barGap: toRef(() => props.barGap),\n *   labelGap: toRef(() => props.labelGap)\n * })\n */\nexport function useBarChart(options: UseBarChartOptions): UseBarChart {\n  const {\n    loadedData,\n    width,\n    labelWidth,\n    valueWidth,\n    sortBy,\n    barHeight,\n    barGap,\n    labelGap\n  } = options\n\n  const sortedData = computed((): BarChartDatum[] => {\n    const data = toValue(loadedData)\n    if (!data) {\n      return []\n    }\n    const sortKey = toValue(sortBy)\n    return !sortKey ? data : sortByFn(data, sortKey)\n  })\n\n  // Only the left margin is non-zero: it reserves room for the labels column\n  // plus the gap between labels and bars.\n  const margin = computed((): BarChartMargin => {\n    return {\n      left: toValue(labelWidth) + toValue(labelGap),\n      right: 0,\n      top: 0,\n      bottom: 0\n    }\n  })\n\n  const padded = computed((): BarChartPadded => {\n    const widthP = Math.max(0, toValue(width) - margin.value.left - margin.value.right)\n    const heightP = Math.max(0, height.value - margin.value.top - margin.value.bottom)\n    return { width: widthP, height: heightP }\n  })\n\n  // The value labels sit to the right of each bar, so the scale stops short of\n  // the padded width by the room reserved for the widest value.\n  const scale = computed((): { x: ScaleLinear<number, number> } => {\n    const x = scaleLinear()\n      // @ts-expect-error D3 api\n      .domain([0, max(sortedData.value, (d: BarChartDatum) => d.value)])\n      .range([0, Math.max(0, padded.value.width - toValue(valueWidth))])\n    return { x }\n  })\n\n  const bars = computed((): BarChartBar[] => {\n    return sortedData.value.map((d: BarChartDatum, i: number) => {\n      return {\n        width: Math.abs(scale.value.x(d.value as number)),\n        height: Math.abs(toValue(barHeight)),\n        value: d.value,\n        highlight: d.highlight,\n        x: 0,\n        y: (toValue(barHeight) + toValue(barGap)) * i\n      }\n    })\n  })\n\n  const labels = computed((): BarChartLabel[] => {\n    return sortedData.value.map((d: BarChartDatum, i: number) => {\n      return {\n        label: d.label,\n        x: toValue(labelWidth),\n        y: 4 + toValue(barHeight) / 2 + (toValue(barHeight) + toValue(barGap)) * i\n      }\n    })\n  })\n\n  const height = computed((): number => {\n    return (toValue(barHeight) + toValue(barGap)) * sortedData.value.length\n  })\n\n  return {\n    sortedData,\n    margin,\n    padded,\n    scale,\n    bars,\n    labels,\n    height\n  }\n}\n\nexport default useBarChart\n","<script setup lang=\"ts\">\nimport identity from 'lodash/identity'\nimport { computed, ref, toRef, ComponentPublicInstance } from 'vue'\nimport { getChartProps, useChart } from '@/composables/useChart'\nimport { useBarChart } from '@/composables/useBarChart'\nimport type { BarChartDatum } from '@/composables/useBarChart'\n\ndefineOptions({\n  name: 'BarChart'\n})\n\nexport interface BarChartProps {\n  /**\n   * Height of each bar in pixels.\n   */\n  barHeight?: number\n  /**\n   * Vertical gap between bars in pixels.\n   */\n  barGap?: number\n  /**\n   * Color of the bars. Falls back to theme's dark color.\n   */\n  barColor?: string\n  /**\n   * Color of highlighted bars. Falls back to theme's primary color.\n   */\n  barHighlightColor?: string\n  /**\n   * Fixed width for labels in pixels. If not set, width is calculated automatically.\n   */\n  fixedLabelWidth?: number | null\n  /**\n   * Fixed width for values in pixels. If not set, width is calculated automatically.\n   */\n  fixedValueWidth?: number | null\n  /**\n   * Horizontal gap between labels and bars in pixels.\n   */\n  labelGap?: number\n  /**\n   * Horizontal gap between bars and their values in pixels.\n   */\n  valueGap?: number\n  /**\n   * Field name(s) to sort the data by.\n   */\n  sortBy?: string | string[] | null\n  /**\n   * Formatter function or d3 format string for x-axis tick values.\n   */\n  xAxisTickFormat?: ((v: any) => string) | string\n  /**\n   * Data to display, either as a URL string to fetch or an array of objects.\n   */\n  data?: string | Record<string, unknown>[] | null\n  /**\n   * Type of data file when fetching from URL.\n   */\n  dataUrlType?: 'json' | 'csv' | 'tsv'\n  /**\n   * Aspect ratio (height/width) for the chart.\n   */\n  chartHeightRatio?: number\n  /**\n   * Enable social mode for optimal display when sharing on social media.\n   */\n  socialMode?: boolean\n  /**\n   * Aspect ratio to use in social mode.\n   */\n  socialModeRatio?: number\n}\n\nconst props = withDefaults(defineProps<BarChartProps>(), {\n  barHeight: 30,\n  barGap: 15,\n  barColor: undefined,\n  barHighlightColor: undefined,\n  fixedLabelWidth: null,\n  fixedValueWidth: null,\n  labelGap: 10,\n  valueGap: 5,\n  sortBy: null,\n  xAxisTickFormat: () => identity,\n  data: null,\n  dataUrlType: 'json',\n  chartHeightRatio: undefined,\n  socialMode: false,\n  socialModeRatio: 5 / 4\n})\n\nconst emit = defineEmits<{\n  loaded: [data: BarChartDatum[] | null]\n  resized: []\n}>()\n\nconst el = ref<ComponentPublicInstance<HTMLElement> | null>(null)\nconst width = ref(0)\nconst isLoaded = ref(false)\nconst { loadedData, elementsMaxBBox, dataHasHighlights, d3Formatter }\n  = useChart<BarChartDatum[]>(el, getChartProps(props), { emit }, isLoaded, onResize)\n\n// Label and value widths are measured from the rendered SVG text, so they stay\n// in the component (the geometry composable holds no DOM state) and feed it.\nconst labelWidth = computed(() => {\n  if (props.fixedLabelWidth) {\n    return props.fixedLabelWidth\n  }\n  const selector = '.bar-chart__labels__item'\n  const defaultWidth = 100\n  return elementsMaxBBox({ selector, defaultWidth }).width as number\n})\n\nconst valueWidth = computed(() => {\n  if (props.fixedValueWidth) {\n    return props.fixedValueWidth\n  }\n  const selector = '.bar-chart__bars__item__value'\n  const defaultWidth = 0\n  return (elementsMaxBBox({ selector, defaultWidth }).width as number) + props.valueGap\n})\n\nconst { margin, padded, scale, bars, labels, height } = useBarChart({\n  loadedData,\n  width,\n  labelWidth,\n  valueWidth,\n  sortBy: toRef(() => props.sortBy),\n  barHeight: toRef(() => props.barHeight),\n  barGap: toRef(() => props.barGap),\n  labelGap: toRef(() => props.labelGap)\n})\n\nfunction formatXDatum(d: number | number[]) {\n  if (Array.isArray(d)) {\n    return d.map(v => d3Formatter(v, props.xAxisTickFormat)).join(' – ')\n  }\n  return d3Formatter(d, props.xAxisTickFormat)\n}\n\nfunction onResize() {\n  if (el.value) {\n    width.value = el.value?.offsetWidth\n  }\n}\n\n// Expose the derived geometry so tests (and host apps) can read the scale and\n// dimensions the chart computes.\ndefineExpose({ margin, padded, scale, bars, labels, height })\n</script>\n\n<template>\n  <div\n    ref=\"el\"\n    class=\"bar-chart\"\n    :style=\"{\n      '--bar-color': barColor,\n      '--bar-highlight-color': barHighlightColor\n    }\"\n    :class=\"{\n      'bar-chart--has-highlights': dataHasHighlights,\n      'bar-chart--social-mode': socialMode\n    }\"\n  >\n    <svg\n      :width=\"width\"\n      :height=\"height\"\n    >\n      <g\n        :style=\"{ transform: `translate(0, ${margin.top}px)` }\"\n        class=\"bar-chart__labels\"\n      >\n        <text\n          v-for=\"(label, i) in labels\"\n          :key=\"i\"\n          :x=\"label.x\"\n          :y=\"label.y\"\n          text-anchor=\"end\"\n          class=\"bar-chart__labels__item\"\n        >\n          {{ label.label }}\n        </text>\n      </g>\n      <g\n        :style=\"{ transform: `translate(${margin.left}px, ${margin.top}px)` }\"\n        class=\"bar-chart__bars\"\n      >\n        <g\n          v-for=\"(bar, i) in bars\"\n          :key=\"i\"\n          class=\"bar-chart__bars__item\"\n          :class=\"{ 'bar-chart__bars__item--highlight': bar.highlight }\"\n        >\n          <rect\n            :width=\"bar.width\"\n            :height=\"bar.height\"\n            :x=\"bar.x\"\n            :y=\"bar.y\"\n          />\n          <text\n            class=\"bar-chart__bars__item__value\"\n            :x=\"bar.width + valueGap\"\n            :y=\"bar.y + bar.height / 2\"\n            text-anchor=\"start\"\n            dominant-baseline=\"middle\"\n          >\n            {{ formatXDatum(bar.value) }}\n          </text>\n        </g>\n      </g>\n    </svg>\n  </div>\n</template>\n\n<style lang=\"scss\">\n\n.bar-chart {\n  text {\n    font-family: $font-family-base;\n    font-size: $font-size-base;\n    fill: currentColor;\n  }\n\n  &--has-highlights &__bars__item:not(&__bars__item--highlight):not(:hover) {\n    opacity: 0.7;\n    filter: grayscale(30%);\n  }\n\n  &__bars {\n    &__item {\n      rect {\n        fill: var(--bar-color, var(--dark, $dark));\n      }\n\n      &--highlight rect {\n        fill: var(--bar-highlight-color, var(--primary, $primary));\n      }\n    }\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport identity from 'lodash/identity'\nimport { computed, ref, toRef, ComponentPublicInstance } from 'vue'\nimport { getChartProps, useChart } from '@/composables/useChart'\nimport { useBarChart } from '@/composables/useBarChart'\nimport type { BarChartDatum } from '@/composables/useBarChart'\n\ndefineOptions({\n  name: 'BarChart'\n})\n\nexport interface BarChartProps {\n  /**\n   * Height of each bar in pixels.\n   */\n  barHeight?: number\n  /**\n   * Vertical gap between bars in pixels.\n   */\n  barGap?: number\n  /**\n   * Color of the bars. Falls back to theme's dark color.\n   */\n  barColor?: string\n  /**\n   * Color of highlighted bars. Falls back to theme's primary color.\n   */\n  barHighlightColor?: string\n  /**\n   * Fixed width for labels in pixels. If not set, width is calculated automatically.\n   */\n  fixedLabelWidth?: number | null\n  /**\n   * Fixed width for values in pixels. If not set, width is calculated automatically.\n   */\n  fixedValueWidth?: number | null\n  /**\n   * Horizontal gap between labels and bars in pixels.\n   */\n  labelGap?: number\n  /**\n   * Horizontal gap between bars and their values in pixels.\n   */\n  valueGap?: number\n  /**\n   * Field name(s) to sort the data by.\n   */\n  sortBy?: string | string[] | null\n  /**\n   * Formatter function or d3 format string for x-axis tick values.\n   */\n  xAxisTickFormat?: ((v: any) => string) | string\n  /**\n   * Data to display, either as a URL string to fetch or an array of objects.\n   */\n  data?: string | Record<string, unknown>[] | null\n  /**\n   * Type of data file when fetching from URL.\n   */\n  dataUrlType?: 'json' | 'csv' | 'tsv'\n  /**\n   * Aspect ratio (height/width) for the chart.\n   */\n  chartHeightRatio?: number\n  /**\n   * Enable social mode for optimal display when sharing on social media.\n   */\n  socialMode?: boolean\n  /**\n   * Aspect ratio to use in social mode.\n   */\n  socialModeRatio?: number\n}\n\nconst props = withDefaults(defineProps<BarChartProps>(), {\n  barHeight: 30,\n  barGap: 15,\n  barColor: undefined,\n  barHighlightColor: undefined,\n  fixedLabelWidth: null,\n  fixedValueWidth: null,\n  labelGap: 10,\n  valueGap: 5,\n  sortBy: null,\n  xAxisTickFormat: () => identity,\n  data: null,\n  dataUrlType: 'json',\n  chartHeightRatio: undefined,\n  socialMode: false,\n  socialModeRatio: 5 / 4\n})\n\nconst emit = defineEmits<{\n  loaded: [data: BarChartDatum[] | null]\n  resized: []\n}>()\n\nconst el = ref<ComponentPublicInstance<HTMLElement> | null>(null)\nconst width = ref(0)\nconst isLoaded = ref(false)\nconst { loadedData, elementsMaxBBox, dataHasHighlights, d3Formatter }\n  = useChart<BarChartDatum[]>(el, getChartProps(props), { emit }, isLoaded, onResize)\n\n// Label and value widths are measured from the rendered SVG text, so they stay\n// in the component (the geometry composable holds no DOM state) and feed it.\nconst labelWidth = computed(() => {\n  if (props.fixedLabelWidth) {\n    return props.fixedLabelWidth\n  }\n  const selector = '.bar-chart__labels__item'\n  const defaultWidth = 100\n  return elementsMaxBBox({ selector, defaultWidth }).width as number\n})\n\nconst valueWidth = computed(() => {\n  if (props.fixedValueWidth) {\n    return props.fixedValueWidth\n  }\n  const selector = '.bar-chart__bars__item__value'\n  const defaultWidth = 0\n  return (elementsMaxBBox({ selector, defaultWidth }).width as number) + props.valueGap\n})\n\nconst { margin, padded, scale, bars, labels, height } = useBarChart({\n  loadedData,\n  width,\n  labelWidth,\n  valueWidth,\n  sortBy: toRef(() => props.sortBy),\n  barHeight: toRef(() => props.barHeight),\n  barGap: toRef(() => props.barGap),\n  labelGap: toRef(() => props.labelGap)\n})\n\nfunction formatXDatum(d: number | number[]) {\n  if (Array.isArray(d)) {\n    return d.map(v => d3Formatter(v, props.xAxisTickFormat)).join(' – ')\n  }\n  return d3Formatter(d, props.xAxisTickFormat)\n}\n\nfunction onResize() {\n  if (el.value) {\n    width.value = el.value?.offsetWidth\n  }\n}\n\n// Expose the derived geometry so tests (and host apps) can read the scale and\n// dimensions the chart computes.\ndefineExpose({ margin, padded, scale, bars, labels, height })\n</script>\n\n<template>\n  <div\n    ref=\"el\"\n    class=\"bar-chart\"\n    :style=\"{\n      '--bar-color': barColor,\n      '--bar-highlight-color': barHighlightColor\n    }\"\n    :class=\"{\n      'bar-chart--has-highlights': dataHasHighlights,\n      'bar-chart--social-mode': socialMode\n    }\"\n  >\n    <svg\n      :width=\"width\"\n      :height=\"height\"\n    >\n      <g\n        :style=\"{ transform: `translate(0, ${margin.top}px)` }\"\n        class=\"bar-chart__labels\"\n      >\n        <text\n          v-for=\"(label, i) in labels\"\n          :key=\"i\"\n          :x=\"label.x\"\n          :y=\"label.y\"\n          text-anchor=\"end\"\n          class=\"bar-chart__labels__item\"\n        >\n          {{ label.label }}\n        </text>\n      </g>\n      <g\n        :style=\"{ transform: `translate(${margin.left}px, ${margin.top}px)` }\"\n        class=\"bar-chart__bars\"\n      >\n        <g\n          v-for=\"(bar, i) in bars\"\n          :key=\"i\"\n          class=\"bar-chart__bars__item\"\n          :class=\"{ 'bar-chart__bars__item--highlight': bar.highlight }\"\n        >\n          <rect\n            :width=\"bar.width\"\n            :height=\"bar.height\"\n            :x=\"bar.x\"\n            :y=\"bar.y\"\n          />\n          <text\n            class=\"bar-chart__bars__item__value\"\n            :x=\"bar.width + valueGap\"\n            :y=\"bar.y + bar.height / 2\"\n            text-anchor=\"start\"\n            dominant-baseline=\"middle\"\n          >\n            {{ formatXDatum(bar.value) }}\n          </text>\n        </g>\n      </g>\n    </svg>\n  </div>\n</template>\n\n<style lang=\"scss\">\n\n.bar-chart {\n  text {\n    font-family: $font-family-base;\n    font-size: $font-size-base;\n    fill: currentColor;\n  }\n\n  &--has-highlights &__bars__item:not(&__bars__item--highlight):not(:hover) {\n    opacity: 0.7;\n    filter: grayscale(30%);\n  }\n\n  &__bars {\n    &__item {\n      rect {\n        fill: var(--bar-color, var(--dark, $dark));\n      }\n\n      &--highlight rect {\n        fill: var(--bar-highlight-color, var(--primary, $primary));\n      }\n    }\n  }\n}\n</style>\n","export default function(x) {\n  return x;\n}\n","import identity from \"./identity.js\";\n\nvar top = 1,\n    right = 2,\n    bottom = 3,\n    left = 4,\n    epsilon = 1e-6;\n\nfunction translateX(x) {\n  return \"translate(\" + x + \",0)\";\n}\n\nfunction translateY(y) {\n  return \"translate(0,\" + y + \")\";\n}\n\nfunction number(scale) {\n  return d => +scale(d);\n}\n\nfunction center(scale, offset) {\n  offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n  if (scale.round()) offset = Math.round(offset);\n  return d => +scale(d) + offset;\n}\n\nfunction entering() {\n  return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n  var tickArguments = [],\n      tickValues = null,\n      tickFormat = null,\n      tickSizeInner = 6,\n      tickSizeOuter = 6,\n      tickPadding = 3,\n      offset = typeof window !== \"undefined\" && window.devicePixelRatio > 1 ? 0 : 0.5,\n      k = orient === top || orient === left ? -1 : 1,\n      x = orient === left || orient === right ? \"x\" : \"y\",\n      transform = orient === top || orient === bottom ? translateX : translateY;\n\n  function axis(context) {\n    var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n        format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n        spacing = Math.max(tickSizeInner, 0) + tickPadding,\n        range = scale.range(),\n        range0 = +range[0] + offset,\n        range1 = +range[range.length - 1] + offset,\n        position = (scale.bandwidth ? center : number)(scale.copy(), offset),\n        selection = context.selection ? context.selection() : context,\n        path = selection.selectAll(\".domain\").data([null]),\n        tick = selection.selectAll(\".tick\").data(values, scale).order(),\n        tickExit = tick.exit(),\n        tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n        line = tick.select(\"line\"),\n        text = tick.select(\"text\");\n\n    path = path.merge(path.enter().insert(\"path\", \".tick\")\n        .attr(\"class\", \"domain\")\n        .attr(\"stroke\", \"currentColor\"));\n\n    tick = tick.merge(tickEnter);\n\n    line = line.merge(tickEnter.append(\"line\")\n        .attr(\"stroke\", \"currentColor\")\n        .attr(x + \"2\", k * tickSizeInner));\n\n    text = text.merge(tickEnter.append(\"text\")\n        .attr(\"fill\", \"currentColor\")\n        .attr(x, k * spacing)\n        .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n    if (context !== selection) {\n      path = path.transition(context);\n      tick = tick.transition(context);\n      line = line.transition(context);\n      text = text.transition(context);\n\n      tickExit = tickExit.transition(context)\n          .attr(\"opacity\", epsilon)\n          .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d + offset) : this.getAttribute(\"transform\"); });\n\n      tickEnter\n          .attr(\"opacity\", epsilon)\n          .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform((p && isFinite(p = p(d)) ? p : position(d)) + offset); });\n    }\n\n    tickExit.remove();\n\n    path\n        .attr(\"d\", orient === left || orient === right\n            ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H\" + offset + \"V\" + range1 + \"H\" + k * tickSizeOuter : \"M\" + offset + \",\" + range0 + \"V\" + range1)\n            : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V\" + offset + \"H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",\" + offset + \"H\" + range1));\n\n    tick\n        .attr(\"opacity\", 1)\n        .attr(\"transform\", function(d) { return transform(position(d) + offset); });\n\n    line\n        .attr(x + \"2\", k * tickSizeInner);\n\n    text\n        .attr(x, k * spacing)\n        .text(format);\n\n    selection.filter(entering)\n        .attr(\"fill\", \"none\")\n        .attr(\"font-size\", 10)\n        .attr(\"font-family\", \"sans-serif\")\n        .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n    selection\n        .each(function() { this.__axis = position; });\n  }\n\n  axis.scale = function(_) {\n    return arguments.length ? (scale = _, axis) : scale;\n  };\n\n  axis.ticks = function() {\n    return tickArguments = Array.from(arguments), axis;\n  };\n\n  axis.tickArguments = function(_) {\n    return arguments.length ? (tickArguments = _ == null ? [] : Array.from(_), axis) : tickArguments.slice();\n  };\n\n  axis.tickValues = function(_) {\n    return arguments.length ? (tickValues = _ == null ? null : Array.from(_), axis) : tickValues && tickValues.slice();\n  };\n\n  axis.tickFormat = function(_) {\n    return arguments.length ? (tickFormat = _, axis) : tickFormat;\n  };\n\n  axis.tickSize = function(_) {\n    return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n  };\n\n  axis.tickSizeInner = function(_) {\n    return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n  };\n\n  axis.tickSizeOuter = function(_) {\n    return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n  };\n\n  axis.tickPadding = function(_) {\n    return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n  };\n\n  axis.offset = function(_) {\n    return arguments.length ? (offset = +_, axis) : offset;\n  };\n\n  return axis;\n}\n\nexport function axisTop(scale) {\n  return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n  return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n  return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n  return axis(left, scale);\n}\n","var baseClone = require('./_baseClone'),\n    baseIteratee = require('./_baseIteratee');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1;\n\n/**\n * Creates a function that invokes `func` with the arguments of the created\n * function. If `func` is a property name, the created function returns the\n * property value for a given element. If `func` is an array or object, the\n * created function returns `true` for elements that contain the equivalent\n * source properties, otherwise it returns `false`.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Util\n * @param {*} [func=_.identity] The value to convert to a callback.\n * @returns {Function} Returns the callback.\n * @example\n *\n * var users = [\n *   { 'user': 'barney', 'age': 36, 'active': true },\n *   { 'user': 'fred',   'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, _.iteratee(['user', 'fred']));\n * // => [{ 'user': 'fred', 'age': 40 }]\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, _.iteratee('user'));\n * // => ['barney', 'fred']\n *\n * // Create custom iteratee shorthands.\n * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\n *     return func.test(string);\n *   };\n * });\n *\n * _.filter(['abc', 'def'], /ef/);\n * // => ['def']\n */\nfunction iteratee(func) {\n  return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n}\n\nmodule.exports = iteratee;\n","import { max, range, sum } from 'd3-array'\nimport { axisBottom, axisLeft } from 'd3-axis'\nimport type { Axis } from 'd3-axis'\nimport { scaleBand, scaleLinear } from 'd3-scale'\nimport type { NumberValue, ScaleBand, ScaleLinear } from 'd3-scale'\nimport iteratee from 'lodash/iteratee'\nimport sortByFn from 'lodash/sortBy'\nimport { computed, toValue } from 'vue'\nimport type { ComputedRef, MaybeRefOrGetter } from 'vue'\n\n/**\n * The geometry of a single rendered column, in canvas pixels, carrying its\n * source datum and (for waterfall charts) a flag marking the total column.\n */\nexport interface ColumnChartBar {\n  datum: Record<string, any>\n  width: number\n  height: number\n  x: number\n  y: number\n  isTotal?: boolean\n}\n\n/**\n * The chart's margins, in canvas pixels.\n */\nexport interface ColumnChartMargin {\n  left: number\n  right: number\n  top: number\n  bottom: number\n}\n\n/**\n * The chart's inner padding box, once the axis margins are subtracted.\n */\nexport interface ColumnChartPadded {\n  width: number\n  height: number\n}\n\n/**\n * A value formatter compatible with `useChart`'s `d3Formatter`: applies a d3\n * format string or a custom function, returning the value untouched otherwise.\n */\nexport type ColumnChartFormatter = (\n  value: number | string,\n  formatter?: ((v: number | string) => string) | string\n) => string | number\n\n/**\n * Reactive inputs driving {@link useColumnChart}. They mirror the `ColumnChart`\n * component's loaded data, its measured dimensions and the geometry-affecting\n * props, accepted as plain values, refs or getters so the composable adapts to\n * how the caller wires its state.\n */\nexport interface UseColumnChartOptions {\n  /**\n   * The chart's loaded data (inline array or fetched), as exposed by `useChart`.\n   */\n  loadedData: MaybeRefOrGetter<Record<string, unknown>[] | null>\n  /**\n   * Measured outer width of the chart, in pixels.\n   */\n  width: MaybeRefOrGetter<number>\n  /**\n   * Measured outer height of the chart, in pixels.\n   */\n  height: MaybeRefOrGetter<number>\n  /**\n   * Measured (or fixed) width reserved for the y-axis labels, in pixels.\n   */\n  labelWidth: MaybeRefOrGetter<number>\n  /**\n   * Measured height of the y-axis labels, in pixels.\n   */\n  labelHeight: MaybeRefOrGetter<number>\n  /**\n   * Measured height of the x-axis tick labels, in pixels.\n   */\n  bucketHeight: MaybeRefOrGetter<number>\n  /**\n   * Measured width of the x-axis tick labels, in pixels.\n   */\n  bucketWidth: MaybeRefOrGetter<number>\n  /**\n   * The `d3Formatter` helper exposed by `useChart`, used to format axis ticks.\n   */\n  d3Formatter: ColumnChartFormatter\n  sortBy: MaybeRefOrGetter<string | string[] | null | undefined>\n  seriesName: MaybeRefOrGetter<string>\n  timeseriesKey: MaybeRefOrGetter<string>\n  maxValue: MaybeRefOrGetter<number | null>\n  barPadding: MaybeRefOrGetter<number>\n  barMargin: MaybeRefOrGetter<number>\n  noXAxis: MaybeRefOrGetter<boolean>\n  noYAxis: MaybeRefOrGetter<boolean>\n  xAxisTickCollapse: MaybeRefOrGetter<boolean>\n  xAxisTickFormat: MaybeRefOrGetter<((v: any) => string) | string>\n  xAxisTicks: MaybeRefOrGetter<string[] | null>\n  yAxisTickFormat: MaybeRefOrGetter<((v: any) => string) | string>\n  yAxisTicks: MaybeRefOrGetter<number | object>\n  waterfall: MaybeRefOrGetter<boolean>\n  waterfallTotal: MaybeRefOrGetter<boolean>\n  waterfallTotalLabel: MaybeRefOrGetter<string>\n}\n\n/**\n * Reactive API returned by {@link useColumnChart}.\n */\nexport interface UseColumnChart {\n  sortedData: ComputedRef<Record<string, unknown>[]>\n  margin: ComputedRef<ColumnChartMargin>\n  padded: ComputedRef<ColumnChartPadded>\n  scaleX: ComputedRef<ScaleBand<string>>\n  scaleY: ComputedRef<ScaleLinear<number, number>>\n  waterfallTotalValue: ComputedRef<number>\n  bars: ComputedRef<ColumnChartBar[]>\n  xAxisHiddenTicks: ComputedRef<number>\n  /**\n   * Ticks to actually render on the x-axis: the collapsed, surviving subset\n   * of `sortedData`'s keys, not one entry per datum. Do not zip this with\n   * {@link bars} by index to derive your own labels — their lengths diverge\n   * as soon as `xAxisTickCollapse` yields a stride above 1; match by value\n   * against each bar's `datum` instead.\n   */\n  xAxisTickValues: ComputedRef<string[]>\n  xAxis: ComputedRef<Axis<string>>\n  yAxis: ComputedRef<Axis<NumberValue>>\n}\n\n/**\n * Owns the pure d3 geometry of the `ColumnChart` component: it sorts the data,\n * builds the band and linear scales, derives every column (including the\n * waterfall layout and its optional total), and configures the x/y axes. It\n * holds no DOM state — the measured dimensions are passed in, and the axis\n * rendering and tooltips stay in the component.\n *\n * @param options - Reactive geometry options (see {@link UseColumnChartOptions}).\n * @returns The {@link UseColumnChart} API of derived geometry and axis builders.\n * @example\n * // Internal building block of the `ColumnChart` component; not exported from\n * // the package root. Inside a `<script setup>` block:\n * import { toRef } from 'vue'\n * import { useColumnChart } from '@/composables/useColumnChart'\n *\n * const { bars, scaleX, xAxis } = useColumnChart({\n *   loadedData,\n *   width,\n *   height,\n *   labelWidth,\n *   labelHeight,\n *   bucketHeight,\n *   bucketWidth,\n *   d3Formatter,\n *   seriesName: toRef(() => props.seriesName),\n *   timeseriesKey: toRef(() => props.timeseriesKey)\n *   // ...remaining geometry props\n * })\n */\nexport function useColumnChart(options: UseColumnChartOptions): UseColumnChart {\n  const {\n    loadedData,\n    width,\n    height,\n    labelWidth,\n    labelHeight,\n    bucketHeight,\n    bucketWidth,\n    d3Formatter,\n    sortBy,\n    seriesName,\n    timeseriesKey,\n    maxValue,\n    barPadding,\n    barMargin,\n    noXAxis,\n    noYAxis,\n    xAxisTickCollapse,\n    xAxisTickFormat,\n    xAxisTicks,\n    yAxisTickFormat,\n    yAxisTicks,\n    waterfall,\n    waterfallTotal,\n    waterfallTotalLabel\n  } = options\n\n  const sortedData = computed((): Record<string, unknown>[] => {\n    const data = toValue(loadedData)\n    if (!data) {\n      return []\n    }\n    const sortKey = toValue(sortBy)\n    return !sortKey ? data : sortByFn(data, sortKey)\n  })\n\n  const margin = computed((): ColumnChartMargin => {\n    return {\n      left: toValue(noYAxis) ? 0 : toValue(labelWidth) + 10,\n      right: 0,\n      top: toValue(labelHeight) / 2,\n      bottom: toValue(noXAxis) ? 0 : toValue(bucketHeight) + 10\n    }\n  })\n\n  const padded = computed((): ColumnChartPadded => {\n    const widthP = Math.max(0, toValue(width) - margin.value.left - margin.value.right)\n    const heightP = Math.max(0, toValue(height) - margin.value.top - margin.value.bottom)\n    return { width: widthP, height: heightP }\n  })\n\n  const scaleX = computed((): ScaleBand<string> => {\n    const domain = sortedData.value.map(iteratee(toValue(timeseriesKey)))\n    if (toValue(waterfall) && toValue(waterfallTotal)) {\n      domain.push(toValue(waterfallTotalLabel))\n    }\n    return scaleBand()\n      .domain(domain)\n      .range([0, padded.value.width])\n      .padding(toValue(barPadding))\n  })\n\n  const waterfallTotalValue = computed((): number => {\n    return sum(sortedData.value, iteratee(toValue(seriesName))) ?? 0\n  })\n\n  const scaleY = computed((): ScaleLinear<number, number> => {\n    let resolvedMax: number\n    if (toValue(waterfall)) {\n      resolvedMax = toValue(maxValue) ?? waterfallTotalValue.value\n    }\n    else {\n      const seriesValue = iteratee(toValue(seriesName))\n      resolvedMax\n        = toValue(maxValue) ?? (max(sortedData.value, d => Number(seriesValue(d))) ?? 0)\n    }\n    return scaleLinear()\n      .domain([0, resolvedMax])\n      .range([padded.value.height, 0])\n  })\n\n  const bars = computed((): ColumnChartBar[] => {\n    const seriesKey = toValue(seriesName)\n    const timeKey = toValue(timeseriesKey)\n    const innerBarMargin = toValue(barMargin)\n    const barWidth = Math.max(1, Math.abs(scaleX.value.bandwidth()) - innerBarMargin)\n\n    if (toValue(waterfall)) {\n      // Each waterfall bar starts where the running total left off, so its top\n      // is the cumulative scale position and its height the delta of one value.\n      let cumulative = 0\n      const waterfallBars: ColumnChartBar[] = sortedData.value.map((datum: any) => {\n        const value = datum[seriesKey]\n        cumulative += value\n        return {\n          datum,\n          width: barWidth,\n          height: Math.abs(padded.value.height - scaleY.value(value)),\n          x: (scaleX.value(datum[timeKey]) ?? 0) + innerBarMargin / 2,\n          y: scaleY.value(cumulative)\n        }\n      })\n\n      if (toValue(waterfallTotal)) {\n        const totalLabel = toValue(waterfallTotalLabel)\n        const totalDatum = {\n          [timeKey]: totalLabel,\n          [seriesKey]: waterfallTotalValue.value\n        }\n        waterfallBars.push({\n          datum: totalDatum,\n          width: barWidth,\n          height: Math.abs(padded.value.height - scaleY.value(waterfallTotalValue.value)),\n          x: (scaleX.value(totalLabel) ?? 0) + innerBarMargin / 2,\n          y: scaleY.value(waterfallTotalValue.value),\n          isTotal: true\n        })\n      }\n\n      return waterfallBars\n    }\n\n    return sortedData.value.map((datum: any) => {\n      return {\n        datum,\n        width: barWidth,\n        height: Math.abs(padded.value.height - scaleY.value(datum[seriesKey])),\n        x: (scaleX.value(datum[timeKey]) ?? 0) + innerBarMargin / 2,\n        y: scaleY.value(datum[seriesKey]) ?? 0\n      }\n    })\n  })\n\n  // Number of ticks to skip so labels stop overlapping: the first stride wide\n  // enough that the visible buckets fit the chart width, or all of them.\n  const xAxisHiddenTicks = computed((): number => {\n    if (!toValue(xAxisTickCollapse)) {\n      return 0\n    }\n\n    const hiddenTicks = range(1, sortedData.value.length).find((mod) => {\n      const bucketWidthT = toValue(bucketWidth) * 1.5\n      return toValue(width) / (bucketWidthT / mod) >= sortedData.value.length\n    })\n\n    return hiddenTicks ?? sortedData.value.length\n  })\n\n  const xAxisTickValues = computed((): string[] => {\n    // An explicit `xAxisTicks` list is the caller's own axis: collapsing only\n    // applies to ticks derived from the data, whose count drives the stride.\n    const explicitTicks = toValue(xAxisTicks)\n    const ticks = explicitTicks ?? sortedData.value.map(iteratee(toValue(timeseriesKey)))\n    // Then drop ticks according to `xAxisHiddenTicks`, rather than keeping a\n    // placeholder for them: a `null` entry isn't part of the scale's domain,\n    // so d3 would resolve its position to NaN and break the axis' transform.\n    const stride = explicitTicks ? 0 : xAxisHiddenTicks.value\n    const filtered = ticks.filter((_tick: string, i: number) => {\n      return stride === 0 || (i + 1) % stride === 0\n    })\n    // Add the total label for waterfall charts\n    if (toValue(waterfall) && toValue(waterfallTotal)) {\n      filtered.push(toValue(waterfallTotalLabel))\n    }\n    return filtered\n  })\n\n  const xAxis = computed((): Axis<string> => {\n    return axisBottom(scaleX.value)\n      .tickFormat((d: any) => {\n        // The waterfall total label is a literal, never run through the formatter.\n        if (toValue(waterfall) && toValue(waterfallTotal) && d === toValue(waterfallTotalLabel)) {\n          return d\n        }\n        return d3Formatter(d, toValue(xAxisTickFormat))\n      })\n      .tickValues(xAxisTickValues.value)\n  })\n\n  const yAxis = computed((): Axis<NumberValue> => {\n    return axisLeft(scaleY.value)\n      .tickFormat((d: any) => String(d3Formatter(d, toValue(yAxisTickFormat))))\n      .ticks(toValue(yAxisTicks) as number)\n  })\n\n  return {\n    sortedData,\n    margin,\n    padded,\n    scaleX,\n    scaleY,\n    waterfallTotalValue,\n    bars,\n    xAxisHiddenTicks,\n    xAxisTickValues,\n    xAxis,\n    yAxis\n  }\n}\n\nexport default useColumnChart\n","<script setup lang=\"ts\">\nimport { ComponentPublicInstance, computed, getCurrentInstance, ref, toRef, watch } from 'vue'\nimport identity from 'lodash/identity'\nimport { select as d3Select } from 'd3-selection'\n\nimport { getChartProps, useChart } from '@/composables/useChart'\nimport { useColumnChart } from '@/composables/useColumnChart'\nimport AppIcon from '@/components/App/AppIcon.vue'\n\ndefineOptions({\n  name: 'ColumnChart'\n})\n\nexport interface ColumnChartProps {\n  /**\n   * Color of the columns. Falls back to theme's dark color.\n   */\n  columnColor?: string\n  /**\n   * Color of highlighted columns. Falls back to theme's primary color.\n   */\n  columnHighlightColor?: string\n  /**\n   * Fixed height for the chart in pixels. If not set, height is calculated from width.\n   */\n  fixedHeight?: number | null\n  /**\n   * Fixed width for y-axis labels in pixels. If not set, width is calculated automatically.\n   */\n  fixedLabelWidth?: number | null\n  /**\n   * Field name in data objects containing the value to display.\n   */\n  seriesName?: string\n  /**\n   * Collapse x-axis ticks to prevent overlapping when there are many data points.\n   */\n  xAxisTickCollapse?: boolean\n  /**\n   * Formatter function or d3 format string for x-axis tick labels.\n   */\n  xAxisTickFormat?: ((v: any) => string) | string\n  /**\n   * Explicit list of x-axis tick values to display.\n   */\n  xAxisTicks?: string[] | null\n  /**\n   * Formatter function or d3 format string for y-axis tick labels.\n   */\n  yAxisTickFormat?: ((v: any) => string) | string\n  /**\n   * Number of y-axis ticks or d3 tick configuration object.\n   */\n  yAxisTicks?: number | object\n  /**\n   * Field name(s) to sort the data by.\n   */\n  sortBy?: string | string[] | null\n  /**\n   * Field name in data objects containing the x-axis category/time value.\n   */\n  timeseriesKey?: string\n  /**\n   * Maximum value for the y-axis scale. If not set, derived from data.\n   */\n  maxValue?: number | null\n  /**\n   * Disable tooltips on column hover.\n   */\n  noTooltips?: boolean\n  /**\n   * Hide the x-axis.\n   */\n  noXAxis?: boolean\n  /**\n   * Hide the y-axis.\n   */\n  noYAxis?: boolean\n  /**\n   * Padding between columns as a ratio (0-1) of the column width.\n   */\n  barPadding?: number\n  /**\n   * Margin between columns in pixels.\n   */\n  barMargin?: number\n  /**\n   * List of timeseriesKey values to highlight.\n   */\n  highlights?: string[]\n  /**\n   * Show placeholder bars for visual pattern.\n   */\n  stripped?: boolean\n  /**\n   * Enable hover effects on columns.\n   */\n  hover?: boolean\n  /**\n   * Icon component to display on column hover.\n   */\n  hoverIcon?: string | object | object[] | null\n  /**\n   * Size of the hover icon.\n   */\n  hoverIconSize?: string\n  /**\n   * Data to display, either as a URL string to fetch or an array of objects.\n   */\n  data?: string | Record<string, unknown>[] | null\n  /**\n   * Type of data file when fetching from URL.\n   */\n  dataUrlType?: 'json' | 'csv' | 'tsv'\n  /**\n   * Aspect ratio (height/width) for the chart.\n   */\n  chartHeightRatio?: number\n  /**\n   * Enable social mode for optimal display when sharing on social media.\n   */\n  socialMode?: boolean\n  /**\n   * Aspect ratio to use in social mode.\n   */\n  socialModeRatio?: number\n  /**\n   * Display columns as a waterfall chart where each bar starts where the previous one ended.\n   */\n  waterfall?: boolean\n  /**\n   * Show a total bar at the end of the waterfall chart displaying the sum of all values.\n   * Only applies when `waterfall` is true.\n   */\n  waterfallTotal?: boolean\n  /**\n   * Label for the waterfall total bar on the x-axis.\n   */\n  waterfallTotalLabel?: string\n  /**\n   * Color for the waterfall total bar. Falls back to currentColor.\n   */\n  waterfallTotalColor?: string\n}\n\nconst props = withDefaults(defineProps<ColumnChartProps>(), {\n  columnColor: undefined,\n  columnHighlightColor: undefined,\n  fixedHeight: null,\n  fixedLabelWidth: null,\n  seriesName: 'value',\n  xAxisTickCollapse: false,\n  xAxisTickFormat: () => identity,\n  xAxisTicks: null,\n  yAxisTickFormat: () => identity,\n  yAxisTicks: 5,\n  sortBy: null,\n  timeseriesKey: 'date',\n  maxValue: null,\n  noTooltips: false,\n  noXAxis: false,\n  noYAxis: false,\n  barPadding: 0.35,\n  barMargin: 0,\n  highlights: () => [],\n  stripped: false,\n  hover: false,\n  hoverIcon: null,\n  hoverIconSize: undefined,\n  data: null,\n  dataUrlType: 'json',\n  chartHeightRatio: undefined,\n  socialMode: false,\n  socialModeRatio: 5 / 4,\n  waterfall: false,\n  waterfallTotal: false,\n  waterfallTotalLabel: 'Total',\n  waterfallTotalColor: undefined\n})\n\nconst emit = defineEmits<{\n  loaded: [data: Record<string, unknown>[] | null]\n  select: [datum: any]\n  resized: []\n}>()\n\nconst width = ref(0)\nconst height = ref(0)\nconst shownTooltip = ref(-1)\nconst el = ref<ComponentPublicInstance<HTMLElement> | null>(null)\nconst isLoaded = ref(false)\n\nconst {\n  loadedData,\n  mounted,\n  elementsMaxBBox,\n  d3Formatter,\n  baseHeightRatio,\n  dataHasHighlights\n} = useChart<Record<string, unknown>[]>(el, getChartProps(props), { emit }, isLoaded, setSizes)\n\n// Label and bucket dimensions are measured from the rendered SVG ticks, so they\n// stay in the component (the geometry composable holds no DOM state) and feed it.\nconst labelWidth = computed((): number => {\n  if (props.fixedLabelWidth) {\n    return props.fixedLabelWidth\n  }\n  const selector = '.column-chart__axis--y .tick text'\n  const defaultWidth = 100\n  return elementsMaxBBox({ selector, defaultWidth }).width as number\n})\n\nconst labelHeight = computed((): number => {\n  if (props.noYAxis) {\n    return 0\n  }\n  const selector = '.column-chart__axis--y .tick text'\n  const defaultHeight = 10\n  return elementsMaxBBox({ selector, defaultHeight }).height as number\n})\n\nconst bucketHeight = computed((): number => {\n  if (props.noXAxis) {\n    return 0\n  }\n  const selector = '.column-chart__axis--x .tick text'\n  const defaultHeight = 10\n  return elementsMaxBBox({ selector, defaultHeight }).height as number\n})\n\nconst bucketWidth = computed((): number => {\n  const selector = '.column-chart__axis--x .tick text'\n  const defaultWidth = 100\n  return elementsMaxBBox({ selector, defaultWidth }).width as number\n})\n\nconst {\n  sortedData,\n  margin,\n  padded,\n  scaleX,\n  scaleY,\n  waterfallTotalValue,\n  bars,\n  xAxisHiddenTicks,\n  xAxisTickValues,\n  xAxis,\n  yAxis\n} = useColumnChart({\n  loadedData,\n  width,\n  height,\n  labelWidth,\n  labelHeight,\n  bucketHeight,\n  bucketWidth,\n  d3Formatter,\n  sortBy: toRef(() => props.sortBy),\n  seriesName: toRef(() => props.seriesName),\n  timeseriesKey: toRef(() => props.timeseriesKey),\n  maxValue: toRef(() => props.maxValue),\n  barPadding: toRef(() => props.barPadding),\n  barMargin: toRef(() => props.barMargin),\n  noXAxis: toRef(() => props.noXAxis),\n  noYAxis: toRef(() => props.noYAxis),\n  xAxisTickCollapse: toRef(() => props.xAxisTickCollapse),\n  xAxisTickFormat: toRef(() => props.xAxisTickFormat),\n  xAxisTicks: toRef(() => props.xAxisTicks),\n  yAxisTickFormat: toRef(() => props.yAxisTickFormat),\n  yAxisTicks: toRef(() => props.yAxisTicks),\n  waterfall: toRef(() => props.waterfall),\n  waterfallTotal: toRef(() => props.waterfallTotal),\n  waterfallTotalLabel: toRef(() => props.waterfallTotalLabel)\n})\n\nconst activeBar = computed(() => bars.value[shownTooltip.value] ?? null)\nconst activeBarId = computed((): string => columnUniqueId(shownTooltip.value))\n\nfunction formatXDatum(d: any) {\n  return d3Formatter(d, props.xAxisTickFormat)\n}\n\nfunction formatYDatum(d: any) {\n  return d3Formatter(d, props.yAxisTickFormat)\n}\n\nfunction setSizes() {\n  width.value = (el.value as HTMLElement)?.offsetWidth ?? 0\n  height.value\n    = props.fixedHeight !== null\n      ? props.fixedHeight\n      : width.value * baseHeightRatio.value\n}\n\nfunction select({ datum }: { datum: any }) {\n  emit('select', datum)\n}\n\nfunction update() {\n  if (!mounted.value) {\n    return\n  }\n\n  d3Select('.column-chart__axis > *').remove()\n\n  d3Select(el.value)\n    .select('.column-chart__axis--x')\n    .call(xAxis.value as any)\n    .select('.domain')\n    .remove()\n\n  d3Select(el.value)\n    .select('.column-chart__axis--y')\n    .call(yAxis.value as any)\n    .selectAll('.tick line')\n    .attr('x2', padded.value.width)\n}\n\nfunction columnUniqueId(i: number) {\n  const { uid } = getCurrentInstance()!\n  return `column-${uid}-${i}`\n}\n\nfunction highlighted(datum: any): boolean {\n  return (\n    datum.highlight || props.highlights.includes(datum[props.timeseriesKey])\n  )\n}\n\nwatch([width, height, loadedData, mounted], update, { immediate: true })\nwatch(() => props.socialMode, update, { immediate: true })\n\n// Expose the derived geometry so tests (and host apps) can read the scales and\n// dimensions the chart computes. Superset of the bindings poked by the specs.\n// `xAxisTickValues` is the collapsed tick subset, not one entry per `bars`\n// datum — don't zip the two by index (see useColumnChart's JSDoc).\ndefineExpose({\n  sortedData,\n  margin,\n  padded,\n  scaleX,\n  scaleY,\n  waterfallTotalValue,\n  bars,\n  xAxisHiddenTicks,\n  xAxisTickValues,\n  xAxis,\n  yAxis\n})\n</script>\n\n<template>\n  <div\n    ref=\"el\"\n    :class=\"{\n      'column-chart--has-highlights': dataHasHighlights || highlights.length > 0,\n      'column-chart--hover': hover,\n      'column-chart--stripped': stripped,\n      'column-chart--social-mode': socialMode,\n      'column-chart--loaded': isLoaded,\n      'column-chart--waterfall': waterfall\n    }\"\n    :style=\"{\n      '--column-color': columnColor,\n      '--column-highlight-color': columnHighlightColor,\n      '--column-total-color': waterfallTotalColor\n    }\"\n    class=\"column-chart\"\n  >\n    <svg\n      :height=\"height\"\n      :width=\"width\"\n    >\n      <g :style=\"{ transform: `translate(${margin.left}px, ${margin.top}px)` }\">\n        <g\n          v-if=\"!noXAxis\"\n          :style=\"{ transform: `translate(0, ${padded.height}px)` }\"\n          class=\"column-chart__axis column-chart__axis--x\"\n        />\n        <g\n          v-if=\"!noYAxis\"\n          class=\"column-chart__axis column-chart__axis--y\"\n        />\n      </g>\n      <g\n        :style=\"{ transform: `translate(${margin.left}px, ${margin.top}px)` }\"\n        class=\"column-chart__columns\"\n      >\n        <g\n          v-for=\"(bar, index) in bars\"\n          :key=\"index\"\n          :class=\"{\n            'column-chart__columns__item--highlight': highlighted(bar.datum),\n            'column-chart__columns__item--total': bar.isTotal\n          }\"\n          :style=\"{ transform: `translate(${bar.x}px, 0px)` }\"\n          class=\"column-chart__columns__item\"\n          @click=\"select(bar)\"\n          @mouseleave=\"shownTooltip = -1\"\n          @mouseover=\"shownTooltip = index\"\n        >\n          <rect\n            :height=\"Math.max(padded.height, 0)\"\n            :width=\"bar.width\"\n            class=\"column-chart__columns__item__placeholder\"\n          />\n          <rect\n            :id=\"columnUniqueId(index)\"\n            :height=\"Math.max(bar.height, 0.1)\"\n            :width=\"bar.width\"\n            :y=\"bar.y\"\n            class=\"column-chart__columns__item__bar\"\n          />\n          <foreignObject\n            v-if=\"hoverIcon\"\n            :height=\"Math.max(bar.height, 0.1)\"\n            :width=\"bar.width\"\n            :y=\"bar.y\"\n          >\n            <div class=\"column-chart__columns__item__hover-icon\">\n              <app-icon :size=\"hoverIconSize\">\n                <component :is=\"hoverIcon\" />\n              </app-icon>\n            </div>\n          </foreignObject>\n        </g>\n      </g>\n    </svg>\n    <template v-if=\"!noTooltips && activeBar\">\n      <b-tooltip\n        :target=\"activeBarId\"\n        teleport-to=\"body\"\n        manual\n        :model-value=\"true\"\n        class=\"column-chart__tooltip\"\n      >\n        <slot\n          name=\"tooltip\"\n          v-bind=\"activeBar\"\n        >\n          <h6 class=\"column-chart__tooltip__heading mb-0\">\n            {{ formatXDatum(activeBar.datum[timeseriesKey]) }}\n          </h6>\n          <div class=\"column-chart__tooltip__value\">\n            {{ formatYDatum(activeBar.datum[seriesName]) }}\n          </div>\n        </slot>\n      </b-tooltip>\n    </template>\n  </div>\n</template>\n\n<style lang=\"scss\">\n\n.column-chart {\n  --highlight-opacity: 0.7;\n  --placeholder-opacity: 0.1;\n\n  position: relative;\n\n  &--has-highlights\n    &__columns__item:not(&__columns__item--highlight):not(:hover) {\n    opacity: var(--highlight-opacity);\n    filter: grayscale(30%);\n  }\n\n  text {\n    font-family: $font-family-base;\n    font-size: $font-size-sm;\n    fill: currentColor;\n  }\n\n  &__columns__item {\n    fill: var(--column-color, var(--dark, $dark));\n\n    &--highlight {\n      fill: var(--column-highlight-color, var(--primary, $primary));\n    }\n\n    &--total {\n      fill: var(--column-total-color, currentColor);\n    }\n\n    &__placeholder {\n      opacity: 0;\n\n      .column-chart--stripped &,\n      .column-chart--hover .column-chart__columns__item:hover & {\n        opacity: var(--placeholder-opacity);\n      }\n    }\n\n    &__hover-icon {\n      opacity: 0;\n      overflow: hidden;\n      height: 100%;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n\n      .column-chart--hover .column-chart__columns__item:hover & {\n        opacity: 1;\n      }\n    }\n  }\n\n  &__axis {\n    .domain {\n      display: none;\n    }\n\n    .tick line {\n      stroke: $border-color;\n    }\n\n    &--x .tick line {\n      display: none;\n    }\n  }\n\n  &__tooltip {\n    pointer-events: none;\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ComponentPublicInstance, computed, getCurrentInstance, ref, toRef, watch } from 'vue'\nimport identity from 'lodash/identity'\nimport { select as d3Select } from 'd3-selection'\n\nimport { getChartProps, useChart } from '@/composables/useChart'\nimport { useColumnChart } from '@/composables/useColumnChart'\nimport AppIcon from '@/components/App/AppIcon.vue'\n\ndefineOptions({\n  name: 'ColumnChart'\n})\n\nexport interface ColumnChartProps {\n  /**\n   * Color of the columns. Falls back to theme's dark color.\n   */\n  columnColor?: string\n  /**\n   * Color of highlighted columns. Falls back to theme's primary color.\n   */\n  columnHighlightColor?: string\n  /**\n   * Fixed height for the chart in pixels. If not set, height is calculated from width.\n   */\n  fixedHeight?: number | null\n  /**\n   * Fixed width for y-axis labels in pixels. If not set, width is calculated automatically.\n   */\n  fixedLabelWidth?: number | null\n  /**\n   * Field name in data objects containing the value to display.\n   */\n  seriesName?: string\n  /**\n   * Collapse x-axis ticks to prevent overlapping when there are many data points.\n   */\n  xAxisTickCollapse?: boolean\n  /**\n   * Formatter function or d3 format string for x-axis tick labels.\n   */\n  xAxisTickFormat?: ((v: any) => string) | string\n  /**\n   * Explicit list of x-axis tick values to display.\n   */\n  xAxisTicks?: string[] | null\n  /**\n   * Formatter function or d3 format string for y-axis tick labels.\n   */\n  yAxisTickFormat?: ((v: any) => string) | string\n  /**\n   * Number of y-axis ticks or d3 tick configuration object.\n   */\n  yAxisTicks?: number | object\n  /**\n   * Field name(s) to sort the data by.\n   */\n  sortBy?: string | string[] | null\n  /**\n   * Field name in data objects containing the x-axis category/time value.\n   */\n  timeseriesKey?: string\n  /**\n   * Maximum value for the y-axis scale. If not set, derived from data.\n   */\n  maxValue?: number | null\n  /**\n   * Disable tooltips on column hover.\n   */\n  noTooltips?: boolean\n  /**\n   * Hide the x-axis.\n   */\n  noXAxis?: boolean\n  /**\n   * Hide the y-axis.\n   */\n  noYAxis?: boolean\n  /**\n   * Padding between columns as a ratio (0-1) of the column width.\n   */\n  barPadding?: number\n  /**\n   * Margin between columns in pixels.\n   */\n  barMargin?: number\n  /**\n   * List of timeseriesKey values to highlight.\n   */\n  highlights?: string[]\n  /**\n   * Show placeholder bars for visual pattern.\n   */\n  stripped?: boolean\n  /**\n   * Enable hover effects on columns.\n   */\n  hover?: boolean\n  /**\n   * Icon component to display on column hover.\n   */\n  hoverIcon?: string | object | object[] | null\n  /**\n   * Size of the hover icon.\n   */\n  hoverIconSize?: string\n  /**\n   * Data to display, either as a URL string to fetch or an array of objects.\n   */\n  data?: string | Record<string, unknown>[] | null\n  /**\n   * Type of data file when fetching from URL.\n   */\n  dataUrlType?: 'json' | 'csv' | 'tsv'\n  /**\n   * Aspect ratio (height/width) for the chart.\n   */\n  chartHeightRatio?: number\n  /**\n   * Enable social mode for optimal display when sharing on social media.\n   */\n  socialMode?: boolean\n  /**\n   * Aspect ratio to use in social mode.\n   */\n  socialModeRatio?: number\n  /**\n   * Display columns as a waterfall chart where each bar starts where the previous one ended.\n   */\n  waterfall?: boolean\n  /**\n   * Show a total bar at the end of the waterfall chart displaying the sum of all values.\n   * Only applies when `waterfall` is true.\n   */\n  waterfallTotal?: boolean\n  /**\n   * Label for the waterfall total bar on the x-axis.\n   */\n  waterfallTotalLabel?: string\n  /**\n   * Color for the waterfall total bar. Falls back to currentColor.\n   */\n  waterfallTotalColor?: string\n}\n\nconst props = withDefaults(defineProps<ColumnChartProps>(), {\n  columnColor: undefined,\n  columnHighlightColor: undefined,\n  fixedHeight: null,\n  fixedLabelWidth: null,\n  seriesName: 'value',\n  xAxisTickCollapse: false,\n  xAxisTickFormat: () => identity,\n  xAxisTicks: null,\n  yAxisTickFormat: () => identity,\n  yAxisTicks: 5,\n  sortBy: null,\n  timeseriesKey: 'date',\n  maxValue: null,\n  noTooltips: false,\n  noXAxis: false,\n  noYAxis: false,\n  barPadding: 0.35,\n  barMargin: 0,\n  highlights: () => [],\n  stripped: false,\n  hover: false,\n  hoverIcon: null,\n  hoverIconSize: undefined,\n  data: null,\n  dataUrlType: 'json',\n  chartHeightRatio: undefined,\n  socialMode: false,\n  socialModeRatio: 5 / 4,\n  waterfall: false,\n  waterfallTotal: false,\n  waterfallTotalLabel: 'Total',\n  waterfallTotalColor: undefined\n})\n\nconst emit = defineEmits<{\n  loaded: [data: Record<string, unknown>[] | null]\n  select: [datum: any]\n  resized: []\n}>()\n\nconst width = ref(0)\nconst height = ref(0)\nconst shownTooltip = ref(-1)\nconst el = ref<ComponentPublicInstance<HTMLElement> | null>(null)\nconst isLoaded = ref(false)\n\nconst {\n  loadedData,\n  mounted,\n  elementsMaxBBox,\n  d3Formatter,\n  baseHeightRatio,\n  dataHasHighlights\n} = useChart<Record<string, unknown>[]>(el, getChartProps(props), { emit }, isLoaded, setSizes)\n\n// Label and bucket dimensions are measured from the rendered SVG ticks, so they\n// stay in the component (the geometry composable holds no DOM state) and feed it.\nconst labelWidth = computed((): number => {\n  if (props.fixedLabelWidth) {\n    return props.fixedLabelWidth\n  }\n  const selector = '.column-chart__axis--y .tick text'\n  const defaultWidth = 100\n  return elementsMaxBBox({ selector, defaultWidth }).width as number\n})\n\nconst labelHeight = computed((): number => {\n  if (props.noYAxis) {\n    return 0\n  }\n  const selector = '.column-chart__axis--y .tick text'\n  const defaultHeight = 10\n  return elementsMaxBBox({ selector, defaultHeight }).height as number\n})\n\nconst bucketHeight = computed((): number => {\n  if (props.noXAxis) {\n    return 0\n  }\n  const selector = '.column-chart__axis--x .tick text'\n  const defaultHeight = 10\n  return elementsMaxBBox({ selector, defaultHeight }).height as number\n})\n\nconst bucketWidth = computed((): number => {\n  const selector = '.column-chart__axis--x .tick text'\n  const defaultWidth = 100\n  return elementsMaxBBox({ selector, defaultWidth }).width as number\n})\n\nconst {\n  sortedData,\n  margin,\n  padded,\n  scaleX,\n  scaleY,\n  waterfallTotalValue,\n  bars,\n  xAxisHiddenTicks,\n  xAxisTickValues,\n  xAxis,\n  yAxis\n} = useColumnChart({\n  loadedData,\n  width,\n  height,\n  labelWidth,\n  labelHeight,\n  bucketHeight,\n  bucketWidth,\n  d3Formatter,\n  sortBy: toRef(() => props.sortBy),\n  seriesName: toRef(() => props.seriesName),\n  timeseriesKey: toRef(() => props.timeseriesKey),\n  maxValue: toRef(() => props.maxValue),\n  barPadding: toRef(() => props.barPadding),\n  barMargin: toRef(() => props.barMargin),\n  noXAxis: toRef(() => props.noXAxis),\n  noYAxis: toRef(() => props.noYAxis),\n  xAxisTickCollapse: toRef(() => props.xAxisTickCollapse),\n  xAxisTickFormat: toRef(() => props.xAxisTickFormat),\n  xAxisTicks: toRef(() => props.xAxisTicks),\n  yAxisTickFormat: toRef(() => props.yAxisTickFormat),\n  yAxisTicks: toRef(() => props.yAxisTicks),\n  waterfall: toRef(() => props.waterfall),\n  waterfallTotal: toRef(() => props.waterfallTotal),\n  waterfallTotalLabel: toRef(() => props.waterfallTotalLabel)\n})\n\nconst activeBar = computed(() => bars.value[shownTooltip.value] ?? null)\nconst activeBarId = computed((): string => columnUniqueId(shownTooltip.value))\n\nfunction formatXDatum(d: any) {\n  return d3Formatter(d, props.xAxisTickFormat)\n}\n\nfunction formatYDatum(d: any) {\n  return d3Formatter(d, props.yAxisTickFormat)\n}\n\nfunction setSizes() {\n  width.value = (el.value as HTMLElement)?.offsetWidth ?? 0\n  height.value\n    = props.fixedHeight !== null\n      ? props.fixedHeight\n      : width.value * baseHeightRatio.value\n}\n\nfunction select({ datum }: { datum: any }) {\n  emit('select', datum)\n}\n\nfunction update() {\n  if (!mounted.value) {\n    return\n  }\n\n  d3Select('.column-chart__axis > *').remove()\n\n  d3Select(el.value)\n    .select('.column-chart__axis--x')\n    .call(xAxis.value as any)\n    .select('.domain')\n    .remove()\n\n  d3Select(el.value)\n    .select('.column-chart__axis--y')\n    .call(yAxis.value as any)\n    .selectAll('.tick line')\n    .attr('x2', padded.value.width)\n}\n\nfunction columnUniqueId(i: number) {\n  const { uid } = getCurrentInstance()!\n  return `column-${uid}-${i}`\n}\n\nfunction highlighted(datum: any): boolean {\n  return (\n    datum.highlight || props.highlights.includes(datum[props.timeseriesKey])\n  )\n}\n\nwatch([width, height, loadedData, mounted], update, { immediate: true })\nwatch(() => props.socialMode, update, { immediate: true })\n\n// Expose the derived geometry so tests (and host apps) can read the scales and\n// dimensions the chart computes. Superset of the bindings poked by the specs.\n// `xAxisTickValues` is the collapsed tick subset, not one entry per `bars`\n// datum — don't zip the two by index (see useColumnChart's JSDoc).\ndefineExpose({\n  sortedData,\n  margin,\n  padded,\n  scaleX,\n  scaleY,\n  waterfallTotalValue,\n  bars,\n  xAxisHiddenTicks,\n  xAxisTickValues,\n  xAxis,\n  yAxis\n})\n</script>\n\n<template>\n  <div\n    ref=\"el\"\n    :class=\"{\n      'column-chart--has-highlights': dataHasHighlights || highlights.length > 0,\n      'column-chart--hover': hover,\n      'column-chart--stripped': stripped,\n      'column-chart--social-mode': socialMode,\n      'column-chart--loaded': isLoaded,\n      'column-chart--waterfall': waterfall\n    }\"\n    :style=\"{\n      '--column-color': columnColor,\n      '--column-highlight-color': columnHighlightColor,\n      '--column-total-color': waterfallTotalColor\n    }\"\n    class=\"column-chart\"\n  >\n    <svg\n      :height=\"height\"\n      :width=\"width\"\n    >\n      <g :style=\"{ transform: `translate(${margin.left}px, ${margin.top}px)` }\">\n        <g\n          v-if=\"!noXAxis\"\n          :style=\"{ transform: `translate(0, ${padded.height}px)` }\"\n          class=\"column-chart__axis column-chart__axis--x\"\n        />\n        <g\n          v-if=\"!noYAxis\"\n          class=\"column-chart__axis column-chart__axis--y\"\n        />\n      </g>\n      <g\n        :style=\"{ transform: `translate(${margin.left}px, ${margin.top}px)` }\"\n        class=\"column-chart__columns\"\n      >\n        <g\n          v-for=\"(bar, index) in bars\"\n          :key=\"index\"\n          :class=\"{\n            'column-chart__columns__item--highlight': highlighted(bar.datum),\n            'column-chart__columns__item--total': bar.isTotal\n          }\"\n          :style=\"{ transform: `translate(${bar.x}px, 0px)` }\"\n          class=\"column-chart__columns__item\"\n          @click=\"select(bar)\"\n          @mouseleave=\"shownTooltip = -1\"\n          @mouseover=\"shownTooltip = index\"\n        >\n          <rect\n            :height=\"Math.max(padded.height, 0)\"\n            :width=\"bar.width\"\n            class=\"column-chart__columns__item__placeholder\"\n          />\n          <rect\n            :id=\"columnUniqueId(index)\"\n            :height=\"Math.max(bar.height, 0.1)\"\n            :width=\"bar.width\"\n            :y=\"bar.y\"\n            class=\"column-chart__columns__item__bar\"\n          />\n          <foreignObject\n            v-if=\"hoverIcon\"\n            :height=\"Math.max(bar.height, 0.1)\"\n            :width=\"bar.width\"\n            :y=\"bar.y\"\n          >\n            <div class=\"column-chart__columns__item__hover-icon\">\n              <app-icon :size=\"hoverIconSize\">\n                <component :is=\"hoverIcon\" />\n              </app-icon>\n            </div>\n          </foreignObject>\n        </g>\n      </g>\n    </svg>\n    <template v-if=\"!noTooltips && activeBar\">\n      <b-tooltip\n        :target=\"activeBarId\"\n        teleport-to=\"body\"\n        manual\n        :model-value=\"true\"\n        class=\"column-chart__tooltip\"\n      >\n        <slot\n          name=\"tooltip\"\n          v-bind=\"activeBar\"\n        >\n          <h6 class=\"column-chart__tooltip__heading mb-0\">\n            {{ formatXDatum(activeBar.datum[timeseriesKey]) }}\n          </h6>\n          <div class=\"column-chart__tooltip__value\">\n            {{ formatYDatum(activeBar.datum[seriesName]) }}\n          </div>\n        </slot>\n      </b-tooltip>\n    </template>\n  </div>\n</template>\n\n<style lang=\"scss\">\n\n.column-chart {\n  --highlight-opacity: 0.7;\n  --placeholder-opacity: 0.1;\n\n  position: relative;\n\n  &--has-highlights\n    &__columns__item:not(&__columns__item--highlight):not(:hover) {\n    opacity: var(--highlight-opacity);\n    filter: grayscale(30%);\n  }\n\n  text {\n    font-family: $font-family-base;\n    font-size: $font-size-sm;\n    fill: currentColor;\n  }\n\n  &__columns__item {\n    fill: var(--column-color, var(--dark, $dark));\n\n    &--highlight {\n      fill: var(--column-highlight-color, var(--primary, $primary));\n    }\n\n    &--total {\n      fill: var(--column-total-color, currentColor);\n    }\n\n    &__placeholder {\n      opacity: 0;\n\n      .column-chart--stripped &,\n      .column-chart--hover .column-chart__columns__item:hover & {\n        opacity: var(--placeholder-opacity);\n      }\n    }\n\n    &__hover-icon {\n      opacity: 0;\n      overflow: hidden;\n      height: 100%;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n\n      .column-chart--hover .column-chart__columns__item:hover & {\n        opacity: 1;\n      }\n    }\n  }\n\n  &__axis {\n    .domain {\n      display: none;\n    }\n\n    .tick line {\n      stroke: $border-color;\n    }\n\n    &--x .tick line {\n      display: none;\n    }\n  }\n\n  &__tooltip {\n    pointer-events: none;\n  }\n}\n</style>\n","export default function(specifier) {\n  var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n  while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n  return colors;\n}\n","import colors from \"../colors.js\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","export default function(x) {\n  return function constant() {\n    return x;\n  };\n}\n","const pi = Math.PI,\n    tau = 2 * pi,\n    epsilon = 1e-6,\n    tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n  this._ += strings[0];\n  for (let i = 1, n = strings.length; i < n; ++i) {\n    this._ += arguments[i] + strings[i];\n  }\n}\n\nfunction appendRound(digits) {\n  let d = Math.floor(digits);\n  if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n  if (d > 15) return append;\n  const k = 10 ** d;\n  return function(strings) {\n    this._ += strings[0];\n    for (let i = 1, n = strings.length; i < n; ++i) {\n      this._ += Math.round(arguments[i] * k) / k + strings[i];\n    }\n  };\n}\n\nexport class Path {\n  constructor(digits) {\n    this._x0 = this._y0 = // start of current subpath\n    this._x1 = this._y1 = null; // end of current subpath\n    this._ = \"\";\n    this._append = digits == null ? append : appendRound(digits);\n  }\n  moveTo(x, y) {\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n  }\n  closePath() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._append`Z`;\n    }\n  }\n  lineTo(x, y) {\n    this._append`L${this._x1 = +x},${this._y1 = +y}`;\n  }\n  quadraticCurveTo(x1, y1, x, y) {\n    this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  bezierCurveTo(x1, y1, x2, y2, x, y) {\n    this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  arcTo(x1, y1, x2, y2, r) {\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let x0 = this._x1,\n        y0 = this._y1,\n        x21 = x2 - x1,\n        y21 = y2 - y1,\n        x01 = x0 - x1,\n        y01 = y0 - y1,\n        l01_2 = x01 * x01 + y01 * y01;\n\n    // Is this path empty? Move to (x1,y1).\n    if (this._x1 === null) {\n      this._append`M${this._x1 = x1},${this._y1 = y1}`;\n    }\n\n    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n    else if (!(l01_2 > epsilon));\n\n    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n    // Equivalently, is (x1,y1) coincident with (x2,y2)?\n    // Or, is the radius zero? Line to (x1,y1).\n    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n      this._append`L${this._x1 = x1},${this._y1 = y1}`;\n    }\n\n    // Otherwise, draw an arc!\n    else {\n      let x20 = x2 - x0,\n          y20 = y2 - y0,\n          l21_2 = x21 * x21 + y21 * y21,\n          l20_2 = x20 * x20 + y20 * y20,\n          l21 = Math.sqrt(l21_2),\n          l01 = Math.sqrt(l01_2),\n          l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n          t01 = l / l01,\n          t21 = l / l21;\n\n      // If the start tangent is not coincident with (x0,y0), line to.\n      if (Math.abs(t01 - 1) > epsilon) {\n        this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n      }\n\n      this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n    }\n  }\n  arc(x, y, r, a0, a1, ccw) {\n    x = +x, y = +y, r = +r, ccw = !!ccw;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let dx = r * Math.cos(a0),\n        dy = r * Math.sin(a0),\n        x0 = x + dx,\n        y0 = y + dy,\n        cw = 1 ^ ccw,\n        da = ccw ? a0 - a1 : a1 - a0;\n\n    // Is this path empty? Move to (x0,y0).\n    if (this._x1 === null) {\n      this._append`M${x0},${y0}`;\n    }\n\n    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n      this._append`L${x0},${y0}`;\n    }\n\n    // Is this arc empty? We’re done.\n    if (!r) return;\n\n    // Does the angle go the wrong way? Flip the direction.\n    if (da < 0) da = da % tau + tau;\n\n    // Is this a complete circle? Draw two arcs to complete the circle.\n    if (da > tauEpsilon) {\n      this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n    }\n\n    // Is this arc non-empty? Draw an arc!\n    else if (da > epsilon) {\n      this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n    }\n  }\n  rect(x, y, w, h) {\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n  }\n  toString() {\n    return this._;\n  }\n}\n\nexport function path() {\n  return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n  return new Path(+digits);\n}\n","import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n  let digits = 3;\n\n  shape.digits = function(_) {\n    if (!arguments.length) return digits;\n    if (_ == null) {\n      digits = null;\n    } else {\n      const d = Math.floor(_);\n      if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n      digits = d;\n    }\n    return shape;\n  };\n\n  return () => new Path(digits);\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n  return typeof x === \"object\" && \"length\" in x\n    ? x // Array, TypedArray, NodeList, array-like\n    : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","function Linear(context) {\n  this._context = context;\n}\n\nLinear.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // falls through\n      default: this._context.lineTo(x, y); break;\n    }\n  }\n};\n\nexport default function(context) {\n  return new Linear(context);\n}\n","export function x(p) {\n  return p[0];\n}\n\nexport function y(p) {\n  return p[1];\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n  var defined = constant(true),\n      context = null,\n      curve = curveLinear,\n      output = null,\n      path = withPath(line);\n\n  x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n  y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n  function line(data) {\n    var i,\n        n = (data = array(data)).length,\n        d,\n        defined0 = false,\n        buffer;\n\n    if (context == null) output = curve(buffer = path());\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) output.lineStart();\n        else output.lineEnd();\n      }\n      if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n    }\n\n    if (buffer) return output = null, buffer + \"\" || null;\n  }\n\n  line.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n  };\n\n  line.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n  };\n\n  line.defined = function(_) {\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n  };\n\n  line.curve = function(_) {\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n  };\n\n  line.context = function(_) {\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n  };\n\n  return line;\n}\n","import { extent, max } from 'd3-array'\nimport { axisBottom, axisLeft } from 'd3-axis'\nimport type { Axis } from 'd3-axis'\nimport { schemeCategory10 } from 'd3-scale-chromatic'\nimport { scaleLinear, scaleOrdinal, scaleTime } from 'd3-scale'\nimport type { NumberValue, ScaleLinear, ScaleOrdinal, ScaleTime } from 'd3-scale'\nimport { line as createLine } from 'd3-shape'\nimport type { CurveFactory, Line } from 'd3-shape'\nimport { timeParse } from 'd3-time-format'\nimport { computed, toRaw, toValue } from 'vue'\nimport type { ComputedRef, MaybeRefOrGetter } from 'vue'\n\n/**\n * One rendered line series: its source key, the SVG path `d` attribute and the\n * stroke color resolved from the ordinal color scale.\n */\nexport interface LineChartSeries {\n  key: string\n  path: string | null\n  color: string | null\n}\n\n/**\n * A value formatter compatible with `useChart`'s `d3Formatter`: applies a d3\n * format string or a custom function, returning the value untouched otherwise.\n */\nexport type LineChartFormatter = (\n  value: number | string,\n  formatter?: ((v: number | string) => string) | string\n) => string | number\n\n/**\n * The chart's inner padding box, once the axis margins are subtracted.\n */\nexport interface LineChartPadded {\n  width: number\n  height: number\n}\n\n/**\n * Reactive inputs driving {@link useLineChart}. They mirror the `LineChart`\n * component's loaded data, its measured padding box and the geometry-affecting\n * props, accepted as plain values, refs or getters so the composable adapts to\n * how the caller wires its state.\n */\nexport interface UseLineChartOptions {\n  /**\n   * The chart's loaded data (inline array or fetched), as exposed by `useChart`.\n   */\n  loadedData: MaybeRefOrGetter<Record<string, unknown>[] | null>\n  /**\n   * The measured inner padding box (width/height in pixels) the scales map onto.\n   */\n  padded: MaybeRefOrGetter<LineChartPadded>\n  /**\n   * Field names for each series. When non-empty the chart is multi-line.\n   */\n  keys: MaybeRefOrGetter<string[]>\n  /**\n   * Field name holding the y value in single-series mode (when `keys` is empty).\n   */\n  seriesName: MaybeRefOrGetter<string>\n  /**\n   * Field name holding the x time/date value, parsed as a year (`%Y`).\n   */\n  timeseriesKey: MaybeRefOrGetter<string>\n  /**\n   * Explicit stroke colors for each line; falls back to `schemeCategory10`.\n   */\n  lineColors: MaybeRefOrGetter<string[]>\n  /**\n   * Optional d3 curve factory for line interpolation (defaults to linear).\n   */\n  curve: MaybeRefOrGetter<CurveFactory | undefined>\n  /**\n   * The `d3Formatter` helper exposed by `useChart`, used to format y-axis ticks.\n   */\n  d3Formatter: LineChartFormatter\n  /**\n   * Number of x-axis ticks or a d3 tick configuration.\n   */\n  xAxisTicks: MaybeRefOrGetter<object | number | ((d: any) => any) | null>\n  /**\n   * Formatter function or d3 format string for y-axis tick labels.\n   */\n  yAxisTickFormat: MaybeRefOrGetter<((v: any) => string) | string>\n  /**\n   * Number of y-axis ticks or a d3 tick configuration.\n   */\n  yAxisTicks: MaybeRefOrGetter<number | object>\n  /**\n   * Formats an x-axis year, as exposed by `useChart` (`xAxisYearFormat`).\n   */\n  xAxisYearFormat: (year: number | string) => number | string\n}\n\n/**\n * Reactive API returned by {@link useLineChart}.\n */\nexport interface UseLineChart {\n  isMultiLine: ComputedRef<boolean>\n  activeKeys: ComputedRef<string[]>\n  colorScale: ComputedRef<ScaleOrdinal<string, string>>\n  formattedData: ComputedRef<Record<string, any>[]>\n  scaleX: ComputedRef<ScaleTime<number, number>>\n  scaleY: ComputedRef<ScaleLinear<number, number>>\n  lines: ComputedRef<LineChartSeries[]>\n  line: ComputedRef<string | null>\n  xAxis: ComputedRef<Axis<Date | NumberValue>>\n  yAxis: ComputedRef<Axis<NumberValue>>\n}\n\n// Call the first argument if it's a function, or return it untouched. Mirrors\n// the d3 tick configuration, which accepts either a value or an accessor.\nfunction castCall(fnOrValue: any, ...rest: any[]) {\n  return typeof fnOrValue === 'function' ? fnOrValue(...rest) : fnOrValue\n}\n\n// d3 parses a bare year (\"%Y\") into a Date positioned at the start of that year.\nconst parseTime = timeParse('%Y')\n\n/**\n * Owns the pure d3 geometry of the `LineChart` component: it normalizes the data\n * (parsing the time field and casting series values), builds the time and linear\n * scales with their domains applied, derives every line path (single or\n * multi-series) and configures the x/y axes. It holds no DOM state — the measured\n * padding box is passed in, and the axis rendering stays in the component.\n *\n * @param options - Reactive geometry options (see {@link UseLineChartOptions}).\n * @returns The {@link UseLineChart} API of derived geometry and axis builders.\n * @remarks Internal building block of the `LineChart` component; not exported\n * from the package root.\n * @example\n * // Inside the `LineChart` component's `<script setup>` block:\n * import { toRef } from 'vue'\n * import { useLineChart } from '@/composables/useLineChart'\n *\n * const { lines, line, scaleX, xAxis } = useLineChart({\n *   loadedData,\n *   padded,\n *   d3Formatter,\n *   xAxisYearFormat,\n *   keys: toRef(() => props.keys),\n *   seriesName: toRef(() => props.seriesName),\n *   timeseriesKey: toRef(() => props.timeseriesKey)\n *   // ...remaining geometry props\n * })\n */\nexport function useLineChart(options: UseLineChartOptions): UseLineChart {\n  const {\n    loadedData,\n    padded,\n    keys,\n    seriesName,\n    timeseriesKey,\n    lineColors,\n    curve,\n    d3Formatter,\n    xAxisTicks,\n    yAxisTickFormat,\n    yAxisTicks,\n    xAxisYearFormat\n  } = options\n\n  const isMultiLine = computed((): boolean => toValue(keys).length > 0)\n\n  const activeKeys = computed((): string[] => {\n    return isMultiLine.value ? toValue(keys) : [toValue(seriesName)]\n  })\n\n  const colorScale = computed((): ScaleOrdinal<string, string> => {\n    const colors = toValue(lineColors)\n    return scaleOrdinal<string>()\n      .domain(activeKeys.value)\n      .range(colors.length ? colors : schemeCategory10)\n  })\n\n  const formattedData = computed((): Record<string, any>[] => {\n    const data = toValue(loadedData)\n    if (!data) {\n      return []\n    }\n    const timeKey = toValue(timeseriesKey)\n    return data.map((d: any) => {\n      // Clone to avoid mutating reactive source data (parseTime on an\n      // already-parsed Date returns null).\n      const rawD = { ...toRaw(d) }\n      rawD[timeKey] = parseTime(d[timeKey])\n      for (const key of activeKeys.value) {\n        rawD[key] = +d[key]\n      }\n      return rawD\n    })\n  })\n\n  const scaleX = computed((): ScaleTime<number, number> => {\n    const timeKey = toValue(timeseriesKey)\n    return scaleTime()\n      .range([0, toValue(padded).width])\n      .domain(extent(formattedData.value, (d: any) => d[timeKey]) as [Date, Date])\n  })\n\n  const scaleY = computed((): ScaleLinear<number, number> => {\n    // Y domain covers every active series.\n    const maxY = max(activeKeys.value, (key) => {\n      return max(formattedData.value, (d: any) => d[key]) as number\n    }) as number\n    return scaleLinear()\n      .range([toValue(padded).height, 0])\n      .domain([0, maxY])\n  })\n\n  const lineGenerator = computed((): Line<{ x: number, y: number }> => {\n    const generator = createLine<{ x: number, y: number }>()\n      .x(d => d.x)\n      .y(d => d.y)\n    const curveFactory = toValue(curve)\n    if (curveFactory) {\n      generator.curve(curveFactory)\n    }\n    return generator\n  })\n\n  // Map a single series key to its array of pixel-space points.\n  function seriesPoints(key: string) {\n    const timeKey = toValue(timeseriesKey)\n    return formattedData.value.map((d: any) => ({\n      x: scaleX.value(d[timeKey]),\n      y: scaleY.value(d[key])\n    }))\n  }\n\n  const lines = computed((): LineChartSeries[] => {\n    if (!isMultiLine.value) {\n      return []\n    }\n    return toValue(keys).map((key) => {\n      return {\n        key,\n        path: lineGenerator.value(seriesPoints(key)),\n        color: colorScale.value(key)\n      }\n    })\n  })\n\n  const line = computed((): string | null => {\n    if (isMultiLine.value) {\n      return null\n    }\n    return lineGenerator.value(seriesPoints(toValue(seriesName)))\n  })\n\n  const xAxis = computed((): Axis<Date | NumberValue> => {\n    return axisBottom(scaleX.value)\n      .ticks(toValue(xAxisTicks))\n      .tickFormat((d: any) => castCall(xAxisYearFormat, d.getFullYear()))\n  })\n\n  const yAxis = computed((): Axis<NumberValue> => {\n    return axisLeft(scaleY.value)\n      .tickFormat((d: any) => String(d3Formatter(d, toValue(yAxisTickFormat))))\n      .ticks(toValue(yAxisTicks))\n  })\n\n  return {\n    isMultiLine,\n    activeKeys,\n    colorScale,\n    formattedData,\n    scaleX,\n    scaleY,\n    lines,\n    line,\n    xAxis,\n    yAxis\n  }\n}\n\nexport default useLineChart\n","<script setup lang=\"ts\">\nimport { select } from 'd3-selection'\nimport type { CurveFactory } from 'd3-shape'\nimport identity from 'lodash/identity'\nimport { getChartProps, useChart } from '@/composables/useChart'\nimport { useLineChart } from '@/composables/useLineChart'\nimport { computed, ref, toRef, watchEffect, ComponentPublicInstance } from 'vue'\n\ndefineOptions({\n  name: 'LineChart'\n})\n\nexport interface LineChartProps {\n  /**\n   * Color of the line. Falls back to theme's dark color.\n   * Used for single-series mode (when `keys` is not set).\n   */\n  lineColor?: string\n  /**\n   * Colors for each line when using multi-series mode (`keys`).\n   */\n  lineColors?: string[]\n  /**\n   * Field names in data objects for each line series.\n   * When set, enables multi-line mode. When empty, falls back to `seriesName`.\n   */\n  keys?: string[]\n  /**\n   * Display names for each key in the legend.\n   */\n  groups?: string[]\n  /**\n   * Hide the legend (only relevant in multi-line mode).\n   */\n  hideLegend?: boolean\n  /**\n   * Fixed width for y-axis labels in pixels. If not set, width is calculated automatically.\n   */\n  fixedLabelWidth?: number | null\n  /**\n   * Fixed height for the chart in pixels. If not set, height is calculated from width.\n   */\n  fixedHeight?: number | null\n  /**\n   * Field name in data objects containing the y-axis value.\n   * Used for single-series mode (when `keys` is not set).\n   */\n  seriesName?: string\n  /**\n   * Number of x-axis ticks or d3 tick configuration.\n   */\n  xAxisTicks?: object | number | ((d: any) => any) | null\n  /**\n   * Formatter function or d3 format string for y-axis tick labels.\n   */\n  yAxisTickFormat?: ((v: any) => string) | string\n  /**\n   * Number of y-axis ticks or d3 tick configuration.\n   */\n  yAxisTicks?: object | number\n  /**\n   * Field name in data objects containing the x-axis time/date value (parsed as year).\n   */\n  timeseriesKey?: string\n  /**\n   * Data to display, either as a URL string to fetch or an array of objects.\n   */\n  data?: string | Record<string, unknown>[] | null\n  /**\n   * Type of data file when fetching from URL.\n   */\n  dataUrlType?: 'json' | 'csv' | 'tsv'\n  /**\n   * Aspect ratio (height/width) for the chart.\n   */\n  chartHeightRatio?: number\n  /**\n   * D3 curve factory for line interpolation (e.g. d3.curveStep, d3.curveMonotoneX).\n   * Defaults to d3.curveLinear.\n   */\n  curve?: CurveFactory\n  /**\n   * Enable social mode for optimal display when sharing on social media.\n   */\n  socialMode?: boolean\n  /**\n   * Aspect ratio to use in social mode.\n   */\n  socialModeRatio?: number\n}\n\nconst props = withDefaults(defineProps<LineChartProps>(), {\n  lineColor: undefined,\n  lineColors: () => [],\n  keys: () => [],\n  groups: () => [],\n  hideLegend: false,\n  curve: undefined,\n  fixedLabelWidth: null,\n  fixedHeight: null,\n  seriesName: 'value',\n  xAxisTicks: null,\n  yAxisTickFormat: () => identity,\n  yAxisTicks: 5,\n  timeseriesKey: 'date',\n  data: null,\n  dataUrlType: 'json',\n  chartHeightRatio: undefined,\n  socialMode: false,\n  socialModeRatio: 5 / 4\n})\n\nconst emit = defineEmits<{\n  loaded: [data: Record<string, unknown>[] | null]\n  resized: []\n}>()\n\nconst width = ref(0)\nconst height = ref(0)\nconst el = ref<ComponentPublicInstance<HTMLElement> | null>(null)\nconst isLoaded = ref(false)\n\nconst {\n  loadedData,\n  elementsMaxBBox,\n  d3Formatter,\n  xAxisYearFormat,\n  baseHeightRatio\n} = useChart<Record<string, unknown>[]>(el, getChartProps(props), { emit }, isLoaded, setSizes)\n\nconst highlightedKey = ref<string | null>(null)\n\nconst hasHighlight = computed(() => highlightedKey.value !== null)\n\nfunction highlight(key: string) {\n  highlightedKey.value = key\n}\n\nfunction resetHighlight() {\n  highlightedKey.value = null\n}\n\nfunction isHighlighted(key: string) {\n  return highlightedKey.value === key\n}\n\nfunction groupName(key: string) {\n  const index = props.keys.indexOf(key)\n  return props.groups[index] || key\n}\n\nconst labelWidth = computed((): number => {\n  if (props.fixedLabelWidth) {\n    return props.fixedLabelWidth\n  }\n  const selector = '.line-chart__axis--y .tick text'\n  const defaultWidth = 100\n  return elementsMaxBBox({ selector, defaultWidth }).width ?? defaultWidth\n})\n\nconst labelHeight = computed((): number => {\n  const selector = '.line-chart__axis--y .tick'\n  const defaultHeight = 10\n  return elementsMaxBBox({ selector, defaultHeight }).height ?? defaultHeight\n})\n\nconst bucketHeight = computed((): number => {\n  const selector = '.line-chart__axis--x .tick'\n  const defaultHeight = 10\n  return elementsMaxBBox({ selector, defaultHeight }).height ?? defaultHeight\n})\n\nconst bucketWidth = computed((): number => {\n  const selector = '.line-chart__axis--x .tick text'\n  const defaultWidth = 0\n  return elementsMaxBBox({ selector, defaultWidth }).width ?? defaultWidth\n})\n\nconst margin = computed(() => {\n  const left = labelWidth.value + 10\n  const right = bucketWidth.value / 2\n  const top = labelHeight.value\n  const bottom = bucketHeight.value + 10\n  return { left, right, top, bottom }\n})\n\nconst padded = computed(() => {\n  const widthP = Math.max(0, width.value - margin.value.left - margin.value.right)\n  const heightP = Math.max(0, height.value - margin.value.top - margin.value.bottom)\n  return { width: widthP, height: heightP }\n})\n\n// Pure d3 geometry (scales, line paths, axes) lives in the line-chart\n// composable; the component keeps the DOM measurement and axis rendering.\nconst {\n  isMultiLine,\n  activeKeys,\n  colorScale,\n  formattedData,\n  scaleX,\n  scaleY,\n  lines,\n  line,\n  xAxis,\n  yAxis\n} = useLineChart({\n  loadedData,\n  padded,\n  d3Formatter,\n  xAxisYearFormat,\n  keys: toRef(() => props.keys),\n  seriesName: toRef(() => props.seriesName),\n  timeseriesKey: toRef(() => props.timeseriesKey),\n  lineColors: toRef(() => props.lineColors),\n  curve: toRef(() => props.curve),\n  xAxisTicks: toRef(() => props.xAxisTicks),\n  yAxisTickFormat: toRef(() => props.yAxisTickFormat),\n  yAxisTicks: toRef(() => props.yAxisTicks)\n})\n\nfunction setSizes() {\n  if (el.value) {\n    width.value = el.value.offsetWidth\n    let h = props.fixedHeight !== null\n      ? props.fixedHeight\n      : el.value.offsetWidth * baseHeightRatio.value\n    // Subtract legend height so the SVG fits within the container\n    const legend = el.value.querySelector<HTMLElement>('.line-chart__legend')\n    if (legend) {\n      const style = getComputedStyle(legend)\n      h -= legend.offsetHeight + (parseFloat(style.marginTop) || 0) + (parseFloat(style.marginBottom) || 0)\n    }\n    height.value = Math.max(0, h)\n  }\n}\n\n// Render the axes imperatively from the composable's d3 axis generators; the\n// line paths themselves are bound declaratively in the template.\nfunction update() {\n  select(el.value)\n    .select('.line-chart__axis--x')\n    .call(xAxis.value as any)\n  select(el.value)\n    .select('.line-chart__axis--y')\n    .call(yAxis.value as any)\n    .selectAll('.tick line')\n    .attr('x2', padded.value.width)\n}\n\nwatchEffect(() => {\n  update()\n})\n\ndefineExpose({\n  width,\n  height,\n  setSizes,\n  isMultiLine,\n  activeKeys,\n  colorScale,\n  formattedData,\n  scaleX,\n  scaleY,\n  lines,\n  line,\n  xAxis,\n  yAxis,\n  highlightedKey,\n  hasHighlight,\n  highlight,\n  resetHighlight,\n  isHighlighted\n})\n</script>\n\n<template>\n  <div\n    ref=\"el\"\n    class=\"line-chart\"\n    :style=\"{ '--line-color': lineColor }\"\n    :class=\"{\n      'line-chart--social-mode': socialMode,\n      'line-chart--multi': isMultiLine,\n      'line-chart--has-highlight': hasHighlight\n    }\"\n  >\n    <ul\n      v-if=\"isMultiLine && !hideLegend\"\n      class=\"line-chart__legend list-inline\"\n    >\n      <li\n        v-for=\"key in activeKeys\"\n        :key=\"key\"\n        class=\"line-chart__legend__item list-inline-item d-inline-flex\"\n        :class=\"{ 'line-chart__legend__item--highlighted': isHighlighted(key) }\"\n        @mouseover=\"highlight(key)\"\n        @mouseleave=\"resetHighlight()\"\n      >\n        <span\n          class=\"line-chart__legend__item__box\"\n          :style=\"{ 'background-color': colorScale(key) }\"\n        />\n        <span class=\"line-chart__legend__item__label\">{{ groupName(key) }}</span>\n      </li>\n    </ul>\n    <svg\n      :width=\"width\"\n      :height=\"height\"\n    >\n      <g\n        class=\"line-chart__axis line-chart__axis--x\"\n        :style=\"{\n          transform: `translate(${margin.left}px, ${margin.top + padded.height}px)`\n        }\"\n      >\n        >\n      </g>\n      <g\n        class=\"line-chart__axis line-chart__axis--y\"\n        :style=\"{ transform: `translate(${margin.left}px, ${margin.top}px)` }\"\n      >\n        >\n      </g>\n      <g :style=\"{ transform: `translate(${margin.left}px, ${margin.top}px)` }\">\n        <template v-if=\"isMultiLine\">\n          <path\n            v-for=\"series in lines\"\n            :key=\"series.key\"\n            class=\"line-chart__line\"\n            :class=\"{ 'line-chart__line--highlighted': isHighlighted(series.key) }\"\n            :d=\"series.path ?? undefined\"\n            :style=\"{ stroke: series.color ?? undefined }\"\n            @mouseover=\"highlight(series.key)\"\n            @mouseleave=\"resetHighlight()\"\n          />\n        </template>\n        <path\n          v-else\n          class=\"line-chart__line\"\n          :d=\"line ?? undefined\"\n        />\n      </g>\n    </svg>\n  </div>\n</template>\n\n<style lang=\"scss\">\n\n.line-chart {\n  text {\n    font-family: $font-family-base;\n    font-size: $font-size-sm;\n    fill: currentColor;\n  }\n\n  &__legend {\n    &__item {\n      display: inline-flex;\n      flex-direction: row;\n      align-items: center;\n      padding-right: $spacer * 0.5;\n      transition: opacity 0.3s, filter 0.3s;\n\n      .line-chart--has-highlight &:not(&--highlighted) {\n        opacity: 0.2;\n        filter: grayscale(30%) brightness(10%);\n      }\n\n      &__box {\n        height: 1em;\n        width: 1em;\n        border-radius: 0.5em;\n        display: inline-block;\n        margin-right: $spacer * 0.5;\n      }\n    }\n  }\n\n  &__axis {\n    .domain {\n      display: none;\n    }\n\n    .tick line {\n      stroke: $border-color;\n    }\n\n    &--x .tick line {\n      display: none;\n    }\n  }\n\n  &__line {\n    fill: none;\n    stroke: var(--line-color, var(--dark, $dark));\n    stroke-width: 3px;\n    transition: opacity 0.3s;\n\n    .line-chart--has-highlight &:not(&--highlighted) {\n      opacity: 0.15;\n    }\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { select } from 'd3-selection'\nimport type { CurveFactory } from 'd3-shape'\nimport identity from 'lodash/identity'\nimport { getChartProps, useChart } from '@/composables/useChart'\nimport { useLineChart } from '@/composables/useLineChart'\nimport { computed, ref, toRef, watchEffect, ComponentPublicInstance } from 'vue'\n\ndefineOptions({\n  name: 'LineChart'\n})\n\nexport interface LineChartProps {\n  /**\n   * Color of the line. Falls back to theme's dark color.\n   * Used for single-series mode (when `keys` is not set).\n   */\n  lineColor?: string\n  /**\n   * Colors for each line when using multi-series mode (`keys`).\n   */\n  lineColors?: string[]\n  /**\n   * Field names in data objects for each line series.\n   * When set, enables multi-line mode. When empty, falls back to `seriesName`.\n   */\n  keys?: string[]\n  /**\n   * Display names for each key in the legend.\n   */\n  groups?: string[]\n  /**\n   * Hide the legend (only relevant in multi-line mode).\n   */\n  hideLegend?: boolean\n  /**\n   * Fixed width for y-axis labels in pixels. If not set, width is calculated automatically.\n   */\n  fixedLabelWidth?: number | null\n  /**\n   * Fixed height for the chart in pixels. If not set, height is calculated from width.\n   */\n  fixedHeight?: number | null\n  /**\n   * Field name in data objects containing the y-axis value.\n   * Used for single-series mode (when `keys` is not set).\n   */\n  seriesName?: string\n  /**\n   * Number of x-axis ticks or d3 tick configuration.\n   */\n  xAxisTicks?: object | number | ((d: any) => any) | null\n  /**\n   * Formatter function or d3 format string for y-axis tick labels.\n   */\n  yAxisTickFormat?: ((v: any) => string) | string\n  /**\n   * Number of y-axis ticks or d3 tick configuration.\n   */\n  yAxisTicks?: object | number\n  /**\n   * Field name in data objects containing the x-axis time/date value (parsed as year).\n   */\n  timeseriesKey?: string\n  /**\n   * Data to display, either as a URL string to fetch or an array of objects.\n   */\n  data?: string | Record<string, unknown>[] | null\n  /**\n   * Type of data file when fetching from URL.\n   */\n  dataUrlType?: 'json' | 'csv' | 'tsv'\n  /**\n   * Aspect ratio (height/width) for the chart.\n   */\n  chartHeightRatio?: number\n  /**\n   * D3 curve factory for line interpolation (e.g. d3.curveStep, d3.curveMonotoneX).\n   * Defaults to d3.curveLinear.\n   */\n  curve?: CurveFactory\n  /**\n   * Enable social mode for optimal display when sharing on social media.\n   */\n  socialMode?: boolean\n  /**\n   * Aspect ratio to use in social mode.\n   */\n  socialModeRatio?: number\n}\n\nconst props = withDefaults(defineProps<LineChartProps>(), {\n  lineColor: undefined,\n  lineColors: () => [],\n  keys: () => [],\n  groups: () => [],\n  hideLegend: false,\n  curve: undefined,\n  fixedLabelWidth: null,\n  fixedHeight: null,\n  seriesName: 'value',\n  xAxisTicks: null,\n  yAxisTickFormat: () => identity,\n  yAxisTicks: 5,\n  timeseriesKey: 'date',\n  data: null,\n  dataUrlType: 'json',\n  chartHeightRatio: undefined,\n  socialMode: false,\n  socialModeRatio: 5 / 4\n})\n\nconst emit = defineEmits<{\n  loaded: [data: Record<string, unknown>[] | null]\n  resized: []\n}>()\n\nconst width = ref(0)\nconst height = ref(0)\nconst el = ref<ComponentPublicInstance<HTMLElement> | null>(null)\nconst isLoaded = ref(false)\n\nconst {\n  loadedData,\n  elementsMaxBBox,\n  d3Formatter,\n  xAxisYearFormat,\n  baseHeightRatio\n} = useChart<Record<string, unknown>[]>(el, getChartProps(props), { emit }, isLoaded, setSizes)\n\nconst highlightedKey = ref<string | null>(null)\n\nconst hasHighlight = computed(() => highlightedKey.value !== null)\n\nfunction highlight(key: string) {\n  highlightedKey.value = key\n}\n\nfunction resetHighlight() {\n  highlightedKey.value = null\n}\n\nfunction isHighlighted(key: string) {\n  return highlightedKey.value === key\n}\n\nfunction groupName(key: string) {\n  const index = props.keys.indexOf(key)\n  return props.groups[index] || key\n}\n\nconst labelWidth = computed((): number => {\n  if (props.fixedLabelWidth) {\n    return props.fixedLabelWidth\n  }\n  const selector = '.line-chart__axis--y .tick text'\n  const defaultWidth = 100\n  return elementsMaxBBox({ selector, defaultWidth }).width ?? defaultWidth\n})\n\nconst labelHeight = computed((): number => {\n  const selector = '.line-chart__axis--y .tick'\n  const defaultHeight = 10\n  return elementsMaxBBox({ selector, defaultHeight }).height ?? defaultHeight\n})\n\nconst bucketHeight = computed((): number => {\n  const selector = '.line-chart__axis--x .tick'\n  const defaultHeight = 10\n  return elementsMaxBBox({ selector, defaultHeight }).height ?? defaultHeight\n})\n\nconst bucketWidth = computed((): number => {\n  const selector = '.line-chart__axis--x .tick text'\n  const defaultWidth = 0\n  return elementsMaxBBox({ selector, defaultWidth }).width ?? defaultWidth\n})\n\nconst margin = computed(() => {\n  const left = labelWidth.value + 10\n  const right = bucketWidth.value / 2\n  const top = labelHeight.value\n  const bottom = bucketHeight.value + 10\n  return { left, right, top, bottom }\n})\n\nconst padded = computed(() => {\n  const widthP = Math.max(0, width.value - margin.value.left - margin.value.right)\n  const heightP = Math.max(0, height.value - margin.value.top - margin.value.bottom)\n  return { width: widthP, height: heightP }\n})\n\n// Pure d3 geometry (scales, line paths, axes) lives in the line-chart\n// composable; the component keeps the DOM measurement and axis rendering.\nconst {\n  isMultiLine,\n  activeKeys,\n  colorScale,\n  formattedData,\n  scaleX,\n  scaleY,\n  lines,\n  line,\n  xAxis,\n  yAxis\n} = useLineChart({\n  loadedData,\n  padded,\n  d3Formatter,\n  xAxisYearFormat,\n  keys: toRef(() => props.keys),\n  seriesName: toRef(() => props.seriesName),\n  timeseriesKey: toRef(() => props.timeseriesKey),\n  lineColors: toRef(() => props.lineColors),\n  curve: toRef(() => props.curve),\n  xAxisTicks: toRef(() => props.xAxisTicks),\n  yAxisTickFormat: toRef(() => props.yAxisTickFormat),\n  yAxisTicks: toRef(() => props.yAxisTicks)\n})\n\nfunction setSizes() {\n  if (el.value) {\n    width.value = el.value.offsetWidth\n    let h = props.fixedHeight !== null\n      ? props.fixedHeight\n      : el.value.offsetWidth * baseHeightRatio.value\n    // Subtract legend height so the SVG fits within the container\n    const legend = el.value.querySelector<HTMLElement>('.line-chart__legend')\n    if (legend) {\n      const style = getComputedStyle(legend)\n      h -= legend.offsetHeight + (parseFloat(style.marginTop) || 0) + (parseFloat(style.marginBottom) || 0)\n    }\n    height.value = Math.max(0, h)\n  }\n}\n\n// Render the axes imperatively from the composable's d3 axis generators; the\n// line paths themselves are bound declaratively in the template.\nfunction update() {\n  select(el.value)\n    .select('.line-chart__axis--x')\n    .call(xAxis.value as any)\n  select(el.value)\n    .select('.line-chart__axis--y')\n    .call(yAxis.value as any)\n    .selectAll('.tick line')\n    .attr('x2', padded.value.width)\n}\n\nwatchEffect(() => {\n  update()\n})\n\ndefineExpose({\n  width,\n  height,\n  setSizes,\n  isMultiLine,\n  activeKeys,\n  colorScale,\n  formattedData,\n  scaleX,\n  scaleY,\n  lines,\n  line,\n  xAxis,\n  yAxis,\n  highlightedKey,\n  hasHighlight,\n  highlight,\n  resetHighlight,\n  isHighlighted\n})\n</script>\n\n<template>\n  <div\n    ref=\"el\"\n    class=\"line-chart\"\n    :style=\"{ '--line-color': lineColor }\"\n    :class=\"{\n      'line-chart--social-mode': socialMode,\n      'line-chart--multi': isMultiLine,\n      'line-chart--has-highlight': hasHighlight\n    }\"\n  >\n    <ul\n      v-if=\"isMultiLine && !hideLegend\"\n      class=\"line-chart__legend list-inline\"\n    >\n      <li\n        v-for=\"key in activeKeys\"\n        :key=\"key\"\n        class=\"line-chart__legend__item list-inline-item d-inline-flex\"\n        :class=\"{ 'line-chart__legend__item--highlighted': isHighlighted(key) }\"\n        @mouseover=\"highlight(key)\"\n        @mouseleave=\"resetHighlight()\"\n      >\n        <span\n          class=\"line-chart__legend__item__box\"\n          :style=\"{ 'background-color': colorScale(key) }\"\n        />\n        <span class=\"line-chart__legend__item__label\">{{ groupName(key) }}</span>\n      </li>\n    </ul>\n    <svg\n      :width=\"width\"\n      :height=\"height\"\n    >\n      <g\n        class=\"line-chart__axis line-chart__axis--x\"\n        :style=\"{\n          transform: `translate(${margin.left}px, ${margin.top + padded.height}px)`\n        }\"\n      >\n        >\n      </g>\n      <g\n        class=\"line-chart__axis line-chart__axis--y\"\n        :style=\"{ transform: `translate(${margin.left}px, ${margin.top}px)` }\"\n      >\n        >\n      </g>\n      <g :style=\"{ transform: `translate(${margin.left}px, ${margin.top}px)` }\">\n        <template v-if=\"isMultiLine\">\n          <path\n            v-for=\"series in lines\"\n            :key=\"series.key\"\n            class=\"line-chart__line\"\n            :class=\"{ 'line-chart__line--highlighted': isHighlighted(series.key) }\"\n            :d=\"series.path ?? undefined\"\n            :style=\"{ stroke: series.color ?? undefined }\"\n            @mouseover=\"highlight(series.key)\"\n            @mouseleave=\"resetHighlight()\"\n          />\n        </template>\n        <path\n          v-else\n          class=\"line-chart__line\"\n          :d=\"line ?? undefined\"\n        />\n      </g>\n    </svg>\n  </div>\n</template>\n\n<style lang=\"scss\">\n\n.line-chart {\n  text {\n    font-family: $font-family-base;\n    font-size: $font-size-sm;\n    fill: currentColor;\n  }\n\n  &__legend {\n    &__item {\n      display: inline-flex;\n      flex-direction: row;\n      align-items: center;\n      padding-right: $spacer * 0.5;\n      transition: opacity 0.3s, filter 0.3s;\n\n      .line-chart--has-highlight &:not(&--highlighted) {\n        opacity: 0.2;\n        filter: grayscale(30%) brightness(10%);\n      }\n\n      &__box {\n        height: 1em;\n        width: 1em;\n        border-radius: 0.5em;\n        display: inline-block;\n        margin-right: $spacer * 0.5;\n      }\n    }\n  }\n\n  &__axis {\n    .domain {\n      display: none;\n    }\n\n    .tick line {\n      stroke: $border-color;\n    }\n\n    &--x .tick line {\n      display: none;\n    }\n  }\n\n  &__line {\n    fill: none;\n    stroke: var(--line-color, var(--dark, $dark));\n    stroke-width: 3px;\n    transition: opacity 0.3s;\n\n    .line-chart--has-highlight &:not(&--highlighted) {\n      opacity: 0.15;\n    }\n  }\n}\n</style>\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n  return value !== value;\n}\n\nmodule.exports = baseIsNaN;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n  var index = fromIndex - 1,\n      length = array.length;\n\n  while (++index < length) {\n    if (array[index] === value) {\n      return index;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = strictIndexOf;\n","var baseFindIndex = require('./_baseFindIndex'),\n    baseIsNaN = require('./_baseIsNaN'),\n    strictIndexOf = require('./_strictIndexOf');\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n  return value === value\n    ? strictIndexOf(array, value, fromIndex)\n    : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nmodule.exports = baseIndexOf;\n","var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n  var length = array == null ? 0 : array.length;\n  return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nmodule.exports = arrayIncludes;\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (comparator(value, array[index])) {\n      return true;\n    }\n  }\n  return false;\n}\n\nmodule.exports = arrayIncludesWith;\n","var SetCache = require('./_SetCache'),\n    arrayIncludes = require('./_arrayIncludes'),\n    arrayIncludesWith = require('./_arrayIncludesWith'),\n    arrayMap = require('./_arrayMap'),\n    baseUnary = require('./_baseUnary'),\n    cacheHas = require('./_cacheHas');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\nfunction baseDifference(array, values, iteratee, comparator) {\n  var index = -1,\n      includes = arrayIncludes,\n      isCommon = true,\n      length = array.length,\n      result = [],\n      valuesLength = values.length;\n\n  if (!length) {\n    return result;\n  }\n  if (iteratee) {\n    values = arrayMap(values, baseUnary(iteratee));\n  }\n  if (comparator) {\n    includes = arrayIncludesWith;\n    isCommon = false;\n  }\n  else if (values.length >= LARGE_ARRAY_SIZE) {\n    includes = cacheHas;\n    isCommon = false;\n    values = new SetCache(values);\n  }\n  outer:\n  while (++index < length) {\n    var value = array[index],\n        computed = iteratee == null ? value : iteratee(value);\n\n    value = (comparator || value !== 0) ? value : 0;\n    if (isCommon && computed === computed) {\n      var valuesIndex = valuesLength;\n      while (valuesIndex--) {\n        if (values[valuesIndex] === computed) {\n          continue outer;\n        }\n      }\n      result.push(value);\n    }\n    else if (!includes(values, computed, comparator)) {\n      result.push(value);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseDifference;\n","var isArrayLike = require('./isArrayLike'),\n    isObjectLike = require('./isObjectLike');\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an 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 an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\nmodule.exports = isArrayLikeObject;\n","var baseDifference = require('./_baseDifference'),\n    baseRest = require('./_baseRest'),\n    isArrayLikeObject = require('./isArrayLikeObject');\n\n/**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\nvar without = baseRest(function(array, values) {\n  return isArrayLikeObject(array)\n    ? baseDifference(array, values)\n    : [];\n});\n\nmodule.exports = without;\n","import { max, sum } from 'd3-array'\nimport { scaleOrdinal } from 'd3-scale'\nimport keysFn from 'lodash/keys'\nimport sortByFn from 'lodash/sortBy'\nimport without from 'lodash/without'\nimport { computed, toValue } from 'vue'\nimport type { ComputedRef, MaybeRefOrGetter } from 'vue'\n\n/**\n * Reactive inputs driving {@link useStackedChart}. They mirror the data and\n * stacking-related props shared by the `StackedBarChart` and\n * `StackedColumnChart` components, accepted as plain values, refs or getters so\n * the composable adapts to how each caller wires its state.\n */\nexport interface UseStackedChartOptions {\n  /**\n   * The chart's loaded data (inline array or fetched), as exposed by `useChart`.\n   */\n  loadedData: MaybeRefOrGetter<Record<string, unknown>[] | null>\n  /**\n   * Whether the data has finished loading. Until then `sortedData` is empty so\n   * the chart never reads from half-loaded data.\n   */\n  isLoaded: MaybeRefOrGetter<boolean>\n  /**\n   * Field name(s) to sort the data by, or `null`/`undefined` to keep the\n   * loaded order.\n   */\n  sortBy: MaybeRefOrGetter<string | string[] | null | undefined>\n  /**\n   * Explicit list of stacked segment keys. When empty, the keys are discovered\n   * from the first datum (every field except the label field).\n   */\n  keys: MaybeRefOrGetter<string[]>\n  /**\n   * Field name in each datum holding the row label, excluded from the\n   * discovered keys.\n   */\n  labelField: MaybeRefOrGetter<string>\n  /**\n   * Display names for each key, used by {@link UseStackedChart.groupName}. The\n   * name at the key's index wins, falling back to the key itself.\n   */\n  groups: MaybeRefOrGetter<string[]>\n  /**\n   * Colors for each segment, mapped to the discovered keys by an ordinal scale.\n   */\n  barColors: MaybeRefOrGetter<string[]>\n}\n\n/**\n * Reactive API returned by {@link useStackedChart}.\n */\nexport interface UseStackedChart {\n  /**\n   * The loaded data, optionally sorted by the `sortBy` option, or an empty\n   * array until the data has loaded.\n   */\n  sortedData: ComputedRef<any[]>\n  /**\n   * The stacked segment keys, either the explicit `keys` option or the fields\n   * discovered from the first datum (minus the label field).\n   */\n  discoveredKeys: ComputedRef<string[]>\n  /**\n   * The ordinal scale mapping each key to its color.\n   */\n  colorScale: ComputedRef<(key: string) => string>\n  /**\n   * Sums every key's value for the row at the given index.\n   */\n  totalRowValue: (i: number | string) => number\n  /**\n   * The largest row total across the data, driving the relative bar sizing.\n   */\n  maxStackValue: ComputedRef<number | undefined>\n  /**\n   * The display name for a key: the matching `groups` entry, or the key itself.\n   */\n  groupName: (key: string) => string\n}\n\n/**\n * Owns the pure data logic shared by the `StackedBarChart` and\n * `StackedColumnChart` components: it sorts the data, discovers the stacked\n * keys, builds the ordinal color scale, sums each row and exposes the maximum\n * row total. It holds no DOM state — measurement, highlighting and the\n * width/height geometry stay in each component because they differ between the\n * horizontal and vertical layouts.\n *\n * @param options - Reactive stacking options (see {@link UseStackedChartOptions}).\n * @returns The {@link UseStackedChart} API of derived data.\n * @example\n * // Internal building block of the stacked chart components; not exported from\n * // the package root. Inside a `<script setup>` block:\n * import { toRef } from 'vue'\n * import { useStackedChart } from '@/composables/useStackedChart'\n *\n * const { sortedData, discoveredKeys, colorScale, totalRowValue } = useStackedChart({\n *   loadedData,\n *   isLoaded,\n *   sortBy: toRef(() => props.sortBy),\n *   keys: toRef(() => props.keys),\n *   labelField: toRef(() => props.labelField),\n *   groups: toRef(() => props.groups),\n *   barColors: toRef(() => props.barColors)\n * })\n */\nexport function useStackedChart(options: UseStackedChartOptions): UseStackedChart {\n  const {\n    loadedData,\n    isLoaded,\n    sortBy,\n    keys,\n    labelField,\n    groups,\n    barColors\n  } = options\n\n  const sortedData = computed((): any[] => {\n    if (!toValue(isLoaded)) {\n      return []\n    }\n    const data = toValue(loadedData)\n    if (!data) {\n      return []\n    }\n    const sortKey = toValue(sortBy)\n    return !sortKey ? data : sortByFn(data, sortKey)\n  })\n\n  const discoveredKeys = computed((): string[] => {\n    const explicitKeys = toValue(keys)\n    if (explicitKeys.length) {\n      return explicitKeys\n    }\n    const data = toValue(loadedData)\n    if (!data) {\n      return []\n    }\n    return without(keysFn(data[0]), toValue(labelField))\n  })\n\n  const colorScale = computed((): (key: string) => string => {\n    return scaleOrdinal()\n      .domain(discoveredKeys.value)\n      .range(toValue(barColors)) as unknown as (key: string) => string\n  })\n\n  function totalRowValue(i: number | string): number {\n    return sum(discoveredKeys.value, (key: string) => {\n      return sortedData.value[i as number][key]\n    })\n  }\n\n  const maxStackValue = computed((): number | undefined => {\n    return max(toValue(loadedData) || [], (_datum: any, i: number) => {\n      return totalRowValue(i)\n    })\n  })\n\n  function groupName(key: string): string {\n    const index = discoveredKeys.value.indexOf(key)\n    return toValue(groups)[index] || key\n  }\n\n  return {\n    sortedData,\n    discoveredKeys,\n    colorScale,\n    totalRowValue,\n    maxStackValue,\n    groupName\n  }\n}\n\nexport default useStackedChart\n","<script setup lang=\"ts\">\nimport get from 'lodash/get'\nimport identity from 'lodash/identity'\nimport isArray from 'lodash/isArray'\nimport kebabCase from 'lodash/kebabCase'\nimport { ComponentPublicInstance, computed, nextTick, ref, toRef, watch } from 'vue'\nimport { getChartProps, useChart } from '@/composables/useChart'\nimport { useStackedChart } from '@/composables/useStackedChart'\n\ndefineOptions({\n  name: 'StackedBarChart'\n})\n\nexport interface StackedBarChartProps {\n  /**\n   * Colors for each bar segment/key.\n   */\n  barColors?: string[]\n  /**\n   * Fixed height for the chart in pixels. If not set, height is calculated automatically.\n   */\n  fixedHeight?: number | null\n  /**\n   * Display names for each key in the legend.\n   */\n  groups?: string[]\n  /**\n   * Hide bar segments that have no values.\n   */\n  hideEmptyValues?: boolean\n  /**\n   * Hide the legend.\n   */\n  hideLegend?: boolean\n  /**\n   * List of keys to highlight initially.\n   */\n  highlights?: string[]\n  /**\n   * Delay in milliseconds before highlighting a key on hover.\n   */\n  highlightDelay?: number\n  /**\n   * Field names in data objects containing values for each stacked segment.\n   */\n  keys?: string[]\n  /**\n   * Position labels above the bars instead of to the left.\n   */\n  labelAbove?: boolean\n  /**\n   * Field name in data objects containing the row label.\n   */\n  labelField?: string\n  /**\n   * Minimum height for each bar row in pixels.\n   */\n  minBarHeight?: number\n  /**\n   * Maximum height for each bar row in pixels.\n   */\n  maxBarHeight?: number\n  /**\n   * Calculate bar widths relative to each row's total instead of the global maximum.\n   */\n  relative?: boolean\n  /**\n   * Delay in milliseconds before restoring highlights to initial state.\n   */\n  restoreHighlightDelay?: number\n  /**\n   * List of row labels to highlight.\n   */\n  rowHighlights?: string[]\n  /**\n   * Field name(s) to sort the data by.\n   */\n  sortBy?: string | string[] | null\n  /**\n   * Formatter function or d3 format string for bar values.\n   */\n  xAxisTickFormat?: ((v: any) => string) | string\n  /**\n   * Data to display, either as a URL string to fetch or an array of objects.\n   */\n  data?: string | Record<string, unknown>[] | null\n  /**\n   * Type of data file when fetching from URL.\n   */\n  dataUrlType?: 'json' | 'csv' | 'tsv'\n  /**\n   * Aspect ratio (height/width) for the chart.\n   */\n  chartHeightRatio?: number\n  /**\n   * Enable social mode for optimal display when sharing on social media.\n   */\n  socialMode?: boolean\n  /**\n   * Aspect ratio to use in social mode.\n   */\n  socialModeRatio?: number\n}\n\nconst props = withDefaults(defineProps<StackedBarChartProps>(), {\n  barColors: () => [],\n  fixedHeight: null,\n  groups: () => [],\n  hideEmptyValues: false,\n  hideLegend: false,\n  highlights: () => [],\n  highlightDelay: 400,\n  keys: () => [],\n  labelAbove: false,\n  labelField: 'label',\n  minBarHeight: 16,\n  maxBarHeight: 60,\n  relative: false,\n  restoreHighlightDelay: 50,\n  rowHighlights: () => [],\n  sortBy: null,\n  xAxisTickFormat: () => identity,\n  data: null,\n  dataUrlType: 'json',\n  chartHeightRatio: undefined,\n  socialMode: false,\n  socialModeRatio: 5 / 4\n})\n\nconst emit = defineEmits<{\n  loaded: [data: Record<string, unknown>[] | null]\n  resized: []\n}>()\n\nconst highlightedKeys = ref(props.highlights)\nconst highlightTimeout = ref<ReturnType<typeof setTimeout> | undefined>(undefined)\nconst isLoaded = ref(false)\nconst el = ref<ComponentPublicInstance<HTMLElement> | null>(null)\n\nconst {\n  loadedData,\n  mounted,\n  baseHeightRatio,\n  d3Formatter,\n  dataHasHighlights\n} = useChart<Record<string, unknown>[]>(el, getChartProps(props), { emit }, isLoaded)\n\nconst {\n  sortedData,\n  discoveredKeys,\n  colorScale,\n  totalRowValue,\n  maxStackValue: maxValue,\n  groupName\n} = useStackedChart({\n  loadedData,\n  isLoaded,\n  sortBy: toRef(() => props.sortBy),\n  keys: toRef(() => props.keys),\n  labelField: toRef(() => props.labelField),\n  groups: toRef(() => props.groups),\n  barColors: toRef(() => props.barColors)\n})\n\nconst hasConstraintHeight = computed(() => {\n  return props.fixedHeight !== null || props.socialMode\n})\n\nconst hasHighlights = computed(() => {\n  return !!highlightedKeys.value.length\n})\n\nconst hasRowHighlights = computed(() => {\n  return !!props.rowHighlights.length\n})\n\nconst hasAnyHighlights = computed(() => {\n  return hasHighlights.value || hasRowHighlights.value || dataHasHighlights.value\n})\n\nconst height = computed(() => {\n  if (props.fixedHeight !== null) {\n    return `${props.fixedHeight}px`\n  }\n  return props.socialMode && mounted.value && el.value\n    ? `${el.value.offsetWidth * baseHeightRatio.value}px`\n    : 'auto'\n})\n\nfunction normalizeKey(key: string) {\n  return kebabCase(key)\n}\n\nfunction highlight(key: string) {\n  highlightedKeys.value = [key]\n}\n\nfunction restoreHighlights() {\n  clearTimeout(highlightTimeout.value)\n  const delay = props.restoreHighlightDelay\n  highlightTimeout.value = setTimeout(\n    () => (highlightedKeys.value = props.highlights),\n    delay\n  )\n}\n\nfunction delayHighlight(key: string) {\n  clearTimeout(highlightTimeout.value)\n  const isDelayed = !hasHighlights.value\n  const delay = isDelayed ? props.highlightDelay : 0\n  highlightTimeout.value = setTimeout(() => highlight(key), delay)\n}\n\nfunction isHighlighted(key: string) {\n  return highlightedKeys.value.indexOf(key) > -1\n}\n\nfunction isRowHighlighted(i: number | string) {\n  const row = get(sortedData.value, [i, props.labelField], null)\n  return (\n    isArray(props.rowHighlights)\n    && props.rowHighlights?.includes(row)\n    && !highlightedKeys.value.length\n  )\n}\n\nfunction barStyle(i: number | string, key: string) {\n  const value = sortedData.value[i as number][key]\n  let totalWidth = props.relative ? totalRowValue(i) : maxValue.value\n  if (!totalWidth) {\n    console.error('totalWidth as divider cannot be ' + totalWidth)\n    totalWidth = 100\n  }\n  const width = `${100 * (value / totalWidth)}%`\n  const backgroundColor = colorScale.value(key)\n  return { width, backgroundColor }\n}\n\ninterface StackItem {\n  key: string\n  barEdge: number\n  barWidth: number\n  rowEdge: number\n  valueWidth: number\n  overflow: boolean\n  pushed: boolean\n}\n\nfunction stackBarAndValue(i: number | string): StackItem[] {\n  if (!mounted.value) {\n    return []\n  }\n  const stack: StackItem[] = discoveredKeys.value.map((key: string) => {\n    const { bar, row, value } = queryBarAndValue(i as number, key)\n    if (!bar || !row || !value) {\n      throw new Error('Values not retrieved')\n    }\n    const barEdge = bar.getBoundingClientRect().left + bar.offsetWidth\n    const barWidth = bar.offsetWidth\n    const rowEdge = row.getBoundingClientRect().left + row.offsetWidth\n    const valueWidth = value.offsetWidth\n    const overflow = false\n    const pushed = false\n    return { key, barEdge, barWidth, rowEdge, valueWidth, overflow, pushed }\n  })\n  return stack.map((desc, index) => {\n    desc.overflow = desc.valueWidth >= desc.barWidth\n    if (!desc.overflow && index > 0) {\n      const prevDesc = stack[index - 1]\n      const bothValuesWidth = desc.valueWidth + prevDesc.valueWidth\n      desc.overflow = prevDesc.overflow && desc.barWidth < bothValuesWidth\n    }\n    desc.pushed = desc.overflow && desc.barEdge + desc.valueWidth > desc.rowEdge\n    return desc\n  })\n}\n\nfunction queryBarAndValue(i: number, key: string) {\n  const root = el.value as unknown as HTMLElement\n  if (!mounted.value || !root) {\n    return {}\n  }\n  const barClass = 'stacked-bar-chart__groups__item__bars__item'\n  const rowSelector = '.stacked-bar-chart__groups__item'\n  const row = root.querySelectorAll(rowSelector)[i] as HTMLElement\n  const normalizedKey = normalizeKey(key)\n  const barSelector = `.${barClass}--${normalizedKey}`\n  const bar = row?.querySelector(barSelector) as HTMLElement\n  const valueSelector = `.${barClass}__value`\n  const value = bar?.querySelector(valueSelector) as HTMLElement\n  return { bar, row, value }\n}\n\ninterface LabelState {\n  overflow: boolean\n  pushed: boolean\n  hidden: boolean\n}\n\nconst labelStates = ref<Record<string, LabelState>>({})\n\nfunction labelStateKey(i: number | string, key: string) {\n  return `${i}-${key}`\n}\n\nfunction computeLabelStates() {\n  const root = el.value as unknown as HTMLElement\n  if (!root || !mounted.value || !sortedData.value?.length) return\n\n  const states: Record<string, LabelState> = {}\n\n  for (let i = 0; i < sortedData.value.length; i++) {\n    try {\n      const stack = stackBarAndValue(i)\n      for (const item of stack) {\n        states[labelStateKey(i, item.key)] = {\n          overflow: item.overflow,\n          pushed: item.pushed,\n          hidden: false\n        }\n      }\n      for (let j = 0; j < stack.length; j++) {\n        const nextItem = stack[j + 1]\n        if (nextItem && stack[j].overflow && nextItem.overflow) {\n          states[labelStateKey(i, stack[j].key)].hidden = true\n        }\n      }\n    }\n    catch {\n      // If measurement fails for a row, skip it\n    }\n  }\n\n  labelStates.value = states\n}\n\nfunction hasValueOverflow(i: number | string, key: string) {\n  return labelStates.value[labelStateKey(i, key)]?.overflow ?? false\n}\n\nfunction hasValuePushed(i: number | string, key: string) {\n  return labelStates.value[labelStateKey(i, key)]?.pushed ?? false\n}\n\nfunction hasValueHidden(i: number | string, key: string) {\n  return labelStates.value[labelStateKey(i, key)]?.hidden ?? false\n}\n\nfunction isHidden(i: number | string, key: string) {\n  return props.hideEmptyValues && !sortedData.value[i as number][key]\n}\n\nfunction formatXDatum(d: string) {\n  return d3Formatter(d, props.xAxisTickFormat)\n}\n\nwatch(() => props.highlights, (newHighlights: string[]) => {\n  highlightedKeys.value = newHighlights\n})\n\n// Compute label states after DOM layout\nwatch(sortedData, async () => {\n  await nextTick()\n  computeLabelStates()\n})\n</script>\n\n<template>\n  <div\n    ref=\"el\"\n    :class=\"{\n      'stacked-bar-chart--social-mode': socialMode,\n      'stacked-bar-chart--label-above': labelAbove,\n      'stacked-bar-chart--has-highlights': hasAnyHighlights,\n      'stacked-bar-chart--has-constraint-height': hasConstraintHeight,\n      'stacked-bar-chart--has-label-above': labelAbove\n    }\"\n    :style=\"{ height }\"\n    class=\"stacked-bar-chart d-flex flex-column\"\n  >\n    <div class=\"d-flex align-items-center\">\n      <slot name=\"header-left\">\n        <ul\n          v-if=\"!hideLegend\"\n          class=\"stacked-bar-chart__legend list-inline mx-0 mt-0 mb-2\"\n        >\n          <li\n            v-for=\"key in discoveredKeys\"\n            :key=\"key\"\n            :class=\"{\n              'stacked-bar-chart__legend__item--highlighted': isHighlighted(key)\n            }\"\n            class=\"stacked-bar-chart__legend__item list-inline-item d-inline-flex\"\n            @mouseleave=\"restoreHighlights()\"\n            @mouseover=\"delayHighlight(key)\"\n          >\n            <span\n              :style=\"{ 'background-color': colorScale(key) }\"\n              class=\"stacked-bar-chart__legend__item__box\"\n            />\n            {{ groupName(key) }}\n          </li>\n        </ul>\n      </slot>\n      <slot name=\"header-right\" />\n    </div>\n    <div class=\"stacked-bar-chart__groups\">\n      <div\n        v-for=\"(datum, i) in sortedData\"\n        :key=\"i\"\n        :class=\"{ 'flex-column': labelAbove, }\"\n        class=\"stacked-bar-chart__groups__item border-bottom flex-fill d-flex align-items-center\"\n      >\n        <div\n          :class=\"{ 'w-100': labelAbove }\"\n          class=\"stacked-bar-chart__groups__item__label me-1 small\"\n        >\n          {{ datum[props.labelField] }}\n        </div>\n        <div\n          class=\"stacked-bar-chart__groups__item__bars my-1 d-flex flex-grow-1 align-items-center\"\n        >\n          <div\n            v-for=\"(key, j) in discoveredKeys\"\n            :key=\"j\"\n            :class=\"{\n              [`stacked-bar-chart__groups__item__bars__item--${normalizeKey(key)}`]: true,\n              [`stacked-bar-chart__groups__item__bars__item--${j}n`]: true,\n              'stacked-bar-chart__groups__item__bars__item--highlighted': isHighlighted(key) || isRowHighlighted(i),\n              'stacked-bar-chart__groups__item__bars__item--hidden': isHidden(i, key),\n              'stacked-bar-chart__groups__item__bars__item--value-overflow': hasValueOverflow(i, key),\n              'stacked-bar-chart__groups__item__bars__item--value-pushed': hasValuePushed(i, key),\n              'stacked-bar-chart__groups__item__bars__item--value-hidden': hasValueHidden(i, key)\n            }\"\n            :style=\"barStyle(i, key)\"\n            class=\"stacked-bar-chart__groups__item__bars__item\"\n            @mouseleave=\"restoreHighlights()\"\n            @mouseover=\"delayHighlight(key)\"\n          >\n            <div class=\"stacked-bar-chart__groups__item__bars__item__value p-1\">\n              {{ formatXDatum(datum[key]) }}\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\">\n\n.stacked-bar-chart {\n  $muted-group-opacity: 0.2;\n  $muted-group-filter: grayscale(30%) brightness(10%);\n  $muted-group-transition:\n    opacity 0.3s,\n    filter 0.3s;\n  $colors: $primary, $info, $warning;\n  $quantile: 3;\n\n  @each $start-color in $colors {\n    $i: index($colors, $start-color) - 1;\n    $end-color: mix($start-color, text-contrast($start-color), 20%);\n\n    @for $j from ($quantile * $i) through ($quantile * $i + $quantile - 1) {\n      $amount: ($j % $quantile) * math.div(100%, $quantile);\n      --group-color-#{$j}n: #{mix($end-color, $start-color, $amount)};\n    }\n  }\n\n  &__legend {\n    &__item {\n      display: inline-flex;\n      flex-direction: row;\n      align-items: center;\n      padding-right: $spacer * 0.5;\n      transition: $muted-group-transition;\n\n      @for $i from 0 through ($quantile * length($colors)) {\n        &:nth-child(#{$i + 1}n) &__box {\n          background-color: var(--group-color-#{$i}n);\n        }\n      }\n\n      .stacked-bar-chart--has-highlights &:not(&--highlighted) {\n        opacity: $muted-group-opacity;\n        filter: $muted-group-filter;\n      }\n\n      &__box {\n        height: 1em;\n        width: 1em;\n        border-radius: 0.5em;\n        display: inline-block;\n        margin-right: $spacer * 0.5;\n      }\n    }\n  }\n\n  &__groups {\n    .stacked-bar-chart--has-constraint-height & {\n      height: 100%;\n      display: flex;\n      flex-direction: column;\n    }\n\n    &__item {\n      &__label {\n        width: 20%;\n        padding: $spacer * 0.5 0;\n\n        .stacked-bar-chart--label-above & {\n          width: 100%;\n          padding-bottom: 0;\n        }\n\n        &:empty {\n          display: none;\n        }\n      }\n\n      &__bars {\n        min-height: 100%;\n        width: 100%;\n\n        .stacked-bar-chart--has-constraint-height & {\n          height: calc(100% - 1.5rem);\n          min-height: calc(100% - 1.5rem);\n        }\n\n        .stacked-bar-chart--has-constraint-height.stacked-bar-chart--label-above\n          & {\n          height: auto;\n          min-height: auto;\n        }\n\n        &__item {\n          text-align: right;\n          transition: $muted-group-transition;\n          min-width: 1px;\n          min-height: 10px;\n          height: 100%;\n          display: flex;\n          flex-direction: row;\n          align-items: center;\n          justify-content: flex-end;\n\n          .stacked-bar-chart--has-constraint-height & {\n            height: auto;\n            align-self: stretch;\n          }\n\n          &--hidden {\n            display: none !important;\n          }\n\n          @for $i from 0 through ($quantile * length($colors)) {\n            &--#{$i}n {\n              background: var(--group-color-#{$i}n);\n            }\n          }\n\n          .stacked-bar-chart--has-highlights &:not(&--highlighted) {\n            opacity: $muted-group-opacity;\n            filter: $muted-group-filter;\n          }\n\n          .stacked-bar-chart--has-highlights &:not(&--highlighted) &__value {\n            visibility: hidden;\n          }\n\n          .stacked-bar-chart:not(.stacked-bar-chart--has-highlights)\n            &--value-hidden\n            &__value,\n          .stacked-bar-chart:not(.stacked-bar-chart--has-highlights)\n            &--value-pushed\n            &__value {\n            visibility: hidden;\n          }\n\n          &--value-overflow &__value {\n            color: $body-color;\n            transform: translateX(100%);\n          }\n\n          &--value-pushed {\n            justify-content: flex-start;\n          }\n\n          &--value-pushed &__value {\n            color: $body-color;\n            transform: translateX(-100%);\n          }\n\n          &__value {\n            white-space: nowrap;\n            color: white;\n            pointer-events: none;\n            display: inline-block;\n          }\n        }\n      }\n    }\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport get from 'lodash/get'\nimport identity from 'lodash/identity'\nimport isArray from 'lodash/isArray'\nimport kebabCase from 'lodash/kebabCase'\nimport { ComponentPublicInstance, computed, nextTick, ref, toRef, watch } from 'vue'\nimport { getChartProps, useChart } from '@/composables/useChart'\nimport { useStackedChart } from '@/composables/useStackedChart'\n\ndefineOptions({\n  name: 'StackedBarChart'\n})\n\nexport interface StackedBarChartProps {\n  /**\n   * Colors for each bar segment/key.\n   */\n  barColors?: string[]\n  /**\n   * Fixed height for the chart in pixels. If not set, height is calculated automatically.\n   */\n  fixedHeight?: number | null\n  /**\n   * Display names for each key in the legend.\n   */\n  groups?: string[]\n  /**\n   * Hide bar segments that have no values.\n   */\n  hideEmptyValues?: boolean\n  /**\n   * Hide the legend.\n   */\n  hideLegend?: boolean\n  /**\n   * List of keys to highlight initially.\n   */\n  highlights?: string[]\n  /**\n   * Delay in milliseconds before highlighting a key on hover.\n   */\n  highlightDelay?: number\n  /**\n   * Field names in data objects containing values for each stacked segment.\n   */\n  keys?: string[]\n  /**\n   * Position labels above the bars instead of to the left.\n   */\n  labelAbove?: boolean\n  /**\n   * Field name in data objects containing the row label.\n   */\n  labelField?: string\n  /**\n   * Minimum height for each bar row in pixels.\n   */\n  minBarHeight?: number\n  /**\n   * Maximum height for each bar row in pixels.\n   */\n  maxBarHeight?: number\n  /**\n   * Calculate bar widths relative to each row's total instead of the global maximum.\n   */\n  relative?: boolean\n  /**\n   * Delay in milliseconds before restoring highlights to initial state.\n   */\n  restoreHighlightDelay?: number\n  /**\n   * List of row labels to highlight.\n   */\n  rowHighlights?: string[]\n  /**\n   * Field name(s) to sort the data by.\n   */\n  sortBy?: string | string[] | null\n  /**\n   * Formatter function or d3 format string for bar values.\n   */\n  xAxisTickFormat?: ((v: any) => string) | string\n  /**\n   * Data to display, either as a URL string to fetch or an array of objects.\n   */\n  data?: string | Record<string, unknown>[] | null\n  /**\n   * Type of data file when fetching from URL.\n   */\n  dataUrlType?: 'json' | 'csv' | 'tsv'\n  /**\n   * Aspect ratio (height/width) for the chart.\n   */\n  chartHeightRatio?: number\n  /**\n   * Enable social mode for optimal display when sharing on social media.\n   */\n  socialMode?: boolean\n  /**\n   * Aspect ratio to use in social mode.\n   */\n  socialModeRatio?: number\n}\n\nconst props = withDefaults(defineProps<StackedBarChartProps>(), {\n  barColors: () => [],\n  fixedHeight: null,\n  groups: () => [],\n  hideEmptyValues: false,\n  hideLegend: false,\n  highlights: () => [],\n  highlightDelay: 400,\n  keys: () => [],\n  labelAbove: false,\n  labelField: 'label',\n  minBarHeight: 16,\n  maxBarHeight: 60,\n  relative: false,\n  restoreHighlightDelay: 50,\n  rowHighlights: () => [],\n  sortBy: null,\n  xAxisTickFormat: () => identity,\n  data: null,\n  dataUrlType: 'json',\n  chartHeightRatio: undefined,\n  socialMode: false,\n  socialModeRatio: 5 / 4\n})\n\nconst emit = defineEmits<{\n  loaded: [data: Record<string, unknown>[] | null]\n  resized: []\n}>()\n\nconst highlightedKeys = ref(props.highlights)\nconst highlightTimeout = ref<ReturnType<typeof setTimeout> | undefined>(undefined)\nconst isLoaded = ref(false)\nconst el = ref<ComponentPublicInstance<HTMLElement> | null>(null)\n\nconst {\n  loadedData,\n  mounted,\n  baseHeightRatio,\n  d3Formatter,\n  dataHasHighlights\n} = useChart<Record<string, unknown>[]>(el, getChartProps(props), { emit }, isLoaded)\n\nconst {\n  sortedData,\n  discoveredKeys,\n  colorScale,\n  totalRowValue,\n  maxStackValue: maxValue,\n  groupName\n} = useStackedChart({\n  loadedData,\n  isLoaded,\n  sortBy: toRef(() => props.sortBy),\n  keys: toRef(() => props.keys),\n  labelField: toRef(() => props.labelField),\n  groups: toRef(() => props.groups),\n  barColors: toRef(() => props.barColors)\n})\n\nconst hasConstraintHeight = computed(() => {\n  return props.fixedHeight !== null || props.socialMode\n})\n\nconst hasHighlights = computed(() => {\n  return !!highlightedKeys.value.length\n})\n\nconst hasRowHighlights = computed(() => {\n  return !!props.rowHighlights.length\n})\n\nconst hasAnyHighlights = computed(() => {\n  return hasHighlights.value || hasRowHighlights.value || dataHasHighlights.value\n})\n\nconst height = computed(() => {\n  if (props.fixedHeight !== null) {\n    return `${props.fixedHeight}px`\n  }\n  return props.socialMode && mounted.value && el.value\n    ? `${el.value.offsetWidth * baseHeightRatio.value}px`\n    : 'auto'\n})\n\nfunction normalizeKey(key: string) {\n  return kebabCase(key)\n}\n\nfunction highlight(key: string) {\n  highlightedKeys.value = [key]\n}\n\nfunction restoreHighlights() {\n  clearTimeout(highlightTimeout.value)\n  const delay = props.restoreHighlightDelay\n  highlightTimeout.value = setTimeout(\n    () => (highlightedKeys.value = props.highlights),\n    delay\n  )\n}\n\nfunction delayHighlight(key: string) {\n  clearTimeout(highlightTimeout.value)\n  const isDelayed = !hasHighlights.value\n  const delay = isDelayed ? props.highlightDelay : 0\n  highlightTimeout.value = setTimeout(() => highlight(key), delay)\n}\n\nfunction isHighlighted(key: string) {\n  return highlightedKeys.value.indexOf(key) > -1\n}\n\nfunction isRowHighlighted(i: number | string) {\n  const row = get(sortedData.value, [i, props.labelField], null)\n  return (\n    isArray(props.rowHighlights)\n    && props.rowHighlights?.includes(row)\n    && !highlightedKeys.value.length\n  )\n}\n\nfunction barStyle(i: number | string, key: string) {\n  const value = sortedData.value[i as number][key]\n  let totalWidth = props.relative ? totalRowValue(i) : maxValue.value\n  if (!totalWidth) {\n    console.error('totalWidth as divider cannot be ' + totalWidth)\n    totalWidth = 100\n  }\n  const width = `${100 * (value / totalWidth)}%`\n  const backgroundColor = colorScale.value(key)\n  return { width, backgroundColor }\n}\n\ninterface StackItem {\n  key: string\n  barEdge: number\n  barWidth: number\n  rowEdge: number\n  valueWidth: number\n  overflow: boolean\n  pushed: boolean\n}\n\nfunction stackBarAndValue(i: number | string): StackItem[] {\n  if (!mounted.value) {\n    return []\n  }\n  const stack: StackItem[] = discoveredKeys.value.map((key: string) => {\n    const { bar, row, value } = queryBarAndValue(i as number, key)\n    if (!bar || !row || !value) {\n      throw new Error('Values not retrieved')\n    }\n    const barEdge = bar.getBoundingClientRect().left + bar.offsetWidth\n    const barWidth = bar.offsetWidth\n    const rowEdge = row.getBoundingClientRect().left + row.offsetWidth\n    const valueWidth = value.offsetWidth\n    const overflow = false\n    const pushed = false\n    return { key, barEdge, barWidth, rowEdge, valueWidth, overflow, pushed }\n  })\n  return stack.map((desc, index) => {\n    desc.overflow = desc.valueWidth >= desc.barWidth\n    if (!desc.overflow && index > 0) {\n      const prevDesc = stack[index - 1]\n      const bothValuesWidth = desc.valueWidth + prevDesc.valueWidth\n      desc.overflow = prevDesc.overflow && desc.barWidth < bothValuesWidth\n    }\n    desc.pushed = desc.overflow && desc.barEdge + desc.valueWidth > desc.rowEdge\n    return desc\n  })\n}\n\nfunction queryBarAndValue(i: number, key: string) {\n  const root = el.value as unknown as HTMLElement\n  if (!mounted.value || !root) {\n    return {}\n  }\n  const barClass = 'stacked-bar-chart__groups__item__bars__item'\n  const rowSelector = '.stacked-bar-chart__groups__item'\n  const row = root.querySelectorAll(rowSelector)[i] as HTMLElement\n  const normalizedKey = normalizeKey(key)\n  const barSelector = `.${barClass}--${normalizedKey}`\n  const bar = row?.querySelector(barSelector) as HTMLElement\n  const valueSelector = `.${barClass}__value`\n  const value = bar?.querySelector(valueSelector) as HTMLElement\n  return { bar, row, value }\n}\n\ninterface LabelState {\n  overflow: boolean\n  pushed: boolean\n  hidden: boolean\n}\n\nconst labelStates = ref<Record<string, LabelState>>({})\n\nfunction labelStateKey(i: number | string, key: string) {\n  return `${i}-${key}`\n}\n\nfunction computeLabelStates() {\n  const root = el.value as unknown as HTMLElement\n  if (!root || !mounted.value || !sortedData.value?.length) return\n\n  const states: Record<string, LabelState> = {}\n\n  for (let i = 0; i < sortedData.value.length; i++) {\n    try {\n      const stack = stackBarAndValue(i)\n      for (const item of stack) {\n        states[labelStateKey(i, item.key)] = {\n          overflow: item.overflow,\n          pushed: item.pushed,\n          hidden: false\n        }\n      }\n      for (let j = 0; j < stack.length; j++) {\n        const nextItem = stack[j + 1]\n        if (nextItem && stack[j].overflow && nextItem.overflow) {\n          states[labelStateKey(i, stack[j].key)].hidden = true\n        }\n      }\n    }\n    catch {\n      // If measurement fails for a row, skip it\n    }\n  }\n\n  labelStates.value = states\n}\n\nfunction hasValueOverflow(i: number | string, key: string) {\n  return labelStates.value[labelStateKey(i, key)]?.overflow ?? false\n}\n\nfunction hasValuePushed(i: number | string, key: string) {\n  return labelStates.value[labelStateKey(i, key)]?.pushed ?? false\n}\n\nfunction hasValueHidden(i: number | string, key: string) {\n  return labelStates.value[labelStateKey(i, key)]?.hidden ?? false\n}\n\nfunction isHidden(i: number | string, key: string) {\n  return props.hideEmptyValues && !sortedData.value[i as number][key]\n}\n\nfunction formatXDatum(d: string) {\n  return d3Formatter(d, props.xAxisTickFormat)\n}\n\nwatch(() => props.highlights, (newHighlights: string[]) => {\n  highlightedKeys.value = newHighlights\n})\n\n// Compute label states after DOM layout\nwatch(sortedData, async () => {\n  await nextTick()\n  computeLabelStates()\n})\n</script>\n\n<template>\n  <div\n    ref=\"el\"\n    :class=\"{\n      'stacked-bar-chart--social-mode': socialMode,\n      'stacked-bar-chart--label-above': labelAbove,\n      'stacked-bar-chart--has-highlights': hasAnyHighlights,\n      'stacked-bar-chart--has-constraint-height': hasConstraintHeight,\n      'stacked-bar-chart--has-label-above': labelAbove\n    }\"\n    :style=\"{ height }\"\n    class=\"stacked-bar-chart d-flex flex-column\"\n  >\n    <div class=\"d-flex align-items-center\">\n      <slot name=\"header-left\">\n        <ul\n          v-if=\"!hideLegend\"\n          class=\"stacked-bar-chart__legend list-inline mx-0 mt-0 mb-2\"\n        >\n          <li\n            v-for=\"key in discoveredKeys\"\n            :key=\"key\"\n            :class=\"{\n              'stacked-bar-chart__legend__item--highlighted': isHighlighted(key)\n            }\"\n            class=\"stacked-bar-chart__legend__item list-inline-item d-inline-flex\"\n            @mouseleave=\"restoreHighlights()\"\n            @mouseover=\"delayHighlight(key)\"\n          >\n            <span\n              :style=\"{ 'background-color': colorScale(key) }\"\n              class=\"stacked-bar-chart__legend__item__box\"\n            />\n            {{ groupName(key) }}\n          </li>\n        </ul>\n      </slot>\n      <slot name=\"header-right\" />\n    </div>\n    <div class=\"stacked-bar-chart__groups\">\n      <div\n        v-for=\"(datum, i) in sortedData\"\n        :key=\"i\"\n        :class=\"{ 'flex-column': labelAbove, }\"\n        class=\"stacked-bar-chart__groups__item border-bottom flex-fill d-flex align-items-center\"\n      >\n        <div\n          :class=\"{ 'w-100': labelAbove }\"\n          class=\"stacked-bar-chart__groups__item__label me-1 small\"\n        >\n          {{ datum[props.labelField] }}\n        </div>\n        <div\n          class=\"stacked-bar-chart__groups__item__bars my-1 d-flex flex-grow-1 align-items-center\"\n        >\n          <div\n            v-for=\"(key, j) in discoveredKeys\"\n            :key=\"j\"\n            :class=\"{\n              [`stacked-bar-chart__groups__item__bars__item--${normalizeKey(key)}`]: true,\n              [`stacked-bar-chart__groups__item__bars__item--${j}n`]: true,\n              'stacked-bar-chart__groups__item__bars__item--highlighted': isHighlighted(key) || isRowHighlighted(i),\n              'stacked-bar-chart__groups__item__bars__item--hidden': isHidden(i, key),\n              'stacked-bar-chart__groups__item__bars__item--value-overflow': hasValueOverflow(i, key),\n              'stacked-bar-chart__groups__item__bars__item--value-pushed': hasValuePushed(i, key),\n              'stacked-bar-chart__groups__item__bars__item--value-hidden': hasValueHidden(i, key)\n            }\"\n            :style=\"barStyle(i, key)\"\n            class=\"stacked-bar-chart__groups__item__bars__item\"\n            @mouseleave=\"restoreHighlights()\"\n            @mouseover=\"delayHighlight(key)\"\n          >\n            <div class=\"stacked-bar-chart__groups__item__bars__item__value p-1\">\n              {{ formatXDatum(datum[key]) }}\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\">\n\n.stacked-bar-chart {\n  $muted-group-opacity: 0.2;\n  $muted-group-filter: grayscale(30%) brightness(10%);\n  $muted-group-transition:\n    opacity 0.3s,\n    filter 0.3s;\n  $colors: $primary, $info, $warning;\n  $quantile: 3;\n\n  @each $start-color in $colors {\n    $i: index($colors, $start-color) - 1;\n    $end-color: mix($start-color, text-contrast($start-color), 20%);\n\n    @for $j from ($quantile * $i) through ($quantile * $i + $quantile - 1) {\n      $amount: ($j % $quantile) * math.div(100%, $quantile);\n      --group-color-#{$j}n: #{mix($end-color, $start-color, $amount)};\n    }\n  }\n\n  &__legend {\n    &__item {\n      display: inline-flex;\n      flex-direction: row;\n      align-items: center;\n      padding-right: $spacer * 0.5;\n      transition: $muted-group-transition;\n\n      @for $i from 0 through ($quantile * length($colors)) {\n        &:nth-child(#{$i + 1}n) &__box {\n          background-color: var(--group-color-#{$i}n);\n        }\n      }\n\n      .stacked-bar-chart--has-highlights &:not(&--highlighted) {\n        opacity: $muted-group-opacity;\n        filter: $muted-group-filter;\n      }\n\n      &__box {\n        height: 1em;\n        width: 1em;\n        border-radius: 0.5em;\n        display: inline-block;\n        margin-right: $spacer * 0.5;\n      }\n    }\n  }\n\n  &__groups {\n    .stacked-bar-chart--has-constraint-height & {\n      height: 100%;\n      display: flex;\n      flex-direction: column;\n    }\n\n    &__item {\n      &__label {\n        width: 20%;\n        padding: $spacer * 0.5 0;\n\n        .stacked-bar-chart--label-above & {\n          width: 100%;\n          padding-bottom: 0;\n        }\n\n        &:empty {\n          display: none;\n        }\n      }\n\n      &__bars {\n        min-height: 100%;\n        width: 100%;\n\n        .stacked-bar-chart--has-constraint-height & {\n          height: calc(100% - 1.5rem);\n          min-height: calc(100% - 1.5rem);\n        }\n\n        .stacked-bar-chart--has-constraint-height.stacked-bar-chart--label-above\n          & {\n          height: auto;\n          min-height: auto;\n        }\n\n        &__item {\n          text-align: right;\n          transition: $muted-group-transition;\n          min-width: 1px;\n          min-height: 10px;\n          height: 100%;\n          display: flex;\n          flex-direction: row;\n          align-items: center;\n          justify-content: flex-end;\n\n          .stacked-bar-chart--has-constraint-height & {\n            height: auto;\n            align-self: stretch;\n          }\n\n          &--hidden {\n            display: none !important;\n          }\n\n          @for $i from 0 through ($quantile * length($colors)) {\n            &--#{$i}n {\n              background: var(--group-color-#{$i}n);\n            }\n          }\n\n          .stacked-bar-chart--has-highlights &:not(&--highlighted) {\n            opacity: $muted-group-opacity;\n            filter: $muted-group-filter;\n          }\n\n          .stacked-bar-chart--has-highlights &:not(&--highlighted) &__value {\n            visibility: hidden;\n          }\n\n          .stacked-bar-chart:not(.stacked-bar-chart--has-highlights)\n            &--value-hidden\n            &__value,\n          .stacked-bar-chart:not(.stacked-bar-chart--has-highlights)\n            &--value-pushed\n            &__value {\n            visibility: hidden;\n          }\n\n          &--value-overflow &__value {\n            color: $body-color;\n            transform: translateX(100%);\n          }\n\n          &--value-pushed {\n            justify-content: flex-start;\n          }\n\n          &--value-pushed &__value {\n            color: $body-color;\n            transform: translateX(-100%);\n          }\n\n          &__value {\n            white-space: nowrap;\n            color: white;\n            pointer-events: none;\n            display: inline-block;\n          }\n        }\n      }\n    }\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { axisLeft } from 'd3-axis'\nimport { scaleLinear } from 'd3-scale'\nimport { select } from 'd3-selection'\nimport get from 'lodash/get'\nimport identity from 'lodash/identity'\nimport {\n  ComponentPublicInstance,\n  computed,\n  getCurrentInstance,\n  ref,\n  nextTick,\n  toRef,\n  watch\n} from 'vue'\nimport { getChartProps, useChart } from '@/composables/useChart'\nimport { useStackedChart } from '@/composables/useStackedChart'\n\ndefineOptions({\n  name: 'StackedColumnChart'\n})\n\nexport interface StackedColumnChartProps {\n  /**\n   * Field of each object containing data (for each group)\n   */\n  keys?: string[]\n  /**\n   * Group name to display in the legend\n   */\n  groups?: string[]\n  /**\n   * Colors of each bar group\n   */\n  barColors?: string[]\n  /**\n   * Max with of each bar.\n   */\n  barMaxWidth?: string\n  /**\n   * Hide bars that have no values.\n   */\n  hideEmptyValues?: boolean\n  /**\n   * Hide the legend.\n   */\n  hideLegend?: boolean\n  /**\n   * Enforce the height of the chart (regardless of the width or number of row)\n   */\n  fixedHeight?: number | null\n  /**\n   * Function to apply to format x-axis ticks\n   */\n  xAxisTickFormat?: ((v: any) => string) | string\n  /**\n   * Function to apply to format y-axis ticks (bars value). It can be a\n   * function returning the formatted value or a d3's formatter string.\n   */\n  yAxisTickFormat?: ((v: any) => string) | string\n  /**\n   * Padding on y-axis ticks\n   */\n  yAxisTickPadding?: number\n  /**\n   * Field containing the label for each column\n   */\n  labelField?: string\n  /**\n   * Sort groups by one or several keys.\n   */\n  sortBy?: string | string[] | null\n  /**\n   * Column height is relative to each group's total\n   */\n  relative?: boolean\n  /**\n   * A list of highlighted groups\n   */\n  highlights?: string[]\n  /**\n   * Delay to apply when set the first highlight\n   */\n  highlightDelay?: number\n  /**\n   * A list of entire column to highlight\n   */\n  columnHighlights?: string[]\n  /**\n   * Delay to apply when restoring highlights to initial state\n   */\n  restoreHighlightDelay?: number\n  /**\n   * Deactivate direct labeling on bars\n   */\n  noDirectLabeling?: boolean\n  /**\n   * Set max value instead of extracting it from the data.\n   */\n  maxValue?: number | null\n  /**\n   * Function to define tooltip content.\n   */\n  tooltipDisplay?: (params: { value?: any, formattedKey: string, formattedValue: string, key?: string }) => string\n  /**\n   * Hide bar tooltips\n   */\n  noTooltips?: boolean\n  data?: string | Record<string, unknown>[] | null\n  dataUrlType?: 'json' | 'csv' | 'tsv'\n  chartHeightRatio?: number\n  socialMode?: boolean\n  socialModeRatio?: number\n}\n\nconst props = withDefaults(defineProps<StackedColumnChartProps>(), {\n  keys: () => [],\n  groups: () => [],\n  barColors: () => [],\n  barMaxWidth: '100%',\n  hideEmptyValues: false,\n  hideLegend: false,\n  fixedHeight: null,\n  xAxisTickFormat: () => identity,\n  yAxisTickFormat: () => identity,\n  yAxisTickPadding: 10,\n  labelField: 'date',\n  sortBy: null,\n  relative: false,\n  highlights: () => [],\n  highlightDelay: 400,\n  columnHighlights: () => [],\n  restoreHighlightDelay: 50,\n  noDirectLabeling: false,\n  maxValue: null,\n  tooltipDisplay: ({ formattedKey, formattedValue }: { formattedKey: string, formattedValue: string }) => {\n    return `<h6 class=\"mb-0\">${formattedKey}</h6><div>${formattedValue}</div>`\n  },\n  noTooltips: false,\n  data: null,\n  dataUrlType: 'json',\n  chartHeightRatio: undefined,\n  socialMode: false,\n  socialModeRatio: 5 / 4\n})\n\nconst emit = defineEmits<{\n  loaded: [data: Record<string, unknown>[] | null]\n  resized: []\n}>()\n\nconst width = ref(0)\nconst height = ref(0)\nconst leftAxisRedrawCount = ref(0)\nconst leftAxisHeight = ref(0)\nconst highlightedKeys = ref(props.highlights)\nconst highlightTimeout = ref<ReturnType<typeof setTimeout> | undefined>(undefined)\nconst isLoaded = ref(false)\nconst el = ref<ComponentPublicInstance<HTMLElement> | null>(null)\n\nconst {\n  elementsMaxBBox,\n  baseHeightRatio,\n  loadedData,\n  mounted,\n  d3Formatter\n} = useChart<Record<string, unknown>[]>(el, getChartProps(props), { emit }, isLoaded, setSizes)\n\nconst {\n  sortedData,\n  discoveredKeys,\n  colorScale,\n  totalRowValue,\n  maxStackValue,\n  groupName\n} = useStackedChart({\n  loadedData,\n  isLoaded,\n  sortBy: toRef(() => props.sortBy),\n  keys: toRef(() => props.keys),\n  labelField: toRef(() => props.labelField),\n  groups: toRef(() => props.groups),\n  barColors: toRef(() => props.barColors)\n})\n\nconst hasHighlights = computed(() => {\n  return !!highlightedKeys.value.length\n})\n\nconst hasColumnHighlights = computed(() => {\n  return !!props.columnHighlights.length\n})\n\nconst leftScale = computed(() => {\n  return scaleLinear()\n    .domain([0, maxRowValue.value])\n    .range([leftAxisHeight.value, 0])\n})\n\nconst leftAxis = computed(() => {\n  return axisLeft(leftScale.value)\n    // d3-axis' domain type is NumberValue (number | { valueOf(): number }),\n    // not the plain number d3Formatter expects.\n    .tickFormat(d => String(d3Formatter(Number(d), props.yAxisTickFormat)))\n    .tickSize(Math.max(0, width.value - leftAxisLabelsWidth.value))\n    .tickPadding(props.yAxisTickPadding)\n})\n\nconst leftAxisLabelsWidth = computed((): number => {\n  // Track redraw counter to re-measure after axis text is created in the DOM\n  void leftAxisRedrawCount.value\n  const selector = '.stacked-column-chart__left-axis__canvas .tick text'\n  const defaultWidth = 0\n  return (\n    (elementsMaxBBox({ selector, defaultWidth }).width ?? defaultWidth)\n    + props.yAxisTickPadding\n  )\n})\n\nconst leftAxisCanvas = computed(() => {\n  return select(el.value)\n    .select('.stacked-column-chart__left-axis__canvas')\n})\n\nconst paddedStyle = computed(() => {\n  return {\n    marginLeft: props.noDirectLabeling\n      ? `${leftAxisLabelsWidth.value + props.yAxisTickPadding}px`\n      : 0\n  }\n})\n\nconst barTooltipDelay = computed(() => {\n  return hasHighlights.value ? 0 : props.highlightDelay\n})\n\nconst maxRowValue = computed(() => {\n  return props.maxValue ?? (maxStackValue.value as number)\n})\n\nfunction setSizes() {\n  if (!el.value) {\n    return\n  }\n  width.value = el.value.offsetWidth\n  height.value\n    = props.fixedHeight !== null\n      ? props.fixedHeight\n      : width.value * baseHeightRatio.value\n}\n\nfunction highlight(key: string) {\n  highlightedKeys.value = [key]\n}\n\nfunction restoreHighlights() {\n  clearTimeout(highlightTimeout.value)\n  const delay = props.restoreHighlightDelay\n  // Delay the restoration so it can be cancelled by a new highlight\n  highlightTimeout.value = setTimeout(\n    () => (highlightedKeys.value = props.highlights),\n    delay\n  )\n}\n\nfunction delayHighlight(key: string) {\n  clearTimeout(highlightTimeout.value)\n  // Reduce the delay to zero if there is already a highlighted key\n  const isDelayed = !hasHighlights.value\n  const delay = isDelayed ? props.highlightDelay : 0\n  highlightTimeout.value = setTimeout(() => highlight(key), delay)\n}\n\nfunction isHighlighted(key: string) {\n  return highlightedKeys.value.indexOf(key) > -1\n}\n\nfunction isColumnHighlighted(i: string | number) {\n  const column = get(sortedData.value, [i, props.labelField], null)\n  return (\n    props.columnHighlights.includes(column) && !highlightedKeys.value.length\n  )\n}\n\nfunction barStyle(i: string | number, key: string) {\n  const value = sortedData.value[i as number][key]\n  let totalWidth = props.relative ? totalRowValue(i) : maxRowValue.value\n  if (!totalWidth) {\n    console.error('totalWidth as divider cannot be ' + totalWidth)\n    totalWidth = 100\n  }\n  const height = `${100 * (value / totalWidth)}%`\n  const backgroundColor = colorScale.value(key)\n  const maxWidth = props.barMaxWidth\n  return { maxWidth, height, backgroundColor }\n}\n\nfunction barTitle(i: string | number, key: string) {\n  const value = sortedData.value[i as number][key]\n  const formattedValue = String(d3Formatter(value, props.yAxisTickFormat))\n  const formattedKey = groupName(key)\n  return props.tooltipDisplay({ value, formattedValue, key, formattedKey })\n}\n\nfunction barUniqueId(i: string | number, key: string) {\n  const { uid } = getCurrentInstance()!\n  return `bar-${uid}-${i}-${key}`\n}\n\ninterface StackItem {\n  key: string\n  barEdge: number\n  barHeight: number\n  rowEdge: number\n  valueHeight: number\n  overflow: boolean\n  pushed: boolean\n}\n\nfunction stackBarAndValue(i: string | number): StackItem[] {\n  if (!sortedData.value) {\n    return []\n  }\n  // Collect sizes first\n  const stack: StackItem[] = discoveredKeys.value.map((key: string) => {\n    const { bar, row, value } = queryBarAndValue(i as number, key)\n    if (!bar || !row || !value) {\n      throw new Error('Empty values for bar, row or value')\n    }\n    const barEdge = bar.getBoundingClientRect().top + bar.offsetHeight\n    const barHeight = bar.offsetHeight\n    const rowEdge = row.getBoundingClientRect().top + row.offsetHeight\n    const valueHeight = value.offsetHeight\n    return {\n      key,\n      barEdge,\n      barHeight,\n      rowEdge,\n      valueHeight,\n      overflow: false,\n      pushed: false\n    }\n  })\n  // Infer value's display\n  return stack.map((desc: StackItem, index: number) => {\n    desc.overflow = desc.valueHeight >= desc.barHeight\n    if (index > 0) {\n      const prevDesc = stack[index - 1]\n      const bothValuesHeight = desc.valueHeight + prevDesc.valueHeight\n      desc.overflow\n        = desc.overflow\n          || (prevDesc.overflow && desc.barHeight < bothValuesHeight)\n    }\n    desc.pushed\n      = desc.barEdge + desc.valueHeight > desc.rowEdge && desc.overflow\n    return desc\n  })\n}\n\nfunction queryBarAndValue(i: number, key: string) {\n  const root = el.value as unknown as HTMLElement\n  if (!mounted.value || !root) {\n    return {}\n  }\n  const rowSelector = '.stacked-column-chart__groups__item'\n  const row = root.querySelectorAll(rowSelector)[i] as HTMLElement\n  const barSelector = `.stacked-column-chart__groups__item__bars__item--${key}`\n  const bar = row.querySelector(barSelector) as HTMLElement\n  const valueSelector = '.stacked-column-chart__groups__item__bars__item__value'\n  const value = bar.querySelector(valueSelector) as HTMLElement\n  return { bar, row, value }\n}\n\nfunction isHidden(i: string | number, key: string) {\n  return props.hideEmptyValues && !sortedData.value[i as number][key]\n}\n\ninterface LabelState {\n  overflow: boolean\n  pushed: boolean\n  hidden: boolean\n}\n\nconst labelStates = ref<Record<string, LabelState>>({})\n\nfunction labelStateKey(i: number | string, key: string) {\n  return `${i}-${key}`\n}\n\nfunction computeLabelStates() {\n  const root = el.value as unknown as HTMLElement\n  if (!root || !mounted.value || !sortedData.value?.length) return\n\n  const states: Record<string, LabelState> = {}\n\n  for (let i = 0; i < sortedData.value.length; i++) {\n    try {\n      const stack = stackBarAndValue(i)\n      for (const item of stack) {\n        states[labelStateKey(i, item.key)] = {\n          overflow: item.overflow,\n          pushed: item.pushed,\n          hidden: false\n        }\n      }\n      // A value is hidden when both it and the next key overflow\n      for (let j = 0; j < stack.length; j++) {\n        const nextItem = stack[j + 1]\n        if (nextItem && stack[j].overflow && nextItem.overflow) {\n          states[labelStateKey(i, stack[j].key)].hidden = true\n        }\n      }\n    }\n    catch {\n      // If measurement fails for a row, skip it\n    }\n  }\n\n  labelStates.value = states\n}\n\nfunction hasValueOverflow(i: string | number, key: string) {\n  return labelStates.value[labelStateKey(i, key)]?.overflow ?? false\n}\n\nfunction hasValuePushed(i: string | number, key: string) {\n  return labelStates.value[labelStateKey(i, key)]?.pushed ?? false\n}\n\nfunction hasValueHidden(i: string | number, key: string) {\n  return labelStates.value[labelStateKey(i, key)]?.hidden ?? false\n}\n\nfunction formatXDatum(d: string) {\n  return d3Formatter(d, props.xAxisTickFormat)\n}\n\nfunction formatYDatum(d: string) {\n  return d3Formatter(d, props.yAxisTickFormat)\n}\n\nwatch(\n  () => props.highlights,\n  (newHighlights: string[]) => {\n    highlightedKeys.value = newHighlights\n  }\n)\n\nwatch(sortedData, async () => {\n  await nextTick()\n  const root = el.value as unknown as HTMLElement\n  if (!root) return\n  // This must be set after the column have been rendered\n  const element = root.querySelector('.stacked-column-chart__groups__item__bars') as HTMLElement\n  // Update the left axis only if the bars exists\n  if (element) {\n    leftAxisHeight.value = element.offsetHeight\n    // First draw creates tick text in the DOM\n    leftAxisCanvas.value.call(leftAxis.value as any)\n    // Invalidate leftAxisLabelsWidth so it re-measures the new tick text\n    leftAxisRedrawCount.value++\n    await nextTick()\n    // Second draw uses the correct tickSize and margins\n    leftAxisCanvas.value.call(leftAxis.value as any)\n  }\n  // Compute label overflow/pushed/hidden states after DOM layout\n  computeLabelStates()\n})\n</script>\n\n<template>\n  <div\n    ref=\"el\"\n    :style=\"{ height: `${height}px` }\"\n    class=\"stacked-column-chart d-flex flex-column\"\n    :class=\"{\n      'stacked-column-chart--social-mode': socialMode,\n      'stacked-column-chart--has-highlights':\n        hasHighlights || hasColumnHighlights,\n      'stacked-column-chart--no-direct-labeling': noDirectLabeling\n    }\"\n  >\n    <ul\n      v-if=\"!hideLegend\"\n      class=\"stacked-column-chart__legend list-inline\"\n    >\n      <li\n        v-for=\"key in discoveredKeys\"\n        :key=\"key\"\n        class=\"stacked-column-chart__legend__item list-inline-item d-inline-flex\"\n        :class=\"{\n          'stacked-column-chart__legend__item--highlighted': isHighlighted(key)\n        }\"\n        @mouseover=\"delayHighlight(key)\"\n        @mouseleave=\"restoreHighlights()\"\n      >\n        <span\n          class=\"stacked-column-chart__legend__item__box\"\n          :style=\"{ 'background-color': colorScale(key) }\"\n        />\n        <span class=\"stacked-column-chart__legend__item__label\">{{ groupName(key) }}</span>\n      </li>\n    </ul>\n    <div class=\"stacked-column-chart__chart d-flex flex-column flex-grow-1 position-relative\">\n      <svg\n        v-show=\"noDirectLabeling\"\n        :width=\"width + 'px'\"\n        :height=\"(leftAxisHeight + 20) + 'px'\"\n        class=\"stacked-column-chart__left-axis\"\n      >\n        <g\n          class=\"stacked-column-chart__left-axis__canvas\"\n          :transform=\"`translate(${width}, 0)`\"\n        />\n      </svg>\n      <div\n        class=\"stacked-column-chart__groups d-flex flex-grow-1 overflow-hidden\"\n        :style=\"paddedStyle\"\n      >\n        <div\n          v-for=\"(datum, i) in sortedData\"\n          :key=\"i\"\n          class=\"stacked-column-chart__groups__item flex-grow-1 d-flex flex-column text-center\"\n        >\n          <div\n            class=\"stacked-column-chart__groups__item__bars flex-grow-1 d-flex flex-column-reverse px-1 justify-content-start align-items-center\"\n          >\n            <div\n              v-for=\"(key, j) in discoveredKeys\"\n              :id=\"barUniqueId(i, key)\"\n              :key=\"j\"\n              class=\"stacked-column-chart__groups__item__bars__item\"\n              :class=\"{\n                [`stacked-column-chart__groups__item__bars__item--${key}`]: true,\n                [`stacked-column-chart__groups__item__bars__item--${j}n`]: true,\n                'stacked-column-chart__groups__item__bars__item--hidden': isHidden(i, key),\n                'stacked-column-chart__groups__item__bars__item--highlighted': isHighlighted(key) || isColumnHighlighted(i),\n                'stacked-column-chart__groups__item__bars__item--value-overflow': hasValueOverflow(i, key),\n                'stacked-column-chart__groups__item__bars__item--value-pushed': hasValuePushed(i, key),\n                'stacked-column-chart__groups__item__bars__item--value-hidden': hasValueHidden(i, key)\n              }\"\n              :style=\"barStyle(i, key)\"\n              @mouseover=\"delayHighlight(key)\"\n              @mouseleave=\"restoreHighlights()\"\n            >\n              <div\n                v-show=\"!noDirectLabeling\"\n                class=\"stacked-column-chart__groups__item__bars__item__value\"\n              >\n                {{ formatYDatum(datum[key]) }}\n              </div>\n              <teleport to=\"body\">\n                <b-tooltip\n                  v-if=\"!noTooltips\"\n                  :delay=\"barTooltipDelay\"\n                  :target=\"barUniqueId(i, key)\"\n                  placement=\"top\"\n                >\n                  <span v-html=\"barTitle(i, key)\" />\n                </b-tooltip>\n              </teleport>\n            </div>\n          </div>\n        </div>\n      </div>\n      <div\n        class=\"stacked-column-chart__labels d-flex\"\n        :style=\"paddedStyle\"\n      >\n        <div\n          v-for=\"(datum, i) in sortedData\"\n          :key=\"i\"\n          class=\"stacked-column-chart__groups__item__label flex-grow-1 small py-2 text-center\"\n        >\n          {{ formatXDatum(datum[labelField]) }}\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\">\n\n.stacked-column-chart {\n  $muted-group-opacity: 0.2;\n  $muted-group-filter: grayscale(30%) brightness(10%);\n  $muted-group-transition:\n    opacity 0.3s,\n    filter 0.3s;\n  $colors: $primary, $info, $warning;\n  $quantile: 3;\n\n  @each $start-color in $colors {\n    $i: index($colors, $start-color) - 1;\n    $end-color: mix($start-color, text-contrast($start-color), 20%);\n\n    @for $j from ($quantile * $i) through ($quantile * $i + $quantile - 1) {\n      $amount: ($j % $quantile) * math.div(100%, $quantile);\n      --group-color-#{$j}n: #{mix($end-color, $start-color, $amount)};\n    }\n  }\n\n  &__legend {\n    &__item {\n      display: inline-flex;\n      flex-direction: row;\n      align-items: center;\n      padding-right: $spacer * 0.5;\n\n      @for $i from 0 through ($quantile * length($colors)) {\n        &:nth-child(#{$i + 1}n) &__box {\n          background-color: var(--group-color-#{$i}n);\n        }\n      }\n\n      .stacked-column-chart--has-highlights &:not(&--highlighted) {\n        opacity: $muted-group-opacity;\n        filter: $muted-group-filter;\n      }\n\n      &__box {\n        height: 1em;\n        width: 1em;\n        border-radius: 0.5em;\n        display: inline-block;\n        margin-right: $spacer * 0.5;\n      }\n    }\n  }\n\n  &__left-axis {\n    position: absolute;\n    top: 0;\n    left: 0;\n\n    path {\n      display: none;\n    }\n\n    .tick {\n      line {\n        stroke: $border-color;\n      }\n\n      text {\n        font-family: $font-family-base;\n        font-size: $font-size-sm;\n        fill: currentColor;\n      }\n    }\n  }\n\n  &__groups {\n    &__item {\n      &__bars {\n        &__item {\n          width: 100%;\n          position: relative;\n          min-height: 1px;\n\n          @for $i from 0 through ($quantile * length($colors)) {\n            &--#{$i}n {\n              background: var(--group-color-#{$i}n);\n            }\n          }\n\n          &__value {\n            position: absolute;\n            top: 0;\n            left: 0;\n            width: 100%;\n            text-align: center;\n            white-space: nowrap;\n            color: #fff;\n          }\n\n          .stacked-column-chart--has-highlights &:not(&--highlighted) {\n            opacity: $muted-group-opacity;\n            filter: $muted-group-filter;\n          }\n\n          .stacked-column-chart--has-highlights &:not(&--highlighted) &__value {\n            visibility: hidden;\n          }\n\n          .stacked-column-chart:not(.stacked-column-chart--has-highlights)\n            &--value-hidden\n            &__value,\n          .stacked-column-chart:not(.stacked-column-chart--has-highlights)\n            &--value-pushed\n            &__value {\n            visibility: hidden;\n          }\n\n          &--hidden {\n            display: none;\n          }\n\n          &--value-overflow &__value {\n            color: $body-color;\n            transform: translateY(-100%);\n          }\n\n          &--value-pushed {\n            direction: ltr;\n          }\n\n          &--value-pushed &__value {\n            color: $body-color;\n            transform: translateY(100%);\n          }\n        }\n      }\n    }\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { axisLeft } from 'd3-axis'\nimport { scaleLinear } from 'd3-scale'\nimport { select } from 'd3-selection'\nimport get from 'lodash/get'\nimport identity from 'lodash/identity'\nimport {\n  ComponentPublicInstance,\n  computed,\n  getCurrentInstance,\n  ref,\n  nextTick,\n  toRef,\n  watch\n} from 'vue'\nimport { getChartProps, useChart } from '@/composables/useChart'\nimport { useStackedChart } from '@/composables/useStackedChart'\n\ndefineOptions({\n  name: 'StackedColumnChart'\n})\n\nexport interface StackedColumnChartProps {\n  /**\n   * Field of each object containing data (for each group)\n   */\n  keys?: string[]\n  /**\n   * Group name to display in the legend\n   */\n  groups?: string[]\n  /**\n   * Colors of each bar group\n   */\n  barColors?: string[]\n  /**\n   * Max with of each bar.\n   */\n  barMaxWidth?: string\n  /**\n   * Hide bars that have no values.\n   */\n  hideEmptyValues?: boolean\n  /**\n   * Hide the legend.\n   */\n  hideLegend?: boolean\n  /**\n   * Enforce the height of the chart (regardless of the width or number of row)\n   */\n  fixedHeight?: number | null\n  /**\n   * Function to apply to format x-axis ticks\n   */\n  xAxisTickFormat?: ((v: any) => string) | string\n  /**\n   * Function to apply to format y-axis ticks (bars value). It can be a\n   * function returning the formatted value or a d3's formatter string.\n   */\n  yAxisTickFormat?: ((v: any) => string) | string\n  /**\n   * Padding on y-axis ticks\n   */\n  yAxisTickPadding?: number\n  /**\n   * Field containing the label for each column\n   */\n  labelField?: string\n  /**\n   * Sort groups by one or several keys.\n   */\n  sortBy?: string | string[] | null\n  /**\n   * Column height is relative to each group's total\n   */\n  relative?: boolean\n  /**\n   * A list of highlighted groups\n   */\n  highlights?: string[]\n  /**\n   * Delay to apply when set the first highlight\n   */\n  highlightDelay?: number\n  /**\n   * A list of entire column to highlight\n   */\n  columnHighlights?: string[]\n  /**\n   * Delay to apply when restoring highlights to initial state\n   */\n  restoreHighlightDelay?: number\n  /**\n   * Deactivate direct labeling on bars\n   */\n  noDirectLabeling?: boolean\n  /**\n   * Set max value instead of extracting it from the data.\n   */\n  maxValue?: number | null\n  /**\n   * Function to define tooltip content.\n   */\n  tooltipDisplay?: (params: { value?: any, formattedKey: string, formattedValue: string, key?: string }) => string\n  /**\n   * Hide bar tooltips\n   */\n  noTooltips?: boolean\n  data?: string | Record<string, unknown>[] | null\n  dataUrlType?: 'json' | 'csv' | 'tsv'\n  chartHeightRatio?: number\n  socialMode?: boolean\n  socialModeRatio?: number\n}\n\nconst props = withDefaults(defineProps<StackedColumnChartProps>(), {\n  keys: () => [],\n  groups: () => [],\n  barColors: () => [],\n  barMaxWidth: '100%',\n  hideEmptyValues: false,\n  hideLegend: false,\n  fixedHeight: null,\n  xAxisTickFormat: () => identity,\n  yAxisTickFormat: () => identity,\n  yAxisTickPadding: 10,\n  labelField: 'date',\n  sortBy: null,\n  relative: false,\n  highlights: () => [],\n  highlightDelay: 400,\n  columnHighlights: () => [],\n  restoreHighlightDelay: 50,\n  noDirectLabeling: false,\n  maxValue: null,\n  tooltipDisplay: ({ formattedKey, formattedValue }: { formattedKey: string, formattedValue: string }) => {\n    return `<h6 class=\"mb-0\">${formattedKey}</h6><div>${formattedValue}</div>`\n  },\n  noTooltips: false,\n  data: null,\n  dataUrlType: 'json',\n  chartHeightRatio: undefined,\n  socialMode: false,\n  socialModeRatio: 5 / 4\n})\n\nconst emit = defineEmits<{\n  loaded: [data: Record<string, unknown>[] | null]\n  resized: []\n}>()\n\nconst width = ref(0)\nconst height = ref(0)\nconst leftAxisRedrawCount = ref(0)\nconst leftAxisHeight = ref(0)\nconst highlightedKeys = ref(props.highlights)\nconst highlightTimeout = ref<ReturnType<typeof setTimeout> | undefined>(undefined)\nconst isLoaded = ref(false)\nconst el = ref<ComponentPublicInstance<HTMLElement> | null>(null)\n\nconst {\n  elementsMaxBBox,\n  baseHeightRatio,\n  loadedData,\n  mounted,\n  d3Formatter\n} = useChart<Record<string, unknown>[]>(el, getChartProps(props), { emit }, isLoaded, setSizes)\n\nconst {\n  sortedData,\n  discoveredKeys,\n  colorScale,\n  totalRowValue,\n  maxStackValue,\n  groupName\n} = useStackedChart({\n  loadedData,\n  isLoaded,\n  sortBy: toRef(() => props.sortBy),\n  keys: toRef(() => props.keys),\n  labelField: toRef(() => props.labelField),\n  groups: toRef(() => props.groups),\n  barColors: toRef(() => props.barColors)\n})\n\nconst hasHighlights = computed(() => {\n  return !!highlightedKeys.value.length\n})\n\nconst hasColumnHighlights = computed(() => {\n  return !!props.columnHighlights.length\n})\n\nconst leftScale = computed(() => {\n  return scaleLinear()\n    .domain([0, maxRowValue.value])\n    .range([leftAxisHeight.value, 0])\n})\n\nconst leftAxis = computed(() => {\n  return axisLeft(leftScale.value)\n    // d3-axis' domain type is NumberValue (number | { valueOf(): number }),\n    // not the plain number d3Formatter expects.\n    .tickFormat(d => String(d3Formatter(Number(d), props.yAxisTickFormat)))\n    .tickSize(Math.max(0, width.value - leftAxisLabelsWidth.value))\n    .tickPadding(props.yAxisTickPadding)\n})\n\nconst leftAxisLabelsWidth = computed((): number => {\n  // Track redraw counter to re-measure after axis text is created in the DOM\n  void leftAxisRedrawCount.value\n  const selector = '.stacked-column-chart__left-axis__canvas .tick text'\n  const defaultWidth = 0\n  return (\n    (elementsMaxBBox({ selector, defaultWidth }).width ?? defaultWidth)\n    + props.yAxisTickPadding\n  )\n})\n\nconst leftAxisCanvas = computed(() => {\n  return select(el.value)\n    .select('.stacked-column-chart__left-axis__canvas')\n})\n\nconst paddedStyle = computed(() => {\n  return {\n    marginLeft: props.noDirectLabeling\n      ? `${leftAxisLabelsWidth.value + props.yAxisTickPadding}px`\n      : 0\n  }\n})\n\nconst barTooltipDelay = computed(() => {\n  return hasHighlights.value ? 0 : props.highlightDelay\n})\n\nconst maxRowValue = computed(() => {\n  return props.maxValue ?? (maxStackValue.value as number)\n})\n\nfunction setSizes() {\n  if (!el.value) {\n    return\n  }\n  width.value = el.value.offsetWidth\n  height.value\n    = props.fixedHeight !== null\n      ? props.fixedHeight\n      : width.value * baseHeightRatio.value\n}\n\nfunction highlight(key: string) {\n  highlightedKeys.value = [key]\n}\n\nfunction restoreHighlights() {\n  clearTimeout(highlightTimeout.value)\n  const delay = props.restoreHighlightDelay\n  // Delay the restoration so it can be cancelled by a new highlight\n  highlightTimeout.value = setTimeout(\n    () => (highlightedKeys.value = props.highlights),\n    delay\n  )\n}\n\nfunction delayHighlight(key: string) {\n  clearTimeout(highlightTimeout.value)\n  // Reduce the delay to zero if there is already a highlighted key\n  const isDelayed = !hasHighlights.value\n  const delay = isDelayed ? props.highlightDelay : 0\n  highlightTimeout.value = setTimeout(() => highlight(key), delay)\n}\n\nfunction isHighlighted(key: string) {\n  return highlightedKeys.value.indexOf(key) > -1\n}\n\nfunction isColumnHighlighted(i: string | number) {\n  const column = get(sortedData.value, [i, props.labelField], null)\n  return (\n    props.columnHighlights.includes(column) && !highlightedKeys.value.length\n  )\n}\n\nfunction barStyle(i: string | number, key: string) {\n  const value = sortedData.value[i as number][key]\n  let totalWidth = props.relative ? totalRowValue(i) : maxRowValue.value\n  if (!totalWidth) {\n    console.error('totalWidth as divider cannot be ' + totalWidth)\n    totalWidth = 100\n  }\n  const height = `${100 * (value / totalWidth)}%`\n  const backgroundColor = colorScale.value(key)\n  const maxWidth = props.barMaxWidth\n  return { maxWidth, height, backgroundColor }\n}\n\nfunction barTitle(i: string | number, key: string) {\n  const value = sortedData.value[i as number][key]\n  const formattedValue = String(d3Formatter(value, props.yAxisTickFormat))\n  const formattedKey = groupName(key)\n  return props.tooltipDisplay({ value, formattedValue, key, formattedKey })\n}\n\nfunction barUniqueId(i: string | number, key: string) {\n  const { uid } = getCurrentInstance()!\n  return `bar-${uid}-${i}-${key}`\n}\n\ninterface StackItem {\n  key: string\n  barEdge: number\n  barHeight: number\n  rowEdge: number\n  valueHeight: number\n  overflow: boolean\n  pushed: boolean\n}\n\nfunction stackBarAndValue(i: string | number): StackItem[] {\n  if (!sortedData.value) {\n    return []\n  }\n  // Collect sizes first\n  const stack: StackItem[] = discoveredKeys.value.map((key: string) => {\n    const { bar, row, value } = queryBarAndValue(i as number, key)\n    if (!bar || !row || !value) {\n      throw new Error('Empty values for bar, row or value')\n    }\n    const barEdge = bar.getBoundingClientRect().top + bar.offsetHeight\n    const barHeight = bar.offsetHeight\n    const rowEdge = row.getBoundingClientRect().top + row.offsetHeight\n    const valueHeight = value.offsetHeight\n    return {\n      key,\n      barEdge,\n      barHeight,\n      rowEdge,\n      valueHeight,\n      overflow: false,\n      pushed: false\n    }\n  })\n  // Infer value's display\n  return stack.map((desc: StackItem, index: number) => {\n    desc.overflow = desc.valueHeight >= desc.barHeight\n    if (index > 0) {\n      const prevDesc = stack[index - 1]\n      const bothValuesHeight = desc.valueHeight + prevDesc.valueHeight\n      desc.overflow\n        = desc.overflow\n          || (prevDesc.overflow && desc.barHeight < bothValuesHeight)\n    }\n    desc.pushed\n      = desc.barEdge + desc.valueHeight > desc.rowEdge && desc.overflow\n    return desc\n  })\n}\n\nfunction queryBarAndValue(i: number, key: string) {\n  const root = el.value as unknown as HTMLElement\n  if (!mounted.value || !root) {\n    return {}\n  }\n  const rowSelector = '.stacked-column-chart__groups__item'\n  const row = root.querySelectorAll(rowSelector)[i] as HTMLElement\n  const barSelector = `.stacked-column-chart__groups__item__bars__item--${key}`\n  const bar = row.querySelector(barSelector) as HTMLElement\n  const valueSelector = '.stacked-column-chart__groups__item__bars__item__value'\n  const value = bar.querySelector(valueSelector) as HTMLElement\n  return { bar, row, value }\n}\n\nfunction isHidden(i: string | number, key: string) {\n  return props.hideEmptyValues && !sortedData.value[i as number][key]\n}\n\ninterface LabelState {\n  overflow: boolean\n  pushed: boolean\n  hidden: boolean\n}\n\nconst labelStates = ref<Record<string, LabelState>>({})\n\nfunction labelStateKey(i: number | string, key: string) {\n  return `${i}-${key}`\n}\n\nfunction computeLabelStates() {\n  const root = el.value as unknown as HTMLElement\n  if (!root || !mounted.value || !sortedData.value?.length) return\n\n  const states: Record<string, LabelState> = {}\n\n  for (let i = 0; i < sortedData.value.length; i++) {\n    try {\n      const stack = stackBarAndValue(i)\n      for (const item of stack) {\n        states[labelStateKey(i, item.key)] = {\n          overflow: item.overflow,\n          pushed: item.pushed,\n          hidden: false\n        }\n      }\n      // A value is hidden when both it and the next key overflow\n      for (let j = 0; j < stack.length; j++) {\n        const nextItem = stack[j + 1]\n        if (nextItem && stack[j].overflow && nextItem.overflow) {\n          states[labelStateKey(i, stack[j].key)].hidden = true\n        }\n      }\n    }\n    catch {\n      // If measurement fails for a row, skip it\n    }\n  }\n\n  labelStates.value = states\n}\n\nfunction hasValueOverflow(i: string | number, key: string) {\n  return labelStates.value[labelStateKey(i, key)]?.overflow ?? false\n}\n\nfunction hasValuePushed(i: string | number, key: string) {\n  return labelStates.value[labelStateKey(i, key)]?.pushed ?? false\n}\n\nfunction hasValueHidden(i: string | number, key: string) {\n  return labelStates.value[labelStateKey(i, key)]?.hidden ?? false\n}\n\nfunction formatXDatum(d: string) {\n  return d3Formatter(d, props.xAxisTickFormat)\n}\n\nfunction formatYDatum(d: string) {\n  return d3Formatter(d, props.yAxisTickFormat)\n}\n\nwatch(\n  () => props.highlights,\n  (newHighlights: string[]) => {\n    highlightedKeys.value = newHighlights\n  }\n)\n\nwatch(sortedData, async () => {\n  await nextTick()\n  const root = el.value as unknown as HTMLElement\n  if (!root) return\n  // This must be set after the column have been rendered\n  const element = root.querySelector('.stacked-column-chart__groups__item__bars') as HTMLElement\n  // Update the left axis only if the bars exists\n  if (element) {\n    leftAxisHeight.value = element.offsetHeight\n    // First draw creates tick text in the DOM\n    leftAxisCanvas.value.call(leftAxis.value as any)\n    // Invalidate leftAxisLabelsWidth so it re-measures the new tick text\n    leftAxisRedrawCount.value++\n    await nextTick()\n    // Second draw uses the correct tickSize and margins\n    leftAxisCanvas.value.call(leftAxis.value as any)\n  }\n  // Compute label overflow/pushed/hidden states after DOM layout\n  computeLabelStates()\n})\n</script>\n\n<template>\n  <div\n    ref=\"el\"\n    :style=\"{ height: `${height}px` }\"\n    class=\"stacked-column-chart d-flex flex-column\"\n    :class=\"{\n      'stacked-column-chart--social-mode': socialMode,\n      'stacked-column-chart--has-highlights':\n        hasHighlights || hasColumnHighlights,\n      'stacked-column-chart--no-direct-labeling': noDirectLabeling\n    }\"\n  >\n    <ul\n      v-if=\"!hideLegend\"\n      class=\"stacked-column-chart__legend list-inline\"\n    >\n      <li\n        v-for=\"key in discoveredKeys\"\n        :key=\"key\"\n        class=\"stacked-column-chart__legend__item list-inline-item d-inline-flex\"\n        :class=\"{\n          'stacked-column-chart__legend__item--highlighted': isHighlighted(key)\n        }\"\n        @mouseover=\"delayHighlight(key)\"\n        @mouseleave=\"restoreHighlights()\"\n      >\n        <span\n          class=\"stacked-column-chart__legend__item__box\"\n          :style=\"{ 'background-color': colorScale(key) }\"\n        />\n        <span class=\"stacked-column-chart__legend__item__label\">{{ groupName(key) }}</span>\n      </li>\n    </ul>\n    <div class=\"stacked-column-chart__chart d-flex flex-column flex-grow-1 position-relative\">\n      <svg\n        v-show=\"noDirectLabeling\"\n        :width=\"width + 'px'\"\n        :height=\"(leftAxisHeight + 20) + 'px'\"\n        class=\"stacked-column-chart__left-axis\"\n      >\n        <g\n          class=\"stacked-column-chart__left-axis__canvas\"\n          :transform=\"`translate(${width}, 0)`\"\n        />\n      </svg>\n      <div\n        class=\"stacked-column-chart__groups d-flex flex-grow-1 overflow-hidden\"\n        :style=\"paddedStyle\"\n      >\n        <div\n          v-for=\"(datum, i) in sortedData\"\n          :key=\"i\"\n          class=\"stacked-column-chart__groups__item flex-grow-1 d-flex flex-column text-center\"\n        >\n          <div\n            class=\"stacked-column-chart__groups__item__bars flex-grow-1 d-flex flex-column-reverse px-1 justify-content-start align-items-center\"\n          >\n            <div\n              v-for=\"(key, j) in discoveredKeys\"\n              :id=\"barUniqueId(i, key)\"\n              :key=\"j\"\n              class=\"stacked-column-chart__groups__item__bars__item\"\n              :class=\"{\n                [`stacked-column-chart__groups__item__bars__item--${key}`]: true,\n                [`stacked-column-chart__groups__item__bars__item--${j}n`]: true,\n                'stacked-column-chart__groups__item__bars__item--hidden': isHidden(i, key),\n                'stacked-column-chart__groups__item__bars__item--highlighted': isHighlighted(key) || isColumnHighlighted(i),\n                'stacked-column-chart__groups__item__bars__item--value-overflow': hasValueOverflow(i, key),\n                'stacked-column-chart__groups__item__bars__item--value-pushed': hasValuePushed(i, key),\n                'stacked-column-chart__groups__item__bars__item--value-hidden': hasValueHidden(i, key)\n              }\"\n              :style=\"barStyle(i, key)\"\n              @mouseover=\"delayHighlight(key)\"\n              @mouseleave=\"restoreHighlights()\"\n            >\n              <div\n                v-show=\"!noDirectLabeling\"\n                class=\"stacked-column-chart__groups__item__bars__item__value\"\n              >\n                {{ formatYDatum(datum[key]) }}\n              </div>\n              <teleport to=\"body\">\n                <b-tooltip\n                  v-if=\"!noTooltips\"\n                  :delay=\"barTooltipDelay\"\n                  :target=\"barUniqueId(i, key)\"\n                  placement=\"top\"\n                >\n                  <span v-html=\"barTitle(i, key)\" />\n                </b-tooltip>\n              </teleport>\n            </div>\n          </div>\n        </div>\n      </div>\n      <div\n        class=\"stacked-column-chart__labels d-flex\"\n        :style=\"paddedStyle\"\n      >\n        <div\n          v-for=\"(datum, i) in sortedData\"\n          :key=\"i\"\n          class=\"stacked-column-chart__groups__item__label flex-grow-1 small py-2 text-center\"\n        >\n          {{ formatXDatum(datum[labelField]) }}\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\">\n\n.stacked-column-chart {\n  $muted-group-opacity: 0.2;\n  $muted-group-filter: grayscale(30%) brightness(10%);\n  $muted-group-transition:\n    opacity 0.3s,\n    filter 0.3s;\n  $colors: $primary, $info, $warning;\n  $quantile: 3;\n\n  @each $start-color in $colors {\n    $i: index($colors, $start-color) - 1;\n    $end-color: mix($start-color, text-contrast($start-color), 20%);\n\n    @for $j from ($quantile * $i) through ($quantile * $i + $quantile - 1) {\n      $amount: ($j % $quantile) * math.div(100%, $quantile);\n      --group-color-#{$j}n: #{mix($end-color, $start-color, $amount)};\n    }\n  }\n\n  &__legend {\n    &__item {\n      display: inline-flex;\n      flex-direction: row;\n      align-items: center;\n      padding-right: $spacer * 0.5;\n\n      @for $i from 0 through ($quantile * length($colors)) {\n        &:nth-child(#{$i + 1}n) &__box {\n          background-color: var(--group-color-#{$i}n);\n        }\n      }\n\n      .stacked-column-chart--has-highlights &:not(&--highlighted) {\n        opacity: $muted-group-opacity;\n        filter: $muted-group-filter;\n      }\n\n      &__box {\n        height: 1em;\n        width: 1em;\n        border-radius: 0.5em;\n        display: inline-block;\n        margin-right: $spacer * 0.5;\n      }\n    }\n  }\n\n  &__left-axis {\n    position: absolute;\n    top: 0;\n    left: 0;\n\n    path {\n      display: none;\n    }\n\n    .tick {\n      line {\n        stroke: $border-color;\n      }\n\n      text {\n        font-family: $font-family-base;\n        font-size: $font-size-sm;\n        fill: currentColor;\n      }\n    }\n  }\n\n  &__groups {\n    &__item {\n      &__bars {\n        &__item {\n          width: 100%;\n          position: relative;\n          min-height: 1px;\n\n          @for $i from 0 through ($quantile * length($colors)) {\n            &--#{$i}n {\n              background: var(--group-color-#{$i}n);\n            }\n          }\n\n          &__value {\n            position: absolute;\n            top: 0;\n            left: 0;\n            width: 100%;\n            text-align: center;\n            white-space: nowrap;\n            color: #fff;\n          }\n\n          .stacked-column-chart--has-highlights &:not(&--highlighted) {\n            opacity: $muted-group-opacity;\n            filter: $muted-group-filter;\n          }\n\n          .stacked-column-chart--has-highlights &:not(&--highlighted) &__value {\n            visibility: hidden;\n          }\n\n          .stacked-column-chart:not(.stacked-column-chart--has-highlights)\n            &--value-hidden\n            &__value,\n          .stacked-column-chart:not(.stacked-column-chart--has-highlights)\n            &--value-pushed\n            &__value {\n            visibility: hidden;\n          }\n\n          &--hidden {\n            display: none;\n          }\n\n          &--value-overflow &__value {\n            color: $body-color;\n            transform: translateY(-100%);\n          }\n\n          &--value-pushed {\n            direction: ltr;\n          }\n\n          &--value-pushed &__value {\n            color: $body-color;\n            transform: translateY(100%);\n          }\n        }\n      }\n    }\n  }\n}\n</style>\n","var assignValue = require('./_assignValue'),\n    castPath = require('./_castPath'),\n    isIndex = require('./_isIndex'),\n    isObject = require('./isObject'),\n    toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n  if (!isObject(object)) {\n    return object;\n  }\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      lastIndex = length - 1,\n      nested = object;\n\n  while (nested != null && ++index < length) {\n    var key = toKey(path[index]),\n        newValue = value;\n\n    if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n      return object;\n    }\n\n    if (index != lastIndex) {\n      var objValue = nested[key];\n      newValue = customizer ? customizer(objValue, key, nested) : undefined;\n      if (newValue === undefined) {\n        newValue = isObject(objValue)\n          ? objValue\n          : (isIndex(path[index + 1]) ? [] : {});\n      }\n    }\n    assignValue(nested, key, newValue);\n    nested = nested[key];\n  }\n  return object;\n}\n\nmodule.exports = baseSet;\n","var baseGet = require('./_baseGet'),\n    baseSet = require('./_baseSet'),\n    castPath = require('./_castPath');\n\n/**\n * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n  var index = -1,\n      length = paths.length,\n      result = {};\n\n  while (++index < length) {\n    var path = paths[index],\n        value = baseGet(object, path);\n\n    if (predicate(value, path)) {\n      baseSet(result, castPath(path, object), value);\n    }\n  }\n  return result;\n}\n\nmodule.exports = basePickBy;\n","var arrayMap = require('./_arrayMap'),\n    baseIteratee = require('./_baseIteratee'),\n    basePickBy = require('./_basePickBy'),\n    getAllKeysIn = require('./_getAllKeysIn');\n\n/**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\nfunction pickBy(object, predicate) {\n  if (object == null) {\n    return {};\n  }\n  var props = arrayMap(getAllKeysIn(object), function(prop) {\n    return [prop];\n  });\n  predicate = baseIteratee(predicate);\n  return basePickBy(object, props, function(value, path) {\n    return predicate(value, path[0]);\n  });\n}\n\nmodule.exports = pickBy;\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n    if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n    _[t] = [];\n  }\n  return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n  this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n    return {type: t, name: name};\n  });\n}\n\nDispatch.prototype = dispatch.prototype = {\n  constructor: Dispatch,\n  on: function(typename, callback) {\n    var _ = this._,\n        T = parseTypenames(typename + \"\", _),\n        t,\n        i = -1,\n        n = T.length;\n\n    // If no callback was specified, return the callback of the given type and name.\n    if (arguments.length < 2) {\n      while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n      return;\n    }\n\n    // If a type was specified, set the callback for the given type and name.\n    // Otherwise, if a null callback was specified, remove callbacks of the given name.\n    if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n    while (++i < n) {\n      if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n      else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n    }\n\n    return this;\n  },\n  copy: function() {\n    var copy = {}, _ = this._;\n    for (var t in _) copy[t] = _[t].slice();\n    return new Dispatch(copy);\n  },\n  call: function(type, that) {\n    if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  },\n  apply: function(type, that, args) {\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  }\n};\n\nfunction get(type, name) {\n  for (var i = 0, n = type.length, c; i < n; ++i) {\n    if ((c = type[i]).name === name) {\n      return c.value;\n    }\n  }\n}\n\nfunction set(type, name, callback) {\n  for (var i = 0, n = type.length; i < n; ++i) {\n    if (type[i].name === name) {\n      type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n      break;\n    }\n  }\n  if (callback != null) type.push({name: name, value: callback});\n  return type;\n}\n\nexport default dispatch;\n","// These are typically used in conjunction with noevent to ensure that we can\n// preventDefault on the event.\nexport const nonpassive = {passive: false};\nexport const nonpassivecapture = {capture: true, passive: false};\n\nexport function nopropagation(event) {\n  event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent, {nonpassivecapture} from \"./noevent.js\";\n\nexport default function(view) {\n  var root = view.document.documentElement,\n      selection = select(view).on(\"dragstart.drag\", noevent, nonpassivecapture);\n  if (\"onselectstart\" in root) {\n    selection.on(\"selectstart.drag\", noevent, nonpassivecapture);\n  } else {\n    root.__noselect = root.style.MozUserSelect;\n    root.style.MozUserSelect = \"none\";\n  }\n}\n\nexport function yesdrag(view, noclick) {\n  var root = view.document.documentElement,\n      selection = select(view).on(\"dragstart.drag\", null);\n  if (noclick) {\n    selection.on(\"click.drag\", noevent, nonpassivecapture);\n    setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n  }\n  if (\"onselectstart\" in root) {\n    selection.on(\"selectstart.drag\", null);\n  } else {\n    root.style.MozUserSelect = root.__noselect;\n    delete root.__noselect;\n  }\n}\n","export default x => () => x;\n","export default function DragEvent(type, {\n  sourceEvent,\n  subject,\n  target,\n  identifier,\n  active,\n  x, y, dx, dy,\n  dispatch\n}) {\n  Object.defineProperties(this, {\n    type: {value: type, enumerable: true, configurable: true},\n    sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n    subject: {value: subject, enumerable: true, configurable: true},\n    target: {value: target, enumerable: true, configurable: true},\n    identifier: {value: identifier, enumerable: true, configurable: true},\n    active: {value: active, enumerable: true, configurable: true},\n    x: {value: x, enumerable: true, configurable: true},\n    y: {value: y, enumerable: true, configurable: true},\n    dx: {value: dx, enumerable: true, configurable: true},\n    dy: {value: dy, enumerable: true, configurable: true},\n    _: {value: dispatch}\n  });\n}\n\nDragEvent.prototype.on = function() {\n  var value = this._.on.apply(this._, arguments);\n  return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {select, pointer} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag.js\";\nimport noevent, {nonpassive, nonpassivecapture, nopropagation} from \"./noevent.js\";\nimport constant from \"./constant.js\";\nimport DragEvent from \"./event.js\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n  return !event.ctrlKey && !event.button;\n}\n\nfunction defaultContainer() {\n  return this.parentNode;\n}\n\nfunction defaultSubject(event, d) {\n  return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nexport default function() {\n  var filter = defaultFilter,\n      container = defaultContainer,\n      subject = defaultSubject,\n      touchable = defaultTouchable,\n      gestures = {},\n      listeners = dispatch(\"start\", \"drag\", \"end\"),\n      active = 0,\n      mousedownx,\n      mousedowny,\n      mousemoving,\n      touchending,\n      clickDistance2 = 0;\n\n  function drag(selection) {\n    selection\n        .on(\"mousedown.drag\", mousedowned)\n      .filter(touchable)\n        .on(\"touchstart.drag\", touchstarted)\n        .on(\"touchmove.drag\", touchmoved, nonpassive)\n        .on(\"touchend.drag touchcancel.drag\", touchended)\n        .style(\"touch-action\", \"none\")\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  function mousedowned(event, d) {\n    if (touchending || !filter.call(this, event, d)) return;\n    var gesture = beforestart(this, container.call(this, event, d), event, d, \"mouse\");\n    if (!gesture) return;\n    select(event.view)\n      .on(\"mousemove.drag\", mousemoved, nonpassivecapture)\n      .on(\"mouseup.drag\", mouseupped, nonpassivecapture);\n    nodrag(event.view);\n    nopropagation(event);\n    mousemoving = false;\n    mousedownx = event.clientX;\n    mousedowny = event.clientY;\n    gesture(\"start\", event);\n  }\n\n  function mousemoved(event) {\n    noevent(event);\n    if (!mousemoving) {\n      var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n      mousemoving = dx * dx + dy * dy > clickDistance2;\n    }\n    gestures.mouse(\"drag\", event);\n  }\n\n  function mouseupped(event) {\n    select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n    yesdrag(event.view, mousemoving);\n    noevent(event);\n    gestures.mouse(\"end\", event);\n  }\n\n  function touchstarted(event, d) {\n    if (!filter.call(this, event, d)) return;\n    var touches = event.changedTouches,\n        c = container.call(this, event, d),\n        n = touches.length, i, gesture;\n\n    for (i = 0; i < n; ++i) {\n      if (gesture = beforestart(this, c, event, d, touches[i].identifier, touches[i])) {\n        nopropagation(event);\n        gesture(\"start\", event, touches[i]);\n      }\n    }\n  }\n\n  function touchmoved(event) {\n    var touches = event.changedTouches,\n        n = touches.length, i, gesture;\n\n    for (i = 0; i < n; ++i) {\n      if (gesture = gestures[touches[i].identifier]) {\n        noevent(event);\n        gesture(\"drag\", event, touches[i]);\n      }\n    }\n  }\n\n  function touchended(event) {\n    var touches = event.changedTouches,\n        n = touches.length, i, gesture;\n\n    if (touchending) clearTimeout(touchending);\n    touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n    for (i = 0; i < n; ++i) {\n      if (gesture = gestures[touches[i].identifier]) {\n        nopropagation(event);\n        gesture(\"end\", event, touches[i]);\n      }\n    }\n  }\n\n  function beforestart(that, container, event, d, identifier, touch) {\n    var dispatch = listeners.copy(),\n        p = pointer(touch || event, container), dx, dy,\n        s;\n\n    if ((s = subject.call(that, new DragEvent(\"beforestart\", {\n        sourceEvent: event,\n        target: drag,\n        identifier,\n        active,\n        x: p[0],\n        y: p[1],\n        dx: 0,\n        dy: 0,\n        dispatch\n      }), d)) == null) return;\n\n    dx = s.x - p[0] || 0;\n    dy = s.y - p[1] || 0;\n\n    return function gesture(type, event, touch) {\n      var p0 = p, n;\n      switch (type) {\n        case \"start\": gestures[identifier] = gesture, n = active++; break;\n        case \"end\": delete gestures[identifier], --active; // falls through\n        case \"drag\": p = pointer(touch || event, container), n = active; break;\n      }\n      dispatch.call(\n        type,\n        that,\n        new DragEvent(type, {\n          sourceEvent: event,\n          subject: s,\n          target: drag,\n          identifier,\n          active: n,\n          x: p[0] + dx,\n          y: p[1] + dy,\n          dx: p[0] - p0[0],\n          dy: p[1] - p0[1],\n          dispatch\n        }),\n        d\n      );\n    };\n  }\n\n  drag.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n  };\n\n  drag.container = function(_) {\n    return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n  };\n\n  drag.subject = function(_) {\n    return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n  };\n\n  drag.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n  };\n\n  drag.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? drag : value;\n  };\n\n  drag.clickDistance = function(_) {\n    return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n  };\n\n  return drag;\n}\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var hypot = Math.hypot;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n  return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n  return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","function streamGeometry(geometry, stream) {\n  if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n    streamGeometryType[geometry.type](geometry, stream);\n  }\n}\n\nvar streamObjectType = {\n  Feature: function(object, stream) {\n    streamGeometry(object.geometry, stream);\n  },\n  FeatureCollection: function(object, stream) {\n    var features = object.features, i = -1, n = features.length;\n    while (++i < n) streamGeometry(features[i].geometry, stream);\n  }\n};\n\nvar streamGeometryType = {\n  Sphere: function(object, stream) {\n    stream.sphere();\n  },\n  Point: function(object, stream) {\n    object = object.coordinates;\n    stream.point(object[0], object[1], object[2]);\n  },\n  MultiPoint: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n  },\n  LineString: function(object, stream) {\n    streamLine(object.coordinates, stream, 0);\n  },\n  MultiLineString: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamLine(coordinates[i], stream, 0);\n  },\n  Polygon: function(object, stream) {\n    streamPolygon(object.coordinates, stream);\n  },\n  MultiPolygon: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamPolygon(coordinates[i], stream);\n  },\n  GeometryCollection: function(object, stream) {\n    var geometries = object.geometries, i = -1, n = geometries.length;\n    while (++i < n) streamGeometry(geometries[i], stream);\n  }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n  var i = -1, n = coordinates.length - closed, coordinate;\n  stream.lineStart();\n  while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n  stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n  var i = -1, n = coordinates.length;\n  stream.polygonStart();\n  while (++i < n) streamLine(coordinates[i], stream, 1);\n  stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n  if (object && streamObjectType.hasOwnProperty(object.type)) {\n    streamObjectType[object.type](object, stream);\n  } else {\n    streamGeometry(object, stream);\n  }\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math.js\";\n\nexport function spherical(cartesian) {\n  return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n  var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n  return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n  return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n  a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n  return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n  var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n  d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","export default function(a, b) {\n\n  function compose(x, y) {\n    return x = a(x, y), b(x[0], x[1]);\n  }\n\n  if (a.invert && b.invert) compose.invert = function(x, y) {\n    return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n  };\n\n  return compose;\n}\n","import compose from \"./compose.js\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math.js\";\n\nfunction rotationIdentity(lambda, phi) {\n  if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n  return [lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n  return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n    : rotationLambda(deltaLambda))\n    : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n    : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n  return function(lambda, phi) {\n    lambda += deltaLambda;\n    if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n    return [lambda, phi];\n  };\n}\n\nfunction rotationLambda(deltaLambda) {\n  var rotation = forwardRotationLambda(deltaLambda);\n  rotation.invert = forwardRotationLambda(-deltaLambda);\n  return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n  var cosDeltaPhi = cos(deltaPhi),\n      sinDeltaPhi = sin(deltaPhi),\n      cosDeltaGamma = cos(deltaGamma),\n      sinDeltaGamma = sin(deltaGamma);\n\n  function rotation(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaPhi + x * sinDeltaPhi;\n    return [\n      atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n      asin(k * cosDeltaGamma + y * sinDeltaGamma)\n    ];\n  }\n\n  rotation.invert = function(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaGamma - y * sinDeltaGamma;\n    return [\n      atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n      asin(k * cosDeltaPhi - x * sinDeltaPhi)\n    ];\n  };\n\n  return rotation;\n}\n\nexport default function(rotate) {\n  rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n  function forward(coordinates) {\n    coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  }\n\n  forward.invert = function(coordinates) {\n    coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  };\n\n  return forward;\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport constant from \"./constant.js\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math.js\";\nimport {rotateRadians} from \"./rotation.js\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n  if (!delta) return;\n  var cosRadius = cos(radius),\n      sinRadius = sin(radius),\n      step = direction * delta;\n  if (t0 == null) {\n    t0 = radius + direction * tau;\n    t1 = radius - step / 2;\n  } else {\n    t0 = circleRadius(cosRadius, t0);\n    t1 = circleRadius(cosRadius, t1);\n    if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n  }\n  for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n    point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n    stream.point(point[0], point[1]);\n  }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n  point = cartesian(point), point[0] -= cosRadius;\n  cartesianNormalizeInPlace(point);\n  var radius = acos(-point[1]);\n  return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n  var center = constant([0, 0]),\n      radius = constant(90),\n      precision = constant(2),\n      ring,\n      rotate,\n      stream = {point: point};\n\n  function point(x, y) {\n    ring.push(x = rotate(x, y));\n    x[0] *= degrees, x[1] *= degrees;\n  }\n\n  function circle() {\n    var c = center.apply(this, arguments),\n        r = radius.apply(this, arguments) * radians,\n        p = precision.apply(this, arguments) * radians;\n    ring = [];\n    rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n    circleStream(stream, r, p, 1);\n    c = {type: \"Polygon\", coordinates: [ring]};\n    ring = rotate = null;\n    return c;\n  }\n\n  circle.center = function(_) {\n    return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n  };\n\n  circle.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n  };\n\n  circle.precision = function(_) {\n    return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n  };\n\n  return circle;\n}\n","import noop from \"../noop.js\";\n\nexport default function() {\n  var lines = [],\n      line;\n  return {\n    point: function(x, y, m) {\n      line.push([x, y, m]);\n    },\n    lineStart: function() {\n      lines.push(line = []);\n    },\n    lineEnd: noop,\n    rejoin: function() {\n      if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n    },\n    result: function() {\n      var result = lines;\n      lines = [];\n      line = null;\n      return result;\n    }\n  };\n}\n","import {abs, epsilon} from \"./math.js\";\n\nexport default function(a, b) {\n  return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual.js\";\nimport {epsilon} from \"../math.js\";\n\nfunction Intersection(point, points, other, entry) {\n  this.x = point;\n  this.z = points;\n  this.o = other; // another intersection\n  this.e = entry; // is an entry?\n  this.v = false; // visited\n  this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n  var subject = [],\n      clip = [],\n      i,\n      n;\n\n  segments.forEach(function(segment) {\n    if ((n = segment.length - 1) <= 0) return;\n    var n, p0 = segment[0], p1 = segment[n], x;\n\n    if (pointEqual(p0, p1)) {\n      if (!p0[2] && !p1[2]) {\n        stream.lineStart();\n        for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n        stream.lineEnd();\n        return;\n      }\n      // handle degenerate cases by moving the point\n      p1[0] += 2 * epsilon;\n    }\n\n    subject.push(x = new Intersection(p0, segment, null, true));\n    clip.push(x.o = new Intersection(p0, null, x, false));\n    subject.push(x = new Intersection(p1, segment, null, false));\n    clip.push(x.o = new Intersection(p1, null, x, true));\n  });\n\n  if (!subject.length) return;\n\n  clip.sort(compareIntersection);\n  link(subject);\n  link(clip);\n\n  for (i = 0, n = clip.length; i < n; ++i) {\n    clip[i].e = startInside = !startInside;\n  }\n\n  var start = subject[0],\n      points,\n      point;\n\n  while (1) {\n    // Find first unvisited intersection.\n    var current = start,\n        isSubject = true;\n    while (current.v) if ((current = current.n) === start) return;\n    points = current.z;\n    stream.lineStart();\n    do {\n      current.v = current.o.v = true;\n      if (current.e) {\n        if (isSubject) {\n          for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.n.x, 1, stream);\n        }\n        current = current.n;\n      } else {\n        if (isSubject) {\n          points = current.p.z;\n          for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.p.x, -1, stream);\n        }\n        current = current.p;\n      }\n      current = current.o;\n      points = current.z;\n      isSubject = !isSubject;\n    } while (!current.v);\n    stream.lineEnd();\n  }\n}\n\nfunction link(array) {\n  if (!(n = array.length)) return;\n  var n,\n      i = 0,\n      a = array[0],\n      b;\n  while (++i < n) {\n    a.n = b = array[i];\n    b.p = a;\n    a = b;\n  }\n  a.n = b = array[0];\n  b.p = a;\n}\n","import {Adder} from \"d3-array\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, epsilon2, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\n\nfunction longitude(point) {\n  return abs(point[0]) <= pi ? point[0] : sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nexport default function(polygon, point) {\n  var lambda = longitude(point),\n      phi = point[1],\n      sinPhi = sin(phi),\n      normal = [sin(lambda), -cos(lambda), 0],\n      angle = 0,\n      winding = 0;\n\n  var sum = new Adder();\n\n  if (sinPhi === 1) phi = halfPi + epsilon;\n  else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n  for (var i = 0, n = polygon.length; i < n; ++i) {\n    if (!(m = (ring = polygon[i]).length)) continue;\n    var ring,\n        m,\n        point0 = ring[m - 1],\n        lambda0 = longitude(point0),\n        phi0 = point0[1] / 2 + quarterPi,\n        sinPhi0 = sin(phi0),\n        cosPhi0 = cos(phi0);\n\n    for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n      var point1 = ring[j],\n          lambda1 = longitude(point1),\n          phi1 = point1[1] / 2 + quarterPi,\n          sinPhi1 = sin(phi1),\n          cosPhi1 = cos(phi1),\n          delta = lambda1 - lambda0,\n          sign = delta >= 0 ? 1 : -1,\n          absDelta = sign * delta,\n          antimeridian = absDelta > pi,\n          k = sinPhi0 * sinPhi1;\n\n      sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n      angle += antimeridian ? delta + sign * tau : delta;\n\n      // Are the longitudes either side of the point’s meridian (lambda),\n      // and are the latitudes smaller than the parallel (phi)?\n      if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n        var arc = cartesianCross(cartesian(point0), cartesian(point1));\n        cartesianNormalizeInPlace(arc);\n        var intersection = cartesianCross(normal, arc);\n        cartesianNormalizeInPlace(intersection);\n        var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n        if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n          winding += antimeridian ^ delta >= 0 ? 1 : -1;\n        }\n      }\n    }\n  }\n\n  // First, determine whether the South pole is inside or outside:\n  //\n  // It is inside if:\n  // * the polygon winds around it in a clockwise direction.\n  // * the polygon does not (cumulatively) wind around it, but has a negative\n  //   (counter-clockwise) area.\n  //\n  // Second, count the (signed) number of times a segment crosses a lambda\n  // from the point to the South pole.  If it is zero, then the point is the\n  // same side as the South pole.\n\n  return (angle < -epsilon || angle < epsilon && sum < -epsilon2) ^ (winding & 1);\n}\n","import clipBuffer from \"./buffer.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {epsilon, halfPi} from \"../math.js\";\nimport polygonContains from \"../polygonContains.js\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n  return function(sink) {\n    var line = clipLine(sink),\n        ringBuffer = clipBuffer(),\n        ringSink = clipLine(ringBuffer),\n        polygonStarted = false,\n        polygon,\n        segments,\n        ring;\n\n    var clip = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() {\n        clip.point = pointRing;\n        clip.lineStart = ringStart;\n        clip.lineEnd = ringEnd;\n        segments = [];\n        polygon = [];\n      },\n      polygonEnd: function() {\n        clip.point = point;\n        clip.lineStart = lineStart;\n        clip.lineEnd = lineEnd;\n        segments = merge(segments);\n        var startInside = polygonContains(polygon, start);\n        if (segments.length) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n        } else if (startInside) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          interpolate(null, null, 1, sink);\n          sink.lineEnd();\n        }\n        if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n        segments = polygon = null;\n      },\n      sphere: function() {\n        sink.polygonStart();\n        sink.lineStart();\n        interpolate(null, null, 1, sink);\n        sink.lineEnd();\n        sink.polygonEnd();\n      }\n    };\n\n    function point(lambda, phi) {\n      if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n    }\n\n    function pointLine(lambda, phi) {\n      line.point(lambda, phi);\n    }\n\n    function lineStart() {\n      clip.point = pointLine;\n      line.lineStart();\n    }\n\n    function lineEnd() {\n      clip.point = point;\n      line.lineEnd();\n    }\n\n    function pointRing(lambda, phi) {\n      ring.push([lambda, phi]);\n      ringSink.point(lambda, phi);\n    }\n\n    function ringStart() {\n      ringSink.lineStart();\n      ring = [];\n    }\n\n    function ringEnd() {\n      pointRing(ring[0][0], ring[0][1]);\n      ringSink.lineEnd();\n\n      var clean = ringSink.clean(),\n          ringSegments = ringBuffer.result(),\n          i, n = ringSegments.length, m,\n          segment,\n          point;\n\n      ring.pop();\n      polygon.push(ring);\n      ring = null;\n\n      if (!n) return;\n\n      // No intersections.\n      if (clean & 1) {\n        segment = ringSegments[0];\n        if ((m = segment.length - 1) > 0) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n          sink.lineEnd();\n        }\n        return;\n      }\n\n      // Rejoin connected segments.\n      // TODO reuse ringBuffer.rejoin()?\n      if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n      segments.push(ringSegments.filter(validSegment));\n    }\n\n    return clip;\n  };\n}\n\nfunction validSegment(segment) {\n  return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n  return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n       - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index.js\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math.js\";\n\nexport default clip(\n  function() { return true; },\n  clipAntimeridianLine,\n  clipAntimeridianInterpolate,\n  [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n  var lambda0 = NaN,\n      phi0 = NaN,\n      sign0 = NaN,\n      clean; // no intersections\n\n  return {\n    lineStart: function() {\n      stream.lineStart();\n      clean = 1;\n    },\n    point: function(lambda1, phi1) {\n      var sign1 = lambda1 > 0 ? pi : -pi,\n          delta = abs(lambda1 - lambda0);\n      if (abs(delta - pi) < epsilon) { // line crosses a pole\n        stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        stream.point(lambda1, phi0);\n        clean = 0;\n      } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n        if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n        if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n        phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        clean = 0;\n      }\n      stream.point(lambda0 = lambda1, phi0 = phi1);\n      sign0 = sign1;\n    },\n    lineEnd: function() {\n      stream.lineEnd();\n      lambda0 = phi0 = NaN;\n    },\n    clean: function() {\n      return 2 - clean; // if intersections, rejoin first and last segments\n    }\n  };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n  var cosPhi0,\n      cosPhi1,\n      sinLambda0Lambda1 = sin(lambda0 - lambda1);\n  return abs(sinLambda0Lambda1) > epsilon\n      ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n          - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n          / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n      : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n  var phi;\n  if (from == null) {\n    phi = direction * halfPi;\n    stream.point(-pi, phi);\n    stream.point(0, phi);\n    stream.point(pi, phi);\n    stream.point(pi, 0);\n    stream.point(pi, -phi);\n    stream.point(0, -phi);\n    stream.point(-pi, -phi);\n    stream.point(-pi, 0);\n    stream.point(-pi, phi);\n  } else if (abs(from[0] - to[0]) > epsilon) {\n    var lambda = from[0] < to[0] ? pi : -pi;\n    phi = direction * lambda / 2;\n    stream.point(-lambda, phi);\n    stream.point(0, phi);\n    stream.point(lambda, phi);\n  } else {\n    stream.point(to[0], to[1]);\n  }\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian.js\";\nimport {circleStream} from \"../circle.js\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math.js\";\nimport pointEqual from \"../pointEqual.js\";\nimport clip from \"./index.js\";\n\nexport default function(radius) {\n  var cr = cos(radius),\n      delta = 2 * radians,\n      smallRadius = cr > 0,\n      notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n  function interpolate(from, to, direction, stream) {\n    circleStream(stream, radius, delta, direction, from, to);\n  }\n\n  function visible(lambda, phi) {\n    return cos(lambda) * cos(phi) > cr;\n  }\n\n  // Takes a line and cuts into visible segments. Return values used for polygon\n  // clipping: 0 - there were intersections or the line was empty; 1 - no\n  // intersections 2 - there were intersections, and the first and last segments\n  // should be rejoined.\n  function clipLine(stream) {\n    var point0, // previous point\n        c0, // code for previous point\n        v0, // visibility of previous point\n        v00, // visibility of first point\n        clean; // no intersections\n    return {\n      lineStart: function() {\n        v00 = v0 = false;\n        clean = 1;\n      },\n      point: function(lambda, phi) {\n        var point1 = [lambda, phi],\n            point2,\n            v = visible(lambda, phi),\n            c = smallRadius\n              ? v ? 0 : code(lambda, phi)\n              : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n        if (!point0 && (v00 = v0 = v)) stream.lineStart();\n        if (v !== v0) {\n          point2 = intersect(point0, point1);\n          if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\n            point1[2] = 1;\n        }\n        if (v !== v0) {\n          clean = 0;\n          if (v) {\n            // outside going in\n            stream.lineStart();\n            point2 = intersect(point1, point0);\n            stream.point(point2[0], point2[1]);\n          } else {\n            // inside going out\n            point2 = intersect(point0, point1);\n            stream.point(point2[0], point2[1], 2);\n            stream.lineEnd();\n          }\n          point0 = point2;\n        } else if (notHemisphere && point0 && smallRadius ^ v) {\n          var t;\n          // If the codes for two points are different, or are both zero,\n          // and there this segment intersects with the small circle.\n          if (!(c & c0) && (t = intersect(point1, point0, true))) {\n            clean = 0;\n            if (smallRadius) {\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1]);\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n            } else {\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1], 3);\n            }\n          }\n        }\n        if (v && (!point0 || !pointEqual(point0, point1))) {\n          stream.point(point1[0], point1[1]);\n        }\n        point0 = point1, v0 = v, c0 = c;\n      },\n      lineEnd: function() {\n        if (v0) stream.lineEnd();\n        point0 = null;\n      },\n      // Rejoin first and last segments if there were intersections and the first\n      // and last points were visible.\n      clean: function() {\n        return clean | ((v00 && v0) << 1);\n      }\n    };\n  }\n\n  // Intersects the great circle between a and b with the clip circle.\n  function intersect(a, b, two) {\n    var pa = cartesian(a),\n        pb = cartesian(b);\n\n    // We have two planes, n1.p = d1 and n2.p = d2.\n    // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n    var n1 = [1, 0, 0], // normal\n        n2 = cartesianCross(pa, pb),\n        n2n2 = cartesianDot(n2, n2),\n        n1n2 = n2[0], // cartesianDot(n1, n2),\n        determinant = n2n2 - n1n2 * n1n2;\n\n    // Two polar points.\n    if (!determinant) return !two && a;\n\n    var c1 =  cr * n2n2 / determinant,\n        c2 = -cr * n1n2 / determinant,\n        n1xn2 = cartesianCross(n1, n2),\n        A = cartesianScale(n1, c1),\n        B = cartesianScale(n2, c2);\n    cartesianAddInPlace(A, B);\n\n    // Solve |p(t)|^2 = 1.\n    var u = n1xn2,\n        w = cartesianDot(A, u),\n        uu = cartesianDot(u, u),\n        t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n    if (t2 < 0) return;\n\n    var t = sqrt(t2),\n        q = cartesianScale(u, (-w - t) / uu);\n    cartesianAddInPlace(q, A);\n    q = spherical(q);\n\n    if (!two) return q;\n\n    // Two intersection points.\n    var lambda0 = a[0],\n        lambda1 = b[0],\n        phi0 = a[1],\n        phi1 = b[1],\n        z;\n\n    if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n    var delta = lambda1 - lambda0,\n        polar = abs(delta - pi) < epsilon,\n        meridian = polar || delta < epsilon;\n\n    if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n    // Check that the first point is between a and b.\n    if (meridian\n        ? polar\n          ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n          : phi0 <= q[1] && q[1] <= phi1\n        : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n      var q1 = cartesianScale(u, (-w + t) / uu);\n      cartesianAddInPlace(q1, A);\n      return [q, spherical(q1)];\n    }\n  }\n\n  // Generates a 4-bit vector representing the location of a point relative to\n  // the small circle's bounding box.\n  function code(lambda, phi) {\n    var r = smallRadius ? radius : pi - radius,\n        code = 0;\n    if (lambda < -r) code |= 1; // left\n    else if (lambda > r) code |= 2; // right\n    if (phi < -r) code |= 4; // below\n    else if (phi > r) code |= 8; // above\n    return code;\n  }\n\n  return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","export default function(a, b, x0, y0, x1, y1) {\n  var ax = a[0],\n      ay = a[1],\n      bx = b[0],\n      by = b[1],\n      t0 = 0,\n      t1 = 1,\n      dx = bx - ax,\n      dy = by - ay,\n      r;\n\n  r = x0 - ax;\n  if (!dx && r > 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dx > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = x1 - ax;\n  if (!dx && r < 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dx > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  r = y0 - ay;\n  if (!dy && r > 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dy > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = y1 - ay;\n  if (!dy && r < 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dy > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n  if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n  return true;\n}\n","import {abs, epsilon} from \"../math.js\";\nimport clipBuffer from \"./buffer.js\";\nimport clipLine from \"./line.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n  function visible(x, y) {\n    return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n  }\n\n  function interpolate(from, to, direction, stream) {\n    var a = 0, a1 = 0;\n    if (from == null\n        || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n        || comparePoint(from, to) < 0 ^ direction > 0) {\n      do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n      while ((a = (a + direction + 4) % 4) !== a1);\n    } else {\n      stream.point(to[0], to[1]);\n    }\n  }\n\n  function corner(p, direction) {\n    return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n        : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n        : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n        : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n  }\n\n  function compareIntersection(a, b) {\n    return comparePoint(a.x, b.x);\n  }\n\n  function comparePoint(a, b) {\n    var ca = corner(a, 1),\n        cb = corner(b, 1);\n    return ca !== cb ? ca - cb\n        : ca === 0 ? b[1] - a[1]\n        : ca === 1 ? a[0] - b[0]\n        : ca === 2 ? a[1] - b[1]\n        : b[0] - a[0];\n  }\n\n  return function(stream) {\n    var activeStream = stream,\n        bufferStream = clipBuffer(),\n        segments,\n        polygon,\n        ring,\n        x__, y__, v__, // first point\n        x_, y_, v_, // previous point\n        first,\n        clean;\n\n    var clipStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: polygonStart,\n      polygonEnd: polygonEnd\n    };\n\n    function point(x, y) {\n      if (visible(x, y)) activeStream.point(x, y);\n    }\n\n    function polygonInside() {\n      var winding = 0;\n\n      for (var i = 0, n = polygon.length; i < n; ++i) {\n        for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n          a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n          if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n          else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n        }\n      }\n\n      return winding;\n    }\n\n    // Buffer geometry within a polygon and then clip it en masse.\n    function polygonStart() {\n      activeStream = bufferStream, segments = [], polygon = [], clean = true;\n    }\n\n    function polygonEnd() {\n      var startInside = polygonInside(),\n          cleanInside = clean && startInside,\n          visible = (segments = merge(segments)).length;\n      if (cleanInside || visible) {\n        stream.polygonStart();\n        if (cleanInside) {\n          stream.lineStart();\n          interpolate(null, null, 1, stream);\n          stream.lineEnd();\n        }\n        if (visible) {\n          clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n        }\n        stream.polygonEnd();\n      }\n      activeStream = stream, segments = polygon = ring = null;\n    }\n\n    function lineStart() {\n      clipStream.point = linePoint;\n      if (polygon) polygon.push(ring = []);\n      first = true;\n      v_ = false;\n      x_ = y_ = NaN;\n    }\n\n    // TODO rather than special-case polygons, simply handle them separately.\n    // Ideally, coincident intersection points should be jittered to avoid\n    // clipping issues.\n    function lineEnd() {\n      if (segments) {\n        linePoint(x__, y__);\n        if (v__ && v_) bufferStream.rejoin();\n        segments.push(bufferStream.result());\n      }\n      clipStream.point = point;\n      if (v_) activeStream.lineEnd();\n    }\n\n    function linePoint(x, y) {\n      var v = visible(x, y);\n      if (polygon) ring.push([x, y]);\n      if (first) {\n        x__ = x, y__ = y, v__ = v;\n        first = false;\n        if (v) {\n          activeStream.lineStart();\n          activeStream.point(x, y);\n        }\n      } else {\n        if (v && v_) activeStream.point(x, y);\n        else {\n          var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n              b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n          if (clipLine(a, b, x0, y0, x1, y1)) {\n            if (!v_) {\n              activeStream.lineStart();\n              activeStream.point(a[0], a[1]);\n            }\n            activeStream.point(b[0], b[1]);\n            if (!v) activeStream.lineEnd();\n            clean = false;\n          } else if (v) {\n            activeStream.lineStart();\n            activeStream.point(x, y);\n            clean = false;\n          }\n        }\n      }\n      x_ = x, y_ = y, v_ = v;\n    }\n\n    return clipStream;\n  };\n}\n","import {Adder} from \"d3-array\";\nimport {abs, atan2, cos, radians, sin, sqrt} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nvar lengthSum,\n    lambda0,\n    sinPhi0,\n    cosPhi0;\n\nvar lengthStream = {\n  sphere: noop,\n  point: noop,\n  lineStart: lengthLineStart,\n  lineEnd: noop,\n  polygonStart: noop,\n  polygonEnd: noop\n};\n\nfunction lengthLineStart() {\n  lengthStream.point = lengthPointFirst;\n  lengthStream.lineEnd = lengthLineEnd;\n}\n\nfunction lengthLineEnd() {\n  lengthStream.point = lengthStream.lineEnd = noop;\n}\n\nfunction lengthPointFirst(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  lambda0 = lambda, sinPhi0 = sin(phi), cosPhi0 = cos(phi);\n  lengthStream.point = lengthPoint;\n}\n\nfunction lengthPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var sinPhi = sin(phi),\n      cosPhi = cos(phi),\n      delta = abs(lambda - lambda0),\n      cosDelta = cos(delta),\n      sinDelta = sin(delta),\n      x = cosPhi * sinDelta,\n      y = cosPhi0 * sinPhi - sinPhi0 * cosPhi * cosDelta,\n      z = sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosDelta;\n  lengthSum.add(atan2(sqrt(x * x + y * y), z));\n  lambda0 = lambda, sinPhi0 = sinPhi, cosPhi0 = cosPhi;\n}\n\nexport default function(object) {\n  lengthSum = new Adder();\n  stream(object, lengthStream);\n  return +lengthSum;\n}\n","import length from \"./length.js\";\n\nvar coordinates = [null, null],\n    object = {type: \"LineString\", coordinates: coordinates};\n\nexport default function(a, b) {\n  coordinates[0] = a;\n  coordinates[1] = b;\n  return length(object);\n}\n","import {range} from \"d3-array\";\nimport {abs, ceil, epsilon} from \"./math.js\";\n\nfunction graticuleX(y0, y1, dy) {\n  var y = range(y0, y1 - epsilon, dy).concat(y1);\n  return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n  var x = range(x0, x1 - epsilon, dx).concat(x1);\n  return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nexport default function graticule() {\n  var x1, x0, X1, X0,\n      y1, y0, Y1, Y0,\n      dx = 10, dy = dx, DX = 90, DY = 360,\n      x, y, X, Y,\n      precision = 2.5;\n\n  function graticule() {\n    return {type: \"MultiLineString\", coordinates: lines()};\n  }\n\n  function lines() {\n    return range(ceil(X0 / DX) * DX, X1, DX).map(X)\n        .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n        .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon; }).map(x))\n        .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon; }).map(y));\n  }\n\n  graticule.lines = function() {\n    return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n  };\n\n  graticule.outline = function() {\n    return {\n      type: \"Polygon\",\n      coordinates: [\n        X(X0).concat(\n        Y(Y1).slice(1),\n        X(X1).reverse().slice(1),\n        Y(Y0).reverse().slice(1))\n      ]\n    };\n  };\n\n  graticule.extent = function(_) {\n    if (!arguments.length) return graticule.extentMinor();\n    return graticule.extentMajor(_).extentMinor(_);\n  };\n\n  graticule.extentMajor = function(_) {\n    if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n    X0 = +_[0][0], X1 = +_[1][0];\n    Y0 = +_[0][1], Y1 = +_[1][1];\n    if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n    if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n    return graticule.precision(precision);\n  };\n\n  graticule.extentMinor = function(_) {\n    if (!arguments.length) return [[x0, y0], [x1, y1]];\n    x0 = +_[0][0], x1 = +_[1][0];\n    y0 = +_[0][1], y1 = +_[1][1];\n    if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n    if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n    return graticule.precision(precision);\n  };\n\n  graticule.step = function(_) {\n    if (!arguments.length) return graticule.stepMinor();\n    return graticule.stepMajor(_).stepMinor(_);\n  };\n\n  graticule.stepMajor = function(_) {\n    if (!arguments.length) return [DX, DY];\n    DX = +_[0], DY = +_[1];\n    return graticule;\n  };\n\n  graticule.stepMinor = function(_) {\n    if (!arguments.length) return [dx, dy];\n    dx = +_[0], dy = +_[1];\n    return graticule;\n  };\n\n  graticule.precision = function(_) {\n    if (!arguments.length) return precision;\n    precision = +_;\n    x = graticuleX(y0, y1, 90);\n    y = graticuleY(x0, x1, precision);\n    X = graticuleX(Y0, Y1, 90);\n    Y = graticuleY(X0, X1, precision);\n    return graticule;\n  };\n\n  return graticule\n      .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]])\n      .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);\n}\n\nexport function graticule10() {\n  return graticule()();\n}\n","export default x => x;\n","import {Adder} from \"d3-array\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = new Adder(),\n    areaRingSum = new Adder(),\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar areaStream = {\n  point: noop,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: function() {\n    areaStream.lineStart = areaRingStart;\n    areaStream.lineEnd = areaRingEnd;\n  },\n  polygonEnd: function() {\n    areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n    areaSum.add(abs(areaRingSum));\n    areaRingSum = new Adder();\n  },\n  result: function() {\n    var area = areaSum / 2;\n    areaSum = new Adder();\n    return area;\n  }\n};\n\nfunction areaRingStart() {\n  areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n  areaStream.point = areaPoint;\n  x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n  areaRingSum.add(y0 * x - x0 * y);\n  x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n  areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","import noop from \"../noop.js\";\n\nvar x0 = Infinity,\n    y0 = x0,\n    x1 = -x0,\n    y1 = x1;\n\nvar boundsStream = {\n  point: boundsPoint,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: noop,\n  polygonEnd: noop,\n  result: function() {\n    var bounds = [[x0, y0], [x1, y1]];\n    x1 = y1 = -(y0 = x0 = Infinity);\n    return bounds;\n  }\n};\n\nfunction boundsPoint(x, y) {\n  if (x < x0) x0 = x;\n  if (x > x1) x1 = x;\n  if (y < y0) y0 = y;\n  if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import {sqrt} from \"../math.js\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n    Y0 = 0,\n    Z0 = 0,\n    X1 = 0,\n    Y1 = 0,\n    Z1 = 0,\n    X2 = 0,\n    Y2 = 0,\n    Z2 = 0,\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar centroidStream = {\n  point: centroidPoint,\n  lineStart: centroidLineStart,\n  lineEnd: centroidLineEnd,\n  polygonStart: function() {\n    centroidStream.lineStart = centroidRingStart;\n    centroidStream.lineEnd = centroidRingEnd;\n  },\n  polygonEnd: function() {\n    centroidStream.point = centroidPoint;\n    centroidStream.lineStart = centroidLineStart;\n    centroidStream.lineEnd = centroidLineEnd;\n  },\n  result: function() {\n    var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n        : Z1 ? [X1 / Z1, Y1 / Z1]\n        : Z0 ? [X0 / Z0, Y0 / Z0]\n        : [NaN, NaN];\n    X0 = Y0 = Z0 =\n    X1 = Y1 = Z1 =\n    X2 = Y2 = Z2 = 0;\n    return centroid;\n  }\n};\n\nfunction centroidPoint(x, y) {\n  X0 += x;\n  Y0 += y;\n  ++Z0;\n}\n\nfunction centroidLineStart() {\n  centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n  centroidStream.point = centroidPointLine;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n  var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n  X1 += z * (x0 + x) / 2;\n  Y1 += z * (y0 + y) / 2;\n  Z1 += z;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n  centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n  centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n  centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n  centroidStream.point = centroidPointRing;\n  centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n  var dx = x - x0,\n      dy = y - y0,\n      z = sqrt(dx * dx + dy * dy);\n\n  X1 += z * (x0 + x) / 2;\n  Y1 += z * (y0 + y) / 2;\n  Z1 += z;\n\n  z = y0 * x - x0 * y;\n  X2 += z * (x0 + x);\n  Y2 += z * (y0 + y);\n  Z2 += z * 3;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {tau} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nexport default function PathContext(context) {\n  this._context = context;\n}\n\nPathContext.prototype = {\n  _radius: 4.5,\n  pointRadius: function(_) {\n    return this._radius = _, this;\n  },\n  polygonStart: function() {\n    this._line = 0;\n  },\n  polygonEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line === 0) this._context.closePath();\n    this._point = NaN;\n  },\n  point: function(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._context.moveTo(x, y);\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._context.lineTo(x, y);\n        break;\n      }\n      default: {\n        this._context.moveTo(x + this._radius, y);\n        this._context.arc(x, y, this._radius, 0, tau);\n        break;\n      }\n    }\n  },\n  result: noop\n};\n","import {Adder} from \"d3-array\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = new Adder(),\n    lengthRing,\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar lengthStream = {\n  point: noop,\n  lineStart: function() {\n    lengthStream.point = lengthPointFirst;\n  },\n  lineEnd: function() {\n    if (lengthRing) lengthPoint(x00, y00);\n    lengthStream.point = noop;\n  },\n  polygonStart: function() {\n    lengthRing = true;\n  },\n  polygonEnd: function() {\n    lengthRing = null;\n  },\n  result: function() {\n    var length = +lengthSum;\n    lengthSum = new Adder();\n    return length;\n  }\n};\n\nfunction lengthPointFirst(x, y) {\n  lengthStream.point = lengthPoint;\n  x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n  x0 -= x, y0 -= y;\n  lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n  x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","// Simple caching for constant-radius points.\nlet cacheDigits, cacheAppend, cacheRadius, cacheCircle;\n\nexport default class PathString {\n  constructor(digits) {\n    this._append = digits == null ? append : appendRound(digits);\n    this._radius = 4.5;\n    this._ = \"\";\n  }\n  pointRadius(_) {\n    this._radius = +_;\n    return this;\n  }\n  polygonStart() {\n    this._line = 0;\n  }\n  polygonEnd() {\n    this._line = NaN;\n  }\n  lineStart() {\n    this._point = 0;\n  }\n  lineEnd() {\n    if (this._line === 0) this._ += \"Z\";\n    this._point = NaN;\n  }\n  point(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._append`M${x},${y}`;\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._append`L${x},${y}`;\n        break;\n      }\n      default: {\n        this._append`M${x},${y}`;\n        if (this._radius !== cacheRadius || this._append !== cacheAppend) {\n          const r = this._radius;\n          const s = this._;\n          this._ = \"\"; // stash the old string so we can cache the circle path fragment\n          this._append`m0,${r}a${r},${r} 0 1,1 0,${-2 * r}a${r},${r} 0 1,1 0,${2 * r}z`;\n          cacheRadius = r;\n          cacheAppend = this._append;\n          cacheCircle = this._;\n          this._ = s;\n        }\n        this._ += cacheCircle;\n        break;\n      }\n    }\n  }\n  result() {\n    const result = this._;\n    this._ = \"\";\n    return result.length ? result : null;\n  }\n}\n\nfunction append(strings) {\n  let i = 1;\n  this._ += strings[0];\n  for (const j = strings.length; i < j; ++i) {\n    this._ += arguments[i] + strings[i];\n  }\n}\n\nfunction appendRound(digits) {\n  const d = Math.floor(digits);\n  if (!(d >= 0)) throw new RangeError(`invalid digits: ${digits}`);\n  if (d > 15) return append;\n  if (d !== cacheDigits) {\n    const k = 10 ** d;\n    cacheDigits = d;\n    cacheAppend = function append(strings) {\n      let i = 1;\n      this._ += strings[0];\n      for (const j = strings.length; i < j; ++i) {\n        this._ += Math.round(arguments[i] * k) / k + strings[i];\n      }\n    };\n  }\n  return cacheAppend;\n}\n","import identity from \"../identity.js\";\nimport stream from \"../stream.js\";\nimport pathArea from \"./area.js\";\nimport pathBounds from \"./bounds.js\";\nimport pathCentroid from \"./centroid.js\";\nimport PathContext from \"./context.js\";\nimport pathMeasure from \"./measure.js\";\nimport PathString from \"./string.js\";\n\nexport default function(projection, context) {\n  let digits = 3,\n      pointRadius = 4.5,\n      projectionStream,\n      contextStream;\n\n  function path(object) {\n    if (object) {\n      if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n      stream(object, projectionStream(contextStream));\n    }\n    return contextStream.result();\n  }\n\n  path.area = function(object) {\n    stream(object, projectionStream(pathArea));\n    return pathArea.result();\n  };\n\n  path.measure = function(object) {\n    stream(object, projectionStream(pathMeasure));\n    return pathMeasure.result();\n  };\n\n  path.bounds = function(object) {\n    stream(object, projectionStream(pathBounds));\n    return pathBounds.result();\n  };\n\n  path.centroid = function(object) {\n    stream(object, projectionStream(pathCentroid));\n    return pathCentroid.result();\n  };\n\n  path.projection = function(_) {\n    if (!arguments.length) return projection;\n    projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream;\n    return path;\n  };\n\n  path.context = function(_) {\n    if (!arguments.length) return context;\n    contextStream = _ == null ? (context = null, new PathString(digits)) : new PathContext(context = _);\n    if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n    return path;\n  };\n\n  path.pointRadius = function(_) {\n    if (!arguments.length) return pointRadius;\n    pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n    return path;\n  };\n\n  path.digits = function(_) {\n    if (!arguments.length) return digits;\n    if (_ == null) digits = null;\n    else {\n      const d = Math.floor(_);\n      if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n      digits = d;\n    }\n    if (context === null) contextStream = new PathString(digits);\n    return path;\n  };\n\n  return path.projection(projection).digits(digits).context(context);\n}\n","export default function(methods) {\n  return {\n    stream: transformer(methods)\n  };\n}\n\nexport function transformer(methods) {\n  return function(stream) {\n    var s = new TransformStream;\n    for (var key in methods) s[key] = methods[key];\n    s.stream = stream;\n    return s;\n  };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n  constructor: TransformStream,\n  point: function(x, y) { this.stream.point(x, y); },\n  sphere: function() { this.stream.sphere(); },\n  lineStart: function() { this.stream.lineStart(); },\n  lineEnd: function() { this.stream.lineEnd(); },\n  polygonStart: function() { this.stream.polygonStart(); },\n  polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","import {default as geoStream} from \"../stream.js\";\nimport boundsStream from \"../path/bounds.js\";\n\nfunction fit(projection, fitBounds, object) {\n  var clip = projection.clipExtent && projection.clipExtent();\n  projection.scale(150).translate([0, 0]);\n  if (clip != null) projection.clipExtent(null);\n  geoStream(object, projection.stream(boundsStream));\n  fitBounds(boundsStream.result());\n  if (clip != null) projection.clipExtent(clip);\n  return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n  return fit(projection, function(b) {\n    var w = extent[1][0] - extent[0][0],\n        h = extent[1][1] - extent[0][1],\n        k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n        x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n        y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nexport function fitSize(projection, size, object) {\n  return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n  return fit(projection, function(b) {\n    var w = +width,\n        k = w / (b[1][0] - b[0][0]),\n        x = (w - k * (b[1][0] + b[0][0])) / 2,\n        y = -k * b[0][1];\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n  return fit(projection, function(b) {\n    var h = +height,\n        k = h / (b[1][1] - b[0][1]),\n        x = -k * b[0][0],\n        y = (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n","import {cartesian} from \"../cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math.js\";\nimport {transformer} from \"../transform.js\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n    cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n  return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n  return transformer({\n    point: function(x, y) {\n      x = project(x, y);\n      this.stream.point(x[0], x[1]);\n    }\n  });\n}\n\nfunction resample(project, delta2) {\n\n  function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n    var dx = x1 - x0,\n        dy = y1 - y0,\n        d2 = dx * dx + dy * dy;\n    if (d2 > 4 * delta2 && depth--) {\n      var a = a0 + a1,\n          b = b0 + b1,\n          c = c0 + c1,\n          m = sqrt(a * a + b * b + c * c),\n          phi2 = asin(c /= m),\n          lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n          p = project(lambda2, phi2),\n          x2 = p[0],\n          y2 = p[1],\n          dx2 = x2 - x0,\n          dy2 = y2 - y0,\n          dz = dy * dx2 - dx * dy2;\n      if (dz * dz / d2 > delta2 // perpendicular projected distance\n          || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n          || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n        resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n        stream.point(x2, y2);\n        resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n      }\n    }\n  }\n  return function(stream) {\n    var lambda00, x00, y00, a00, b00, c00, // first point\n        lambda0, x0, y0, a0, b0, c0; // previous point\n\n    var resampleStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n      polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n    };\n\n    function point(x, y) {\n      x = project(x, y);\n      stream.point(x[0], x[1]);\n    }\n\n    function lineStart() {\n      x0 = NaN;\n      resampleStream.point = linePoint;\n      stream.lineStart();\n    }\n\n    function linePoint(lambda, phi) {\n      var c = cartesian([lambda, phi]), p = project(lambda, phi);\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n      stream.point(x0, y0);\n    }\n\n    function lineEnd() {\n      resampleStream.point = point;\n      stream.lineEnd();\n    }\n\n    function ringStart() {\n      lineStart();\n      resampleStream.point = ringPoint;\n      resampleStream.lineEnd = ringEnd;\n    }\n\n    function ringPoint(lambda, phi) {\n      linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n      resampleStream.point = linePoint;\n    }\n\n    function ringEnd() {\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n      resampleStream.lineEnd = lineEnd;\n      lineEnd();\n    }\n\n    return resampleStream;\n  };\n}\n","import clipAntimeridian from \"../clip/antimeridian.js\";\nimport clipCircle from \"../clip/circle.js\";\nimport clipRectangle from \"../clip/rectangle.js\";\nimport compose from \"../compose.js\";\nimport identity from \"../identity.js\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math.js\";\nimport {rotateRadians} from \"../rotation.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport resample from \"./resample.js\";\n\nvar transformRadians = transformer({\n  point: function(x, y) {\n    this.stream.point(x * radians, y * radians);\n  }\n});\n\nfunction transformRotate(rotate) {\n  return transformer({\n    point: function(x, y) {\n      var r = rotate(x, y);\n      return this.stream.point(r[0], r[1]);\n    }\n  });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n  function transform(x, y) {\n    x *= sx; y *= sy;\n    return [dx + k * x, dy - k * y];\n  }\n  transform.invert = function(x, y) {\n    return [(x - dx) / k * sx, (dy - y) / k * sy];\n  };\n  return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n  if (!alpha) return scaleTranslate(k, dx, dy, sx, sy);\n  var cosAlpha = cos(alpha),\n      sinAlpha = sin(alpha),\n      a = cosAlpha * k,\n      b = sinAlpha * k,\n      ai = cosAlpha / k,\n      bi = sinAlpha / k,\n      ci = (sinAlpha * dy - cosAlpha * dx) / k,\n      fi = (sinAlpha * dx + cosAlpha * dy) / k;\n  function transform(x, y) {\n    x *= sx; y *= sy;\n    return [a * x - b * y + dx, dy - b * x - a * y];\n  }\n  transform.invert = function(x, y) {\n    return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n  };\n  return transform;\n}\n\nexport default function projection(project) {\n  return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n  var project,\n      k = 150, // scale\n      x = 480, y = 250, // translate\n      lambda = 0, phi = 0, // center\n      deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n      alpha = 0, // post-rotate angle\n      sx = 1, // reflectX\n      sy = 1, // reflectX\n      theta = null, preclip = clipAntimeridian, // pre-clip angle\n      x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n      delta2 = 0.5, // precision\n      projectResample,\n      projectTransform,\n      projectRotateTransform,\n      cache,\n      cacheStream;\n\n  function projection(point) {\n    return projectRotateTransform(point[0] * radians, point[1] * radians);\n  }\n\n  function invert(point) {\n    point = projectRotateTransform.invert(point[0], point[1]);\n    return point && [point[0] * degrees, point[1] * degrees];\n  }\n\n  projection.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n  };\n\n  projection.preclip = function(_) {\n    return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n  };\n\n  projection.postclip = function(_) {\n    return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n  };\n\n  projection.clipAngle = function(_) {\n    return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n  };\n\n  projection.clipExtent = function(_) {\n    return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  projection.scale = function(_) {\n    return arguments.length ? (k = +_, recenter()) : k;\n  };\n\n  projection.translate = function(_) {\n    return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n  };\n\n  projection.center = function(_) {\n    return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n  };\n\n  projection.rotate = function(_) {\n    return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n  };\n\n  projection.angle = function(_) {\n    return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n  };\n\n  projection.reflectX = function(_) {\n    return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n  };\n\n  projection.reflectY = function(_) {\n    return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n  };\n\n  projection.precision = function(_) {\n    return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n  };\n\n  projection.fitExtent = function(extent, object) {\n    return fitExtent(projection, extent, object);\n  };\n\n  projection.fitSize = function(size, object) {\n    return fitSize(projection, size, object);\n  };\n\n  projection.fitWidth = function(width, object) {\n    return fitWidth(projection, width, object);\n  };\n\n  projection.fitHeight = function(height, object) {\n    return fitHeight(projection, height, object);\n  };\n\n  function recenter() {\n    var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n        transform = scaleTranslateRotate(k, x - center[0], y - center[1], sx, sy, alpha);\n    rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n    projectTransform = compose(project, transform);\n    projectRotateTransform = compose(rotate, projectTransform);\n    projectResample = resample(projectTransform, delta2);\n    return reset();\n  }\n\n  function reset() {\n    cache = cacheStream = null;\n    return projection;\n  }\n\n  return function() {\n    project = projectAt.apply(this, arguments);\n    projection.invert = project.invert && invert;\n    return recenter();\n  };\n}\n","export var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var ceil = Math.ceil;\nexport var cos = Math.cos;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var pow = Math.pow;\nexport var round = Math.round;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sin = Math.sin;\nexport var tan = Math.tan;\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var sqrt1_2 = Math.SQRT1_2;\nexport var sqrt2 = sqrt(2);\nexport var sqrtPi = sqrt(pi);\nexport var tau = pi * 2;\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport function sinci(x) {\n  return x ? x / Math.sin(x) : 1;\n}\n\nexport function asin(x) {\n  return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function sqrt(x) {\n  return x > 0 ? Math.sqrt(x) : 0;\n}\n\nexport function tanh(x) {\n  x = exp(2 * x);\n  return (x - 1) / (x + 1);\n}\n\nexport function sinh(x) {\n  return (exp(x) - exp(-x)) / 2;\n}\n\nexport function cosh(x) {\n  return (exp(x) + exp(-x)) / 2;\n}\n\nexport function arsinh(x) {\n  return log(x + sqrt(x * x + 1));\n}\n\nexport function arcosh(x) {\n  return log(x + sqrt(x * x - 1));\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, degrees, epsilon2, floor, max, min, pi, radians, sign} from \"./math.js\";\n\nvar K = [\n  [0.9986, -0.062],\n  [1.0000, 0.0000],\n  [0.9986, 0.0620],\n  [0.9954, 0.1240],\n  [0.9900, 0.1860],\n  [0.9822, 0.2480],\n  [0.9730, 0.3100],\n  [0.9600, 0.3720],\n  [0.9427, 0.4340],\n  [0.9216, 0.4958],\n  [0.8962, 0.5571],\n  [0.8679, 0.6176],\n  [0.8350, 0.6769],\n  [0.7986, 0.7346],\n  [0.7597, 0.7903],\n  [0.7186, 0.8435],\n  [0.6732, 0.8936],\n  [0.6213, 0.9394],\n  [0.5722, 0.9761],\n  [0.5322, 1.0000]\n];\n\nK.forEach(function(d) {\n  d[1] *= 1.593415793900743;\n});\n\nexport function robinsonRaw(lambda, phi) {\n  var i = min(18, abs(phi) * 36 / pi),\n      i0 = floor(i),\n      di = i - i0,\n      ax = (k = K[i0])[0],\n      ay = k[1],\n      bx = (k = K[++i0])[0],\n      by = k[1],\n      cx = (k = K[min(19, ++i0)])[0],\n      cy = k[1],\n      k;\n  return [\n    lambda * (bx + di * (cx - ax) / 2 + di * di * (cx - 2 * bx + ax) / 2),\n    sign(phi) * (by + di * (cy - ay) / 2 + di * di * (cy - 2 * by + ay) / 2)\n  ];\n}\n\nrobinsonRaw.invert = function(x, y) {\n  var phi = y * 90,\n      i = min(18, abs(phi / 5)),\n      i0 = max(0, floor(i));\n  do {\n    var ay = K[i0][1],\n        by = K[i0 + 1][1],\n        cy = K[min(19, i0 + 2)][1],\n        u = cy - ay,\n        v = cy - 2 * by + ay,\n        t = 2 * (abs(y) - by) / u,\n        c = v / u,\n        di = t * (1 - c * t * (1 - 2 * c * t));\n    if (di >= 0 || i0 === 1) {\n      phi = (y >= 0 ? 5 : -5) * (di + i);\n      var j = 50, delta;\n      do {\n        i = min(18, abs(phi) / 5);\n        i0 = floor(i);\n        di = i - i0;\n        ay = K[i0][1];\n        by = K[i0 + 1][1];\n        cy = K[min(19, i0 + 2)][1];\n        phi -= (delta = sign(y) * (by + di * (cy - ay) / 2 + di * di * (cy - 2 * by + ay) / 2) - y) * degrees;\n      } while (abs(delta) > epsilon2 && --j > 0);\n      break;\n    }\n  } while (--i0 >= 0);\n  var ax = K[i0][0],\n      bx = K[i0 + 1][0],\n      cx = K[min(19, i0 + 2)][0];\n  return [\n    x / (bx + di * (cx - ax) / 2 + di * di * (cx - 2 * bx + ax) / 2),\n    phi * radians\n  ];\n};\n\nexport default function() {\n  return projection(robinsonRaw)\n      .scale(152.63);\n}\n","var frame = 0, // is an animation frame pending?\n    timeout = 0, // is a timeout pending?\n    interval = 0, // are any timers active?\n    pokeDelay = 1000, // how frequently we check for clock skew\n    taskHead,\n    taskTail,\n    clockLast = 0,\n    clockNow = 0,\n    clockSkew = 0,\n    clock = typeof performance === \"object\" && performance.now ? performance : Date,\n    setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n  clockNow = 0;\n}\n\nexport function Timer() {\n  this._call =\n  this._time =\n  this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n  constructor: Timer,\n  restart: function(callback, delay, time) {\n    if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n    if (!this._next && taskTail !== this) {\n      if (taskTail) taskTail._next = this;\n      else taskHead = this;\n      taskTail = this;\n    }\n    this._call = callback;\n    this._time = time;\n    sleep();\n  },\n  stop: function() {\n    if (this._call) {\n      this._call = null;\n      this._time = Infinity;\n      sleep();\n    }\n  }\n};\n\nexport function timer(callback, delay, time) {\n  var t = new Timer;\n  t.restart(callback, delay, time);\n  return t;\n}\n\nexport function timerFlush() {\n  now(); // Get the current time, if not already set.\n  ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n  var t = taskHead, e;\n  while (t) {\n    if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n    t = t._next;\n  }\n  --frame;\n}\n\nfunction wake() {\n  clockNow = (clockLast = clock.now()) + clockSkew;\n  frame = timeout = 0;\n  try {\n    timerFlush();\n  } finally {\n    frame = 0;\n    nap();\n    clockNow = 0;\n  }\n}\n\nfunction poke() {\n  var now = clock.now(), delay = now - clockLast;\n  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n  var t0, t1 = taskHead, t2, time = Infinity;\n  while (t1) {\n    if (t1._call) {\n      if (time > t1._time) time = t1._time;\n      t0 = t1, t1 = t1._next;\n    } else {\n      t2 = t1._next, t1._next = null;\n      t1 = t0 ? t0._next = t2 : taskHead = t2;\n    }\n  }\n  taskTail = t0;\n  sleep(time);\n}\n\nfunction sleep(time) {\n  if (frame) return; // Soonest alarm already set, or will be.\n  if (timeout) timeout = clearTimeout(timeout);\n  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n  if (delay > 24) {\n    if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n    if (interval) interval = clearInterval(interval);\n  } else {\n    if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n    frame = 1, setFrame(wake);\n  }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n  var t = new Timer;\n  delay = delay == null ? 0 : +delay;\n  t.restart(elapsed => {\n    t.stop();\n    callback(elapsed + delay);\n  }, delay, time);\n  return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n  var schedules = node.__transition;\n  if (!schedules) node.__transition = {};\n  else if (id in schedules) return;\n  create(node, id, {\n    name: name,\n    index: index, // For context during callback.\n    group: group, // For context during callback.\n    on: emptyOn,\n    tween: emptyTween,\n    time: timing.time,\n    delay: timing.delay,\n    duration: timing.duration,\n    ease: timing.ease,\n    timer: null,\n    state: CREATED\n  });\n}\n\nexport function init(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n  return schedule;\n}\n\nexport function set(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n  return schedule;\n}\n\nexport function get(node, id) {\n  var schedule = node.__transition;\n  if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n  return schedule;\n}\n\nfunction create(node, id, self) {\n  var schedules = node.__transition,\n      tween;\n\n  // Initialize the self timer when the transition is created.\n  // Note the actual delay is not known until the first callback!\n  schedules[id] = self;\n  self.timer = timer(schedule, 0, self.time);\n\n  function schedule(elapsed) {\n    self.state = SCHEDULED;\n    self.timer.restart(start, self.delay, self.time);\n\n    // If the elapsed delay is less than our first sleep, start immediately.\n    if (self.delay <= elapsed) start(elapsed - self.delay);\n  }\n\n  function start(elapsed) {\n    var i, j, n, o;\n\n    // If the state is not SCHEDULED, then we previously errored on start.\n    if (self.state !== SCHEDULED) return stop();\n\n    for (i in schedules) {\n      o = schedules[i];\n      if (o.name !== self.name) continue;\n\n      // While this element already has a starting transition during this frame,\n      // defer starting an interrupting transition until that transition has a\n      // chance to tick (and possibly end); see d3/d3-transition#54!\n      if (o.state === STARTED) return timeout(start);\n\n      // Interrupt the active transition, if any.\n      if (o.state === RUNNING) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n\n      // Cancel any pre-empted transitions.\n      else if (+i < id) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n    }\n\n    // Defer the first tick to end of the current frame; see d3/d3#1576.\n    // Note the transition may be canceled after start and before the first tick!\n    // Note this must be scheduled before the start event; see d3/d3-transition#16!\n    // Assuming this is successful, subsequent callbacks go straight to tick.\n    timeout(function() {\n      if (self.state === STARTED) {\n        self.state = RUNNING;\n        self.timer.restart(tick, self.delay, self.time);\n        tick(elapsed);\n      }\n    });\n\n    // Dispatch the start event.\n    // Note this must be done before the tween are initialized.\n    self.state = STARTING;\n    self.on.call(\"start\", node, node.__data__, self.index, self.group);\n    if (self.state !== STARTING) return; // interrupted\n    self.state = STARTED;\n\n    // Initialize the tween, deleting null tween.\n    tween = new Array(n = self.tween.length);\n    for (i = 0, j = -1; i < n; ++i) {\n      if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n        tween[++j] = o;\n      }\n    }\n    tween.length = j + 1;\n  }\n\n  function tick(elapsed) {\n    var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n        i = -1,\n        n = tween.length;\n\n    while (++i < n) {\n      tween[i].call(node, t);\n    }\n\n    // Dispatch the end event.\n    if (self.state === ENDING) {\n      self.on.call(\"end\", node, node.__data__, self.index, self.group);\n      stop();\n    }\n  }\n\n  function stop() {\n    self.state = ENDED;\n    self.timer.stop();\n    delete schedules[id];\n    for (var i in schedules) return; // eslint-disable-line no-unused-vars\n    delete node.__transition;\n  }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n  var schedules = node.__transition,\n      schedule,\n      active,\n      empty = true,\n      i;\n\n  if (!schedules) return;\n\n  name = name == null ? null : name + \"\";\n\n  for (i in schedules) {\n    if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n    active = schedule.state > STARTING && schedule.state < ENDING;\n    schedule.state = ENDED;\n    schedule.timer.stop();\n    schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n    delete schedules[i];\n  }\n\n  if (empty) delete node.__transition;\n}\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n  return this.each(function() {\n    interrupt(this, name);\n  });\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n  var tween0, tween1;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = tween0 = tween;\n      for (var i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1 = tween1.slice();\n          tween1.splice(i, 1);\n          break;\n        }\n      }\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nfunction tweenFunction(id, name, value) {\n  var tween0, tween1;\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = (tween0 = tween).slice();\n      for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1[i] = t;\n          break;\n        }\n      }\n      if (i === n) tween1.push(t);\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nexport default function(name, value) {\n  var id = this._id;\n\n  name += \"\";\n\n  if (arguments.length < 2) {\n    var tween = get(this.node(), id).tween;\n    for (var i = 0, n = tween.length, t; i < n; ++i) {\n      if ((t = tween[i]).name === name) {\n        return t.value;\n      }\n    }\n    return null;\n  }\n\n  return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n  var id = transition._id;\n\n  transition.each(function() {\n    var schedule = set(this, id);\n    (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n  });\n\n  return function(node) {\n    return get(node, id).value[name];\n  };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n  var c;\n  return (typeof b === \"number\" ? interpolateNumber\n      : b instanceof color ? interpolateRgb\n      : (c = color(b)) ? (b = c, interpolateRgb)\n      : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttribute(name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttributeNS(fullname.space, fullname.local);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttribute(name);\n    string0 = this.getAttribute(name);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n    string0 = this.getAttributeNS(fullname.space, fullname.local);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n  return this.attrTween(name, typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n      : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n      : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n  return function(t) {\n    this.setAttribute(name, i.call(this, t));\n  };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n  return function(t) {\n    this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n  };\n}\n\nfunction attrTweenNS(fullname, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nfunction attrTween(name, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value) {\n  var key = \"attr.\" + name;\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  var fullname = namespace(name);\n  return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n  return function() {\n    init(this, id).delay = +value.apply(this, arguments);\n  };\n}\n\nfunction delayConstant(id, value) {\n  return value = +value, function() {\n    init(this, id).delay = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? delayFunction\n          : delayConstant)(id, value))\n      : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n  return function() {\n    set(this, id).duration = +value.apply(this, arguments);\n  };\n}\n\nfunction durationConstant(id, value) {\n  return value = +value, function() {\n    set(this, id).duration = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? durationFunction\n          : durationConstant)(id, value))\n      : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    set(this, id).ease = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each(easeConstant(id, value))\n      : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (typeof v !== \"function\") throw new Error;\n    set(this, id).ease = v;\n  };\n}\n\nexport default function(value) {\n  if (typeof value !== \"function\") throw new Error;\n  return this.each(easeVarying(this._id, value));\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n  if (transition._id !== this._id) throw new Error;\n\n  for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n  return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n    var i = t.indexOf(\".\");\n    if (i >= 0) t = t.slice(0, i);\n    return !t || t === \"start\";\n  });\n}\n\nfunction onFunction(id, name, listener) {\n  var on0, on1, sit = start(name) ? init : set;\n  return function() {\n    var schedule = sit(this, id),\n        on = schedule.on;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, listener) {\n  var id = this._id;\n\n  return arguments.length < 2\n      ? get(this.node(), id).on.on(name)\n      : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n  return function() {\n    var parent = this.parentNode;\n    for (var i in this.__transition) if (+i !== id) return;\n    if (parent) parent.removeChild(this);\n  };\n}\n\nexport default function() {\n  return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n        schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n          if (child = children[k]) {\n            schedule(child, name, id, k, children, inherit);\n          }\n        }\n        subgroups.push(children);\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, parents, name, id);\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n  return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        string1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, string10 = string1);\n  };\n}\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = style(this, name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction styleFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        value1 = value(this),\n        string1 = value1 + \"\";\n    if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction styleMaybeRemove(id, name) {\n  var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n  return function() {\n    var schedule = set(this, id),\n        on = schedule.on,\n        listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, value, priority) {\n  var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n  return value == null ? this\n      .styleTween(name, styleNull(name, i))\n      .on(\"end.style.\" + name, styleRemove(name))\n    : typeof value === \"function\" ? this\n      .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n      .each(styleMaybeRemove(this._id, name))\n    : this\n      .styleTween(name, styleConstant(name, i, value), priority)\n      .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n  return function(t) {\n    this.style.setProperty(name, i.call(this, t), priority);\n  };\n}\n\nfunction styleTween(name, value, priority) {\n  var t, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n    return t;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value, priority) {\n  var key = \"style.\" + (name += \"\");\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var value1 = value(this);\n    this.textContent = value1 == null ? \"\" : value1;\n  };\n}\n\nexport default function(value) {\n  return this.tween(\"text\", typeof value === \"function\"\n      ? textFunction(tweenValue(this, \"text\", value))\n      : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n  return function(t) {\n    this.textContent = i.call(this, t);\n  };\n}\n\nfunction textTween(value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(value) {\n  var key = \"text\";\n  if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, textTween(value));\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n  var name = this._name,\n      id0 = this._id,\n      id1 = newId();\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        var inherit = get(node, id0);\n        schedule(node, name, id1, i, group, {\n          time: inherit.time + inherit.delay + inherit.duration,\n          delay: 0,\n          duration: inherit.duration,\n          ease: inherit.ease\n        });\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id1);\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n  var on0, on1, that = this, id = that._id, size = that.size();\n  return new Promise(function(resolve, reject) {\n    var cancel = {value: reject},\n        end = {value: function() { if (--size === 0) resolve(); }};\n\n    that.each(function() {\n      var schedule = set(this, id),\n          on = schedule.on;\n\n      // If this node shared a dispatch with the previous node,\n      // just assign the updated shared dispatch and we’re done!\n      // Otherwise, copy-on-write.\n      if (on !== on0) {\n        on1 = (on0 = on).copy();\n        on1._.cancel.push(cancel);\n        on1._.interrupt.push(cancel);\n        on1._.end.push(end);\n      }\n\n      schedule.on = on1;\n    });\n\n    // The selection was empty, resolve end immediately\n    if (size === 0) resolve();\n  });\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n  this._groups = groups;\n  this._parents = parents;\n  this._name = name;\n  this._id = id;\n}\n\nexport default function transition(name) {\n  return selection().transition(name);\n}\n\nexport function newId() {\n  return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n  constructor: Transition,\n  select: transition_select,\n  selectAll: transition_selectAll,\n  selectChild: selection_prototype.selectChild,\n  selectChildren: selection_prototype.selectChildren,\n  filter: transition_filter,\n  merge: transition_merge,\n  selection: transition_selection,\n  transition: transition_transition,\n  call: selection_prototype.call,\n  nodes: selection_prototype.nodes,\n  node: selection_prototype.node,\n  size: selection_prototype.size,\n  empty: selection_prototype.empty,\n  each: selection_prototype.each,\n  on: transition_on,\n  attr: transition_attr,\n  attrTween: transition_attrTween,\n  style: transition_style,\n  styleTween: transition_styleTween,\n  text: transition_text,\n  textTween: transition_textTween,\n  remove: transition_remove,\n  tween: transition_tween,\n  delay: transition_delay,\n  duration: transition_duration,\n  ease: transition_ease,\n  easeVarying: transition_easeVarying,\n  end: transition_end,\n  [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","export function cubicIn(t) {\n  return t * t * t;\n}\n\nexport function cubicOut(t) {\n  return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n  time: null, // Set on use.\n  delay: 0,\n  duration: 250,\n  ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n  var timing;\n  while (!(timing = node.__transition) || !(timing = timing[id])) {\n    if (!(node = node.parentNode)) {\n      throw new Error(`transition ${id} not found`);\n    }\n  }\n  return timing;\n}\n\nexport default function(name) {\n  var id,\n      timing;\n\n  if (name instanceof Transition) {\n    id = name._id, name = name._name;\n  } else {\n    id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n  }\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        schedule(node, name, id, i, group, timing || inherit(node, id));\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","export default x => () => x;\n","export default function ZoomEvent(type, {\n  sourceEvent,\n  target,\n  transform,\n  dispatch\n}) {\n  Object.defineProperties(this, {\n    type: {value: type, enumerable: true, configurable: true},\n    sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n    target: {value: target, enumerable: true, configurable: true},\n    transform: {value: transform, enumerable: true, configurable: true},\n    _: {value: dispatch}\n  });\n}\n","export function Transform(k, x, y) {\n  this.k = k;\n  this.x = x;\n  this.y = y;\n}\n\nTransform.prototype = {\n  constructor: Transform,\n  scale: function(k) {\n    return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n  },\n  translate: function(x, y) {\n    return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n  },\n  apply: function(point) {\n    return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n  },\n  applyX: function(x) {\n    return x * this.k + this.x;\n  },\n  applyY: function(y) {\n    return y * this.k + this.y;\n  },\n  invert: function(location) {\n    return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n  },\n  invertX: function(x) {\n    return (x - this.x) / this.k;\n  },\n  invertY: function(y) {\n    return (y - this.y) / this.k;\n  },\n  rescaleX: function(x) {\n    return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n  },\n  rescaleY: function(y) {\n    return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n  },\n  toString: function() {\n    return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n  }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n  while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n  return node.__zoom;\n}\n","export function nopropagation(event) {\n  event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolateZoom} from \"d3-interpolate\";\nimport {select, pointer} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport ZoomEvent from \"./event.js\";\nimport {Transform, identity} from \"./transform.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\n// Ignore right-click, since that should open the context menu.\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\nfunction defaultFilter(event) {\n  return (!event.ctrlKey || event.type === 'wheel') && !event.button;\n}\n\nfunction defaultExtent() {\n  var e = this;\n  if (e instanceof SVGElement) {\n    e = e.ownerSVGElement || e;\n    if (e.hasAttribute(\"viewBox\")) {\n      e = e.viewBox.baseVal;\n      return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n    }\n    return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n  }\n  return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n  return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta(event) {\n  return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n  var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n      dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n      dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n      dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n  return transform.translate(\n    dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n    dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n  );\n}\n\nexport default function() {\n  var filter = defaultFilter,\n      extent = defaultExtent,\n      constrain = defaultConstrain,\n      wheelDelta = defaultWheelDelta,\n      touchable = defaultTouchable,\n      scaleExtent = [0, Infinity],\n      translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n      duration = 250,\n      interpolate = interpolateZoom,\n      listeners = dispatch(\"start\", \"zoom\", \"end\"),\n      touchstarting,\n      touchfirst,\n      touchending,\n      touchDelay = 500,\n      wheelDelay = 150,\n      clickDistance2 = 0,\n      tapDistance = 10;\n\n  function zoom(selection) {\n    selection\n        .property(\"__zoom\", defaultTransform)\n        .on(\"wheel.zoom\", wheeled, {passive: false})\n        .on(\"mousedown.zoom\", mousedowned)\n        .on(\"dblclick.zoom\", dblclicked)\n      .filter(touchable)\n        .on(\"touchstart.zoom\", touchstarted)\n        .on(\"touchmove.zoom\", touchmoved)\n        .on(\"touchend.zoom touchcancel.zoom\", touchended)\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  zoom.transform = function(collection, transform, point, event) {\n    var selection = collection.selection ? collection.selection() : collection;\n    selection.property(\"__zoom\", defaultTransform);\n    if (collection !== selection) {\n      schedule(collection, transform, point, event);\n    } else {\n      selection.interrupt().each(function() {\n        gesture(this, arguments)\n          .event(event)\n          .start()\n          .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n          .end();\n      });\n    }\n  };\n\n  zoom.scaleBy = function(selection, k, p, event) {\n    zoom.scaleTo(selection, function() {\n      var k0 = this.__zoom.k,\n          k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n      return k0 * k1;\n    }, p, event);\n  };\n\n  zoom.scaleTo = function(selection, k, p, event) {\n    zoom.transform(selection, function() {\n      var e = extent.apply(this, arguments),\n          t0 = this.__zoom,\n          p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\n          p1 = t0.invert(p0),\n          k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n      return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n    }, p, event);\n  };\n\n  zoom.translateBy = function(selection, x, y, event) {\n    zoom.transform(selection, function() {\n      return constrain(this.__zoom.translate(\n        typeof x === \"function\" ? x.apply(this, arguments) : x,\n        typeof y === \"function\" ? y.apply(this, arguments) : y\n      ), extent.apply(this, arguments), translateExtent);\n    }, null, event);\n  };\n\n  zoom.translateTo = function(selection, x, y, p, event) {\n    zoom.transform(selection, function() {\n      var e = extent.apply(this, arguments),\n          t = this.__zoom,\n          p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\n      return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(\n        typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n        typeof y === \"function\" ? -y.apply(this, arguments) : -y\n      ), e, translateExtent);\n    }, p, event);\n  };\n\n  function scale(transform, k) {\n    k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n    return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n  }\n\n  function translate(transform, p0, p1) {\n    var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n    return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n  }\n\n  function centroid(extent) {\n    return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n  }\n\n  function schedule(transition, transform, point, event) {\n    transition\n        .on(\"start.zoom\", function() { gesture(this, arguments).event(event).start(); })\n        .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).event(event).end(); })\n        .tween(\"zoom\", function() {\n          var that = this,\n              args = arguments,\n              g = gesture(that, args).event(event),\n              e = extent.apply(that, args),\n              p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\n              w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n              a = that.__zoom,\n              b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n              i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n          return function(t) {\n            if (t === 1) t = b; // Avoid rounding error on end.\n            else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n            g.zoom(null, t);\n          };\n        });\n  }\n\n  function gesture(that, args, clean) {\n    return (!clean && that.__zooming) || new Gesture(that, args);\n  }\n\n  function Gesture(that, args) {\n    this.that = that;\n    this.args = args;\n    this.active = 0;\n    this.sourceEvent = null;\n    this.extent = extent.apply(that, args);\n    this.taps = 0;\n  }\n\n  Gesture.prototype = {\n    event: function(event) {\n      if (event) this.sourceEvent = event;\n      return this;\n    },\n    start: function() {\n      if (++this.active === 1) {\n        this.that.__zooming = this;\n        this.emit(\"start\");\n      }\n      return this;\n    },\n    zoom: function(key, transform) {\n      if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n      if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n      if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n      this.that.__zoom = transform;\n      this.emit(\"zoom\");\n      return this;\n    },\n    end: function() {\n      if (--this.active === 0) {\n        delete this.that.__zooming;\n        this.emit(\"end\");\n      }\n      return this;\n    },\n    emit: function(type) {\n      var d = select(this.that).datum();\n      listeners.call(\n        type,\n        this.that,\n        new ZoomEvent(type, {\n          sourceEvent: this.sourceEvent,\n          target: zoom,\n          type,\n          transform: this.that.__zoom,\n          dispatch: listeners\n        }),\n        d\n      );\n    }\n  };\n\n  function wheeled(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var g = gesture(this, args).event(event),\n        t = this.__zoom,\n        k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n        p = pointer(event);\n\n    // If the mouse is in the same location as before, reuse it.\n    // If there were recent wheel events, reset the wheel idle timeout.\n    if (g.wheel) {\n      if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n        g.mouse[1] = t.invert(g.mouse[0] = p);\n      }\n      clearTimeout(g.wheel);\n    }\n\n    // If this wheel event won’t trigger a transform change, ignore it.\n    else if (t.k === k) return;\n\n    // Otherwise, capture the mouse point and location at the start.\n    else {\n      g.mouse = [p, t.invert(p)];\n      interrupt(this);\n      g.start();\n    }\n\n    noevent(event);\n    g.wheel = setTimeout(wheelidled, wheelDelay);\n    g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n    function wheelidled() {\n      g.wheel = null;\n      g.end();\n    }\n  }\n\n  function mousedowned(event, ...args) {\n    if (touchending || !filter.apply(this, arguments)) return;\n    var currentTarget = event.currentTarget,\n        g = gesture(this, args, true).event(event),\n        v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n        p = pointer(event, currentTarget),\n        x0 = event.clientX,\n        y0 = event.clientY;\n\n    dragDisable(event.view);\n    nopropagation(event);\n    g.mouse = [p, this.__zoom.invert(p)];\n    interrupt(this);\n    g.start();\n\n    function mousemoved(event) {\n      noevent(event);\n      if (!g.moved) {\n        var dx = event.clientX - x0, dy = event.clientY - y0;\n        g.moved = dx * dx + dy * dy > clickDistance2;\n      }\n      g.event(event)\n       .zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\n    }\n\n    function mouseupped(event) {\n      v.on(\"mousemove.zoom mouseup.zoom\", null);\n      dragEnable(event.view, g.moved);\n      noevent(event);\n      g.event(event).end();\n    }\n  }\n\n  function dblclicked(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var t0 = this.__zoom,\n        p0 = pointer(event.changedTouches ? event.changedTouches[0] : event, this),\n        p1 = t0.invert(p0),\n        k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n        t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);\n\n    noevent(event);\n    if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0, event);\n    else select(this).call(zoom.transform, t1, p0, event);\n  }\n\n  function touchstarted(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var touches = event.touches,\n        n = touches.length,\n        g = gesture(this, args, event.changedTouches.length === n).event(event),\n        started, i, t, p;\n\n    nopropagation(event);\n    for (i = 0; i < n; ++i) {\n      t = touches[i], p = pointer(t, this);\n      p = [p, this.__zoom.invert(p), t.identifier];\n      if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n      else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n    }\n\n    if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n    if (started) {\n      if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n      interrupt(this);\n      g.start();\n    }\n  }\n\n  function touchmoved(event, ...args) {\n    if (!this.__zooming) return;\n    var g = gesture(this, args).event(event),\n        touches = event.changedTouches,\n        n = touches.length, i, t, p, l;\n\n    noevent(event);\n    for (i = 0; i < n; ++i) {\n      t = touches[i], p = pointer(t, this);\n      if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n      else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n    }\n    t = g.that.__zoom;\n    if (g.touch1) {\n      var p0 = g.touch0[0], l0 = g.touch0[1],\n          p1 = g.touch1[0], l1 = g.touch1[1],\n          dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n          dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n      t = scale(t, Math.sqrt(dp / dl));\n      p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n      l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n    }\n    else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n    else return;\n\n    g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n  }\n\n  function touchended(event, ...args) {\n    if (!this.__zooming) return;\n    var g = gesture(this, args).event(event),\n        touches = event.changedTouches,\n        n = touches.length, i, t;\n\n    nopropagation(event);\n    if (touchending) clearTimeout(touchending);\n    touchending = setTimeout(function() { touchending = null; }, touchDelay);\n    for (i = 0; i < n; ++i) {\n      t = touches[i];\n      if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n      else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n    }\n    if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n    if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n    else {\n      g.end();\n      // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n      if (g.taps === 2) {\n        t = pointer(t, this);\n        if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\n          var p = select(this).on(\"dblclick.zoom\");\n          if (p) p.apply(this, arguments);\n        }\n      }\n    }\n  }\n\n  zoom.wheelDelta = function(_) {\n    return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\n  };\n\n  zoom.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\n  };\n\n  zoom.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\n  };\n\n  zoom.extent = function(_) {\n    return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n  };\n\n  zoom.scaleExtent = function(_) {\n    return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n  };\n\n  zoom.translateExtent = function(_) {\n    return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n  };\n\n  zoom.constrain = function(_) {\n    return arguments.length ? (constrain = _, zoom) : constrain;\n  };\n\n  zoom.duration = function(_) {\n    return arguments.length ? (duration = +_, zoom) : duration;\n  };\n\n  zoom.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, zoom) : interpolate;\n  };\n\n  zoom.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? zoom : value;\n  };\n\n  zoom.clickDistance = function(_) {\n    return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n  };\n\n  zoom.tapDistance = function(_) {\n    return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\n  };\n\n  return zoom;\n}\n","export default function(x) {\n  return x;\n}\n","import identity from \"./identity.js\";\n\nexport default function(transform) {\n  if (transform == null) return identity;\n  var x0,\n      y0,\n      kx = transform.scale[0],\n      ky = transform.scale[1],\n      dx = transform.translate[0],\n      dy = transform.translate[1];\n  return function(input, i) {\n    if (!i) x0 = y0 = 0;\n    var j = 2, n = input.length, output = new Array(n);\n    output[0] = (x0 += input[0]) * kx + dx;\n    output[1] = (y0 += input[1]) * ky + dy;\n    while (j < n) output[j] = input[j], ++j;\n    return output;\n  };\n}\n","export default function(array, n) {\n  var t, j = array.length, i = j - n;\n  while (i < --j) t = array[i], array[i++] = array[j], array[j] = t;\n}\n","import reverse from \"./reverse.js\";\nimport transform from \"./transform.js\";\n\nexport default function(topology, o) {\n  if (typeof o === \"string\") o = topology.objects[o];\n  return o.type === \"GeometryCollection\"\n      ? {type: \"FeatureCollection\", features: o.geometries.map(function(o) { return feature(topology, o); })}\n      : feature(topology, o);\n}\n\nfunction feature(topology, o) {\n  var id = o.id,\n      bbox = o.bbox,\n      properties = o.properties == null ? {} : o.properties,\n      geometry = object(topology, o);\n  return id == null && bbox == null ? {type: \"Feature\", properties: properties, geometry: geometry}\n      : bbox == null ? {type: \"Feature\", id: id, properties: properties, geometry: geometry}\n      : {type: \"Feature\", id: id, bbox: bbox, properties: properties, geometry: geometry};\n}\n\nexport function object(topology, o) {\n  var transformPoint = transform(topology.transform),\n      arcs = topology.arcs;\n\n  function arc(i, points) {\n    if (points.length) points.pop();\n    for (var a = arcs[i < 0 ? ~i : i], k = 0, n = a.length; k < n; ++k) {\n      points.push(transformPoint(a[k], k));\n    }\n    if (i < 0) reverse(points, n);\n  }\n\n  function point(p) {\n    return transformPoint(p);\n  }\n\n  function line(arcs) {\n    var points = [];\n    for (var i = 0, n = arcs.length; i < n; ++i) arc(arcs[i], points);\n    if (points.length < 2) points.push(points[0]); // This should never happen per the specification.\n    return points;\n  }\n\n  function ring(arcs) {\n    var points = line(arcs);\n    while (points.length < 4) points.push(points[0]); // This may happen if an arc has only two points.\n    return points;\n  }\n\n  function polygon(arcs) {\n    return arcs.map(ring);\n  }\n\n  function geometry(o) {\n    var type = o.type, coordinates;\n    switch (type) {\n      case \"GeometryCollection\": return {type: type, geometries: o.geometries.map(geometry)};\n      case \"Point\": coordinates = point(o.coordinates); break;\n      case \"MultiPoint\": coordinates = o.coordinates.map(point); break;\n      case \"LineString\": coordinates = line(o.arcs); break;\n      case \"MultiLineString\": coordinates = o.arcs.map(line); break;\n      case \"Polygon\": coordinates = polygon(o.arcs); break;\n      case \"MultiPolygon\": coordinates = o.arcs.map(polygon); break;\n      default: return null;\n    }\n    return {type: type, coordinates: coordinates};\n  }\n\n  return geometry(o);\n}\n","/**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n *  else `false`.\n */\nfunction baseLt(value, other) {\n  return value < other;\n}\n\nmodule.exports = baseLt;\n","var baseExtremum = require('./_baseExtremum'),\n    baseLt = require('./_baseLt'),\n    identity = require('./identity');\n\n/**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\nfunction min(array) {\n  return (array && array.length)\n    ? baseExtremum(array, identity, baseLt)\n    : undefined;\n}\n\nmodule.exports = min;\n","var arrayMap = require('./_arrayMap');\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n  return arrayMap(props, function(key) {\n    return object[key];\n  });\n}\n\nmodule.exports = baseValues;\n","var baseValues = require('./_baseValues'),\n    keys = require('./keys');\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n  return object == null ? [] : baseValues(object, keys(object));\n}\n\nmodule.exports = values;\n","import { scaleSequential } from 'd3-scale'\nimport type { ScaleSequential } from 'd3-scale'\nimport get from 'lodash/get'\nimport maxFn from 'lodash/max'\nimport minFn from 'lodash/min'\nimport values from 'lodash/values'\nimport { computed, toValue } from 'vue'\nimport type { ComputedRef, MaybeRefOrGetter } from 'vue'\n\n/**\n * Reactive inputs driving {@link useChoropleth}. They mirror the\n * `ChoroplethMap` component's loaded data, the color-scale bounds and the\n * endpoint colors, accepted as plain values, refs or getters so the composable\n * adapts to how the caller wires its state.\n */\nexport interface UseChoroplethOptions {\n  /**\n   * The map's loaded data, keyed by feature identifier, as exposed by `useChart`.\n   */\n  loadedData: MaybeRefOrGetter<Record<string, number> | null>\n  /**\n   * Path (dot notation supported) to a feature's identifier inside the geojson\n   * datum, used to look its value up in `loadedData`.\n   */\n  topojsonObjectsPath: MaybeRefOrGetter<string | string[]>\n  /**\n   * Forced maximum value for the color scale, or `null` to derive it from the data.\n   */\n  max: MaybeRefOrGetter<number | null>\n  /**\n   * Forced minimum value for the color scale, or `null` to derive it from the data.\n   */\n  min: MaybeRefOrGetter<number | null>\n  /**\n   * A custom scale function overriding the default sequential scale, or `null`\n   * to use the default.\n   */\n  featureColorScale: MaybeRefOrGetter<((v: any) => string) | null>\n  /**\n   * Color mapped to the scale's low end.\n   */\n  colorScaleStart: MaybeRefOrGetter<string>\n  /**\n   * Color mapped to the scale's high end.\n   */\n  colorScaleEnd: MaybeRefOrGetter<string>\n}\n\n/**\n * Reactive API returned by {@link useChoropleth}.\n */\nexport interface UseChoropleth {\n  /**\n   * The maximum value used by the color scale (forced or derived).\n   */\n  maxValue: ComputedRef<number>\n  /**\n   * The minimum value used by the color scale (forced or derived).\n   */\n  minValue: ComputedRef<number>\n  /**\n   * The default sequential scale, from the start color to the end color.\n   */\n  defaultFeatureColorScale: ComputedRef<ScaleSequential<string>>\n  /**\n   * The active scale function: the custom one when provided, the default otherwise.\n   */\n  featureColorScaleFunction: ComputedRef<(v: any) => string>\n  /**\n   * Maps a geojson datum to its color, or `null` when the feature has no data.\n   */\n  featureColor: ComputedRef<(d: any) => string | null>\n}\n\n/**\n * Owns the pure color-scale logic of the `ChoroplethMap` component: it derives\n * the value bounds, builds the default sequential scale between the two\n * endpoint colors, and resolves a per-feature color from the loaded data. It\n * holds no DOM state — the endpoint colors are measured by the component and\n * passed in.\n *\n * @param options - Reactive color-scale options (see {@link UseChoroplethOptions}).\n * @returns The {@link UseChoropleth} API of derived color logic.\n * @example\n * // Internal building block of the `ChoroplethMap` component; not exported\n * // from the package root. Inside a `<script setup>` block:\n * import { toRef } from 'vue'\n * import { useChoropleth } from '@/composables/useChoropleth'\n *\n * const { featureColor, maxValue } = useChoropleth({\n *   loadedData,\n *   topojsonObjectsPath: toRef(() => props.topojsonObjectsPath),\n *   max: toRef(() => props.max),\n *   min: toRef(() => props.min),\n *   featureColorScale: toRef(() => props.featureColorScale),\n *   colorScaleStart: featureColorScaleStart,\n *   colorScaleEnd: featureColorScaleEnd\n * })\n */\nexport function useChoropleth(options: UseChoroplethOptions): UseChoropleth {\n  const {\n    loadedData,\n    topojsonObjectsPath,\n    max,\n    min,\n    featureColorScale,\n    colorScaleStart,\n    colorScaleEnd\n  } = options\n\n  const maxValue = computed((): number => {\n    const forced = toValue(max)\n    if (forced !== null) {\n      return forced\n    }\n    return maxFn<number>(values(toValue(loadedData))) || 0\n  })\n\n  const minValue = computed((): number => {\n    const forced = toValue(min)\n    if (forced !== null) {\n      return forced\n    }\n    return minFn(values(toValue(loadedData))) || 0\n  })\n\n  const defaultFeatureColorScale = computed(() => {\n    return scaleSequential<string>()\n      .domain([Math.max(1, minValue.value), maxValue.value])\n      .range([toValue(colorScaleStart), toValue(colorScaleEnd)])\n  })\n\n  const featureColorScaleFunction = computed((): ((v: any) => string) => {\n    const custom = toValue(featureColorScale)\n    if (custom !== null) {\n      return custom\n    }\n    return defaultFeatureColorScale.value\n  })\n\n  const featureColor = computed(() => {\n    return (d: any): string | null => {\n      const data = toValue(loadedData)\n      const id = get(d, toValue(topojsonObjectsPath))\n      const hasIdProp = data && (id in data)\n      return hasIdProp\n        ? featureColorScaleFunction.value(data[id])\n        : null\n    }\n  })\n\n  return {\n    maxValue,\n    minValue,\n    defaultFeatureColorScale,\n    featureColorScaleFunction,\n    featureColor\n  }\n}\n\nexport default useChoropleth\n","import { geoGraticule, geoPath } from 'd3-geo'\nimport type { GeoPath, GeoProjection } from 'd3-geo'\nimport { computed, toValue } from 'vue'\nimport type { ComputedRef, MaybeRefOrGetter } from 'vue'\n\nimport type { MapTransform } from '@/types'\n\n/**\n * Reactive inputs driving {@link useMapProjection}. Everything that affects the\n * projection geometry is passed in as a plain value, ref or getter so the\n * composable adapts to how the caller wires its state. The composable holds no\n * DOM state: the measured `width`/`height` and the parsed `geojson` come from\n * the component.\n */\nexport interface UseMapProjectionOptions {\n  /**\n   * The d3-geo projection factory (for example `geoRobinson`). Called once per\n   * recomputation to obtain a fresh, mutable projection.\n   */\n  projection: MaybeRefOrGetter<(() => GeoProjection) | undefined>\n  /**\n   * The GeoJSON object the projection is fitted to (typically the topojson\n   * features collection, or the markers bounds for a symbol map).\n   */\n  geojson: MaybeRefOrGetter<any>\n  /**\n   * Measured outer width of the map, in pixels.\n   */\n  width: MaybeRefOrGetter<number>\n  /**\n   * Measured outer height of the map, in pixels.\n   */\n  height: MaybeRefOrGetter<number>\n  /**\n   * Whether the projection is spherical (a globe). Spherical maps rotate to\n   * their center and fit by height; planar maps recenter in place.\n   */\n  spherical?: MaybeRefOrGetter<boolean>\n  /**\n   * Initial center of the map as `[longitude, latitude]`, or `null` for the\n   * world origin.\n   */\n  center?: MaybeRefOrGetter<number[] | null>\n  /**\n   * The live zoom/pan transform, whose `rotateX`/`rotateY` drive the rotating\n   * projection used while a spherical map is dragged.\n   */\n  transform?: MaybeRefOrGetter<MapTransform>\n  /**\n   * Step, in degrees, of the graticule grid (parallels and meridians).\n   */\n  graticuleStep?: MaybeRefOrGetter<[number, number]>\n}\n\n/**\n * Reactive API returned by {@link useMapProjection}.\n */\nexport interface UseMapProjection {\n  /**\n   * The base projection, fitted to the map size and the geojson bounds.\n   *\n   * WARNING: this is a single d3 projection object mutated in place, not an\n   * immutable snapshot. Reading {@link initialMapProjection} or\n   * {@link rotatingMapProjection} re-centers/re-rotates THIS same instance, so\n   * its state reflects whichever of those was evaluated last. Treat it as a\n   * live view of the projection, not a stable value.\n   */\n  mapProjection: ComputedRef<GeoProjection>\n  /**\n   * The geo path generator bound to {@link mapProjection}.\n   *\n   * WARNING: this is the SAME GeoPath instance returned by\n   * {@link initialFeaturePath} — there is only one path generator. Reading\n   * `initialFeaturePath` repoints this generator at the initial projection, so\n   * both refs alias one mutated object rather than two independent generators.\n   */\n  featurePath: ComputedRef<GeoPath>\n  /**\n   * The projection used for the first render: spherical maps are rotated to\n   * their center, fitted by height and translated to the middle; planar maps\n   * are recentered on their planar center.\n   *\n   * WARNING: this does NOT return a new projection — it mutates\n   * {@link mapProjection} in place and returns that same instance. Evaluating\n   * it changes the base projection's center/rotation/translation as a side\n   * effect.\n   */\n  initialMapProjection: ComputedRef<GeoProjection>\n  /**\n   * The geo path generator bound to {@link initialMapProjection}.\n   *\n   * WARNING: this is the SAME GeoPath instance as {@link featurePath}, re-bound\n   * to {@link initialMapProjection}. Reading it repoints `featurePath` too;\n   * they are two views of one mutated generator.\n   */\n  initialFeaturePath: ComputedRef<GeoPath>\n  /**\n   * The rendered graticule grid path, drawn through {@link initialFeaturePath}.\n   */\n  initialGraticulePath: ComputedRef<string | null>\n  /**\n   * The base projection rotated by the transform's `rotateX`/`rotateY`, used\n   * while a spherical map is dragged. Falls back to {@link mapProjection} when\n   * no rotation is set.\n   *\n   * WARNING: when a rotation is set this mutates {@link mapProjection} in place\n   * (via `.rotate(...)`) and returns that same instance; it is not an\n   * independent projection.\n   */\n  rotatingMapProjection: ComputedRef<GeoProjection>\n  /**\n   * The raw graticule GeoJSON (a MultiLineString of parallels and meridians).\n   */\n  graticuleLines: ComputedRef<any>\n  /**\n   * The projection's geographic center as `[longitude, latitude]`.\n   */\n  mapCenter: ComputedRef<[number, number]>\n}\n\n/**\n * Owns the pure d3-geo projection geometry shared by the map components: it\n * fits a projection to the map size and the geojson bounds, derives the geo\n * path generators, and handles the spherical/planar centering and rotation\n * variants. It holds no DOM state — the measured size and parsed geojson are\n * passed in, and rendering stays in the component.\n *\n * @remarks The returned projection/path refs are mutating VIEWS over two shared\n * d3 objects, not independent snapshots: there is one projection (mutated in\n * place by `initialMapProjection`/`rotatingMapProjection`) and one GeoPath\n * (`featurePath` and `initialFeaturePath` are the same instance, re-bound on\n * read). Reading one ref can change another's state as a side effect. See the\n * per-field warnings on {@link UseMapProjection}.\n * @param options - Reactive projection options (see {@link UseMapProjectionOptions}).\n * @returns The {@link UseMapProjection} API of derived projection geometry.\n * @example\n * // Internal building block of the map components; not exported from the\n * // package root. Inside a `<script setup>` block:\n * import { toRef } from 'vue'\n * import { useMapProjection } from '@/composables/useMapProjection'\n *\n * const { featurePath, initialFeaturePath } = useMapProjection({\n *   projection: toRef(() => props.projection),\n *   geojson,\n *   width: mapWidth,\n *   height: mapHeight,\n *   spherical: toRef(() => props.spherical),\n *   center: toRef(() => props.center),\n *   transform: mapTransform\n * })\n */\nexport function useMapProjection(\n  options: UseMapProjectionOptions\n): UseMapProjection {\n  const {\n    projection,\n    geojson,\n    width,\n    height,\n    spherical,\n    center,\n    transform,\n    graticuleStep\n  } = options\n\n  // Spherical projections rotate the globe to face the requested center, so the\n  // rotation is the negated longitude/latitude.\n  const sphericalCenter = computed((): [number, number] => {\n    const [lng = 0, lat = 0] = toValue(center) ?? [0, 0]\n    return [-lng, -lat]\n  })\n\n  const planarCenter = computed((): [number, number] => {\n    const [lng = 0, lat = 0] = toValue(center) ?? [0, 0]\n    return [lng, lat]\n  })\n\n  const graticuleLines = computed(() => {\n    return geoGraticule().step(toValue(graticuleStep) ?? [20, 20])()\n  })\n\n  const mapProjection = computed((): GeoProjection => {\n    const projectionFactory = toValue(projection)\n    if (!projectionFactory) {\n      throw new Error('props.projection is ' + projectionFactory)\n    }\n    return projectionFactory().fitSize(\n      [toValue(width), toValue(height)],\n      toValue(geojson)\n    ) as GeoProjection\n  })\n\n  const featurePath = computed((): GeoPath => {\n    return geoPath().projection(mapProjection.value)\n  })\n\n  const initialMapProjection = computed((): GeoProjection => {\n    if (toValue(spherical)) {\n      return mapProjection.value\n        .rotate(sphericalCenter.value)\n        .fitHeight(toValue(height), toValue(geojson))\n        .translate([toValue(width) / 2, toValue(height) / 2])\n    }\n    return mapProjection.value.center(planarCenter.value)\n  })\n\n  const initialFeaturePath = computed((): GeoPath => {\n    return featurePath.value.projection(initialMapProjection.value)\n  })\n\n  const initialGraticulePath = computed((): string | null => {\n    return initialFeaturePath.value(graticuleLines.value)\n  })\n\n  const rotatingMapProjection = computed((): GeoProjection => {\n    const { rotateX = null, rotateY = null } = toValue(transform) ?? {}\n    if (rotateX !== null && rotateY !== null) {\n      return mapProjection.value.rotate([rotateX, rotateY]) ?? null\n    }\n    return mapProjection.value\n  })\n\n  const mapCenter = computed((): [number, number] => {\n    return mapProjection.value.center()\n  })\n\n  return {\n    mapProjection,\n    featurePath,\n    initialMapProjection,\n    initialFeaturePath,\n    initialGraticulePath,\n    rotatingMapProjection,\n    graticuleLines,\n    mapCenter\n  }\n}\n\nexport default useMapProjection\n","<script setup lang=\"ts\">\nimport clamp from 'lodash/clamp'\nimport debounce from 'lodash/debounce'\nimport get from 'lodash/get'\nimport kebabCase from 'lodash/kebabCase'\nimport keys from 'lodash/keys'\nimport pickBy from 'lodash/pickBy'\n\nimport { drag } from 'd3-drag'\nimport { geoRobinson } from 'd3-geo-projection'\nimport type { GeoProjection } from 'd3-geo'\nimport { json } from 'd3-fetch'\nimport { pointer as d3Pointer, select } from 'd3-selection'\nimport type { Selection } from 'd3-selection'\nimport { zoom as d3Zoom, zoomIdentity as d3ZoomIdentity } from 'd3-zoom'\nimport 'd3-transition'\nimport { feature } from 'topojson-client'\nimport type { GeometryCollection, Topology } from 'topojson-specification'\nimport type { Feature, Geometry } from 'geojson'\n\nimport {\n  ComponentPublicInstance,\n  computed,\n  provide,\n  ref,\n  toRef,\n  watch\n} from 'vue'\n\nimport { ParentKey } from '@/keys'\nimport { MapTransform, ParentMap } from '@/types'\nimport config from '@/config'\nimport configDefaults from '@/config.default'\nimport { getChartProps, useChart } from '@/composables/useChart'\nimport { useChoropleth } from '@/composables/useChoropleth'\nimport { useMapProjection } from '@/composables/useMapProjection'\nimport ScaleLegend from '@/components/Legend/LegendScale.vue'\n\ndefineOptions({\n  name: 'ChoroplethMap'\n})\n\nexport interface ChoroplethMapProps {\n  /**\n   * Covers the empty values with a hatched pattern.\n   */\n  hatchEmpty?: boolean\n  /**\n   * Hide the legend of the map.\n   */\n  hideLegend?: boolean\n  /**\n   * Change the scale function used to get calculate a feature color.\n   */\n  featureColorScale?: ((v: any) => string) | null\n  /**\n   * Change the color of the outline.\n   */\n  outlineColor?: string\n  /**\n   * Change the color of the graticule.\n   */\n  graticuleColor?: string\n  /**\n   * Maximum value to use in the color scale.\n   */\n  max?: number | null\n  /**\n   * Minimum value to use in the color scale.\n   */\n  min?: number | null\n  /**\n   * If true the map should be clickable (and zoom on a given feature).\n   */\n  clickable?: boolean\n  /**\n   * Field in the topojson containing all the feature objects.\n   */\n  topojsonObjects?: string\n  /**\n   * Field in the topojson objects containing the id of a feature. This field supports dot notation for nested values.\n   */\n  topojsonObjectsPath?: string | string[]\n  /**\n   * URL of the topojson.\n   */\n  topojsonUrl?: string\n  /**\n   * Duration of the transitions.\n   */\n  transitionDuration?: number\n  /**\n   * If true the user will be able to navigate in the map with drag and mouse wheel.\n   */\n  zoomable?: boolean\n  /**\n   * Set to true if your projection is spherical.\n   */\n  spherical?: boolean\n  /**\n   * Minimum zoom value.\n   */\n  zoomMin?: number\n  /**\n   * Maximum zoom value.\n   */\n  zoomMax?: number\n  /**\n   * Initial zoom value.\n   */\n  zoom?: number | null\n  /**\n   * Initial center of the map.\n   */\n  center?: number[] | null\n  /**\n   * Projection object from d3 to draw the features.\n   * @see https://d3js.org/d3-geo/projection\n   */\n  projection?: () => GeoProjection\n  /**\n   * If true the map will display a sphere outline around the world.\n   */\n  outline?: boolean\n  /**\n   * If true the map will display a graticule grid (representing parallels and meridians).\n   */\n  graticule?: boolean\n  /**\n   * Maximum height used by the map.\n   */\n  height?: string\n  /**\n   * Neutral color of the map's features.\n   */\n  color?: string\n  /**\n   * Neutral color of the map s features in social mode.\n   */\n  socialColor?: string\n  data?: string | Record<string, number> | null\n  dataUrlType?: 'json' | 'csv' | 'tsv'\n  chartHeightRatio?: number\n  socialMode?: boolean\n  socialModeRatio?: number\n}\n\nconst props = withDefaults(defineProps<ChoroplethMapProps>(), {\n  hatchEmpty: false,\n  hideLegend: false,\n  featureColorScale: null,\n  outlineColor: 'currentColor',\n  graticuleColor: 'currentColor',\n  max: null,\n  min: null,\n  clickable: false,\n  topojsonObjects: 'countries1',\n  topojsonObjectsPath: 'id',\n  topojsonUrl: () =>\n    config.get(\n      'map.topojson.world-countries-sans-antarctica',\n      configDefaults['map.topojson.world-countries-sans-antarctica']\n    ),\n  transitionDuration: 750,\n  zoomable: false,\n  spherical: false,\n  zoomMin: 1,\n  zoomMax: 8,\n  zoom: null,\n  center: null,\n  projection: geoRobinson,\n  outline: false,\n  graticule: false,\n  height: '300px',\n  color: '#fff',\n  socialColor: '#000',\n  data: null,\n  dataUrlType: 'json',\n  chartHeightRatio: undefined,\n  socialMode: false,\n  socialModeRatio: 5 / 4\n})\n\nconst emit = defineEmits<{\n  click: [d: any]\n  reset: []\n  zoomed: [d: any]\n  loaded: [data: Record<string, number> | null]\n  resized: []\n}>()\n\nconst resizable = ref<ComponentPublicInstance<HTMLElement> | null>(null)\nconst topojson = ref<Topology | null>(null)\nconst topojsonPromise = ref<Promise<Topology> | null>(null)\nconst mapRect = ref<DOMRect>(new DOMRect(0, 0, 0, 0))\nconst featureCursor = ref<string | null>(null)\nconst featureZoom = ref<string | null>(null)\nconst isLoaded = ref<boolean>(false)\nconst mapTransform = ref<MapTransform>({\n  k: 1,\n  x: 0,\n  y: 0,\n  rotateX: 0,\n  rotateY: 0\n})\n\nconst debouncedDraw = debounce(function () {\n  draw()\n}, 10)\n\nconst { loadedData } = useChart<Record<string, number>>(\n  resizable,\n  getChartProps(props),\n  { emit },\n  isLoaded,\n  debouncedDraw,\n  afterLoaded\n)\n\nasync function afterLoaded() {\n  return new Promise<void>((resolve) => {\n    return loadTopojson().then(() => {\n      draw()\n      resolve()\n      return\n    })\n  })\n}\n\n// The two endpoint colors are read from the rendered SVG's computed style, so\n// they stay in the component (the projection/color composables are DOM-free).\n// `socialMode` is always different from null but accessing it makes this\n// computed property reactive to social-mode toggles.\nconst featureColorScaleStart = computed(() => {\n  const defaultColor = '#fff'\n  const node = map.value?.node()\n  if (isLoaded.value && props.socialMode !== null && node) {\n    const computedStyle = window.getComputedStyle(node)\n    return computedStyle.getPropertyValue('color') || defaultColor\n  }\n  return defaultColor\n})\n\nconst featureColorScaleEnd = computed(() => {\n  const defaultColor = '#7a0177'\n  const node = map.value?.node()\n  if (isLoaded.value && node) {\n    const computedStyle = window.getComputedStyle(node)\n    return computedStyle.getPropertyValue('--bs-primary') || defaultColor\n  }\n  return defaultColor\n})\n\nconst {\n  maxValue,\n  minValue,\n  featureColorScaleFunction,\n  featureColor\n} = useChoropleth({\n  loadedData,\n  topojsonObjectsPath: toRef(() => props.topojsonObjectsPath),\n  max: toRef(() => props.max),\n  min: toRef(() => props.min),\n  featureColorScale: toRef(() => props.featureColorScale),\n  colorScaleStart: featureColorScaleStart,\n  colorScaleEnd: featureColorScaleEnd\n})\n\nconst hasCursor = computed(() => {\n  return !!featureCursor.value\n})\n\nconst hasZoom = computed(() => {\n  return !!featureZoom.value\n})\n\nconst geojson = computed(() => {\n  if (!topojson.value) {\n    return { type: 'FeatureCollection', features: [] } as const\n  }\n  const object = get(\n    topojson.value,\n    ['objects', props.topojsonObjects],\n    null\n  )\n  return feature(topojson.value, object as GeometryCollection)\n})\n\nconst mapClass = computed(() => {\n  return {\n    'choropleth-map--has-cursor': hasCursor.value,\n    'choropleth-map--has-zoom': hasZoom.value,\n    'choropleth-map--hatch-empty': props.hatchEmpty\n  }\n})\n\nconst mapZoom = computed(() => {\n  return d3Zoom()\n    .scaleExtent([props.zoomMin, props.zoomMax])\n    .translateExtent([\n      [0, 0],\n      [mapWidth.value, mapHeight.value]\n    ])\n    .on('zoom', mapZoomed)\n})\n\nconst mapSphericalZoom = computed(() => {\n  return d3Zoom()\n    .scaleExtent([props.zoomMin, props.zoomMax])\n    .on('zoom', mapSphericalZoomed)\n})\n\nconst mapRotate = computed(() => {\n  return drag().on('drag', mapRotated)\n})\n\n// The zoom behavior actually bound to the selection (see prepareZoom): spherical\n// maps scale via mapSphericalZoom, planar maps via mapZoom. Programmatic zoom\n// must dispatch through this one so the matching handler runs.\nconst activeZoomBehavior = computed(() => {\n  return props.spherical ? mapSphericalZoom.value : mapZoom.value\n})\n\nconst mapHeight = computed(() => {\n  return mapRect.value.height\n})\n\nconst mapWidth = computed(() => {\n  return mapRect.value.width\n})\n\nconst {\n  mapProjection,\n  featurePath,\n  initialFeaturePath,\n  initialGraticulePath,\n  rotatingMapProjection,\n  graticuleLines,\n  mapCenter\n} = useMapProjection({\n  projection: toRef(() => props.projection),\n  geojson,\n  width: mapWidth,\n  height: mapHeight,\n  spherical: toRef(() => props.spherical),\n  center: toRef(() => props.center),\n  transform: mapTransform\n})\n\nconst mapStyle = computed(() => {\n  const {\n    k = 0,\n    x = 0,\n    y = 0,\n    rotateX = 0,\n    rotateY = 0\n  } = mapTransform.value\n  return {\n    '--map-height': props.height,\n    '--map-color': props.color,\n    '--map-social-color': props.socialColor,\n    '--map-scale': k,\n    '--map-translate-x': x,\n    '--map-translate-y': y,\n    '--map-rotate-x': rotateX,\n    '--map-rotate-y': rotateY\n  }\n})\n\nconst map = computed(\n  (): Selection<SVGElement, unknown, null, undefined> | null => {\n    const selection = select(resizable.value).select<SVGElement>('svg')\n    if (!selection) {\n      throw new Error('Empty SVG selection')\n    }\n    return selection\n  }\n)\n\nconst transformOrigin = computed(() => {\n  return props.spherical ? '50% 50%' : '0 0'\n})\n\nfunction setMapNodeSize({ width, height }: { width: number, height: number }) {\n  const node = map.value?.node()\n  if (node) {\n    (node as any)['width'] = width;\n    (node as any)['height'] = height\n  }\n}\n\nconst cursorValue = computed(() => {\n  if (featureCursor.value && loadedData.value) {\n    return loadedData.value[featureCursor.value] ?? null\n  }\n  return null\n})\n\nconst isReady = computed(() => {\n  return isLoaded.value && topojson.value\n})\n\nfunction prepare() {\n  if (!map.value) {\n    throw new Error('Map is null')\n  }\n  // Set the map sizes\n  mapRect.value = map.value.node()?.getBoundingClientRect() as DOMRect\n  // Remove any existing country\n  map.value.selectAll('.choropleth-map__main__outline > *').remove()\n  map.value.selectAll('.choropleth-map__main__graticule > *').remove()\n  map.value.selectAll('.choropleth-map__main__features > *').remove()\n  // Return the map to allow chaining\n  return map.value\n}\n\nfunction prepareZoom() {\n  // User can zoom on the map. A spherical map rotates and scales through its\n  // dedicated behaviors; a planar map uses mapZoom. Binding both (or binding\n  // mapZoom twice) would install conflicting zoom handlers on the selection.\n  if (props.zoomable && props.spherical) {\n    map.value?.call(mapRotate.value as any).call(mapSphericalZoom.value as any)\n  }\n  else if (props.zoomable) {\n    map.value?.call(mapZoom.value as any)\n  }\n  // An initial zoom value is given\n  if (props.zoom || props.spherical) {\n    applyZoom(props.zoom ?? props.zoomMin, 0)\n  }\n}\n\nfunction draw() {\n  prepare()\n  drawOutline()\n  drawGraticule()\n  drawFeatures()\n  prepareZoom()\n}\n\nfunction drawOutline() {\n  map.value\n    ?.select('.choropleth-map__main__outline')\n    .append('path')\n    .attr('d', initialFeaturePath.value({ type: 'Sphere' }))\n    .attr('stroke', props.outlineColor)\n}\n\nfunction drawGraticule() {\n  map.value\n    ?.select('.choropleth-map__main__graticule')\n    .append('path')\n    .attr('d', initialGraticulePath.value)\n    .attr('stroke', props.graticuleColor)\n}\n\nfunction drawFeatures() {\n  const features = map.value\n    ?.select('.choropleth-map__main__features')\n    .selectAll('.choropleth-map__main__features__item')\n    .data(geojson.value.features)\n    .enter()\n    .append('path')\n  if (!features) {\n    throw new Error('features is undefined')\n  }\n  features\n    .attr('class', featureClass)\n    .attr('d', initialFeaturePath.value)\n    .on('mouseover', featureMouseOver)\n    .on('mouseleave', featureMouseLeave)\n    .on('click', mapClicked)\n    .style('color', featureColor.value)\n}\n\nfunction update() {\n  // Bind geojson features to path\n  if (!map.value) {\n    return\n  }\n  map.value\n    .selectAll('.choropleth-map__main__features__item')\n    .data(geojson.value.features)\n    .attr('class', featureClass)\n    .style('color', featureColor.value)\n}\n\nfunction featureClass(d: Feature<Geometry>) {\n  return keys(pickBy(featureClassObject(d), value => value)).join(' ')\n}\n\nfunction featureClassObject(d: Feature<Geometry>) {\n  const pathClass = 'choropleth-map__main__features__item'\n  const id = get(d, props.topojsonObjectsPath)\n  return {\n    [pathClass]: true,\n    [`${pathClass}--identifier-${kebabCase(id)}`]: true,\n    [`${pathClass}--empty`]: loadedData.value && !(id in loadedData.value),\n    [`${pathClass}--zoomed`]: featureZoom.value === id,\n    [`${pathClass}--cursored`]: featureCursor.value === id\n  }\n}\n\nfunction featureMouseLeave() {\n  featureCursor.value = null\n}\n\nfunction featureMouseOver(_event: MouseEvent, d: Feature<Geometry>) {\n  const id = get(d, props.topojsonObjectsPath)\n  const cursorId = loadedData.value && (id in loadedData.value) ? id : null\n  updateFeatureCursor(cursorId)\n}\n\nfunction updateFeatureCursor(id: any | null) {\n  featureCursor.value = id\n}\n\nasync function loadTopojson() {\n  if (!topojsonPromise.value) {\n    if (!props.topojsonUrl?.length) {\n      throw new Error('Empty topojsonUrl')\n    }\n    // json()'s generic pins the parsed shape instead of leaving it unconstrained;\n    // its signature still allows `undefined` for a failed fetch, but a rejected\n    // fetch rejects the promise rather than resolving to it, so this endpoint's\n    // response is trusted to always be a parsed Topology.\n    topojsonPromise.value = json<Topology>(props.topojsonUrl) as Promise<Topology>\n    topojson.value = await topojsonPromise.value\n  }\n  return topojsonPromise.value\n}\n\nasync function mapClicked(event: MouseEvent, d: Feature) {\n  /**\n   * A click on a feature\n   * @event click\n   * @param Clicked feature\n   */\n  emit('click', d)\n  // Don't zoom on the map feature\n  if (!props.clickable) {\n    return\n  }\n  if (featureZoom.value === get(d, props.topojsonObjectsPath)) {\n    return resetZoom(event, d)\n  }\n  // TODO CD: it was a promise, should it be one?\n  setFeatureZoom(d, d3Pointer(event, map.value?.node()))\n  /**\n   * A zoom on a feature ended\n   * @event zoomed\n   * @param Zoomed feature\n   */\n  emit('zoomed', d)\n}\n\nfunction mapSphericalZoomed({\n  transform: { k }\n}: {\n  transform: MapTransform\n}) {\n  const transform = `scale(${k})`\n  mapTransform.value = { ...mapTransform.value, k }\n  applyTransformToTrackedElements(transform)\n}\n\nfunction mapZoomed({ transform }: { transform: MapTransform }) {\n  mapTransform.value = transform\n  applyTransformToTrackedElements(transform)\n}\n\nfunction mapRotated(event: any) {\n  const { yaw, pitch } = calculateRotation(event)\n  applyRotation(yaw, pitch)\n}\n\nfunction calculateRotation(event: any) {\n  const sensitivity = 75\n  const k = sensitivity / mapProjection.value.scale()\n  const [rotateX, rotateY] = mapProjection.value.rotate()\n  const yaw = rotateX + event.dx * k\n  const pitch = rotateY - event.dy * k\n  return { yaw, pitch }\n}\n\nfunction applyTransformToTrackedElements(transform: any) {\n  map.value\n    ?.selectAll('.choropleth-map__main__tracked')\n    .attr('transform', transform)\n}\n\nfunction applyRotation(rotateX: number, rotateY: number) {\n  mapTransform.value = { ...mapTransform.value, rotateX, rotateY }\n  const featuresPaths = initialFeaturePath.value.projection(\n    rotatingMapProjection.value\n  )\n  const graticulePaths = featuresPaths(graticuleLines.value)\n  map.value\n    ?.selectAll('g.choropleth-map__main__features path')\n    .attr('d', featuresPaths as any)\n  map.value\n    ?.selectAll('g.choropleth-map__main__graticule path')\n    .attr('d', graticulePaths)\n}\n\nfunction applyZoomIdentity(\n  zoomIdentity: any,\n  pointer: number[] | null = null,\n  transitionDuration = props.transitionDuration\n) {\n  // Dispatch through the behavior actually bound to the selection so the\n  // matching handler runs (spherical applies scale only and preserves\n  // rotation; planar applies the full transform).\n  return map.value\n    ?.transition()\n    .duration(transitionDuration)\n    .call(activeZoomBehavior.value.transform as any, zoomIdentity, pointer)\n    .end()\n}\n\nfunction resetZoom(_event: MouseEvent, _d: Feature<Geometry>) {\n  map.value\n    ?.style('--map-scale', 1)\n    .transition()\n    .duration(props.transitionDuration)\n    .call((activeZoomBehavior.value as any)?.transform, d3ZoomIdentity)\n  featureZoom.value = null\n  emitResetEvent()\n}\n\nfunction emitResetEvent() {\n  /**\n   * The zoom on the map was reset to its initial <slot ate></slot>\n   * @event reset\n   */\n  emit('reset')\n}\n\nfunction setFeaturesClasses() {\n  map.value\n    ?.selectAll<SVGPathElement, Feature<Geometry>>('.choropleth-map__main__features__item')\n    .attr('class', featureClass)\n}\n\nfunction setFeatureZoom(d: Feature<Geometry>, pointer = [0, 0]) {\n  featureZoom.value = get(d, props.topojsonObjectsPath)\n  const [[x0, y0], [x1, y1]] = featurePath.value.bounds(d)\n  const scale = Math.min(\n    8,\n    0.9 / Math.max((x1 - x0) / mapWidth.value, (y1 - y0) / mapHeight.value)\n  )\n  const zoomIdentity = d3ZoomIdentity\n    .translate(mapWidth.value / 2, mapHeight.value / 2)\n    .scale(scale)\n    .translate(-(x0 + x1) / 2, -(y0 + y1) / 2)\n  return map.value\n    ?.style('--map-scale', scale)\n    .transition()\n    .duration(props.transitionDuration)\n    .call((activeZoomBehavior.value as any)?.transform, zoomIdentity, pointer)\n    .end()\n}\n\nfunction applyZoom(\n  zoom: number,\n  transitionDuration = props.transitionDuration\n) {\n  const zoomScale = clamp(zoom, props.zoomMin, props.zoomMax)\n  if (props.spherical) {\n    return setSphericalZoom(zoomScale, transitionDuration)\n  }\n  else {\n    return setPlanarZoom(zoomScale, transitionDuration)\n  }\n}\n\nfunction setSphericalZoom(zoomScale: number, transitionDuration: number) {\n  const zoomIdentity = d3ZoomIdentity.scale(zoomScale)\n  mapTransform.value = { ...mapTransform.value, k: zoomScale }\n  return applyZoomIdentity(zoomIdentity, null, transitionDuration)\n}\n\nfunction setPlanarZoom(zoomScale: number, transitionDuration: number) {\n  const [x, y] = mapProjection.value(mapCenter.value as [number, number])!\n  const [translateX, translateY] = [\n    mapWidth.value / 2 - zoomScale * x,\n    mapHeight.value / 2 - zoomScale * y\n  ]\n  const zoomIdentity = d3ZoomIdentity\n    .translate(translateX, translateY)\n    .scale(zoomScale)\n  mapTransform.value = {\n    k: zoomScale,\n    x: translateX,\n    y: translateY,\n    rotateX: 0,\n    rotateY: 0\n  }\n  return applyZoomIdentity(zoomIdentity, null, transitionDuration)\n}\n\nwatch(\n  () => props.socialMode,\n  () => {\n    draw()\n  }\n)\n\nwatch(\n  () => props.data,\n  () => {\n    update()\n  }\n)\n\nwatch(\n  () => featureZoom.value,\n  () => {\n    setFeaturesClasses()\n  }\n)\n\nwatch(\n  () => featureCursor.value,\n  () => {\n    setFeaturesClasses()\n  }\n)\n\nprovide<ParentMap>(ParentKey, {\n  mapRect,\n  mapTransform,\n  rotatingMapProjection\n})\n\ndefineExpose({\n  featureCursor,\n  loadTopojson,\n  updateFeatureCursor,\n  setMapNodeSize,\n  draw,\n  resizable\n})\n</script>\n\n<template>\n  <div\n    ref=\"resizable\"\n    :class=\"mapClass\"\n    :style=\"mapStyle\"\n    class=\"choropleth-map\"\n  >\n    <svg\n      :viewbox=\"`0 0 ${mapRect.width} ${mapRect.height}`\"\n      class=\"choropleth-map__main\"\n    >\n      <pattern\n        id=\"diagonalHatch\"\n        height=\"1\"\n        patternTransform=\"rotate(45 0 0)\"\n        patternUnits=\"userSpaceOnUse\"\n        width=\"1\"\n      >\n        <rect\n          :fill=\"featureColorScaleEnd\"\n          height=\"1\"\n          width=\"1\"\n        />\n        <line\n          :style=\"{ stroke: featureColorScaleStart, strokeWidth: 1 }\"\n          x1=\"0\"\n          x2=\"0\"\n          y1=\"0\"\n          y2=\"1\"\n        />\n      </pattern>\n      <g\n        :transform-origin=\"transformOrigin\"\n        class=\"choropleth-map__main__tracked\"\n      >\n        <g\n          v-if=\"graticule\"\n          class=\"choropleth-map__main__graticule\"\n        />\n        <g class=\"choropleth-map__main__features\" />\n        <g\n          v-if=\"outline\"\n          class=\"choropleth-map__main__outline\"\n        />\n        <slot v-if=\"isReady\" />\n      </g>\n    </svg>\n    <scale-legend\n      v-if=\"!hideLegend && isReady\"\n      :color-scale=\"featureColorScaleFunction\"\n      :color-scale-end=\"featureColorScaleEnd\"\n      :color-scale-start=\"featureColorScaleStart\"\n      :cursor-value=\"cursorValue\"\n      :max=\"maxValue\"\n      :min=\"minValue\"\n      class=\"choropleth-map__legend\"\n    >\n      <template #cursor=\"{ value }\">\n        <slot\n          name=\"legend-cursor\"\n          v-bind=\"{ value, identifier: featureCursor }\"\n        />\n      </template>\n    </scale-legend>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n\n.choropleth-map {\n  --map-scale: 1;\n  --map-color: #fff;\n  --map-social-color: #000;\n\n  position: relative;\n\n  &__main {\n    min-height: var(--map-height, 300px);\n    height: 100%;\n    width: 100%;\n    color: var(--map-color);\n\n    .chart--social-mode & {\n      color: var(--map-social-color);\n    }\n\n    &:deep(.choropleth-map__main__outline),\n    &:deep(.choropleth-map__main__graticule) {\n      fill: transparent;\n      pointer-events: none;\n      stroke-width: calc(1px / var(--map-scale, 1));\n    }\n\n    &:deep(.choropleth-map__main__features__item) {\n      stroke: currentColor;\n      stroke-width: calc(1px / var(--map-scale, 1));\n      fill: currentColor;\n      transition:\n        opacity 750ms,\n        filter 750ms,\n        fill 750ms;\n\n      .choropleth-map__main__features__item--empty {\n        opacity: 0.8;\n\n        .choropleth-map--hatch-empty & {\n          opacity: 0.3;\n          fill: url('#diagonalHatch');\n        }\n      }\n\n      .choropleth-map--has-zoom\n        &:not(.choropleth-map__main__features__item--zoomed) {\n        filter: grayscale(90%);\n      }\n    }\n  }\n\n  &__legend {\n    position: absolute;\n    left: 0;\n    bottom: 0;\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport clamp from 'lodash/clamp'\nimport debounce from 'lodash/debounce'\nimport get from 'lodash/get'\nimport kebabCase from 'lodash/kebabCase'\nimport keys from 'lodash/keys'\nimport pickBy from 'lodash/pickBy'\n\nimport { drag } from 'd3-drag'\nimport { geoRobinson } from 'd3-geo-projection'\nimport type { GeoProjection } from 'd3-geo'\nimport { json } from 'd3-fetch'\nimport { pointer as d3Pointer, select } from 'd3-selection'\nimport type { Selection } from 'd3-selection'\nimport { zoom as d3Zoom, zoomIdentity as d3ZoomIdentity } from 'd3-zoom'\nimport 'd3-transition'\nimport { feature } from 'topojson-client'\nimport type { GeometryCollection, Topology } from 'topojson-specification'\nimport type { Feature, Geometry } from 'geojson'\n\nimport {\n  ComponentPublicInstance,\n  computed,\n  provide,\n  ref,\n  toRef,\n  watch\n} from 'vue'\n\nimport { ParentKey } from '@/keys'\nimport { MapTransform, ParentMap } from '@/types'\nimport config from '@/config'\nimport configDefaults from '@/config.default'\nimport { getChartProps, useChart } from '@/composables/useChart'\nimport { useChoropleth } from '@/composables/useChoropleth'\nimport { useMapProjection } from '@/composables/useMapProjection'\nimport ScaleLegend from '@/components/Legend/LegendScale.vue'\n\ndefineOptions({\n  name: 'ChoroplethMap'\n})\n\nexport interface ChoroplethMapProps {\n  /**\n   * Covers the empty values with a hatched pattern.\n   */\n  hatchEmpty?: boolean\n  /**\n   * Hide the legend of the map.\n   */\n  hideLegend?: boolean\n  /**\n   * Change the scale function used to get calculate a feature color.\n   */\n  featureColorScale?: ((v: any) => string) | null\n  /**\n   * Change the color of the outline.\n   */\n  outlineColor?: string\n  /**\n   * Change the color of the graticule.\n   */\n  graticuleColor?: string\n  /**\n   * Maximum value to use in the color scale.\n   */\n  max?: number | null\n  /**\n   * Minimum value to use in the color scale.\n   */\n  min?: number | null\n  /**\n   * If true the map should be clickable (and zoom on a given feature).\n   */\n  clickable?: boolean\n  /**\n   * Field in the topojson containing all the feature objects.\n   */\n  topojsonObjects?: string\n  /**\n   * Field in the topojson objects containing the id of a feature. This field supports dot notation for nested values.\n   */\n  topojsonObjectsPath?: string | string[]\n  /**\n   * URL of the topojson.\n   */\n  topojsonUrl?: string\n  /**\n   * Duration of the transitions.\n   */\n  transitionDuration?: number\n  /**\n   * If true the user will be able to navigate in the map with drag and mouse wheel.\n   */\n  zoomable?: boolean\n  /**\n   * Set to true if your projection is spherical.\n   */\n  spherical?: boolean\n  /**\n   * Minimum zoom value.\n   */\n  zoomMin?: number\n  /**\n   * Maximum zoom value.\n   */\n  zoomMax?: number\n  /**\n   * Initial zoom value.\n   */\n  zoom?: number | null\n  /**\n   * Initial center of the map.\n   */\n  center?: number[] | null\n  /**\n   * Projection object from d3 to draw the features.\n   * @see https://d3js.org/d3-geo/projection\n   */\n  projection?: () => GeoProjection\n  /**\n   * If true the map will display a sphere outline around the world.\n   */\n  outline?: boolean\n  /**\n   * If true the map will display a graticule grid (representing parallels and meridians).\n   */\n  graticule?: boolean\n  /**\n   * Maximum height used by the map.\n   */\n  height?: string\n  /**\n   * Neutral color of the map's features.\n   */\n  color?: string\n  /**\n   * Neutral color of the map s features in social mode.\n   */\n  socialColor?: string\n  data?: string | Record<string, number> | null\n  dataUrlType?: 'json' | 'csv' | 'tsv'\n  chartHeightRatio?: number\n  socialMode?: boolean\n  socialModeRatio?: number\n}\n\nconst props = withDefaults(defineProps<ChoroplethMapProps>(), {\n  hatchEmpty: false,\n  hideLegend: false,\n  featureColorScale: null,\n  outlineColor: 'currentColor',\n  graticuleColor: 'currentColor',\n  max: null,\n  min: null,\n  clickable: false,\n  topojsonObjects: 'countries1',\n  topojsonObjectsPath: 'id',\n  topojsonUrl: () =>\n    config.get(\n      'map.topojson.world-countries-sans-antarctica',\n      configDefaults['map.topojson.world-countries-sans-antarctica']\n    ),\n  transitionDuration: 750,\n  zoomable: false,\n  spherical: false,\n  zoomMin: 1,\n  zoomMax: 8,\n  zoom: null,\n  center: null,\n  projection: geoRobinson,\n  outline: false,\n  graticule: false,\n  height: '300px',\n  color: '#fff',\n  socialColor: '#000',\n  data: null,\n  dataUrlType: 'json',\n  chartHeightRatio: undefined,\n  socialMode: false,\n  socialModeRatio: 5 / 4\n})\n\nconst emit = defineEmits<{\n  click: [d: any]\n  reset: []\n  zoomed: [d: any]\n  loaded: [data: Record<string, number> | null]\n  resized: []\n}>()\n\nconst resizable = ref<ComponentPublicInstance<HTMLElement> | null>(null)\nconst topojson = ref<Topology | null>(null)\nconst topojsonPromise = ref<Promise<Topology> | null>(null)\nconst mapRect = ref<DOMRect>(new DOMRect(0, 0, 0, 0))\nconst featureCursor = ref<string | null>(null)\nconst featureZoom = ref<string | null>(null)\nconst isLoaded = ref<boolean>(false)\nconst mapTransform = ref<MapTransform>({\n  k: 1,\n  x: 0,\n  y: 0,\n  rotateX: 0,\n  rotateY: 0\n})\n\nconst debouncedDraw = debounce(function () {\n  draw()\n}, 10)\n\nconst { loadedData } = useChart<Record<string, number>>(\n  resizable,\n  getChartProps(props),\n  { emit },\n  isLoaded,\n  debouncedDraw,\n  afterLoaded\n)\n\nasync function afterLoaded() {\n  return new Promise<void>((resolve) => {\n    return loadTopojson().then(() => {\n      draw()\n      resolve()\n      return\n    })\n  })\n}\n\n// The two endpoint colors are read from the rendered SVG's computed style, so\n// they stay in the component (the projection/color composables are DOM-free).\n// `socialMode` is always different from null but accessing it makes this\n// computed property reactive to social-mode toggles.\nconst featureColorScaleStart = computed(() => {\n  const defaultColor = '#fff'\n  const node = map.value?.node()\n  if (isLoaded.value && props.socialMode !== null && node) {\n    const computedStyle = window.getComputedStyle(node)\n    return computedStyle.getPropertyValue('color') || defaultColor\n  }\n  return defaultColor\n})\n\nconst featureColorScaleEnd = computed(() => {\n  const defaultColor = '#7a0177'\n  const node = map.value?.node()\n  if (isLoaded.value && node) {\n    const computedStyle = window.getComputedStyle(node)\n    return computedStyle.getPropertyValue('--bs-primary') || defaultColor\n  }\n  return defaultColor\n})\n\nconst {\n  maxValue,\n  minValue,\n  featureColorScaleFunction,\n  featureColor\n} = useChoropleth({\n  loadedData,\n  topojsonObjectsPath: toRef(() => props.topojsonObjectsPath),\n  max: toRef(() => props.max),\n  min: toRef(() => props.min),\n  featureColorScale: toRef(() => props.featureColorScale),\n  colorScaleStart: featureColorScaleStart,\n  colorScaleEnd: featureColorScaleEnd\n})\n\nconst hasCursor = computed(() => {\n  return !!featureCursor.value\n})\n\nconst hasZoom = computed(() => {\n  return !!featureZoom.value\n})\n\nconst geojson = computed(() => {\n  if (!topojson.value) {\n    return { type: 'FeatureCollection', features: [] } as const\n  }\n  const object = get(\n    topojson.value,\n    ['objects', props.topojsonObjects],\n    null\n  )\n  return feature(topojson.value, object as GeometryCollection)\n})\n\nconst mapClass = computed(() => {\n  return {\n    'choropleth-map--has-cursor': hasCursor.value,\n    'choropleth-map--has-zoom': hasZoom.value,\n    'choropleth-map--hatch-empty': props.hatchEmpty\n  }\n})\n\nconst mapZoom = computed(() => {\n  return d3Zoom()\n    .scaleExtent([props.zoomMin, props.zoomMax])\n    .translateExtent([\n      [0, 0],\n      [mapWidth.value, mapHeight.value]\n    ])\n    .on('zoom', mapZoomed)\n})\n\nconst mapSphericalZoom = computed(() => {\n  return d3Zoom()\n    .scaleExtent([props.zoomMin, props.zoomMax])\n    .on('zoom', mapSphericalZoomed)\n})\n\nconst mapRotate = computed(() => {\n  return drag().on('drag', mapRotated)\n})\n\n// The zoom behavior actually bound to the selection (see prepareZoom): spherical\n// maps scale via mapSphericalZoom, planar maps via mapZoom. Programmatic zoom\n// must dispatch through this one so the matching handler runs.\nconst activeZoomBehavior = computed(() => {\n  return props.spherical ? mapSphericalZoom.value : mapZoom.value\n})\n\nconst mapHeight = computed(() => {\n  return mapRect.value.height\n})\n\nconst mapWidth = computed(() => {\n  return mapRect.value.width\n})\n\nconst {\n  mapProjection,\n  featurePath,\n  initialFeaturePath,\n  initialGraticulePath,\n  rotatingMapProjection,\n  graticuleLines,\n  mapCenter\n} = useMapProjection({\n  projection: toRef(() => props.projection),\n  geojson,\n  width: mapWidth,\n  height: mapHeight,\n  spherical: toRef(() => props.spherical),\n  center: toRef(() => props.center),\n  transform: mapTransform\n})\n\nconst mapStyle = computed(() => {\n  const {\n    k = 0,\n    x = 0,\n    y = 0,\n    rotateX = 0,\n    rotateY = 0\n  } = mapTransform.value\n  return {\n    '--map-height': props.height,\n    '--map-color': props.color,\n    '--map-social-color': props.socialColor,\n    '--map-scale': k,\n    '--map-translate-x': x,\n    '--map-translate-y': y,\n    '--map-rotate-x': rotateX,\n    '--map-rotate-y': rotateY\n  }\n})\n\nconst map = computed(\n  (): Selection<SVGElement, unknown, null, undefined> | null => {\n    const selection = select(resizable.value).select<SVGElement>('svg')\n    if (!selection) {\n      throw new Error('Empty SVG selection')\n    }\n    return selection\n  }\n)\n\nconst transformOrigin = computed(() => {\n  return props.spherical ? '50% 50%' : '0 0'\n})\n\nfunction setMapNodeSize({ width, height }: { width: number, height: number }) {\n  const node = map.value?.node()\n  if (node) {\n    (node as any)['width'] = width;\n    (node as any)['height'] = height\n  }\n}\n\nconst cursorValue = computed(() => {\n  if (featureCursor.value && loadedData.value) {\n    return loadedData.value[featureCursor.value] ?? null\n  }\n  return null\n})\n\nconst isReady = computed(() => {\n  return isLoaded.value && topojson.value\n})\n\nfunction prepare() {\n  if (!map.value) {\n    throw new Error('Map is null')\n  }\n  // Set the map sizes\n  mapRect.value = map.value.node()?.getBoundingClientRect() as DOMRect\n  // Remove any existing country\n  map.value.selectAll('.choropleth-map__main__outline > *').remove()\n  map.value.selectAll('.choropleth-map__main__graticule > *').remove()\n  map.value.selectAll('.choropleth-map__main__features > *').remove()\n  // Return the map to allow chaining\n  return map.value\n}\n\nfunction prepareZoom() {\n  // User can zoom on the map. A spherical map rotates and scales through its\n  // dedicated behaviors; a planar map uses mapZoom. Binding both (or binding\n  // mapZoom twice) would install conflicting zoom handlers on the selection.\n  if (props.zoomable && props.spherical) {\n    map.value?.call(mapRotate.value as any).call(mapSphericalZoom.value as any)\n  }\n  else if (props.zoomable) {\n    map.value?.call(mapZoom.value as any)\n  }\n  // An initial zoom value is given\n  if (props.zoom || props.spherical) {\n    applyZoom(props.zoom ?? props.zoomMin, 0)\n  }\n}\n\nfunction draw() {\n  prepare()\n  drawOutline()\n  drawGraticule()\n  drawFeatures()\n  prepareZoom()\n}\n\nfunction drawOutline() {\n  map.value\n    ?.select('.choropleth-map__main__outline')\n    .append('path')\n    .attr('d', initialFeaturePath.value({ type: 'Sphere' }))\n    .attr('stroke', props.outlineColor)\n}\n\nfunction drawGraticule() {\n  map.value\n    ?.select('.choropleth-map__main__graticule')\n    .append('path')\n    .attr('d', initialGraticulePath.value)\n    .attr('stroke', props.graticuleColor)\n}\n\nfunction drawFeatures() {\n  const features = map.value\n    ?.select('.choropleth-map__main__features')\n    .selectAll('.choropleth-map__main__features__item')\n    .data(geojson.value.features)\n    .enter()\n    .append('path')\n  if (!features) {\n    throw new Error('features is undefined')\n  }\n  features\n    .attr('class', featureClass)\n    .attr('d', initialFeaturePath.value)\n    .on('mouseover', featureMouseOver)\n    .on('mouseleave', featureMouseLeave)\n    .on('click', mapClicked)\n    .style('color', featureColor.value)\n}\n\nfunction update() {\n  // Bind geojson features to path\n  if (!map.value) {\n    return\n  }\n  map.value\n    .selectAll('.choropleth-map__main__features__item')\n    .data(geojson.value.features)\n    .attr('class', featureClass)\n    .style('color', featureColor.value)\n}\n\nfunction featureClass(d: Feature<Geometry>) {\n  return keys(pickBy(featureClassObject(d), value => value)).join(' ')\n}\n\nfunction featureClassObject(d: Feature<Geometry>) {\n  const pathClass = 'choropleth-map__main__features__item'\n  const id = get(d, props.topojsonObjectsPath)\n  return {\n    [pathClass]: true,\n    [`${pathClass}--identifier-${kebabCase(id)}`]: true,\n    [`${pathClass}--empty`]: loadedData.value && !(id in loadedData.value),\n    [`${pathClass}--zoomed`]: featureZoom.value === id,\n    [`${pathClass}--cursored`]: featureCursor.value === id\n  }\n}\n\nfunction featureMouseLeave() {\n  featureCursor.value = null\n}\n\nfunction featureMouseOver(_event: MouseEvent, d: Feature<Geometry>) {\n  const id = get(d, props.topojsonObjectsPath)\n  const cursorId = loadedData.value && (id in loadedData.value) ? id : null\n  updateFeatureCursor(cursorId)\n}\n\nfunction updateFeatureCursor(id: any | null) {\n  featureCursor.value = id\n}\n\nasync function loadTopojson() {\n  if (!topojsonPromise.value) {\n    if (!props.topojsonUrl?.length) {\n      throw new Error('Empty topojsonUrl')\n    }\n    // json()'s generic pins the parsed shape instead of leaving it unconstrained;\n    // its signature still allows `undefined` for a failed fetch, but a rejected\n    // fetch rejects the promise rather than resolving to it, so this endpoint's\n    // response is trusted to always be a parsed Topology.\n    topojsonPromise.value = json<Topology>(props.topojsonUrl) as Promise<Topology>\n    topojson.value = await topojsonPromise.value\n  }\n  return topojsonPromise.value\n}\n\nasync function mapClicked(event: MouseEvent, d: Feature) {\n  /**\n   * A click on a feature\n   * @event click\n   * @param Clicked feature\n   */\n  emit('click', d)\n  // Don't zoom on the map feature\n  if (!props.clickable) {\n    return\n  }\n  if (featureZoom.value === get(d, props.topojsonObjectsPath)) {\n    return resetZoom(event, d)\n  }\n  // TODO CD: it was a promise, should it be one?\n  setFeatureZoom(d, d3Pointer(event, map.value?.node()))\n  /**\n   * A zoom on a feature ended\n   * @event zoomed\n   * @param Zoomed feature\n   */\n  emit('zoomed', d)\n}\n\nfunction mapSphericalZoomed({\n  transform: { k }\n}: {\n  transform: MapTransform\n}) {\n  const transform = `scale(${k})`\n  mapTransform.value = { ...mapTransform.value, k }\n  applyTransformToTrackedElements(transform)\n}\n\nfunction mapZoomed({ transform }: { transform: MapTransform }) {\n  mapTransform.value = transform\n  applyTransformToTrackedElements(transform)\n}\n\nfunction mapRotated(event: any) {\n  const { yaw, pitch } = calculateRotation(event)\n  applyRotation(yaw, pitch)\n}\n\nfunction calculateRotation(event: any) {\n  const sensitivity = 75\n  const k = sensitivity / mapProjection.value.scale()\n  const [rotateX, rotateY] = mapProjection.value.rotate()\n  const yaw = rotateX + event.dx * k\n  const pitch = rotateY - event.dy * k\n  return { yaw, pitch }\n}\n\nfunction applyTransformToTrackedElements(transform: any) {\n  map.value\n    ?.selectAll('.choropleth-map__main__tracked')\n    .attr('transform', transform)\n}\n\nfunction applyRotation(rotateX: number, rotateY: number) {\n  mapTransform.value = { ...mapTransform.value, rotateX, rotateY }\n  const featuresPaths = initialFeaturePath.value.projection(\n    rotatingMapProjection.value\n  )\n  const graticulePaths = featuresPaths(graticuleLines.value)\n  map.value\n    ?.selectAll('g.choropleth-map__main__features path')\n    .attr('d', featuresPaths as any)\n  map.value\n    ?.selectAll('g.choropleth-map__main__graticule path')\n    .attr('d', graticulePaths)\n}\n\nfunction applyZoomIdentity(\n  zoomIdentity: any,\n  pointer: number[] | null = null,\n  transitionDuration = props.transitionDuration\n) {\n  // Dispatch through the behavior actually bound to the selection so the\n  // matching handler runs (spherical applies scale only and preserves\n  // rotation; planar applies the full transform).\n  return map.value\n    ?.transition()\n    .duration(transitionDuration)\n    .call(activeZoomBehavior.value.transform as any, zoomIdentity, pointer)\n    .end()\n}\n\nfunction resetZoom(_event: MouseEvent, _d: Feature<Geometry>) {\n  map.value\n    ?.style('--map-scale', 1)\n    .transition()\n    .duration(props.transitionDuration)\n    .call((activeZoomBehavior.value as any)?.transform, d3ZoomIdentity)\n  featureZoom.value = null\n  emitResetEvent()\n}\n\nfunction emitResetEvent() {\n  /**\n   * The zoom on the map was reset to its initial <slot ate></slot>\n   * @event reset\n   */\n  emit('reset')\n}\n\nfunction setFeaturesClasses() {\n  map.value\n    ?.selectAll<SVGPathElement, Feature<Geometry>>('.choropleth-map__main__features__item')\n    .attr('class', featureClass)\n}\n\nfunction setFeatureZoom(d: Feature<Geometry>, pointer = [0, 0]) {\n  featureZoom.value = get(d, props.topojsonObjectsPath)\n  const [[x0, y0], [x1, y1]] = featurePath.value.bounds(d)\n  const scale = Math.min(\n    8,\n    0.9 / Math.max((x1 - x0) / mapWidth.value, (y1 - y0) / mapHeight.value)\n  )\n  const zoomIdentity = d3ZoomIdentity\n    .translate(mapWidth.value / 2, mapHeight.value / 2)\n    .scale(scale)\n    .translate(-(x0 + x1) / 2, -(y0 + y1) / 2)\n  return map.value\n    ?.style('--map-scale', scale)\n    .transition()\n    .duration(props.transitionDuration)\n    .call((activeZoomBehavior.value as any)?.transform, zoomIdentity, pointer)\n    .end()\n}\n\nfunction applyZoom(\n  zoom: number,\n  transitionDuration = props.transitionDuration\n) {\n  const zoomScale = clamp(zoom, props.zoomMin, props.zoomMax)\n  if (props.spherical) {\n    return setSphericalZoom(zoomScale, transitionDuration)\n  }\n  else {\n    return setPlanarZoom(zoomScale, transitionDuration)\n  }\n}\n\nfunction setSphericalZoom(zoomScale: number, transitionDuration: number) {\n  const zoomIdentity = d3ZoomIdentity.scale(zoomScale)\n  mapTransform.value = { ...mapTransform.value, k: zoomScale }\n  return applyZoomIdentity(zoomIdentity, null, transitionDuration)\n}\n\nfunction setPlanarZoom(zoomScale: number, transitionDuration: number) {\n  const [x, y] = mapProjection.value(mapCenter.value as [number, number])!\n  const [translateX, translateY] = [\n    mapWidth.value / 2 - zoomScale * x,\n    mapHeight.value / 2 - zoomScale * y\n  ]\n  const zoomIdentity = d3ZoomIdentity\n    .translate(translateX, translateY)\n    .scale(zoomScale)\n  mapTransform.value = {\n    k: zoomScale,\n    x: translateX,\n    y: translateY,\n    rotateX: 0,\n    rotateY: 0\n  }\n  return applyZoomIdentity(zoomIdentity, null, transitionDuration)\n}\n\nwatch(\n  () => props.socialMode,\n  () => {\n    draw()\n  }\n)\n\nwatch(\n  () => props.data,\n  () => {\n    update()\n  }\n)\n\nwatch(\n  () => featureZoom.value,\n  () => {\n    setFeaturesClasses()\n  }\n)\n\nwatch(\n  () => featureCursor.value,\n  () => {\n    setFeaturesClasses()\n  }\n)\n\nprovide<ParentMap>(ParentKey, {\n  mapRect,\n  mapTransform,\n  rotatingMapProjection\n})\n\ndefineExpose({\n  featureCursor,\n  loadTopojson,\n  updateFeatureCursor,\n  setMapNodeSize,\n  draw,\n  resizable\n})\n</script>\n\n<template>\n  <div\n    ref=\"resizable\"\n    :class=\"mapClass\"\n    :style=\"mapStyle\"\n    class=\"choropleth-map\"\n  >\n    <svg\n      :viewbox=\"`0 0 ${mapRect.width} ${mapRect.height}`\"\n      class=\"choropleth-map__main\"\n    >\n      <pattern\n        id=\"diagonalHatch\"\n        height=\"1\"\n        patternTransform=\"rotate(45 0 0)\"\n        patternUnits=\"userSpaceOnUse\"\n        width=\"1\"\n      >\n        <rect\n          :fill=\"featureColorScaleEnd\"\n          height=\"1\"\n          width=\"1\"\n        />\n        <line\n          :style=\"{ stroke: featureColorScaleStart, strokeWidth: 1 }\"\n          x1=\"0\"\n          x2=\"0\"\n          y1=\"0\"\n          y2=\"1\"\n        />\n      </pattern>\n      <g\n        :transform-origin=\"transformOrigin\"\n        class=\"choropleth-map__main__tracked\"\n      >\n        <g\n          v-if=\"graticule\"\n          class=\"choropleth-map__main__graticule\"\n        />\n        <g class=\"choropleth-map__main__features\" />\n        <g\n          v-if=\"outline\"\n          class=\"choropleth-map__main__outline\"\n        />\n        <slot v-if=\"isReady\" />\n      </g>\n    </svg>\n    <scale-legend\n      v-if=\"!hideLegend && isReady\"\n      :color-scale=\"featureColorScaleFunction\"\n      :color-scale-end=\"featureColorScaleEnd\"\n      :color-scale-start=\"featureColorScaleStart\"\n      :cursor-value=\"cursorValue\"\n      :max=\"maxValue\"\n      :min=\"minValue\"\n      class=\"choropleth-map__legend\"\n    >\n      <template #cursor=\"{ value }\">\n        <slot\n          name=\"legend-cursor\"\n          v-bind=\"{ value, identifier: featureCursor }\"\n        />\n      </template>\n    </scale-legend>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n\n.choropleth-map {\n  --map-scale: 1;\n  --map-color: #fff;\n  --map-social-color: #000;\n\n  position: relative;\n\n  &__main {\n    min-height: var(--map-height, 300px);\n    height: 100%;\n    width: 100%;\n    color: var(--map-color);\n\n    .chart--social-mode & {\n      color: var(--map-social-color);\n    }\n\n    &:deep(.choropleth-map__main__outline),\n    &:deep(.choropleth-map__main__graticule) {\n      fill: transparent;\n      pointer-events: none;\n      stroke-width: calc(1px / var(--map-scale, 1));\n    }\n\n    &:deep(.choropleth-map__main__features__item) {\n      stroke: currentColor;\n      stroke-width: calc(1px / var(--map-scale, 1));\n      fill: currentColor;\n      transition:\n        opacity 750ms,\n        filter 750ms,\n        fill 750ms;\n\n      .choropleth-map__main__features__item--empty {\n        opacity: 0.8;\n\n        .choropleth-map--hatch-empty & {\n          opacity: 0.3;\n          fill: url('#diagonalHatch');\n        }\n      }\n\n      .choropleth-map--has-zoom\n        &:not(.choropleth-map__main__features__item--zoomed) {\n        filter: grayscale(90%);\n      }\n    }\n  }\n\n  &__legend {\n    position: absolute;\n    left: 0;\n    bottom: 0;\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { geoDistance, GeoProjection } from 'd3-geo'\nimport { computed, inject } from 'vue'\nimport { ParentKey } from '@/keys'\nimport { ParentMap } from '@/types'\nimport { PLACEMENTS } from '@/enums'\n\ndefineOptions({\n  name: 'ChoroplethMapAnnotation'\n})\n\nexport interface ChoroplethMapAnnotationProps {\n  /**\n   * Latitude of the annotation.\n   */\n  latitude: number\n  /**\n   * Longitude of the annotation.\n   */\n  longitude: number\n  /**\n   * Maximum height of the annotation container.\n   */\n  height?: number\n  /**\n   * Maximum width of the annotation container.\n   */\n  width?: number\n  /**\n   * If true, the annotation will scale with the map zoom.\n   */\n  scale?: boolean\n  /**\n   * Text color of the annotation.\n   */\n  color?: string\n  /**\n   * Override the default drop-shadow filter applied to the annotation.\n   */\n  dropShadow?: string\n  /**\n   * Radian distance from the center of the Earth after which the annotation is hidden.\n   * The Earth's circumference can be divided into 360 degrees, or 2π radians.\n   * Therefore, 1.57 radians is approximately a quarter of π (since π≈3.14), which corresponds to\n   * a quarter of the Earth's circumference.\n   */\n  geoDistanceThreshold?: number\n  /**\n   * Placement of the annotation. Can be: top, topleft, topright, right,<br />\n   * righttop, rightbottom, bottom, bottomleft, bottomright, left, lefttop,\n   * and leftbottom. If `null`, the annotation will be centered.\n   */\n  placement?: PLACEMENTS | null\n}\n\nconst props = withDefaults(defineProps<ChoroplethMapAnnotationProps>(), {\n  height: 150,\n  width: 150,\n  scale: false,\n  color: undefined,\n  dropShadow: undefined,\n  geoDistanceThreshold: 1.57,\n  placement: null\n})\n\nconst parent = inject<ParentMap>(ParentKey)\n\nconst hasParent = computed(() => !!parent)\n\nconst mapRect = computed(() => parent?.mapRect?.value ?? { width: 0, height: 0 })\nconst rotatingMapProjection = computed(() => parent?.rotatingMapProjection?.value)\nconst mapTransform = computed(() => {\n  return parent?.mapTransform?.value ?? { k: 1, x: 0, y: 0, rotateX: 0, rotateY: 0 }\n})\n\nconst translateY = computed(() => {\n  if (isTop.value) {\n    return 0 - props.height\n  }\n  if (isBottom.value) {\n    return 0\n  }\n  return 0 - props.height / 2\n})\n\nconst isTop = computed(() => {\n  return [\n    PLACEMENTS.TOP,\n    PLACEMENTS.TOPLEFT,\n    PLACEMENTS.TOPRIGHT,\n    PLACEMENTS.LEFTTOP,\n    PLACEMENTS.RIGHTTOP\n  ].includes(props.placement as PLACEMENTS)\n})\n\nconst classList = computed(() => {\n  return {\n    'choropleth-map-annotation--center': isCenter.value,\n    'choropleth-map-annotation--right': isRight.value,\n    'choropleth-map-annotation--left': isLeft.value,\n    'choropleth-map-annotation--top': isTop.value,\n    'choropleth-map-annotation--bottom': isBottom.value\n  }\n})\n\nconst center = computed((): [number, number] => {\n  return [props.longitude, props.latitude]\n})\n\nconst projection = computed(() => {\n  return rotatingMapProjection.value as GeoProjection | undefined\n})\n\nconst position = computed(() => {\n  // Access rotation values to ensure recomputation when globe rotates\n  // (D3 projections are mutated in place, so Vue doesn't detect changes)\n  const { rotateX: _rx, rotateY: _ry } = mapTransform.value\n  const [x, y] = projection.value?.(center.value) || []\n  return { x, y }\n})\n\nconst mapK = computed((): number => {\n  return mapTransform.value.k\n})\n\nconst translateX = computed(() => {\n  if (isRight.value) {\n    return 0\n  }\n  if (isLeft.value) {\n    return 0 - props.width\n  }\n  return 0 - props.width / 2\n})\n\nconst transform = computed(() => {\n  return `translate(${translateX.value}, ${translateY.value})`\n})\n\nconst x = computed(() => {\n  return position.value.x\n})\n\nconst y = computed(() => {\n  return position.value.y\n})\n\nconst isRight = computed(() => {\n  return [\n    PLACEMENTS.RIGHT,\n    PLACEMENTS.RIGHTBOTTOM,\n    PLACEMENTS.RIGHTTOP,\n    PLACEMENTS.BOTTOMRIGHT,\n    PLACEMENTS.TOPRIGHT\n  ].includes(props.placement as PLACEMENTS)\n})\n\nconst isLeft = computed(() => {\n  return [\n    PLACEMENTS.LEFT,\n    PLACEMENTS.LEFTBOTTOM,\n    PLACEMENTS.LEFTTOP,\n    PLACEMENTS.BOTTOMLEFT,\n    PLACEMENTS.TOPLEFT\n  ].includes(props.placement as PLACEMENTS)\n})\n\nconst isBottom = computed(() => {\n  return [\n    PLACEMENTS.BOTTOM,\n    PLACEMENTS.BOTTOMLEFT,\n    PLACEMENTS.BOTTOMRIGHT,\n    PLACEMENTS.LEFTBOTTOM,\n    PLACEMENTS.RIGHTBOTTOM\n  ].includes(props.placement as PLACEMENTS)\n})\n\nconst isCenter = computed(() => {\n  return !isLeft.value && !isRight.value && !isTop.value && !isBottom.value\n})\n\nconst wrapperStyle = computed(() => {\n  return {\n    '--color': props.color,\n    '--drop-shadow': props.dropShadow,\n    '--scale': props.scale ? undefined : 1 / mapK.value,\n    '--transform-origin': wrapperTransformOrigin.value\n  }\n})\n\nconst wrapperTransformOrigin = computed(() => {\n  return `${wrapperTransformOriginX.value} ${wrapperTransformOriginY.value}`\n})\n\nconst wrapperTransformOriginX = computed(() => {\n  if (isRight.value) {\n    return 'left'\n  }\n  else if (isLeft.value) {\n    return 'right'\n  }\n  return 'center'\n})\n\nconst wrapperTransformOriginY = computed(() => {\n  if (isTop.value) {\n    return 'bottom'\n  }\n  else if (isBottom.value) {\n    return 'top'\n  }\n  return 'center'\n})\n\nconst geoDistanceFromCenter = computed(() => {\n  try {\n    if (!projection.value?.invert) {\n      return 0\n    }\n    const rect = mapRect.value\n    const mapCenter: [number, number] = projection.value.invert([\n      rect.width / 2,\n      rect.height / 2\n    ])!\n    return geoDistance(center.value, mapCenter)\n  }\n  catch (_) {\n    return 0\n  }\n})\n\nconst isVisible = computed(() => {\n  return geoDistanceFromCenter.value <= props.geoDistanceThreshold\n})\n</script>\n\n<template>\n  <g\n    v-if=\"hasParent\"\n    :class=\"classList\"\n    class=\"choropleth-map-annotation\"\n  >\n    <foreignObject\n      :height=\"height\"\n      :transform=\"transform\"\n      :width=\"width\"\n      :x=\"x\"\n      :y=\"y\"\n    >\n      <div\n        v-show=\"isVisible\"\n        :style=\"wrapperStyle\"\n        class=\"choropleth-map-annotation__wrapper\"\n      >\n        <div class=\"choropleth-map-annotation__wrapper__content\">\n          <slot />\n        </div>\n      </div>\n    </foreignObject>\n  </g>\n</template>\n\n<style lang=\"scss\" scoped>\n\n.choropleth-map-annotation {\n  --color: #{$body-color};\n  --drop-shadow: 0 0 1px #fff;\n  --scale: 1;\n  --transform-origin: 'center center';\n\n  pointer-events: none;\n  font-size: 1rem;\n  line-height: 1;\n\n  &__wrapper {\n    color: var(--color);\n    height: 100%;\n    width: 100%;\n    display: flex;\n    text-align: center;\n    justify-content: center;\n    align-items: center;\n    transform: scale(var(--scale));\n    transform-origin: var(--transform-origin);\n    filter: drop-shadow(var(--drop-shadow));\n\n    .choropleth-map-annotation--right & {\n      justify-content: start;\n      text-align: left;\n    }\n\n    .choropleth-map-annotation--left & {\n      justify-content: end;\n      text-align: right;\n    }\n\n    .choropleth-map-annotation--top & {\n      align-items: end;\n    }\n\n    .choropleth-map-annotation--bottom & {\n      align-items: start;\n    }\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { geoDistance, GeoProjection } from 'd3-geo'\nimport { computed, inject } from 'vue'\nimport { ParentKey } from '@/keys'\nimport { ParentMap } from '@/types'\nimport { PLACEMENTS } from '@/enums'\n\ndefineOptions({\n  name: 'ChoroplethMapAnnotation'\n})\n\nexport interface ChoroplethMapAnnotationProps {\n  /**\n   * Latitude of the annotation.\n   */\n  latitude: number\n  /**\n   * Longitude of the annotation.\n   */\n  longitude: number\n  /**\n   * Maximum height of the annotation container.\n   */\n  height?: number\n  /**\n   * Maximum width of the annotation container.\n   */\n  width?: number\n  /**\n   * If true, the annotation will scale with the map zoom.\n   */\n  scale?: boolean\n  /**\n   * Text color of the annotation.\n   */\n  color?: string\n  /**\n   * Override the default drop-shadow filter applied to the annotation.\n   */\n  dropShadow?: string\n  /**\n   * Radian distance from the center of the Earth after which the annotation is hidden.\n   * The Earth's circumference can be divided into 360 degrees, or 2π radians.\n   * Therefore, 1.57 radians is approximately a quarter of π (since π≈3.14), which corresponds to\n   * a quarter of the Earth's circumference.\n   */\n  geoDistanceThreshold?: number\n  /**\n   * Placement of the annotation. Can be: top, topleft, topright, right,<br />\n   * righttop, rightbottom, bottom, bottomleft, bottomright, left, lefttop,\n   * and leftbottom. If `null`, the annotation will be centered.\n   */\n  placement?: PLACEMENTS | null\n}\n\nconst props = withDefaults(defineProps<ChoroplethMapAnnotationProps>(), {\n  height: 150,\n  width: 150,\n  scale: false,\n  color: undefined,\n  dropShadow: undefined,\n  geoDistanceThreshold: 1.57,\n  placement: null\n})\n\nconst parent = inject<ParentMap>(ParentKey)\n\nconst hasParent = computed(() => !!parent)\n\nconst mapRect = computed(() => parent?.mapRect?.value ?? { width: 0, height: 0 })\nconst rotatingMapProjection = computed(() => parent?.rotatingMapProjection?.value)\nconst mapTransform = computed(() => {\n  return parent?.mapTransform?.value ?? { k: 1, x: 0, y: 0, rotateX: 0, rotateY: 0 }\n})\n\nconst translateY = computed(() => {\n  if (isTop.value) {\n    return 0 - props.height\n  }\n  if (isBottom.value) {\n    return 0\n  }\n  return 0 - props.height / 2\n})\n\nconst isTop = computed(() => {\n  return [\n    PLACEMENTS.TOP,\n    PLACEMENTS.TOPLEFT,\n    PLACEMENTS.TOPRIGHT,\n    PLACEMENTS.LEFTTOP,\n    PLACEMENTS.RIGHTTOP\n  ].includes(props.placement as PLACEMENTS)\n})\n\nconst classList = computed(() => {\n  return {\n    'choropleth-map-annotation--center': isCenter.value,\n    'choropleth-map-annotation--right': isRight.value,\n    'choropleth-map-annotation--left': isLeft.value,\n    'choropleth-map-annotation--top': isTop.value,\n    'choropleth-map-annotation--bottom': isBottom.value\n  }\n})\n\nconst center = computed((): [number, number] => {\n  return [props.longitude, props.latitude]\n})\n\nconst projection = computed(() => {\n  return rotatingMapProjection.value as GeoProjection | undefined\n})\n\nconst position = computed(() => {\n  // Access rotation values to ensure recomputation when globe rotates\n  // (D3 projections are mutated in place, so Vue doesn't detect changes)\n  const { rotateX: _rx, rotateY: _ry } = mapTransform.value\n  const [x, y] = projection.value?.(center.value) || []\n  return { x, y }\n})\n\nconst mapK = computed((): number => {\n  return mapTransform.value.k\n})\n\nconst translateX = computed(() => {\n  if (isRight.value) {\n    return 0\n  }\n  if (isLeft.value) {\n    return 0 - props.width\n  }\n  return 0 - props.width / 2\n})\n\nconst transform = computed(() => {\n  return `translate(${translateX.value}, ${translateY.value})`\n})\n\nconst x = computed(() => {\n  return position.value.x\n})\n\nconst y = computed(() => {\n  return position.value.y\n})\n\nconst isRight = computed(() => {\n  return [\n    PLACEMENTS.RIGHT,\n    PLACEMENTS.RIGHTBOTTOM,\n    PLACEMENTS.RIGHTTOP,\n    PLACEMENTS.BOTTOMRIGHT,\n    PLACEMENTS.TOPRIGHT\n  ].includes(props.placement as PLACEMENTS)\n})\n\nconst isLeft = computed(() => {\n  return [\n    PLACEMENTS.LEFT,\n    PLACEMENTS.LEFTBOTTOM,\n    PLACEMENTS.LEFTTOP,\n    PLACEMENTS.BOTTOMLEFT,\n    PLACEMENTS.TOPLEFT\n  ].includes(props.placement as PLACEMENTS)\n})\n\nconst isBottom = computed(() => {\n  return [\n    PLACEMENTS.BOTTOM,\n    PLACEMENTS.BOTTOMLEFT,\n    PLACEMENTS.BOTTOMRIGHT,\n    PLACEMENTS.LEFTBOTTOM,\n    PLACEMENTS.RIGHTBOTTOM\n  ].includes(props.placement as PLACEMENTS)\n})\n\nconst isCenter = computed(() => {\n  return !isLeft.value && !isRight.value && !isTop.value && !isBottom.value\n})\n\nconst wrapperStyle = computed(() => {\n  return {\n    '--color': props.color,\n    '--drop-shadow': props.dropShadow,\n    '--scale': props.scale ? undefined : 1 / mapK.value,\n    '--transform-origin': wrapperTransformOrigin.value\n  }\n})\n\nconst wrapperTransformOrigin = computed(() => {\n  return `${wrapperTransformOriginX.value} ${wrapperTransformOriginY.value}`\n})\n\nconst wrapperTransformOriginX = computed(() => {\n  if (isRight.value) {\n    return 'left'\n  }\n  else if (isLeft.value) {\n    return 'right'\n  }\n  return 'center'\n})\n\nconst wrapperTransformOriginY = computed(() => {\n  if (isTop.value) {\n    return 'bottom'\n  }\n  else if (isBottom.value) {\n    return 'top'\n  }\n  return 'center'\n})\n\nconst geoDistanceFromCenter = computed(() => {\n  try {\n    if (!projection.value?.invert) {\n      return 0\n    }\n    const rect = mapRect.value\n    const mapCenter: [number, number] = projection.value.invert([\n      rect.width / 2,\n      rect.height / 2\n    ])!\n    return geoDistance(center.value, mapCenter)\n  }\n  catch (_) {\n    return 0\n  }\n})\n\nconst isVisible = computed(() => {\n  return geoDistanceFromCenter.value <= props.geoDistanceThreshold\n})\n</script>\n\n<template>\n  <g\n    v-if=\"hasParent\"\n    :class=\"classList\"\n    class=\"choropleth-map-annotation\"\n  >\n    <foreignObject\n      :height=\"height\"\n      :transform=\"transform\"\n      :width=\"width\"\n      :x=\"x\"\n      :y=\"y\"\n    >\n      <div\n        v-show=\"isVisible\"\n        :style=\"wrapperStyle\"\n        class=\"choropleth-map-annotation__wrapper\"\n      >\n        <div class=\"choropleth-map-annotation__wrapper__content\">\n          <slot />\n        </div>\n      </div>\n    </foreignObject>\n  </g>\n</template>\n\n<style lang=\"scss\" scoped>\n\n.choropleth-map-annotation {\n  --color: #{$body-color};\n  --drop-shadow: 0 0 1px #fff;\n  --scale: 1;\n  --transform-origin: 'center center';\n\n  pointer-events: none;\n  font-size: 1rem;\n  line-height: 1;\n\n  &__wrapper {\n    color: var(--color);\n    height: 100%;\n    width: 100%;\n    display: flex;\n    text-align: center;\n    justify-content: center;\n    align-items: center;\n    transform: scale(var(--scale));\n    transform-origin: var(--transform-origin);\n    filter: drop-shadow(var(--drop-shadow));\n\n    .choropleth-map-annotation--right & {\n      justify-content: start;\n      text-align: left;\n    }\n\n    .choropleth-map-annotation--left & {\n      justify-content: end;\n      text-align: right;\n    }\n\n    .choropleth-map-annotation--top & {\n      align-items: end;\n    }\n\n    .choropleth-map-annotation--bottom & {\n      align-items: start;\n    }\n  }\n}\n</style>\n","var baseIteratee = require('./_baseIteratee'),\n    isArrayLike = require('./isArrayLike'),\n    keys = require('./keys');\n\n/**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n  return function(collection, predicate, fromIndex) {\n    var iterable = Object(collection);\n    if (!isArrayLike(collection)) {\n      var iteratee = baseIteratee(predicate, 3);\n      collection = keys(collection);\n      predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n    }\n    var index = findIndexFunc(collection, predicate, fromIndex);\n    return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n  };\n}\n\nmodule.exports = createFind;\n","var createFind = require('./_createFind'),\n    findIndex = require('./findIndex');\n\n/**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n *   { 'user': 'barney',  'age': 36, 'active': true },\n *   { 'user': 'fred',    'age': 40, 'active': false },\n *   { 'user': 'pebbles', 'age': 1,  'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\nvar find = createFind(findIndex);\n\nmodule.exports = find;\n","/**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction arrayAggregator(array, setter, iteratee, accumulator) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    var value = array[index];\n    setter(accumulator, value, iteratee(value), array);\n  }\n  return accumulator;\n}\n\nmodule.exports = arrayAggregator;\n","var baseEach = require('./_baseEach');\n\n/**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction baseAggregator(collection, setter, iteratee, accumulator) {\n  baseEach(collection, function(value, key, collection) {\n    setter(accumulator, value, iteratee(value), collection);\n  });\n  return accumulator;\n}\n\nmodule.exports = baseAggregator;\n","var arrayAggregator = require('./_arrayAggregator'),\n    baseAggregator = require('./_baseAggregator'),\n    baseIteratee = require('./_baseIteratee'),\n    isArray = require('./isArray');\n\n/**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\nfunction createAggregator(setter, initializer) {\n  return function(collection, iteratee) {\n    var func = isArray(collection) ? arrayAggregator : baseAggregator,\n        accumulator = initializer ? initializer() : {};\n\n    return func(collection, setter, baseIteratee(iteratee, 2), accumulator);\n  };\n}\n\nmodule.exports = createAggregator;\n","var baseAssignValue = require('./_baseAssignValue'),\n    createAggregator = require('./_createAggregator');\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 * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\nvar groupBy = createAggregator(function(result, value, key) {\n  if (hasOwnProperty.call(result, key)) {\n    result[key].push(value);\n  } else {\n    baseAssignValue(result, key, [value]);\n  }\n});\n\nmodule.exports = groupBy;\n","var baseSet = require('./_baseSet');\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n  return object == null ? object : baseSet(object, path, value);\n}\n\nmodule.exports = set;\n","var Set = require('./_Set'),\n    noop = require('./noop'),\n    setToArray = require('./_setToArray');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n  return new Set(values);\n};\n\nmodule.exports = createSet;\n","var SetCache = require('./_SetCache'),\n    arrayIncludes = require('./_arrayIncludes'),\n    arrayIncludesWith = require('./_arrayIncludesWith'),\n    cacheHas = require('./_cacheHas'),\n    createSet = require('./_createSet'),\n    setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n  var index = -1,\n      includes = arrayIncludes,\n      length = array.length,\n      isCommon = true,\n      result = [],\n      seen = result;\n\n  if (comparator) {\n    isCommon = false;\n    includes = arrayIncludesWith;\n  }\n  else if (length >= LARGE_ARRAY_SIZE) {\n    var set = iteratee ? null : createSet(array);\n    if (set) {\n      return setToArray(set);\n    }\n    isCommon = false;\n    includes = cacheHas;\n    seen = new SetCache;\n  }\n  else {\n    seen = iteratee ? [] : result;\n  }\n  outer:\n  while (++index < length) {\n    var value = array[index],\n        computed = iteratee ? iteratee(value) : value;\n\n    value = (comparator || value !== 0) ? value : 0;\n    if (isCommon && computed === computed) {\n      var seenIndex = seen.length;\n      while (seenIndex--) {\n        if (seen[seenIndex] === computed) {\n          continue outer;\n        }\n      }\n      if (iteratee) {\n        seen.push(computed);\n      }\n      result.push(value);\n    }\n    else if (!includes(seen, computed, comparator)) {\n      if (seen !== result) {\n        seen.push(computed);\n      }\n      result.push(value);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseUniq;\n","var baseUniq = require('./_baseUniq');\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n  return (array && array.length) ? baseUniq(array) : [];\n}\n\nmodule.exports = uniq;\n","import { geoRobinson } from 'd3-geo-projection'\nimport { geoPath } from 'd3-geo'\nimport type { GeoPath, GeoProjection } from 'd3-geo'\nimport { feature } from 'topojson-client'\nimport type { GeometryCollection, Topology } from 'topojson-specification'\nimport get from 'lodash/get'\nimport uniq from 'lodash/uniq'\nimport { computed, toValue } from 'vue'\nimport type { ComputedRef, MaybeRefOrGetter } from 'vue'\n\n/**\n * Reactive inputs driving {@link useSymbolMap}. Each input is a plain value, ref\n * or getter so the composable adapts to how the caller wires its state. The\n * composable holds no DOM state: the measured `width`/`height`, the parsed\n * topojson and the loaded marker data are passed in from the component.\n */\nexport interface UseSymbolMapOptions {\n  /**\n   * The parsed TopoJSON topology used to build the base map features.\n   */\n  topojson: MaybeRefOrGetter<Topology | null>\n  /**\n   * The marker rows to plot, each carrying at least `longitude`/`latitude`.\n   */\n  loadedData: MaybeRefOrGetter<Record<string, unknown>[] | null>\n  /**\n   * Measured outer width of the map, in pixels.\n   */\n  width: MaybeRefOrGetter<number>\n  /**\n   * Measured outer height of the map, in pixels.\n   */\n  height: MaybeRefOrGetter<number>\n  /**\n   * Padding, in pixels, kept between the fitted geometry and the map edges.\n   */\n  padding: MaybeRefOrGetter<number>\n  /**\n   * Name of the TopoJSON objects collection to render as map features.\n   */\n  topojsonObjects: MaybeRefOrGetter<string>\n  /**\n   * Path in the marker rows to the category value used for grouping/coloring.\n   */\n  categoryObjectsPath: MaybeRefOrGetter<string | string[]>\n  /**\n   * When true, fit the projection to the marker bounds instead of the feature\n   * bounds.\n   */\n  fitToMarkers: MaybeRefOrGetter<boolean>\n}\n\n/**\n * Reactive API returned by {@link useSymbolMap}.\n */\nexport interface UseSymbolMap {\n  /**\n   * The GeoJSON the projection is fitted to: the markers polygon when\n   * `fitToMarkers` is set, otherwise the topojson features collection.\n   */\n  geojson: ComputedRef<any>\n  /**\n   * The topojson features collection rendered as the base map layer.\n   */\n  featuresGeojson: ComputedRef<any>\n  /**\n   * A single polygon spanning the markers' coordinates, used to fit the\n   * projection to the markers' bounds.\n   */\n  markersGeojson: ComputedRef<any>\n  /**\n   * The `[longitude, latitude]` pairs of every loaded marker.\n   */\n  coordinates: ComputedRef<number[][]>\n  /**\n   * The Robinson projection fitted to the map size and the geojson bounds,\n   * inset by `padding` on every edge.\n   */\n  mapProjection: ComputedRef<GeoProjection>\n  /**\n   * The geo path generator bound to {@link mapProjection}.\n   */\n  featurePath: ComputedRef<GeoPath>\n  /**\n   * The distinct category values across the loaded markers, stringified.\n   */\n  categories: ComputedRef<string[]>\n  /**\n   * Category name to index lookup, so per-marker class assignment stays O(1)\n   * instead of running an `indexOf` (O(n)) for every marker.\n   */\n  categoryIndexByName: ComputedRef<Map<string, number>>\n  /**\n   * Pure geometry helper that turns a projected point and the marker's measured\n   * bounding box into the SVG `transform` that centers and scales the marker.\n   */\n  markerTransformValue: (\n    point: [number, number],\n    box: { width: number, height: number },\n    markerWidth: number\n  ) => string\n}\n\n/**\n * Owns the symbol-map-specific reactive geometry: it derives the GeoJSON to\n * render (features or marker bounds), fits a Robinson projection to the map size\n * with edge padding, exposes the matching geo path generator, indexes the marker\n * categories, and centers/scales each marker around its projected coordinate. It\n * holds no DOM state — the measured size, parsed topojson and marker rows are\n * passed in, and rendering stays in the component.\n *\n * @remarks The projection is fitted with `fitExtent` (inset by `padding`), NOT\n * `fitSize`, so it differs from the shared `useMapProjection` and is kept here\n * to preserve the symbol map's exact framing behavior.\n * @param options - Reactive options (see {@link UseSymbolMapOptions}).\n * @returns The {@link UseSymbolMap} API of derived symbol-map geometry.\n * @example\n * // Internal building block of SymbolMap; not exported from the package root.\n * // Inside a `<script setup>` block:\n * import { toRef } from 'vue'\n * import { useSymbolMap } from '@/composables/useSymbolMap'\n *\n * const { featurePath, mapProjection, categories } = useSymbolMap({\n *   topojson,\n *   loadedData,\n *   width: mapWidth,\n *   height: mapHeight,\n *   padding: toRef(() => props.mapPadding),\n *   topojsonObjects: toRef(() => props.topojsonObjects),\n *   categoryObjectsPath: toRef(() => props.categoryObjectsPath),\n *   fitToMarkers: toRef(() => props.fitToMarkers)\n * })\n */\nexport function useSymbolMap(options: UseSymbolMapOptions): UseSymbolMap {\n  const {\n    topojson,\n    loadedData,\n    width,\n    height,\n    padding,\n    topojsonObjects,\n    categoryObjectsPath,\n    fitToMarkers\n  } = options\n\n  const featuresGeojson = computed(() => {\n    const topojsonValue = toValue(topojson)\n    if (!topojsonValue) {\n      // `as const` keeps `type` a literal 'FeatureCollection' instead of widening to\n      // `string`, it matches the discriminated union `feature()` returns below.\n      return { type: 'FeatureCollection', features: [] } as const\n    }\n    const object = get(\n      topojsonValue,\n      ['objects', toValue(topojsonObjects)],\n      null\n    )\n    return feature(topojsonValue, object as GeometryCollection)\n  })\n\n  const coordinates = computed((): number[][] => {\n    return (toValue(loadedData) || []).map(({ longitude, latitude }: any) => {\n      return [longitude, latitude]\n    })\n  })\n\n  const markersGeojson = computed(() => {\n    return {\n      type: 'Feature',\n      geometry: {\n        type: 'Polygon',\n        coordinates: [coordinates.value]\n      }\n    }\n  })\n\n  const geojson = computed(() => {\n    return toValue(fitToMarkers) ? markersGeojson.value : featuresGeojson.value\n  })\n\n  const mapProjection = computed((): GeoProjection => {\n    const inset = toValue(padding)\n    return geoRobinson().fitExtent(\n      [\n        [inset, inset],\n        [toValue(width) - inset, toValue(height) - inset]\n      ],\n      geojson.value\n    )\n  })\n\n  const featurePath = computed((): GeoPath => {\n    return geoPath().projection(mapProjection.value)\n  })\n\n  const categories = computed((): string[] => {\n    const values = (toValue(loadedData) || []).map((d: Record<string, unknown>) => {\n      return get(d, toValue(categoryObjectsPath))\n    })\n    return uniq(values).map(String)\n  })\n\n  const categoryIndexByName = computed((): Map<string, number> => {\n    const index = new Map<string, number>()\n    categories.value.forEach((category, i) => index.set(category, i))\n    return index\n  })\n\n  // Markers are authored around their own origin, so center the shape on the\n  // projected coordinate and scale it down to the requested pixel width.\n  function markerTransformValue(\n    [x, y]: [number, number],\n    { width: boxWidth, height: boxHeight }: { width: number, height: number },\n    markerWidth: number\n  ): string {\n    const scale = markerWidth / Math.max(1, boxWidth)\n    const cx = x - (boxWidth / 2) * scale\n    const cy = y - (boxHeight / 2) * scale\n    return `translate(${cx}, ${cy}) scale(${scale})`\n  }\n\n  return {\n    geojson,\n    featuresGeojson,\n    markersGeojson,\n    coordinates,\n    mapProjection,\n    featurePath,\n    categories,\n    categoryIndexByName,\n    markerTransformValue\n  }\n}\n\nexport default useSymbolMap\n","<script setup lang=\"ts\">\nimport type { GeoPermissibleObjects } from 'd3-geo'\nimport { json } from 'd3-fetch'\nimport { pointer as d3Pointer, select } from 'd3-selection'\nimport { zoom as d3Zoom, zoomIdentity as d3ZoomIdentity } from 'd3-zoom'\n// Imported for its side-effect type augmentation of Selection with `.transition()`.\nimport 'd3-transition'\nimport debounce from 'lodash/debounce'\nimport find from 'lodash/find'\nimport get from 'lodash/get'\nimport groupBy from 'lodash/groupBy'\nimport isFunction from 'lodash/isFunction'\nimport kebabCase from 'lodash/kebabCase'\nimport keys from 'lodash/keys'\nimport pickBy from 'lodash/pickBy'\nimport set from 'lodash/set'\nimport uniqueId from 'lodash/uniqueId'\n\nimport config from '@/config'\nimport configDefaults from '@/config.default'\nimport { LegendCategory } from '@/enums'\nimport OrdinalLegend from '@/components/Legend/LegendOrdinal.vue'\nimport { getChartProps, useChart } from '@/composables/useChart'\nimport { useSymbolMap } from '@/composables/useSymbolMap'\nimport {\n  ComponentPublicInstance,\n  computed,\n  ref,\n  toRef,\n  watch\n} from 'vue'\nimport type { Topology } from 'topojson-specification'\nimport { PopoverPlacement } from 'bootstrap-vue-next'\n\ndefineOptions({\n  name: 'SymbolMap'\n})\n\nexport interface SymbolMapProps {\n  /**\n   * Path in data objects to the category value for grouping markers.\n   */\n  categoryObjectsPath?: string | string[]\n  /**\n   * Enable click-to-zoom on map features.\n   */\n  clickable?: boolean\n  /**\n   * Hide the legend.\n   */\n  hideLegend?: boolean\n  /**\n   * Hide tooltips on marker hover.\n   */\n  hideTooltip?: boolean\n  /**\n   * Display legend items horizontally instead of vertically.\n   */\n  horizontalLegend?: boolean\n  /**\n   * Color for map features, or function returning color based on feature data.\n   */\n  featureColor?: string | ((d: any) => string)\n  /**\n   * Fit map projection to marker bounds instead of feature bounds.\n   */\n  fitToMarkers?: boolean\n  /**\n   * Path in data objects to the label value for tooltips.\n   */\n  labelObjectsPath?: string | string[]\n  /**\n   * Padding around the map in pixels.\n   */\n  mapPadding?: number\n  /**\n   * Path in data objects to the unique identifier for each marker.\n   */\n  markerObjectsPath?: string | string[]\n  /**\n   * SVG path data for marker shape, or function returning path based on marker data.\n   */\n  markerPath?: string | ((d: any) => string)\n  /**\n   * Color for markers. Falls back to category colors if not set.\n   */\n  markerColor?: string\n  /**\n   * Width of markers in pixels, or function returning width based on marker data.\n   */\n  markerWidth?: number | ((d: any) => number)\n  /**\n   * Disable marker scaling when zooming the map.\n   */\n  noMarkersScale?: boolean\n  /**\n   * Custom CSS class to apply to tooltips.\n   */\n  tooltipCustomClass?: string | null\n  /**\n   * Placement of tooltips relative to markers.\n   */\n  tooltipPlacement?: PopoverPlacement\n  /**\n   * Fallback placement(s) for tooltips when preferred placement is not available.\n   */\n  tooltipFallbackPlacement?: string[] | string\n  /**\n   * Name of the TopoJSON objects collection to render as map features.\n   */\n  topojsonObjects?: string\n  /**\n   * Path in TopoJSON feature properties to the identifier.\n   */\n  topojsonObjectsPath?: string | string[]\n  /**\n   * URL to fetch TopoJSON data from.\n   */\n  topojsonUrl?: string\n  /**\n   * Duration of zoom transitions in milliseconds.\n   */\n  transitionDuration?: number\n  /**\n   * Enable zoom and pan interactions on the map.\n   */\n  zoomable?: boolean\n  /**\n   * Minimum zoom level.\n   */\n  zoomMin?: number\n  /**\n   * Maximum zoom level.\n   */\n  zoomMax?: number\n  /**\n   * Data to display, either as a URL string to fetch or an array of objects.\n   */\n  data?: string | Record<string, unknown>[] | null\n  /**\n   * Type of data file when fetching from URL.\n   */\n  dataUrlType?: 'json' | 'csv' | 'tsv'\n  /**\n   * Aspect ratio (height/width) for the chart.\n   */\n  chartHeightRatio?: number\n  /**\n   * Enable social mode for optimal display when sharing on social media.\n   */\n  socialMode?: boolean\n  /**\n   * Aspect ratio to use in social mode.\n   */\n  socialModeRatio?: number\n}\n\nconst props = withDefaults(defineProps<SymbolMapProps>(), {\n  categoryObjectsPath: 'category',\n  clickable: false,\n  hideLegend: false,\n  hideTooltip: false,\n  horizontalLegend: false,\n  featureColor: 'currentColor',\n  fitToMarkers: false,\n  labelObjectsPath: 'label',\n  mapPadding: 15,\n  markerObjectsPath: 'id',\n  markerPath: 'M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256z',\n  markerColor: undefined,\n  markerWidth: 10,\n  noMarkersScale: false,\n  tooltipCustomClass: null,\n  tooltipPlacement: 'top',\n  tooltipFallbackPlacement: 'flip',\n  topojsonObjects: 'countries1',\n  topojsonObjectsPath: 'id',\n  topojsonUrl: () =>\n    config.get(\n      'map.topojson.world-countries-sans-antarctica',\n      configDefaults['map.topojson.world-countries-sans-antarctica']\n    ),\n  transitionDuration: 750,\n  zoomable: false,\n  zoomMin: 1,\n  zoomMax: 8,\n  data: null,\n  dataUrlType: 'json',\n  chartHeightRatio: undefined,\n  socialMode: false,\n  socialModeRatio: 5 / 4\n})\n\nconst emit = defineEmits<{\n  click: [d: any]\n  reset: []\n  zoomed: [d: any]\n  loaded: [data: Record<string, unknown>[] | null]\n  resized: []\n}>()\n\nconst el = ref<ComponentPublicInstance<HTMLElement> | null>(null)\nconst topojson = ref<Topology | null>(null)\nconst topojsonPromise = ref<Promise<Topology | null> | null>(null)\nconst mapRect = ref<DOMRect>(new DOMRect(0, 0, 0, 0))\nconst markerCursor = ref<Record<string, string> | null>(null)\nconst categoryHighlight = ref<string | null>(null)\nconst featureZoom = ref<string | null>(null)\n\nconst isLoaded = ref<boolean>(false)\nconst debouncedDraw = debounce(function () {\n  draw()\n}, 10)\n\nconst { loadedData } = useChart<Record<string, unknown>[]>(\n  el,\n  getChartProps(props),\n  { emit },\n  isLoaded,\n  debouncedDraw,\n  afterLoaded\n)\n\nfunction afterLoaded() {\n  return new Promise<void>((resolve) => {\n    return loadTopojson().then(() => {\n      draw()\n      resolve()\n      return\n    })\n  })\n}\n\nconst mapHeight = computed(() => {\n  return mapRect.value.height\n})\n\nconst mapWidth = computed(() => {\n  return mapRect.value.width\n})\n\n// The symbol-specific projection (fitExtent with padding), geo path, derived\n// geojson, category indexing and marker geometry live in this composable. It\n// fits with fitExtent (NOT the shared useMapProjection's fitSize), preserving\n// the symbol map's exact framing.\nconst {\n  featuresGeojson,\n  mapProjection,\n  featurePath,\n  categories,\n  categoryIndexByName,\n  markerTransformValue\n} = useSymbolMap({\n  topojson,\n  loadedData,\n  width: mapWidth,\n  height: mapHeight,\n  padding: toRef(() => props.mapPadding),\n  topojsonObjects: toRef(() => props.topojsonObjects),\n  categoryObjectsPath: toRef(() => props.categoryObjectsPath),\n  fitToMarkers: toRef(() => props.fitToMarkers)\n})\n\nconst hasCursor = computed(() => {\n  return !!markerCursor.value\n})\n\nconst hasHighlight = computed(() => {\n  return !!categoryHighlight.value\n})\n\nconst hasZoom = computed(() => {\n  return !!featureZoom.value\n})\n\nconst mapId = computed(() => {\n  return uniqueId('symbol-map-')\n})\n\nconst mapClass = computed(() => {\n  return {\n    'symbol-map--has-cursor': hasCursor.value,\n    'symbol-map--has-highlight': hasHighlight.value,\n    'symbol-map--has-zoom': hasZoom.value,\n    'symbol-map--has-markers-scale': !props.noMarkersScale\n  }\n})\n\nconst mapZoom = computed(() => {\n  return d3Zoom()\n    .scaleExtent([props.zoomMin, props.zoomMax])\n    .translateExtent([\n      [0, 0],\n      [mapWidth.value, mapHeight.value]\n    ])\n    .on('zoom', mapZoomed)\n})\n\nconst map = computed(() => {\n  const selection = select(el.value)\n    .select<SVGElement>('.symbol-map__main')\n  if (!selection) {\n    throw new Error('Empty SVG selection')\n  }\n  return selection\n})\n\nconst markerCursorValue = computed(() => {\n  return find(loadedDataWithIds.value, (d) => {\n    return get(d, props.markerObjectsPath) === markerCursor.value\n  })\n})\n\nconst loadedDataWithIds = computed(() => {\n  return (loadedData.value || []).map((d: any) => {\n    return {\n      ...set({}, props.markerObjectsPath, uniqueId()),\n      ...d\n    }\n  })\n})\n\nconst legendData = computed(() => {\n  const cats = groupBy(loadedData.value || [], (d: any) => {\n    return get(d, props.categoryObjectsPath)\n  })\n  return Object.entries(cats).map((entry) => {\n    const [label, [{ color: firstColor }]] = entry as [string, any[]]\n    const color = firstColor || categoryColor(label)\n    return { label, color }\n  })\n})\n\nconst hasTooltip = computed(() => {\n  return !props.hideTooltip && loadedData.value && markerCursor.value\n})\n\nconst tooltipTarget = computed(() => {\n  if (hasTooltip.value) {\n    // markerCursor already holds the resolved id value, so build the element\n    // id directly rather than re-extracting it through markerId().\n    return `${mapId.value}-marker-${markerCursor.value}`\n  }\n  return null\n})\n\n// methods\n\nfunction prepare() {\n  if (!map.value) {\n    throw new Error('Map is null')\n  }\n  // Set the map sizes\n  mapRect.value = map.value.node()?.getBoundingClientRect() as DOMRect\n  // Remove any existing country\n  map.value.selectAll('g').remove()\n  // Return the map to allow chaining\n  return map.value\n}\n\nfunction prepareZoom() {\n  if (props.zoomable) {\n    map.value?.call(mapZoom.value as any)\n  }\n}\n\nfunction categoryColor(category: string) {\n  if (el.value && loadedData.value) {\n    const index = categories.value.indexOf(category)\n    const style = window.getComputedStyle(el.value as unknown as Element)\n    return style.getPropertyValue(`--category-color-${index}n`) || '#000'\n  }\n  return null\n}\n\nfunction draw() {\n  prepare()\n  if (!map.value) {\n    throw new Error('map is not defined')\n  }\n  update()\n  // Bind a group for marker paths\n  map.value\n    ?.append('g')\n    .attr('class', 'symbol-map__main__markers')\n    .selectAll('.symbol-map__main__markers__item')\n    .data(loadedDataWithIds.value)\n    .enter()\n    .append('g')\n    .attr('id', markerId)\n    .attr('class', markerClass)\n    .attr('transform', markerTransform)\n    .append('path')\n    .on('mouseover', markerMouseOver)\n    .on('mouseleave', markerMouseLeave)\n    .attr('d', markerPathFunction)\n    .attr('fill', markerColorFunction)\n  prepareZoom()\n}\n\nfunction featureClass(d: any) {\n  return keys(pickBy(featureClassObject(d), value => value)).join(' ')\n}\n\nfunction featureClassObject(d: any) {\n  const pathClass = 'symbol-map__main__features__item'\n  const id = get(d, props.topojsonObjectsPath, null)\n  return {\n    [pathClass]: true,\n    [`${pathClass}--identifier-${kebabCase(id)}`]: id !== null,\n    [`${pathClass}--zoomed`]: featureZoom.value === id\n  }\n}\n\nasync function loadTopojson() {\n  if (!topojsonPromise.value) {\n    if (!props.topojsonUrl?.length) {\n      throw new Error('Empty topojsonUrl')\n    }\n    // json()'s generic pins the parsed shape instead of leaving it unconstrained;\n    // so this endpoint's response is trusted to always be a parsed Topology.\n    topojsonPromise.value = json<Topology>(props.topojsonUrl) as Promise<Topology | null>\n    topojson.value = await topojsonPromise.value\n  }\n  return topojsonPromise.value\n}\n\nfunction mapZoomed({ transform }: { transform: any }) {\n  markerCursor.value = null\n  map.value\n    ?.style('--map-scale', transform.k)\n    .selectAll('.symbol-map__main__features, .symbol-map__main__markers')\n    .attr('transform', transform)\n}\n\nfunction markerBoundingClientRect(d: any) {\n  const marker = map.value?.append('path').attr('d', markerPathFunction(d))\n  const rect = marker?.node()?.getBoundingClientRect()\n  marker?.remove()\n  return rect as DOMRect\n}\n\nfunction markerMouseLeave() {\n  markerCursor.value = null\n}\n\nfunction markerMouseOver(_: any, d: any) {\n  markerCursor.value = get(d, props.markerObjectsPath)\n}\n\nfunction markerClass(d: any) {\n  return keys(pickBy(markerClassObject(d), value => value)).join(' ')\n}\n\nfunction markerId(d: any) {\n  const id = get(d, props.markerObjectsPath)\n  return `${mapId.value}-marker-${id}`\n}\n\nfunction markerClassObject(d: any) {\n  const category = String(get(d, props.categoryObjectsPath))\n  const categoryIndex = categoryIndexByName.value.get(category) ?? -1\n  const id = get(d, props.markerObjectsPath)\n  const pathClass = 'symbol-map__main__markers__item'\n  return {\n    [pathClass]: true,\n    [`${pathClass}--category-${kebabCase(category)}`]: category !== null,\n    [`${pathClass}--category-${categoryIndex}n`]: category !== null,\n    [`${pathClass}--cursored`]: markerCursor.value === id,\n    [`${pathClass}--identifier-${kebabCase(id)}`]: id !== null,\n    [`${pathClass}--highlighted`]: categoryHighlight.value === category\n  }\n}\n\nfunction markerPathFunction(d: any) {\n  return isFunction(props.markerPath)\n    ? props.markerPath(d)\n    : props.markerPath\n}\n\nfunction markerColorFunction({ color, ...d }: any) {\n  return (\n    color\n    || (isFunction(props.markerColor)\n      ? (props.markerColor as (d: any) => string)(d)\n      : props.markerColor)\n  )\n}\n\nfunction markerWidthFunction(d: any) {\n  return isFunction(props.markerWidth)\n    ? props.markerWidth(d)\n    : props.markerWidth\n}\n\nfunction markerLabel(d: any) {\n  return get(d, props.labelObjectsPath)\n}\n\nfunction markerTransform(d: any) {\n  const { latitude, longitude } = d\n  const box = markerBoundingClientRect(d)\n  const point = mapProjection.value([longitude, latitude]) as [number, number]\n  return markerTransformValue(point, box, markerWidthFunction(d))\n}\n\nasync function featureClicked(\n  event: MouseEvent,\n  d: GeoPermissibleObjects\n) {\n  /**\n   * A click on a feature\n   * @event click\n   * @param Clicked feature\n   */\n  emit('click', d)\n  // Don't zoom on the map feature\n  if (!props.clickable) {\n    return\n  }\n  if (featureZoom.value === get(d, props.topojsonObjectsPath)) {\n    return resetZoom(event, d as any)\n  }\n  setFeatureZoom(d, d3Pointer(event, map.value?.node()))\n  /**\n   * A zoom on a feature ended\n   * @event zoomed\n   * @param Zoomed feature\n   */\n  emit('zoomed', d)\n}\n\nfunction resetZoom(_event: MouseEvent, _d: number) {\n  map.value\n    ?.style('--map-scale', 1)\n    .transition()\n    .duration(props.transitionDuration)\n    .call((mapZoom.value as any).transform, d3ZoomIdentity)\n  featureZoom.value = null\n\n  /**\n   * The zoom on the map was reset to its initial <slot ate></slot>\n   * @event reset\n   */\n  emit('reset')\n}\n\nfunction setMarkersClasses() {\n  map.value\n    ?.selectAll('.symbol-map__main__markers__item')\n    .attr('class', markerClass)\n}\n\nfunction setFeatureZoom(d: GeoPermissibleObjects, pointer = [0, 0]) {\n  if (!loadedData.value) {\n    return\n  }\n  featureZoom.value = get(d, props.topojsonObjectsPath)\n\n  const { height, width } = mapRect.value\n  const [[x0, y0], [x1, y1]] = featurePath.value.bounds(d)\n  const scale = Math.min(\n    8,\n    0.9 / Math.max((x1 - x0) / width, (y1 - y0) / height)\n  )\n  const x = -(x0 + x1) / 2\n  const y = -(y0 + y1) / 2\n  const zoomIdentity = d3ZoomIdentity\n    .translate(width / 2, height / 2)\n    .scale(scale)\n    .translate(x, y)\n  return map.value\n    ?.style('--map-scale', scale)\n    .transition()\n    .duration(props.transitionDuration)\n    .call((mapZoom.value as any)?.transform, zoomIdentity, pointer)\n    .end()\n}\n\nfunction update() {\n  // Bind geojson features to path\n  if (!map.value) {\n    return\n  }\n  // Bind a group for geojson features to path\n  map.value\n    ?.append('g')\n    .attr('class', 'symbol-map__main__features')\n    .selectAll('.symbol-map__main__features__item')\n    .data(featuresGeojson.value.features)\n    // Add the path with the correct class\n    .enter()\n    .append('path')\n    .attr('class', featureClass)\n    .attr('d', featurePath.value as any)\n    .on('click', featureClicked as any)\n    .style('color', props.featureColor as any)\n}\n\n// watch\nwatch(\n  () => props.data,\n  () => {\n    // draw()\n    update()\n  }\n)\n\nwatch(\n  () => props.socialMode,\n  () => {\n    draw()\n  }\n)\n\nwatch(\n  () => markerCursor.value,\n  () => {\n    setMarkersClasses()\n  }\n)\n\nwatch(\n  () => categoryHighlight.value,\n  () => {\n    setMarkersClasses()\n  }\n)\n\ndefineExpose({\n  el,\n  markerCursor,\n  loadTopojson,\n  draw\n})\n</script>\n\n<template>\n  <div\n    ref=\"el\"\n    :class=\"mapClass\"\n    class=\"symbol-map\"\n  >\n    <slot\n      name=\"legend\"\n      v-bind=\"{ legendData }\"\n    >\n      <ordinal-legend\n        v-if=\"!hideLegend && legendData\"\n        v-model:highlight=\"categoryHighlight\"\n        :data=\"legendData\"\n        :horizontal=\"horizontalLegend\"\n        :marker-path=\"markerPath\"\n        :category-objects-path=\"LegendCategory.label\"\n      >\n        <template #marker=\"d\">\n          <slot\n            name=\"legend-marker\"\n            v-bind=\"d\"\n          />\n        </template>\n        <template #label=\"d\">\n          <slot\n            name=\"legend-label\"\n            v-bind=\"d\"\n          />\n        </template>\n      </ordinal-legend>\n    </slot>\n    <svg class=\"symbol-map__main\" />\n    <b-tooltip\n      v-if=\"tooltipTarget\"\n      ref=\"marker-tooltip\"\n      :custom-class=\"tooltipCustomClass\"\n      :fallback-placement=\"tooltipFallbackPlacement\"\n      :placement=\"tooltipPlacement\"\n      :target=\"tooltipTarget\"\n    >\n      <slot\n        name=\"tooltip\"\n        v-bind=\"{ markerCursor, ...markerCursorValue }\"\n      >\n        {{ markerLabel(markerCursorValue) }}\n      </slot>\n    </b-tooltip>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n\n.symbol-map {\n  $muted-item-opacity: 0.2;\n  $muted-item-filter: grayscale(30%) brightness(10%);\n  $muted-item-transition:\n    opacity 0.2s,\n    filter 0.2s;\n\n  $colors: $primary, $info, $warning, $danger;\n  $quantile: 2;\n\n  @each $start-color in $colors {\n    $i: index($colors, $start-color) - 1;\n    $end-color: mix($start-color, text-contrast($start-color), 20%);\n\n    @for $j from ($quantile * $i) through ($quantile * $i + $quantile - 1) {\n      $amount: ($j % $quantile) * math.div(100%, $quantile);\n      --category-color-#{$j}n: #{mix($end-color, $start-color, $amount)};\n    }\n  }\n\n  &__main {\n    color: #ebebeb;\n    min-height: 300px;\n    height: 100%;\n    width: 100%;\n\n    .chart--social-mode & {\n      color: $dark;\n    }\n\n    &:deep(.symbol-map__main__features__item) {\n      stroke: currentColor;\n      stroke-width: calc(1px / var(--map-scale, 1));\n      fill: currentColor;\n      transition:\n        opacity 750ms,\n        filter 750ms;\n    }\n\n    &:deep(.symbol-map__main__markers) {\n      shape-rendering: geometricPrecision;\n\n      .symbol-map__main__markers__item {\n        opacity: 1;\n        filter: grayscale(0%) brightness(100%);\n        transition: $muted-item-transition;\n\n        .symbol-map--has-highlight & {\n          opacity: $muted-item-opacity;\n          filter: $muted-item-filter;\n        }\n\n        .symbol-map--has-highlight &--highlighted {\n          opacity: 1;\n          filter: grayscale(0%) brightness(100%);\n        }\n\n        @for $i from 0 through ($quantile * length($colors)) {\n          &--category-#{$i}n path:not([fill]) {\n            fill: var(--category-color-#{$i}n);\n          }\n        }\n\n        .symbol-map--has-markers-scale & path {\n          transform: scale(calc(1 / var(--map-scale)));\n          transform-origin: center center;\n        }\n      }\n    }\n  }\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { GeoPermissibleObjects } from 'd3-geo'\nimport { json } from 'd3-fetch'\nimport { pointer as d3Pointer, select } from 'd3-selection'\nimport { zoom as d3Zoom, zoomIdentity as d3ZoomIdentity } from 'd3-zoom'\n// Imported for its side-effect type augmentation of Selection with `.transition()`.\nimport 'd3-transition'\nimport debounce from 'lodash/debounce'\nimport find from 'lodash/find'\nimport get from 'lodash/get'\nimport groupBy from 'lodash/groupBy'\nimport isFunction from 'lodash/isFunction'\nimport kebabCase from 'lodash/kebabCase'\nimport keys from 'lodash/keys'\nimport pickBy from 'lodash/pickBy'\nimport set from 'lodash/set'\nimport uniqueId from 'lodash/uniqueId'\n\nimport config from '@/config'\nimport configDefaults from '@/config.default'\nimport { LegendCategory } from '@/enums'\nimport OrdinalLegend from '@/components/Legend/LegendOrdinal.vue'\nimport { getChartProps, useChart } from '@/composables/useChart'\nimport { useSymbolMap } from '@/composables/useSymbolMap'\nimport {\n  ComponentPublicInstance,\n  computed,\n  ref,\n  toRef,\n  watch\n} from 'vue'\nimport type { Topology } from 'topojson-specification'\nimport { PopoverPlacement } from 'bootstrap-vue-next'\n\ndefineOptions({\n  name: 'SymbolMap'\n})\n\nexport interface SymbolMapProps {\n  /**\n   * Path in data objects to the category value for grouping markers.\n   */\n  categoryObjectsPath?: string | string[]\n  /**\n   * Enable click-to-zoom on map features.\n   */\n  clickable?: boolean\n  /**\n   * Hide the legend.\n   */\n  hideLegend?: boolean\n  /**\n   * Hide tooltips on marker hover.\n   */\n  hideTooltip?: boolean\n  /**\n   * Display legend items horizontally instead of vertically.\n   */\n  horizontalLegend?: boolean\n  /**\n   * Color for map features, or function returning color based on feature data.\n   */\n  featureColor?: string | ((d: any) => string)\n  /**\n   * Fit map projection to marker bounds instead of feature bounds.\n   */\n  fitToMarkers?: boolean\n  /**\n   * Path in data objects to the label value for tooltips.\n   */\n  labelObjectsPath?: string | string[]\n  /**\n   * Padding around the map in pixels.\n   */\n  mapPadding?: number\n  /**\n   * Path in data objects to the unique identifier for each marker.\n   */\n  markerObjectsPath?: string | string[]\n  /**\n   * SVG path data for marker shape, or function returning path based on marker data.\n   */\n  markerPath?: string | ((d: any) => string)\n  /**\n   * Color for markers. Falls back to category colors if not set.\n   */\n  markerColor?: string\n  /**\n   * Width of markers in pixels, or function returning width based on marker data.\n   */\n  markerWidth?: number | ((d: any) => number)\n  /**\n   * Disable marker scaling when zooming the map.\n   */\n  noMarkersScale?: boolean\n  /**\n   * Custom CSS class to apply to tooltips.\n   */\n  tooltipCustomClass?: string | null\n  /**\n   * Placement of tooltips relative to markers.\n   */\n  tooltipPlacement?: PopoverPlacement\n  /**\n   * Fallback placement(s) for tooltips when preferred placement is not available.\n   */\n  tooltipFallbackPlacement?: string[] | string\n  /**\n   * Name of the TopoJSON objects collection to render as map features.\n   */\n  topojsonObjects?: string\n  /**\n   * Path in TopoJSON feature properties to the identifier.\n   */\n  topojsonObjectsPath?: string | string[]\n  /**\n   * URL to fetch TopoJSON data from.\n   */\n  topojsonUrl?: string\n  /**\n   * Duration of zoom transitions in milliseconds.\n   */\n  transitionDuration?: number\n  /**\n   * Enable zoom and pan interactions on the map.\n   */\n  zoomable?: boolean\n  /**\n   * Minimum zoom level.\n   */\n  zoomMin?: number\n  /**\n   * Maximum zoom level.\n   */\n  zoomMax?: number\n  /**\n   * Data to display, either as a URL string to fetch or an array of objects.\n   */\n  data?: string | Record<string, unknown>[] | null\n  /**\n   * Type of data file when fetching from URL.\n   */\n  dataUrlType?: 'json' | 'csv' | 'tsv'\n  /**\n   * Aspect ratio (height/width) for the chart.\n   */\n  chartHeightRatio?: number\n  /**\n   * Enable social mode for optimal display when sharing on social media.\n   */\n  socialMode?: boolean\n  /**\n   * Aspect ratio to use in social mode.\n   */\n  socialModeRatio?: number\n}\n\nconst props = withDefaults(defineProps<SymbolMapProps>(), {\n  categoryObjectsPath: 'category',\n  clickable: false,\n  hideLegend: false,\n  hideTooltip: false,\n  horizontalLegend: false,\n  featureColor: 'currentColor',\n  fitToMarkers: false,\n  labelObjectsPath: 'label',\n  mapPadding: 15,\n  markerObjectsPath: 'id',\n  markerPath: 'M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256z',\n  markerColor: undefined,\n  markerWidth: 10,\n  noMarkersScale: false,\n  tooltipCustomClass: null,\n  tooltipPlacement: 'top',\n  tooltipFallbackPlacement: 'flip',\n  topojsonObjects: 'countries1',\n  topojsonObjectsPath: 'id',\n  topojsonUrl: () =>\n    config.get(\n      'map.topojson.world-countries-sans-antarctica',\n      configDefaults['map.topojson.world-countries-sans-antarctica']\n    ),\n  transitionDuration: 750,\n  zoomable: false,\n  zoomMin: 1,\n  zoomMax: 8,\n  data: null,\n  dataUrlType: 'json',\n  chartHeightRatio: undefined,\n  socialMode: false,\n  socialModeRatio: 5 / 4\n})\n\nconst emit = defineEmits<{\n  click: [d: any]\n  reset: []\n  zoomed: [d: any]\n  loaded: [data: Record<string, unknown>[] | null]\n  resized: []\n}>()\n\nconst el = ref<ComponentPublicInstance<HTMLElement> | null>(null)\nconst topojson = ref<Topology | null>(null)\nconst topojsonPromise = ref<Promise<Topology | null> | null>(null)\nconst mapRect = ref<DOMRect>(new DOMRect(0, 0, 0, 0))\nconst markerCursor = ref<Record<string, string> | null>(null)\nconst categoryHighlight = ref<string | null>(null)\nconst featureZoom = ref<string | null>(null)\n\nconst isLoaded = ref<boolean>(false)\nconst debouncedDraw = debounce(function () {\n  draw()\n}, 10)\n\nconst { loadedData } = useChart<Record<string, unknown>[]>(\n  el,\n  getChartProps(props),\n  { emit },\n  isLoaded,\n  debouncedDraw,\n  afterLoaded\n)\n\nfunction afterLoaded() {\n  return new Promise<void>((resolve) => {\n    return loadTopojson().then(() => {\n      draw()\n      resolve()\n      return\n    })\n  })\n}\n\nconst mapHeight = computed(() => {\n  return mapRect.value.height\n})\n\nconst mapWidth = computed(() => {\n  return mapRect.value.width\n})\n\n// The symbol-specific projection (fitExtent with padding), geo path, derived\n// geojson, category indexing and marker geometry live in this composable. It\n// fits with fitExtent (NOT the shared useMapProjection's fitSize), preserving\n// the symbol map's exact framing.\nconst {\n  featuresGeojson,\n  mapProjection,\n  featurePath,\n  categories,\n  categoryIndexByName,\n  markerTransformValue\n} = useSymbolMap({\n  topojson,\n  loadedData,\n  width: mapWidth,\n  height: mapHeight,\n  padding: toRef(() => props.mapPadding),\n  topojsonObjects: toRef(() => props.topojsonObjects),\n  categoryObjectsPath: toRef(() => props.categoryObjectsPath),\n  fitToMarkers: toRef(() => props.fitToMarkers)\n})\n\nconst hasCursor = computed(() => {\n  return !!markerCursor.value\n})\n\nconst hasHighlight = computed(() => {\n  return !!categoryHighlight.value\n})\n\nconst hasZoom = computed(() => {\n  return !!featureZoom.value\n})\n\nconst mapId = computed(() => {\n  return uniqueId('symbol-map-')\n})\n\nconst mapClass = computed(() => {\n  return {\n    'symbol-map--has-cursor': hasCursor.value,\n    'symbol-map--has-highlight': hasHighlight.value,\n    'symbol-map--has-zoom': hasZoom.value,\n    'symbol-map--has-markers-scale': !props.noMarkersScale\n  }\n})\n\nconst mapZoom = computed(() => {\n  return d3Zoom()\n    .scaleExtent([props.zoomMin, props.zoomMax])\n    .translateExtent([\n      [0, 0],\n      [mapWidth.value, mapHeight.value]\n    ])\n    .on('zoom', mapZoomed)\n})\n\nconst map = computed(() => {\n  const selection = select(el.value)\n    .select<SVGElement>('.symbol-map__main')\n  if (!selection) {\n    throw new Error('Empty SVG selection')\n  }\n  return selection\n})\n\nconst markerCursorValue = computed(() => {\n  return find(loadedDataWithIds.value, (d) => {\n    return get(d, props.markerObjectsPath) === markerCursor.value\n  })\n})\n\nconst loadedDataWithIds = computed(() => {\n  return (loadedData.value || []).map((d: any) => {\n    return {\n      ...set({}, props.markerObjectsPath, uniqueId()),\n      ...d\n    }\n  })\n})\n\nconst legendData = computed(() => {\n  const cats = groupBy(loadedData.value || [], (d: any) => {\n    return get(d, props.categoryObjectsPath)\n  })\n  return Object.entries(cats).map((entry) => {\n    const [label, [{ color: firstColor }]] = entry as [string, any[]]\n    const color = firstColor || categoryColor(label)\n    return { label, color }\n  })\n})\n\nconst hasTooltip = computed(() => {\n  return !props.hideTooltip && loadedData.value && markerCursor.value\n})\n\nconst tooltipTarget = computed(() => {\n  if (hasTooltip.value) {\n    // markerCursor already holds the resolved id value, so build the element\n    // id directly rather than re-extracting it through markerId().\n    return `${mapId.value}-marker-${markerCursor.value}`\n  }\n  return null\n})\n\n// methods\n\nfunction prepare() {\n  if (!map.value) {\n    throw new Error('Map is null')\n  }\n  // Set the map sizes\n  mapRect.value = map.value.node()?.getBoundingClientRect() as DOMRect\n  // Remove any existing country\n  map.value.selectAll('g').remove()\n  // Return the map to allow chaining\n  return map.value\n}\n\nfunction prepareZoom() {\n  if (props.zoomable) {\n    map.value?.call(mapZoom.value as any)\n  }\n}\n\nfunction categoryColor(category: string) {\n  if (el.value && loadedData.value) {\n    const index = categories.value.indexOf(category)\n    const style = window.getComputedStyle(el.value as unknown as Element)\n    return style.getPropertyValue(`--category-color-${index}n`) || '#000'\n  }\n  return null\n}\n\nfunction draw() {\n  prepare()\n  if (!map.value) {\n    throw new Error('map is not defined')\n  }\n  update()\n  // Bind a group for marker paths\n  map.value\n    ?.append('g')\n    .attr('class', 'symbol-map__main__markers')\n    .selectAll('.symbol-map__main__markers__item')\n    .data(loadedDataWithIds.value)\n    .enter()\n    .append('g')\n    .attr('id', markerId)\n    .attr('class', markerClass)\n    .attr('transform', markerTransform)\n    .append('path')\n    .on('mouseover', markerMouseOver)\n    .on('mouseleave', markerMouseLeave)\n    .attr('d', markerPathFunction)\n    .attr('fill', markerColorFunction)\n  prepareZoom()\n}\n\nfunction featureClass(d: any) {\n  return keys(pickBy(featureClassObject(d), value => value)).join(' ')\n}\n\nfunction featureClassObject(d: any) {\n  const pathClass = 'symbol-map__main__features__item'\n  const id = get(d, props.topojsonObjectsPath, null)\n  return {\n    [pathClass]: true,\n    [`${pathClass}--identifier-${kebabCase(id)}`]: id !== null,\n    [`${pathClass}--zoomed`]: featureZoom.value === id\n  }\n}\n\nasync function loadTopojson() {\n  if (!topojsonPromise.value) {\n    if (!props.topojsonUrl?.length) {\n      throw new Error('Empty topojsonUrl')\n    }\n    // json()'s generic pins the parsed shape instead of leaving it unconstrained;\n    // so this endpoint's response is trusted to always be a parsed Topology.\n    topojsonPromise.value = json<Topology>(props.topojsonUrl) as Promise<Topology | null>\n    topojson.value = await topojsonPromise.value\n  }\n  return topojsonPromise.value\n}\n\nfunction mapZoomed({ transform }: { transform: any }) {\n  markerCursor.value = null\n  map.value\n    ?.style('--map-scale', transform.k)\n    .selectAll('.symbol-map__main__features, .symbol-map__main__markers')\n    .attr('transform', transform)\n}\n\nfunction markerBoundingClientRect(d: any) {\n  const marker = map.value?.append('path').attr('d', markerPathFunction(d))\n  const rect = marker?.node()?.getBoundingClientRect()\n  marker?.remove()\n  return rect as DOMRect\n}\n\nfunction markerMouseLeave() {\n  markerCursor.value = null\n}\n\nfunction markerMouseOver(_: any, d: any) {\n  markerCursor.value = get(d, props.markerObjectsPath)\n}\n\nfunction markerClass(d: any) {\n  return keys(pickBy(markerClassObject(d), value => value)).join(' ')\n}\n\nfunction markerId(d: any) {\n  const id = get(d, props.markerObjectsPath)\n  return `${mapId.value}-marker-${id}`\n}\n\nfunction markerClassObject(d: any) {\n  const category = String(get(d, props.categoryObjectsPath))\n  const categoryIndex = categoryIndexByName.value.get(category) ?? -1\n  const id = get(d, props.markerObjectsPath)\n  const pathClass = 'symbol-map__main__markers__item'\n  return {\n    [pathClass]: true,\n    [`${pathClass}--category-${kebabCase(category)}`]: category !== null,\n    [`${pathClass}--category-${categoryIndex}n`]: category !== null,\n    [`${pathClass}--cursored`]: markerCursor.value === id,\n    [`${pathClass}--identifier-${kebabCase(id)}`]: id !== null,\n    [`${pathClass}--highlighted`]: categoryHighlight.value === category\n  }\n}\n\nfunction markerPathFunction(d: any) {\n  return isFunction(props.markerPath)\n    ? props.markerPath(d)\n    : props.markerPath\n}\n\nfunction markerColorFunction({ color, ...d }: any) {\n  return (\n    color\n    || (isFunction(props.markerColor)\n      ? (props.markerColor as (d: any) => string)(d)\n      : props.markerColor)\n  )\n}\n\nfunction markerWidthFunction(d: any) {\n  return isFunction(props.markerWidth)\n    ? props.markerWidth(d)\n    : props.markerWidth\n}\n\nfunction markerLabel(d: any) {\n  return get(d, props.labelObjectsPath)\n}\n\nfunction markerTransform(d: any) {\n  const { latitude, longitude } = d\n  const box = markerBoundingClientRect(d)\n  const point = mapProjection.value([longitude, latitude]) as [number, number]\n  return markerTransformValue(point, box, markerWidthFunction(d))\n}\n\nasync function featureClicked(\n  event: MouseEvent,\n  d: GeoPermissibleObjects\n) {\n  /**\n   * A click on a feature\n   * @event click\n   * @param Clicked feature\n   */\n  emit('click', d)\n  // Don't zoom on the map feature\n  if (!props.clickable) {\n    return\n  }\n  if (featureZoom.value === get(d, props.topojsonObjectsPath)) {\n    return resetZoom(event, d as any)\n  }\n  setFeatureZoom(d, d3Pointer(event, map.value?.node()))\n  /**\n   * A zoom on a feature ended\n   * @event zoomed\n   * @param Zoomed feature\n   */\n  emit('zoomed', d)\n}\n\nfunction resetZoom(_event: MouseEvent, _d: number) {\n  map.value\n    ?.style('--map-scale', 1)\n    .transition()\n    .duration(props.transitionDuration)\n    .call((mapZoom.value as any).transform, d3ZoomIdentity)\n  featureZoom.value = null\n\n  /**\n   * The zoom on the map was reset to its initial <slot ate></slot>\n   * @event reset\n   */\n  emit('reset')\n}\n\nfunction setMarkersClasses() {\n  map.value\n    ?.selectAll('.symbol-map__main__markers__item')\n    .attr('class', markerClass)\n}\n\nfunction setFeatureZoom(d: GeoPermissibleObjects, pointer = [0, 0]) {\n  if (!loadedData.value) {\n    return\n  }\n  featureZoom.value = get(d, props.topojsonObjectsPath)\n\n  const { height, width } = mapRect.value\n  const [[x0, y0], [x1, y1]] = featurePath.value.bounds(d)\n  const scale = Math.min(\n    8,\n    0.9 / Math.max((x1 - x0) / width, (y1 - y0) / height)\n  )\n  const x = -(x0 + x1) / 2\n  const y = -(y0 + y1) / 2\n  const zoomIdentity = d3ZoomIdentity\n    .translate(width / 2, height / 2)\n    .scale(scale)\n    .translate(x, y)\n  return map.value\n    ?.style('--map-scale', scale)\n    .transition()\n    .duration(props.transitionDuration)\n    .call((mapZoom.value as any)?.transform, zoomIdentity, pointer)\n    .end()\n}\n\nfunction update() {\n  // Bind geojson features to path\n  if (!map.value) {\n    return\n  }\n  // Bind a group for geojson features to path\n  map.value\n    ?.append('g')\n    .attr('class', 'symbol-map__main__features')\n    .selectAll('.symbol-map__main__features__item')\n    .data(featuresGeojson.value.features)\n    // Add the path with the correct class\n    .enter()\n    .append('path')\n    .attr('class', featureClass)\n    .attr('d', featurePath.value as any)\n    .on('click', featureClicked as any)\n    .style('color', props.featureColor as any)\n}\n\n// watch\nwatch(\n  () => props.data,\n  () => {\n    // draw()\n    update()\n  }\n)\n\nwatch(\n  () => props.socialMode,\n  () => {\n    draw()\n  }\n)\n\nwatch(\n  () => markerCursor.value,\n  () => {\n    setMarkersClasses()\n  }\n)\n\nwatch(\n  () => categoryHighlight.value,\n  () => {\n    setMarkersClasses()\n  }\n)\n\ndefineExpose({\n  el,\n  markerCursor,\n  loadTopojson,\n  draw\n})\n</script>\n\n<template>\n  <div\n    ref=\"el\"\n    :class=\"mapClass\"\n    class=\"symbol-map\"\n  >\n    <slot\n      name=\"legend\"\n      v-bind=\"{ legendData }\"\n    >\n      <ordinal-legend\n        v-if=\"!hideLegend && legendData\"\n        v-model:highlight=\"categoryHighlight\"\n        :data=\"legendData\"\n        :horizontal=\"horizontalLegend\"\n        :marker-path=\"markerPath\"\n        :category-objects-path=\"LegendCategory.label\"\n      >\n        <template #marker=\"d\">\n          <slot\n            name=\"legend-marker\"\n            v-bind=\"d\"\n          />\n        </template>\n        <template #label=\"d\">\n          <slot\n            name=\"legend-label\"\n            v-bind=\"d\"\n          />\n        </template>\n      </ordinal-legend>\n    </slot>\n    <svg class=\"symbol-map__main\" />\n    <b-tooltip\n      v-if=\"tooltipTarget\"\n      ref=\"marker-tooltip\"\n      :custom-class=\"tooltipCustomClass\"\n      :fallback-placement=\"tooltipFallbackPlacement\"\n      :placement=\"tooltipPlacement\"\n      :target=\"tooltipTarget\"\n    >\n      <slot\n        name=\"tooltip\"\n        v-bind=\"{ markerCursor, ...markerCursorValue }\"\n      >\n        {{ markerLabel(markerCursorValue) }}\n      </slot>\n    </b-tooltip>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n\n.symbol-map {\n  $muted-item-opacity: 0.2;\n  $muted-item-filter: grayscale(30%) brightness(10%);\n  $muted-item-transition:\n    opacity 0.2s,\n    filter 0.2s;\n\n  $colors: $primary, $info, $warning, $danger;\n  $quantile: 2;\n\n  @each $start-color in $colors {\n    $i: index($colors, $start-color) - 1;\n    $end-color: mix($start-color, text-contrast($start-color), 20%);\n\n    @for $j from ($quantile * $i) through ($quantile * $i + $quantile - 1) {\n      $amount: ($j % $quantile) * math.div(100%, $quantile);\n      --category-color-#{$j}n: #{mix($end-color, $start-color, $amount)};\n    }\n  }\n\n  &__main {\n    color: #ebebeb;\n    min-height: 300px;\n    height: 100%;\n    width: 100%;\n\n    .chart--social-mode & {\n      color: $dark;\n    }\n\n    &:deep(.symbol-map__main__features__item) {\n      stroke: currentColor;\n      stroke-width: calc(1px / var(--map-scale, 1));\n      fill: currentColor;\n      transition:\n        opacity 750ms,\n        filter 750ms;\n    }\n\n    &:deep(.symbol-map__main__markers) {\n      shape-rendering: geometricPrecision;\n\n      .symbol-map__main__markers__item {\n        opacity: 1;\n        filter: grayscale(0%) brightness(100%);\n        transition: $muted-item-transition;\n\n        .symbol-map--has-highlight & {\n          opacity: $muted-item-opacity;\n          filter: $muted-item-filter;\n        }\n\n        .symbol-map--has-highlight &--highlighted {\n          opacity: 1;\n          filter: grayscale(0%) brightness(100%);\n        }\n\n        @for $i from 0 through ($quantile * length($colors)) {\n          &--category-#{$i}n path:not([fill]) {\n            fill: var(--category-color-#{$i}n);\n          }\n        }\n\n        .symbol-map--has-markers-scale & path {\n          transform: scale(calc(1 / var(--map-scale)));\n          transform-origin: center center;\n        }\n      }\n    }\n  }\n}\n</style>\n","{\n  \"imddb-header\": {\n    \"navbar\": {\n      \"leak\": \"Leak to us\",\n      \"support\": \"Soutenez nous\",\n      \"follow\": \"Suivez l'ICIJ\"\n    }\n  },\n  \"app-header\": {\n    \"navbar\": {\n      \"investigations\": \"Enquêtes\",\n      \"leak\": \"Contact securisé\",\n      \"support\": \"Soutenez nous\",\n      \"follow\": \"Suivez l'ICIJ\"\n    }\n  },\n  \"generic-header\": {\n    \"navbar\": {\n      \"investigations\": \"Enquêtes\",\n      \"leak\": \"Contact securisé\",\n      \"support\": \"Soutenez nous\",\n      \"follow\": \"Suivez l'ICIJ\"\n    }\n  },\n  \"embeddable-footer\": {\n    \"share\": \"Partager\"\n  },\n  \"embed-form\": {\n    \"heading\": \"Intégrer sur votre site\",\n    \"introduction\": \"Copiez le code ci-dessous pour l'intégrer à votre site.\",\n    \"responsive-optin\": \"Hauteur dynamique\",\n    \"copy\": \"Copier\"\n  },\n  \"follow-us-popover\": {\n    \"heading\": \"Suivez nous\"\n  },\n  \"app-footer\": {\n    \"investigations\": \"Enquêtes\",\n    \"follow-us\": \"Suivez nous\",\n    \"all-rights\": \"Tous droits réservés\",\n    \"version\": \"Version {version}\"\n  },\n  \"generic-footer\": {\n    \"investigations\": \"Enquêtes\",\n    \"follow-us\": \"Suivez nous\",\n    \"all-rights\": \"Tous droits réservés\",\n    \"version\": \"Version {version}\"\n  },\n  \"donate-form\": {\n    \"support\": \"Soutenez nous\",\n    \"introduction\": \"ICIJ’s investigations are supported by readers like you. Help keep our databases free and open to the public by joining our <strong><a target=\\\"_blank\\\" href=\\\"https://icij.org/donate\\\">ICIJ Insiders</a></strong> community.\",\n    \"join-heading\": \"Won't you join us today?\",\n    \"label\": \"I would like to donate\",\n    \"frequency\": {\n      \"monthly\": \"Monthly\",\n      \"yearly\": \"Yearly\",\n      \"onetime\": \"One time\"\n    },\n    \"result\": {\n      \"sentence\": \"With this donation, you are <strong>changing the %{target}</strong>.\",\n      \"conversation\": \"conversation\",\n      \"rules\": \"rules\",\n      \"world\": \"world\"\n    },\n    \"suggesteddonation\": {\n      \"conversation\": {\n        \"monthly\": 10,\n        \"yearly\": 25,\n        \"onetime\": 50\n      },\n      \"rules\": {\n        \"monthly\": 25,\n        \"yearly\": 180,\n        \"onetime\": 180\n      },\n      \"world\": {\n        \"monthly\": 100,\n        \"yearly\": 600,\n        \"onetime\": 600\n      }\n    },\n    \"submit\": \"Donate now\",\n    \"benefits\": {\n      \"heading\": \"ICIJ Insiders benefits\",\n      \"introduction\": \"Your monthly or annual donation will give you the following benefits.\",\n      \"more\": \"More about donations\",\n      \"list\": [\n        \"Invitation to exclusive chat with ICIJ staff about our latest major project after publication\",\n        \"Opportunity to submit your questions to ICIJ staff. Several questions will be answered in our quarterly ICIJ Insider newsletter\",\n        \"Sneak previews behind the scenes of ICIJ’s work (monthly)\",\n        \"ICIJ Insider Newsletter (quarterly)\",\n        \"ICIJ’s Weekly Update\"\n      ],\n      \"impacts\": {\n        \"conversation\": {\n          \"level\": \"conversation\",\n          \"heading\": \"Change the conversation\",\n          \"highlight\": \"$1-$179/Year <span class='monthly'>or $1-$14/Month</span>\"\n        },\n        \"rules\": {\n          \"level\": \"rules\",\n          \"heading\": \"Change the rules\",\n          \"highlight\": \"$180-$599/Year <span class='monthly'>or $15-$49/Month</span>\"\n        },\n        \"world\": {\n          \"level\": \"world\",\n          \"heading\": \"Change the world\",\n          \"highlight\": \"$600+/Year <span class='monthly'>or $50+/Month</span>\"\n        }\n      }\n    }\n  },\n  \"sign-up-form\": {\n    \"label\": \"Recevez nos articles par email\",\n    \"placeholder\": \"Adresse email\",\n    \"submit\": \"S'abonner\"\n  },\n  \"haptic-copy\": {\n    \"label\": \"Copier\",\n    \"tooltip\": {\n      \"succeed\": \"Copié!\"\n    }\n  },\n  \"tiny-pagination\": {\n    \"page\": \"Page\",\n    \"aria\": \"Allez à la page\",\n    \"total\": \"sur {numberOfPages}\",\n    \"previous\": \"Page suivante\",\n    \"next\": \"Page précédente\"\n  }\n}\n","{\n  \"advanced-link-form\": {\n    \"raw\": {\n      \"tab\": \"Text\"\n    },\n    \"rich\": {\n      \"tab\": \"Formatted Text\",\n      \"description\": \"Copy this link in Libre Office, Word, Google Document, etc.\"\n    },\n    \"markdown\": {\n      \"tab\": \"Markdown\",\n      \"description\": \"Copy this link for online platforms supporting Markdown.\"\n    },\n    \"html\": {\n      \"tab\": \"HTML\"\n    }\n  },\n  \"app-header\": {\n    \"navbar\": {\n      \"investigations\": \"Investigations\",\n      \"leak\": \"Leak to us\",\n      \"support\": \"Support us\",\n      \"follow\": \"Follow ICIJ\"\n    }\n  },\n  \"generic-header\": {\n    \"navbar\": {\n      \"investigations\": \"Investigations\",\n      \"leak\": \"Leak to us\",\n      \"support\": \"Support us\",\n      \"follow\": \"Follow ICIJ\"\n    }\n  },\n  \"imddb-header\": {\n    \"navbar\": {\n      \"leak\": \"Leak to us\",\n      \"support\": \"Support us\",\n      \"follow\": \"Follow ICIJ\"\n    }\n  },\n  \"embeddable-footer\": {\n    \"share\": \"Share\"\n  },\n  \"embed-form\": {\n    \"heading\": \"Embed on your website\",\n    \"introduction\": \"Copy the code below to embed this on your website.\",\n    \"responsive-optin\": \"Responsive iFrame\",\n    \"copy\": \"Copy\"\n  },\n  \"follow-us-popover\": {\n    \"heading\": \"Follow us\"\n  },\n  \"app-footer\": {\n    \"investigations\": \"Investigations\",\n    \"follow-us\": \"Follow us\",\n    \"all-rights\": \"All rights reserved\",\n    \"version\": \"Version {version}\"\n  },\n  \"generic-footer\": {\n    \"investigations\": \"Investigations\",\n    \"follow-us\": \"Follow us\",\n    \"all-rights\": \"All rights reserved\",\n    \"version\": \"Version {version}\"\n  },\n  \"donate-form\": {\n    \"support\": \"Support us\",\n    \"introduction\": \"ICIJ’s investigations are supported by readers like you. Help keep our databases free and open to the public by joining our <strong><a target=\\\"_blank\\\" href=\\\"https://icij.org/donate\\\">ICIJ Insiders</a></strong> community.\",\n    \"join-heading\": \"Won't you join us today?\",\n    \"label\": \"I would like to donate\",\n    \"frequency\": {\n      \"monthly\": \"Monthly\",\n      \"yearly\": \"Yearly\",\n      \"onetime\": \"One time\"\n    },\n    \"result\": {\n      \"sentence\": \"With this donation, you are <strong>changing the %{target}</strong>.\",\n      \"conversation\": \"conversation\",\n      \"rules\": \"rules\",\n      \"world\": \"world\"\n    },\n    \"suggesteddonation\": {\n      \"conversation\": {\n        \"monthly\": 10,\n        \"yearly\": 25,\n        \"onetime\": 50\n      },\n      \"rules\": {\n        \"monthly\": 25,\n        \"yearly\": 180,\n        \"onetime\": 200\n      },\n      \"world\": {\n        \"monthly\": 100,\n        \"yearly\": 600,\n        \"onetime\": 600\n      }\n    },\n    \"submit\": \"Donate now\",\n    \"benefits\": {\n      \"heading\": \"ICIJ Insiders benefits\",\n      \"introduction\": \"Your monthly or annual donation will give you the following benefits.\",\n      \"more\": \"More about donations\",\n      \"list\": [\n        \"Invitation to exclusive chat with ICIJ staff about our latest major project after publication\",\n        \"Opportunity to submit your questions to ICIJ staff. Several questions will be answered in our quarterly ICIJ Insider newsletter\",\n        \"Sneak previews behind the scenes of ICIJ’s work (monthly)\",\n        \"ICIJ Insider Newsletter (quarterly)\",\n        \"ICIJ’s Weekly Update\"\n      ],\n      \"impacts\": {\n        \"conversation\": {\n          \"level\": \"conversation\",\n          \"heading\": \"Change the conversation\",\n          \"highlight\": \"$1-$179/Year <span class='monthly'>or $1-$14/Month</span>\"\n        },\n        \"rules\": {\n          \"level\": \"rules\",\n          \"heading\": \"Change the rules\",\n          \"highlight\": \"$180-$599/Year <span class='monthly'>or $15-$49/Month</span>\"\n        },\n        \"world\": {\n          \"level\": \"world\",\n          \"heading\": \"Change the world\",\n          \"highlight\": \"$600+/Year <span class='monthly'>or $50+/Month</span>\"\n        }\n      }\n    }\n  },\n  \"sign-up-form\": {\n    \"label\": \"Stories in your inbox\",\n    \"placeholder\": \"Enter your email\",\n    \"submit\": \"Sign up\"\n  },\n  \"haptic-copy\": {\n    \"label\": \"Copy\",\n    \"tooltip\": {\n      \"succeed\": \"Copied!\",\n      \"failed\": \"Unable to copy the text\"\n    }\n  },\n  \"custom-pagination\": {\n    \"placeholder\": \"Jump to page\",\n    \"compact-placeholder\": \"Jump to...\",\n    \"total-pages\": \"No pages | 1 page | {count} pages total\",\n    \"invalid-number-error\": \"Invalid page number\"\n  },\n  \"tiny-pagination\": {\n    \"page\": \"Page\",\n    \"aria\": \"Jump to page\",\n    \"ariaRow\": \"Jump to row\",\n    \"total\": \"of {numberOfPages}\",\n    \"rowRange\": \"to {lastRangeRow} of 0 rows | to {lastRangeRow} of 1 row | to {lastRangeRow} of {totalRows} rows\",\n    \"rowRangeFewer\": \"of 0 rows | of 1 row | to {totalRows} rows\",\n    \"uniqueRowRange\": \"of 0 rows | of 1 row | of {totalRows} rows\",\n    \"compactRowRange\": \"to {lastRangeRow}\",\n    \"previous\": \"Previous page\",\n    \"next\": \"Next page\",\n    \"first\": \"First page\",\n    \"last\": \"Last page\"\n  }\n}\n","import { createI18n } from 'vue-i18n'\n\nimport fr from '@/locales/fr.json'\nimport en from '@/locales/en.json'\n\n// Declares en.json's shape as vue-i18n's global schema, so every useI18n()\n// call (and $t in templates) is typed against it without a per-call generic.\ndeclare module 'vue-i18n' {\n  // Module augmentation requires an interface (not a type alias) to merge\n  // with vue-i18n's own DefineLocaleMessage declaration.\n  // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n  export interface DefineLocaleMessage extends En {}\n}\ntype En = typeof en\n\nexport const locale = 'en'\nexport const fallbackLocale = 'en'\nexport const options = {\n  warnHtmlMessage: false,\n  // https://vue-i18n.intlify.dev/guide/advanced/composition.html#implicit-with-injected-properties-and-functions\n  globalInjection: true,\n  legacy: false,\n  locale,\n  fallbackLocale,\n  messages: { fr, en }\n}\n// Explicit `object` schema at this one call: fr.json doesn't mirror en.json\n// key-for-key (real translation drift, e.g. it's missing advanced-link-form\n// and custom-pagination entirely), so validating `messages` against the\n// DefineLocaleMessage schema declared above would fail here. Consumption\n// (useI18n(), $t) still resolves against that schema via its own default.\nexport const i18n = createI18n<object, 'en' | 'fr', false>(options)\n","// Accordion\nexport { default as AccordionWrapper } from './Accordion/AccordionWrapper.vue'\nexport { default as AccordionStep } from './Accordion/AccordionStep.vue'\n\n// ActiveTextTruncate\nexport { default as ActiveTextTruncate } from './ActiveTextTruncate/ActiveTextTruncate.vue'\n\n// Brand\nexport { default as Brand } from './Brand/Brand.vue'\nexport { default as BrandExpansion } from './Brand/BrandExpansion.vue'\n\n// Button\nexport { default as ButtonIcon } from './Button/ButtonIcon.vue'\nexport { default as ButtonIconCounter } from './Button/ButtonIconCounter.vue'\nexport { default as ButtonConfirm } from './Button/ButtonConfirm.vue'\n/** @deprecated Use ButtonConfirm instead */\nexport { default as ConfirmButton } from './Button/ButtonConfirm.vue'\n\n// ContentPlaceholder\nexport { default as ContentPlaceholder } from './ContentPlaceholder/ContentPlaceholder.vue'\n\n// EmbeddableFooter\nexport { default as EmbeddableFooter } from './EmbeddableFooter/EmbeddableFooter.vue'\n\n// FollowUsPopover\nexport { default as FollowUsPopover } from './FollowUsPopover/FollowUsPopover.vue'\n\n// Form\nexport { default as FormAdvancedLink } from './Form/FormAdvancedLink/FormAdvancedLink.vue'\n/** @deprecated Use FormAdvancedLink instead */\nexport { default as AdvancedLinkForm } from './Form/FormAdvancedLink/FormAdvancedLink.vue'\nexport { default as FormAdvancedLinkTab } from './Form/FormAdvancedLink/FormAdvancedLinkTab.vue'\n/** @deprecated Use FormAdvancedLinkTab instead */\nexport { default as AdvancedLinkFormTab } from './Form/FormAdvancedLink/FormAdvancedLinkTab.vue'\nexport { default as FormDonate } from './Form/FormDonate.vue'\n/** @deprecated Use FormDonate instead */\nexport { default as DonateForm } from './Form/FormDonate.vue'\nexport { default as FormEmbed } from './Form/FormEmbed.vue'\n/** @deprecated Use FormEmbed instead */\nexport { default as EmbedForm } from './Form/FormEmbed.vue'\nexport { default as FormSignUp } from './Form/FormSignUp.vue'\n/** @deprecated Use FormSignUp instead */\nexport { default as SignUpForm } from './Form/FormSignUp.vue'\n\n// Form/FormControl\nexport { default as FormControlDigits } from './Form/FormControl/FormControlDigits.vue'\n/** @deprecated Use FormControlDigits instead */\nexport { default as DigitsInput } from './Form/FormControl/FormControlDigits.vue'\nexport { default as FormControlRange } from './Form/FormControl/FormControlRange.vue'\n/** @deprecated Use FormControlRange instead */\nexport { default as RangePicker } from './Form/FormControl/FormControlRange.vue'\nexport { default as FormControlSecret } from './Form/FormControl/FormControlSecret.vue'\n/** @deprecated Use FormControlSecret instead */\nexport { default as SecretInput } from './Form/FormControl/FormControlSecret.vue'\nexport { default as FormControlSelectableDropdown } from './Form/FormControl/FormControlSelectableDropdown.vue'\n/** @deprecated Use FormControlSelectableDropdown instead */\nexport { default as SelectableDropdown } from './Form/FormControl/FormControlSelectableDropdown.vue'\n\n// App\nexport { default as AppFooter } from './App/AppFooter.vue'\n/** @deprecated Use AppFooter instead */\nexport { default as GenericFooter } from './App/AppFooter.vue'\nexport { default as AppHeader } from './App/AppHeader.vue'\n/** @deprecated Use AppHeader instead */\nexport { default as GenericHeader } from './App/AppHeader.vue'\n\n// HapticCopy\nexport { default as HapticCopy } from './HapticCopy/HapticCopy.vue'\n\n// ImageMode\nexport { default as ImageMode } from './ImageMode/ImageMode.vue'\nexport { default as ImageModeSource } from './ImageMode/ImageModeSource.vue'\n\n// Legend\nexport { default as LegendOrdinal } from './Legend/LegendOrdinal.vue'\n/** @deprecated Use LegendOrdinal instead */\nexport { default as OrdinalLegend } from './Legend/LegendOrdinal.vue'\nexport { default as LegendScale } from './Legend/LegendScale.vue'\n/** @deprecated Use LegendScale instead */\nexport { default as ScaleLegend } from './Legend/LegendScale.vue'\n\n// Pagination\nexport { default as Pagination } from './Pagination/Pagination.vue'\n/** @deprecated Use Pagination instead */\nexport { default as CustomPagination } from './Pagination/Pagination.vue'\nexport { default as PaginationTiny } from './Pagination/PaginationTiny.vue'\n/** @deprecated Use PaginationTiny instead */\nexport { default as TinyPagination } from './Pagination/PaginationTiny.vue'\n\nexport { default as AppIcon } from './App/AppIcon.vue'\nexport { default as AppIconLayers } from './App/AppIconLayers.vue'\n/** @deprecated Use AppIcon instead */\nexport { default as PhosphorIcon } from './App/AppIcon.vue'\n/** @deprecated Use AppIconLayers instead */\nexport { default as PhosphorIconLayers } from './App/AppIconLayers.vue'\n\n// ResponsiveIframe\nexport { default as ResponsiveIframe } from './ResponsiveIframe/ResponsiveIframe.vue'\n\n// SharingOptions\nexport { default as SharingOptions } from './SharingOptions/SharingOptions.vue'\nexport { default as SharingOptionsLink } from './SharingOptions/SharingOptionsLink.vue'\n\n// SlideUpDown\nexport { default as SlideUpDown } from './SlideUpDown/SlideUpDown.vue'\n\n// TexturedDeck\nexport { default as TexturedDeck } from './TexturedDeck/TexturedDeck.vue'\n","export { default as BarChart } from './BarChart/BarChart.vue'\nexport { default as ColumnChart } from './ColumnChart/ColumnChart.vue'\nexport { default as LineChart } from './LineChart/LineChart.vue'\nexport { default as StackedBarChart } from './StackedBarChart/StackedBarChart.vue'\nexport { default as StackedColumnChart } from './StackedColumnChart/StackedColumnChart.vue'\n","export { default as ChoroplethMap } from './ChoroplethMap/ChoroplethMap.vue'\nexport { default as ChoroplethMapAnnotation } from './ChoroplethMap/ChoroplethMapAnnotation.vue'\nexport { default as SymbolMap } from './SymbolMap/SymbolMap.vue'\n","import { createBootstrap } from 'bootstrap-vue-next'\nimport { App, Component, DefineComponent, WritableComputedRef } from 'vue'\nimport { i18n } from './i18n'\nimport * as components from './components'\nimport * as datavisualisations from './datavisualisations'\nimport * as maps from './maps'\nimport config from './config'\n\ntype ComponentMap = Record<string, Component | DefineComponent>\n\ninterface PluginOptions {\n  useI18n?: boolean\n  useBootstrap?: boolean\n  useConfig?: boolean\n  registerComponents?: boolean\n}\n\nconst Murmur = {\n  get i18n() {\n    return i18n\n  },\n  get config() {\n    return config\n  },\n  get components(): ComponentMap {\n    return components\n  },\n  get datavisualisations(): ComponentMap {\n    return datavisualisations\n  },\n  get maps(): ComponentMap {\n    return maps\n  },\n  setLocaleMessage(lang: string, message: any) {\n    return Murmur.i18n.global.setLocaleMessage(lang, message)\n  },\n  mergeLocaleMessage(lang: string, message: any) {\n    return Murmur.i18n.global.mergeLocaleMessage(lang, message)\n  },\n  setLocale(lang: string) {\n    // i18n.ts pins createI18n()'s Locales generic to 'en' | 'fr' (the initial\n    // messages' keys), but setLocaleMessage/mergeLocaleMessage let consumers\n    // register arbitrary locales at runtime (see main.spec.ts) — so this\n    // accepts any string and casts past the narrower type.\n    return ((Murmur.i18n.global.locale as WritableComputedRef<string>).value = lang)\n  },\n  getLocale() {\n    return Murmur.i18n.global.locale.value\n  },\n  install(app: App<Element>, {\n    useI18n = true,\n    useBootstrap = true,\n    useConfig = true,\n    registerComponents = true\n  }: PluginOptions = {}) {\n    if (useBootstrap) {\n      app.use(createBootstrap())\n    }\n\n    if (useI18n) {\n      app.use(Murmur.i18n)\n    }\n\n    if (useConfig) {\n      app.config.globalProperties.$config = Murmur.config\n    }\n\n    if (registerComponents) {\n      const registerAll = (map: ComponentMap) =>\n        Object.keys(map).forEach(key => app.component(key, map[key]))\n      registerAll(this.components)\n      registerAll(this.datavisualisations)\n      registerAll(this.maps)\n    }\n  }\n}\n\nexport default Murmur\n"],"x_google_ignoreList":[4,5,6,7,8,9,10,11,12,13,14,15,16,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,43,44,53,54,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,77,78,84,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,161,162,163,164,165,166,167,168,169,173,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,232,233,234,244,245,246,247,248,249,256,257,258,259,260,261,262,263,264,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,288,289,293,294,295,296,297,298,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,352,353,354,359,360,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,522,533,534,535,536,537,538,539,540,541,543,544,550,551,552,556,557,558,559,560,561,562,563,564,568,569,570,571,572,573,574,575,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,672,673,674,675,676,677,678,679,680,681],"mappings":"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U,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACvE,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACvE,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACvE,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACvE,EAAU,IAAM,EAAU,IAC1B,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACvE,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACvE,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACtF,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACtF,EAAU,IAAM,EAAU,IAC1B,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EA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"}