@maxax/hooks 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/use-boolean.ts","../src/use-breakpoint.ts","../src/enum/breakpointEnum.ts","../src/use-event-listener.ts","../src/use-browser-location.ts","../src/use-collection.ts","../src/use-context.ts","../src/use-count-down.ts","../src/use-deferred-true.ts","../src/use-is-composing.ts","../src/use-layout-style.ts","../src/const/index.ts","../src/use-loading.ts","../src/use-local-page.ts","../src/use-lock-html-scroll.ts","../src/use-memo.ts","../src/use-merged-state.ts","../src/use-script.ts","../src/use-scroll.ts","../src/use-signal.ts","../src/use-svg-icon-render.ts","../src/use-table.ts"],"sourcesContent":["export * from './use-boolean'\nexport * from './use-breakpoint'\nexport * from './use-browser-location'\nexport * from './use-collection'\nexport * from './use-context'\nexport * from './use-count-down'\nexport * from './use-deferred-true'\nexport * from './use-event-listener'\nexport * from './use-is-composing'\nexport * from './use-layout-style'\nexport * from './use-loading'\nexport * from './use-local-page'\nexport * from './use-lock-html-scroll'\nexport * from './use-memo'\nexport * from './use-merged-state'\nexport * from './use-request'\nexport * from './use-script'\nexport * from './use-scroll'\nexport * from './use-signal'\nexport * from './use-svg-icon-render'\nexport * from './use-table'\n","import { ref } from 'vue'\n\n/**\n * Boolean\n *\n * @param initValue Init value\n */\nexport function useBoolean(initValue = false) {\n const bool = ref(initValue)\n\n function setBool(value: boolean) {\n bool.value = value\n }\n function setTrue() {\n setBool(true)\n }\n function setFalse() {\n setBool(false)\n }\n function toggle() {\n setBool(!bool.value)\n }\n\n return {\n bool,\n setBool,\n setTrue,\n setFalse,\n toggle\n }\n}\n","import type { ComputedRef } from 'vue'\nimport { computed, ref, unref } from 'vue'\nimport { ScreenEnum, screenMap, SizeEnum } from './enum/breakpointEnum'\nimport { useEventListener } from './use-event-listener'\n\nlet globalScreenRef: ComputedRef<SizeEnum | undefined>\nlet globalWidthRef: ComputedRef<number>\nlet globalRealWidthRef: ComputedRef<number>\n\nexport interface CreateCallbackParams {\n screen: ComputedRef<SizeEnum | undefined>\n width: ComputedRef<number>\n realWidth: ComputedRef<number>\n screenEnum: typeof ScreenEnum\n screenMap: Map<SizeEnum, number>\n sizeEnum: typeof SizeEnum\n}\n\nexport function useBreakpoint() {\n return {\n screenRef: computed(() => unref(globalScreenRef)),\n widthRef: globalWidthRef,\n screenEnum: ScreenEnum,\n realWidthRef: globalRealWidthRef\n }\n}\n\n// Just call it once\nexport function createBreakpointListen(fn?: (opt: CreateCallbackParams) => void) {\n const screenRef = ref<SizeEnum>(SizeEnum.XL)\n const realWidthRef = ref(window.innerWidth)\n\n function getWindowWidth() {\n const width = document.body.clientWidth\n const xs = screenMap.get(SizeEnum.XS)!\n const sm = screenMap.get(SizeEnum.SM)!\n const md = screenMap.get(SizeEnum.MD)!\n const lg = screenMap.get(SizeEnum.LG)!\n const xl = screenMap.get(SizeEnum.XL)!\n if (width < xs) {\n screenRef.value = SizeEnum.XS\n } else if (width < sm) {\n screenRef.value = SizeEnum.SM\n } else if (width < md) {\n screenRef.value = SizeEnum.MD\n } else if (width < lg) {\n screenRef.value = SizeEnum.LG\n } else if (width < xl) {\n screenRef.value = SizeEnum.XL\n } else {\n screenRef.value = SizeEnum.XXL\n }\n realWidthRef.value = width\n }\n\n useEventListener({\n el: window,\n name: 'resize',\n\n listener: () => {\n getWindowWidth()\n resizeFn()\n }\n // Wait: 100,\n })\n\n getWindowWidth()\n globalScreenRef = computed(() => unref(screenRef))\n globalWidthRef = computed((): number => screenMap.get(unref(screenRef)!)!)\n globalRealWidthRef = computed((): number => unref(realWidthRef))\n\n function resizeFn() {\n fn?.({\n screen: globalScreenRef,\n width: globalWidthRef,\n realWidth: globalRealWidthRef,\n screenEnum: ScreenEnum,\n screenMap,\n sizeEnum: SizeEnum\n })\n }\n\n resizeFn()\n return {\n screenRef: globalScreenRef,\n screenEnum: ScreenEnum,\n widthRef: globalWidthRef,\n realWidthRef: globalRealWidthRef\n }\n}\n","export enum SizeEnum {\n XS = 'XS',\n SM = 'SM',\n MD = 'MD',\n LG = 'LG',\n XL = 'XL',\n XXL = 'XXL'\n}\n\nexport enum ScreenEnum {\n XS = 320,\n SM = 640,\n MD = 768,\n LG = 960,\n XL = 1280,\n XXL = 1536\n}\n\nconst screenMap = new Map<SizeEnum, number>()\n\nscreenMap.set(SizeEnum.XS, ScreenEnum.XS)\nscreenMap.set(SizeEnum.SM, ScreenEnum.SM)\nscreenMap.set(SizeEnum.MD, ScreenEnum.MD)\nscreenMap.set(SizeEnum.LG, ScreenEnum.LG)\nscreenMap.set(SizeEnum.XL, ScreenEnum.XL)\nscreenMap.set(SizeEnum.XXL, ScreenEnum.XXL)\n\nexport { screenMap }\n","import type { Ref } from 'vue'\nimport { ref, unref, watch } from 'vue'\nimport { useDebounceFn, useThrottleFn } from '@vueuse/core'\n\nexport type RemoveEventFn = () => void\nexport interface UseEventParams {\n el?: Element | Ref<Element | undefined> | Window | any\n name: string\n listener: EventListener\n options?: boolean | AddEventListenerOptions\n autoRemove?: boolean\n isDebounce?: boolean\n wait?: number\n}\nexport function useEventListener({ el = window, name, listener, options, autoRemove = true, isDebounce = true, wait = 80 }: UseEventParams): { removeEvent: RemoveEventFn } {\n /* eslint-disable-next-line */\n let remove: RemoveEventFn = () => { };\n const isAddRef = ref(false)\n\n if (el) {\n const element = ref(el as Element) as Ref<Element>\n\n const handler = isDebounce ? useDebounceFn(listener, wait) : useThrottleFn(listener, wait)\n const realHandler = wait ? handler : listener\n const removeEventListener = (e: Element) => {\n isAddRef.value = true\n e.removeEventListener(name, realHandler, options)\n }\n const addEventListener = (e: Element) => e.addEventListener(name, realHandler, options)\n\n const removeWatch = watch(\n element,\n (v, _ov, cleanUp) => {\n if (v) {\n !unref(isAddRef) && addEventListener(v)\n cleanUp(() => {\n autoRemove && removeEventListener(v)\n })\n }\n },\n { immediate: true }\n )\n\n remove = () => {\n removeEventListener(element.value)\n removeWatch()\n }\n }\n return { removeEvent: remove }\n}\n","import { onMounted, onUnmounted, type Ref, ref } from 'vue'\n\nexport interface WindowLocation {\n hash?: string\n host?: string\n hostname?: string\n href?: string\n origin?: string\n pathname?: string\n port?: string\n protocol?: string\n search?: string\n}\n\nconst isBrowser = typeof document !== 'undefined' && typeof window !== 'undefined'\n\nexport function useBrowserLocation(customWindow = isBrowser ? window : null): Ref<WindowLocation> {\n const getWindowLocation = (): WindowLocation => {\n const { hash, host, hostname, href, origin, pathname, port, protocol, search } = customWindow?.location || {}\n\n return {\n hash,\n host,\n hostname,\n href,\n origin,\n pathname,\n port,\n protocol,\n search\n }\n }\n\n const locationState = ref(getWindowLocation())\n\n const updateLocation = (): void => {\n locationState.value = getWindowLocation()\n }\n\n onMounted(() => {\n if (customWindow) {\n customWindow.addEventListener('popstate', updateLocation)\n customWindow.addEventListener('hashchange', updateLocation)\n }\n })\n\n onUnmounted(() => {\n if (customWindow) {\n customWindow.removeEventListener('popstate', updateLocation)\n customWindow.removeEventListener('hashchange', updateLocation)\n }\n })\n\n return locationState\n}\n","import type { InjectionKey, Ref } from 'vue'\nimport { getCurrentInstance, inject, onBeforeUnmount, onMounted, watch } from 'vue'\n\n// 函数的作用是管理 Vue 组件的实例集合。它通过注入的方式将组件实例注册到指定的集合中,并在组件卸载时进行清理。以下是该函数的主要功能说明:\nexport function useInjectionInstanceCollection(injectionName: string | InjectionKey<unknown>, collectionKey: string, registerKeyRef: Ref<string | undefined>): void {\n const injection = inject<Record<string, Record<string, any>> | null>(injectionName, null)\n if (injection === null) return\n const vm = getCurrentInstance()?.proxy\n watch(registerKeyRef, registerInstance)\n registerInstance(registerKeyRef.value)\n onBeforeUnmount(() => {\n registerInstance(undefined, registerKeyRef.value)\n })\n function registerInstance(key?: string, oldKey?: string): void {\n if (!injection) return\n const collection = injection[collectionKey]\n if (oldKey !== undefined) removeInstance(collection, oldKey)\n if (key !== undefined) addInstance(collection, key)\n }\n function removeInstance(collection: Record<string, any[]>, key: string): void {\n if (!collection[key]) collection[key] = []\n collection[key].splice(\n collection[key].findIndex(instance => instance === vm),\n 1\n )\n }\n function addInstance(collection: Record<string, any[]>, key: string): void {\n if (!collection[key]) collection[key] = []\n if (!~collection[key].findIndex(instance => instance === vm)) {\n collection[key].push(vm)\n }\n }\n}\n\nexport function useInjectionCollection(injectionName: string | InjectionKey<unknown>, collectionKey: string, valueRef: Ref<any>): void {\n const injection = inject<Record<any, any[]> | null>(injectionName, null)\n if (injection === null) return\n if (!(collectionKey in injection)) {\n injection[collectionKey] = []\n }\n injection[collectionKey].push(valueRef.value)\n watch(valueRef, (value, prevValue) => {\n const collectionArray = injection[collectionKey]\n const index = collectionArray.findIndex(collectionValue => collectionValue === prevValue)\n if (~index) collectionArray.splice(index, 1)\n collectionArray.push(value)\n })\n onBeforeUnmount(() => {\n const collectionArray = injection[collectionKey]\n const index = collectionArray.findIndex(collectionValue => collectionValue === valueRef.value)\n if (~index) collectionArray.splice(index, 1)\n })\n}\n\nexport function useInjectionElementCollection(injectionName: string | InjectionKey<unknown>, collectionKey: string, getElement: () => HTMLElement | null): void {\n const injection = inject<Record<string, HTMLElement[]> | null>(injectionName, null)\n if (injection === null) return\n if (!(collectionKey in injection)) {\n injection[collectionKey] = []\n }\n onMounted(() => {\n const el = getElement()\n if (!el) return\n injection[collectionKey].push(el)\n })\n onBeforeUnmount(() => {\n const collectionArray = injection[collectionKey]\n const element = getElement()\n const index = collectionArray.findIndex(collectionElement => collectionElement === element)\n if (~index) collectionArray.splice(index, 1)\n })\n}\n","import type { InjectionKey } from 'vue'\nimport { inject, provide } from 'vue'\n\n/**\n * Use context\n *\n * @example\n * ```ts\n * // there are three vue files: A.vue, B.vue, C.vue, and A.vue is the parent component of B.vue and C.vue\n *\n * // context.ts\n * import { ref } from 'vue';\n * import { useContext } from '@max/hooks';\n *\n * export const { setupStore, useStore } = useContext('demo', () => {\n * const count = ref(0);\n *\n * function increment() {\n * count.value++;\n * }\n *\n * function decrement() {\n * count.value--;\n * }\n *\n * return {\n * count,\n * increment,\n * decrement\n * };\n * })\n * ``` // A.vue\n * ```vue\n * <template>\n * <div>A</div>\n * </template>\n * <script setup lang=\"ts\">\n * import { setupStore } from './context';\n *\n * setupStore();\n * // const { increment } = setupStore(); // also can control the store in the parent component\n * </script>\n * ``` // B.vue\n * ```vue\n * <template>\n * <div>B</div>\n * </template>\n * <script setup lang=\"ts\">\n * import { useStore } from './context';\n *\n * const { count, increment } = useStore();\n * </script>\n * ```;\n *\n * // C.vue is same as B.vue\n *\n * @param contextName Context name\n * @param fn Context function\n */\nexport function useContext<T extends (...args: any[]) => any>(contextName: string, fn: T) {\n type Context = ReturnType<T>\n\n const { useProvide, useInject: useStore } = createContext<Context>(contextName)\n\n function setupStore(...args: Parameters<T>) {\n const context: Context = fn(...args)\n return useProvide(context)\n }\n\n return {\n /** Setup store in the parent component */\n setupStore,\n /** Use store in the child component */\n useStore\n }\n}\n\n/** Create context */\nfunction createContext<T>(contextName: string) {\n const injectKey: InjectionKey<T> = Symbol(contextName)\n\n function useProvide(context: T) {\n provide(injectKey, context)\n\n return context\n }\n\n function useInject() {\n return inject(injectKey) as T\n }\n\n return {\n useProvide,\n useInject\n }\n}\n","import { computed, onScopeDispose, ref } from 'vue'\nimport { useRafFn } from '@vueuse/core'\n\n/**\n * Count down\n *\n * @param seconds - count down seconds\n */\nexport function useCountDown(seconds: number) {\n const FPS_PER_SECOND = 60\n\n const fps = ref(0)\n\n const count = computed(() => Math.ceil(fps.value / FPS_PER_SECOND))\n\n const isCounting = computed(() => fps.value > 0)\n\n const { pause, resume } = useRafFn(\n () => {\n if (fps.value > 0) {\n fps.value -= 1\n } else {\n pause()\n }\n },\n { immediate: false }\n )\n\n function start(updateSeconds: number = seconds) {\n fps.value = FPS_PER_SECOND * updateSeconds\n resume()\n }\n\n function stop() {\n fps.value = 0\n pause()\n }\n\n onScopeDispose(() => {\n pause()\n })\n\n return {\n count,\n isCounting,\n start,\n stop\n }\n}\n","import { type Ref, ref, watch } from 'vue'\n\n// 此函数用于在指定延迟后返回一个布尔值引用,基于输入的值引用和延迟条件\nexport function useDeferredTrue(valueRef: Ref<any>, delay: number, shouldDelayRef: Ref<boolean>): Ref<boolean> {\n if (!delay) return valueRef\n const delayedRef = ref(valueRef.value)\n let timerId: number | null = null\n watch(valueRef, value => {\n if (timerId !== null) window.clearTimeout(timerId)\n if (value === true) {\n if (shouldDelayRef && !shouldDelayRef.value) {\n delayedRef.value = true\n } else {\n timerId = window.setTimeout(() => {\n delayedRef.value = true\n }, delay)\n }\n } else {\n delayedRef.value = false\n }\n })\n return delayedRef\n}\n","import { onBeforeMount, onBeforeUnmount, type Ref, ref } from 'vue'\n\nconst isComposingRef = ref(false)\nfunction compositionStartHandler(): void {\n isComposingRef.value = true\n}\nfunction compositionEndHandler(): void {\n isComposingRef.value = false\n}\nlet mountedCount = 0\n\n// 用于检测用户是否正在进行输入法的组合输入\nexport function useIsComposing(): Ref<boolean> {\n if (document && window) {\n onBeforeMount(() => {\n if (!mountedCount) {\n window.addEventListener('compositionstart', compositionStartHandler)\n window.addEventListener('compositionend', compositionEndHandler)\n }\n mountedCount++\n })\n onBeforeUnmount(() => {\n if (mountedCount <= 1) {\n window.removeEventListener('compositionstart', compositionStartHandler)\n window.removeEventListener('compositionend', compositionEndHandler)\n mountedCount = 0\n } else {\n mountedCount--\n }\n })\n }\n return isComposingRef\n}\n","import type { CSSProperties } from 'vue'\nimport { computed, onMounted, onUnmounted, ref } from 'vue'\nimport { useCssVar, useDebounceFn } from '@vueuse/core'\nimport type { VisibleDomRect } from '@maxax/utils'\nimport { getElementVisibleRect } from '@maxax/utils'\nimport { CSS_VARIABLE_LAYOUT_CONTENT_HEIGHT, CSS_VARIABLE_LAYOUT_CONTENT_WIDTH, CSS_VARIABLE_LAYOUT_FOOTER_HEIGHT, CSS_VARIABLE_LAYOUT_HEADER_HEIGHT } from './const'\n\nexport function useLayoutContentStyle(diffHeight = 0) {\n let resizeObserver: null | ResizeObserver = null\n const contentElement = ref<HTMLDivElement | null>(null)\n const visibleDomRect = ref<null | VisibleDomRect>(null)\n const contentHeight = useCssVar(CSS_VARIABLE_LAYOUT_CONTENT_HEIGHT)\n const contentWidth = useCssVar(CSS_VARIABLE_LAYOUT_CONTENT_WIDTH)\n\n const overlayStyle = computed((): CSSProperties => {\n const { height, left, top, width } = visibleDomRect.value ?? {}\n return {\n height: `${height}px`,\n left: `${left}px`,\n position: 'fixed',\n top: `${top}px`,\n width: `${width}px`,\n zIndex: 150\n }\n })\n\n const debouncedCalcHeight = useDebounceFn((_entries: ResizeObserverEntry[]) => {\n visibleDomRect.value = getElementVisibleRect(contentElement.value)\n contentHeight.value = `${visibleDomRect.value.height - diffHeight}px`\n contentWidth.value = `${visibleDomRect.value.width}px`\n }, 16)\n\n onMounted(() => {\n if (contentElement.value && !resizeObserver) {\n resizeObserver = new ResizeObserver(debouncedCalcHeight)\n resizeObserver.observe(contentElement.value)\n }\n })\n\n onUnmounted(() => {\n resizeObserver?.disconnect()\n resizeObserver = null\n })\n\n return { contentElement, overlayStyle, visibleDomRect }\n}\n\nexport function useLayoutHeaderStyle() {\n const headerHeight = useCssVar(CSS_VARIABLE_LAYOUT_HEADER_HEIGHT)\n\n return {\n getLayoutHeaderHeight: () => {\n return Number.parseInt(`${headerHeight.value}`, 10)\n },\n setLayoutHeaderHeight: (height: number) => {\n headerHeight.value = `${height}px`\n }\n }\n}\n\nexport function useLayoutFooterStyle() {\n const footerHeight = useCssVar(CSS_VARIABLE_LAYOUT_FOOTER_HEIGHT)\n\n return {\n getLayoutFooterHeight: () => {\n return Number.parseInt(`${footerHeight.value}`, 10)\n },\n setLayoutFooterHeight: (height: number) => {\n footerHeight.value = `${height}px`\n }\n }\n}\n","/** Layout content 组件的高度 */\nexport const CSS_VARIABLE_LAYOUT_CONTENT_HEIGHT = '--max-content-height'\n/** Layout content 组件的宽度 */\nexport const CSS_VARIABLE_LAYOUT_CONTENT_WIDTH = '--max-content-width'\n/** Layout header 组件的高度 */\nexport const CSS_VARIABLE_LAYOUT_HEADER_HEIGHT = '--max-header-height'\n/** Layout footer 组件的高度 */\nexport const CSS_VARIABLE_LAYOUT_FOOTER_HEIGHT = '--max-footer-height'\n","import { useBoolean } from './use-boolean'\n\n/**\n * Loading\n *\n * @param initValue Init value\n */\nexport function useLoading(initValue = false) {\n const { bool: loading, setTrue: startLoading, setFalse: endLoading } = useBoolean(initValue)\n\n return {\n loading,\n startLoading,\n endLoading\n }\n}\n","import { computed, ref, unref } from 'vue'\n\nfunction pagination<T = any>(list: T[], pageNo: number, pageSize: number): T[] {\n const offset = (pageNo - 1) * Number(pageSize)\n const ret = offset + Number(pageSize) >= list.length ? list.slice(offset, list.length) : list.slice(offset, offset + Number(pageSize))\n return ret\n}\n\nexport function useLocalPage(list: any[], pageSize: number) {\n const currentPage = ref(1)\n const pageSizeRef = ref(pageSize)\n const listRef = ref(list)\n\n const getPaginationList = computed(() => {\n return pagination(unref(listRef), unref(currentPage), unref(pageSizeRef))\n })\n\n const getTotal = computed(() => {\n return unref(listRef).length\n })\n\n function setCurrentPage(page: number) {\n currentPage.value = page\n }\n\n function setPageSize(size: number) {\n pageSizeRef.value = size\n }\n\n function setPagination(page: { currentPage: number; pageSize: number }) {\n setCurrentPage(page.currentPage)\n setPageSize(page.pageSize)\n }\n\n function getPageList() {\n return pagination(unref(listRef), unref(currentPage), unref(pageSizeRef))\n }\n\n return { setCurrentPage, getTotal, setPageSize, getPaginationList, setPagination, getPageList }\n}\n","import { type Ref, type WatchStopHandle, onBeforeUnmount, onMounted, ref, watch } from 'vue'\n\nlet lockCount = 0\nlet originalMarginRight: string = ''\nlet originalOverflow: string = ''\nlet originalOverflowX: string = ''\nlet originalOverflowY: string = ''\nexport const lockHtmlScrollRightCompensationRef = ref('0px')\n\nexport function useLockHtmlScroll(lockRef: Ref<boolean>): void {\n // not browser\n if (typeof document === 'undefined') return\n const el = document.documentElement\n let watchStopHandle: WatchStopHandle | undefined\n let activated = false\n const unlock = (): void => {\n el.style.marginRight = originalMarginRight\n el.style.overflow = originalOverflow\n el.style.overflowX = originalOverflowX\n el.style.overflowY = originalOverflowY\n lockHtmlScrollRightCompensationRef.value = '0px'\n }\n onMounted(() => {\n watchStopHandle = watch(\n lockRef,\n value => {\n if (value) {\n if (!lockCount) {\n const scrollbarWidth = window.innerWidth - el.offsetWidth\n if (scrollbarWidth > 0) {\n originalMarginRight = el.style.marginRight\n el.style.marginRight = `${scrollbarWidth}px`\n lockHtmlScrollRightCompensationRef.value = `${scrollbarWidth}px`\n }\n originalOverflow = el.style.overflow\n originalOverflowX = el.style.overflowX\n originalOverflowY = el.style.overflowY\n el.style.overflow = 'hidden'\n el.style.overflowX = 'hidden'\n el.style.overflowY = 'hidden'\n }\n activated = true\n lockCount++\n } else {\n lockCount--\n if (!lockCount) {\n unlock()\n }\n activated = false\n }\n },\n {\n immediate: true\n }\n )\n })\n onBeforeUnmount(() => {\n watchStopHandle?.()\n if (activated) {\n lockCount--\n if (!lockCount) {\n unlock()\n }\n activated = false\n }\n })\n}\n","import type { ComputedRef, Ref, WritableComputedRef } from 'vue'\nimport { computed, ref, watch } from 'vue'\n\ntype MemoGetter<T> = () => T\ntype MemoSetter<T> = (v: T) => void\n\ninterface WritableMemoOptions<T> {\n get: MemoGetter<T>\n set: MemoSetter<T>\n}\n\nfunction useMemo<T>(getter: MemoGetter<T>): ComputedRef<T>\nfunction useMemo<T>(options: WritableMemoOptions<T>): WritableComputedRef<T>\nfunction useMemo<T>(getterOrOptions: MemoGetter<T> | WritableMemoOptions<T>): ComputedRef<T> | WritableComputedRef<T> {\n const computedValueRef = computed(getterOrOptions as any) as WritableComputedRef<T> | ComputedRef<T>\n // Maybe it's not possible to lazy evaluate the value, since we can't make\n // render phase capture the deps behind useMemo\n const valueRef = ref(computedValueRef.value) as Ref<T>\n watch(computedValueRef, value => {\n valueRef.value = value\n })\n if (typeof getterOrOptions === 'function') {\n return valueRef as ComputedRef<T>\n }\n return {\n __v_isRef: true,\n get value() {\n return valueRef.value\n },\n set value(v: T) {\n // eslint-disable-next-line prettier/prettier\n ; (getterOrOptions as WritableMemoOptions<T>).set(v)\n }\n } as unknown as WritableComputedRef<T>\n}\n\nexport { useMemo }\n","import type { ComputedRef, Ref } from 'vue'\nimport { computed, watch } from 'vue'\n\nexport function useMergedState<T>(controlledStateRef: Ref<T | undefined>, uncontrolledStateRef: Ref<T>): ComputedRef<T> {\n watch(controlledStateRef, value => {\n if (value !== undefined) {\n uncontrolledStateRef.value = value\n }\n })\n return computed(() => {\n if (controlledStateRef.value === undefined) {\n return uncontrolledStateRef.value\n }\n return controlledStateRef.value\n })\n}\n","import { onMounted, onUnmounted, ref } from 'vue'\n\ninterface ScriptOptions {\n src: string\n}\n\nexport function useScript(opts: ScriptOptions) {\n const isLoading = ref(false)\n const error = ref(false)\n const success = ref(false)\n let script: HTMLScriptElement\n\n const promise = new Promise((resolve, reject) => {\n onMounted(() => {\n script = document.createElement('script')\n script.type = 'text/javascript'\n script.onload = () => {\n isLoading.value = false\n success.value = true\n error.value = false\n resolve('')\n }\n\n script.onerror = err => {\n isLoading.value = false\n success.value = false\n error.value = true\n reject(err)\n }\n\n script.src = opts.src\n document.head.appendChild(script)\n })\n })\n\n onUnmounted(() => {\n script && script.remove()\n })\n\n return {\n isLoading,\n error,\n success,\n toPromise: () => promise\n }\n}\n","import type { Ref } from 'vue'\n\nimport { onMounted, onUnmounted, ref, watch } from 'vue'\nimport { useThrottleFn } from '@vueuse/core'\nimport { isObject, isWindow } from '@maxax/utils'\n\nexport function useScroll(\n refEl: Ref<Element | Window | null>,\n options?: {\n wait?: number\n leading?: boolean\n trailing?: boolean\n }\n) {\n const refX = ref(0)\n const refY = ref(0)\n let handler = () => {\n if (isWindow(refEl.value)) {\n refX.value = refEl.value.scrollX\n refY.value = refEl.value.scrollY\n } else if (refEl.value) {\n refX.value = (refEl.value as Element).scrollLeft\n refY.value = (refEl.value as Element).scrollTop\n }\n }\n\n if (isObject(options)) {\n let wait = 0\n if (options && options.wait && options.wait > 0) {\n wait = options.wait\n Reflect.deleteProperty(options, 'wait')\n }\n\n handler = useThrottleFn(handler, wait)\n }\n\n let stopWatch: () => void\n onMounted(() => {\n stopWatch = watch(\n refEl,\n (el, prevEl, onCleanup) => {\n if (el) {\n el.addEventListener('scroll', handler)\n } else if (prevEl) {\n prevEl.removeEventListener('scroll', handler)\n }\n onCleanup(() => {\n refX.value = 0\n refY.value = 0\n el && el.removeEventListener('scroll', handler)\n })\n },\n { immediate: true }\n )\n })\n\n onUnmounted(() => {\n refEl.value && refEl.value.removeEventListener('scroll', handler)\n })\n\n function stop() {\n stopWatch && stopWatch()\n }\n\n return { refX, refY, stop }\n}\n","import { computed, ref, shallowRef, triggerRef } from 'vue'\nimport type { ComputedGetter, DebuggerOptions, Ref, ShallowRef, WritableComputedOptions, WritableComputedRef } from 'vue'\n\ntype Updater<T> = (value: T) => T\ntype Mutator<T> = (value: T) => void\n\n/**\n * Signal is a reactive value that can be set, updated or mutated\n *\n * @example\n * ```ts\n * const count = useSignal(0);\n *\n * // `watchEffect`\n * watchEffect(() => {\n * console.log(count());\n * });\n *\n * // watch\n * watch(count, value => {\n * console.log(value);\n * });\n *\n * // useComputed\n * const double = useComputed(() => count() * 2);\n * const writeableDouble = useComputed({\n * get: () => count() * 2,\n * set: value => count.set(value / 2)\n * });\n * ```\n */\nexport interface Signal<T> {\n (): Readonly<T>\n /**\n * Set the value of the signal\n *\n * It recommend use `set` for primitive values\n *\n * @param value\n */\n set: (value: T) => void\n /**\n * Update the value of the signal using an updater function\n *\n * It recommend use `update` for non-primitive values, only the first level of the object will be reactive.\n *\n * @param updater\n */\n update: (updater: Updater<T>) => void\n /**\n * Mutate the value of the signal using a mutator function\n *\n * this action will call `triggerRef`, so the value will be tracked on `watchEffect`.\n *\n * It recommend use `mutate` for non-primitive values, all levels of the object will be reactive.\n *\n * @param mutator\n */\n mutate: (mutator: Mutator<T>) => void\n /**\n * Get the reference of the signal\n *\n * Sometimes it can be useful to make `v-model` work with the signal\n *\n * ```vue\n * <template>\n * <input v-model=\"model.count\" />\n * </template>;\n *\n * <script setup lang=\"ts\">\n * const state = useSignal({ count: 0 }, { useRef: true });\n *\n * const model = state.getRef();\n * </script>\n * ```\n */\n getRef: () => Readonly<ShallowRef<Readonly<T>>>\n}\n\nexport interface ReadonlySignal<T> {\n (): Readonly<T>\n}\n\nexport interface SignalOptions {\n /**\n * Whether to use `ref` to store the value\n *\n * @default false use `sharedRef` to store the value\n */\n useRef?: boolean\n}\n\nexport function useSignal<T>(initialValue: T, options?: SignalOptions): Signal<T> {\n const { useRef } = options || {}\n\n const state = useRef ? (ref(initialValue) as Ref<T>) : shallowRef(initialValue)\n\n return createSignal(state)\n}\n\nexport function useComputed<T>(getter: ComputedGetter<T>, debugOptions?: DebuggerOptions): ReadonlySignal<T>\nexport function useComputed<T>(options: WritableComputedOptions<T>, debugOptions?: DebuggerOptions): Signal<T>\nexport function useComputed<T>(getterOrOptions: ComputedGetter<T> | WritableComputedOptions<T>, debugOptions?: DebuggerOptions) {\n const isGetter = typeof getterOrOptions === 'function'\n\n const computedValue = computed(getterOrOptions as any, debugOptions)\n\n if (isGetter) {\n return () => computedValue.value as ReadonlySignal<T>\n }\n\n return createSignal(computedValue)\n}\n\nfunction createSignal<T>(state: ShallowRef<T> | WritableComputedRef<T>): Signal<T> {\n const signal = () => state.value\n\n signal.set = (value: T) => {\n state.value = value\n }\n\n signal.update = (updater: Updater<T>) => {\n state.value = updater(state.value)\n }\n\n signal.mutate = (mutator: Mutator<T>) => {\n mutator(state.value)\n triggerRef(state)\n }\n\n signal.getRef = () => state as Readonly<ShallowRef<Readonly<T>>>\n\n return signal\n}\n","import { h } from 'vue'\nimport type { Component } from 'vue'\n\ninterface IconConfig {\n /** Iconify icon name */\n icon?: string\n /** Local icon name */\n localIcon?: string\n /** Icon color */\n color?: string\n /** Icon size */\n fontSize?: number\n}\n\ntype IconStyle = Partial<Pick<CSSStyleDeclaration, 'color' | 'fontSize'>>\n\n/**\n * Svg icon render hook\n *\n * @param SvgIcon Svg icon component\n */\nexport function useSvgIconRender(SvgIcon: Component) {\n /**\n * Svg icon VNode\n *\n * @param config\n */\n const SvgIconVNode = (config: IconConfig) => {\n const { color, fontSize, icon, localIcon } = config\n\n const style: IconStyle = {}\n\n if (color) {\n style.color = color\n }\n if (fontSize) {\n style.fontSize = `${fontSize}px`\n }\n\n if (!icon && !localIcon) {\n return undefined\n }\n\n return () => h(SvgIcon, { icon, localIcon, style })\n }\n\n return {\n SvgIconVNode\n }\n}\n","import { computed, reactive, ref } from 'vue'\nimport type { Ref } from 'vue'\nimport { jsonClone } from '@maxax/utils'\nimport { useBoolean } from './use-boolean'\nimport { useLoading } from './use-loading'\n\nexport type MaybePromise<T> = T | Promise<T>\n\nexport type ApiFn = (args: any) => Promise<unknown>\n\nexport interface TableColumnCheck {\n key: string\n title: string\n checked: boolean\n}\n\nexport type TableDataWithIndex<T> = T & { index: number }\n\nexport interface TransformedData<T> {\n data: TableDataWithIndex<T>[]\n pageNum: number\n pageSize: number\n total: number\n}\n\nexport type Transformer<T, Response> = (response: Response) => TransformedData<T>\n\nexport interface TableConfig<A extends ApiFn, T, C> {\n /** Api function to get table data */\n apiFn: A\n /** Api params */\n apiParams?: Parameters<A>[0]\n /** Transform api response to table data */\n transformer: Transformer<T, Awaited<ReturnType<A>>>\n /** Columns factory */\n columns: () => C[]\n /**\n * Get column checks\n *\n * @param columns\n */\n getColumnChecks: (columns: C[]) => TableColumnCheck[]\n /**\n * Get columns\n *\n * @param columns\n */\n getColumns: (columns: C[], checks: TableColumnCheck[]) => C[]\n /**\n * Callback when response fetched\n *\n * @param transformed transformed data\n */\n onFetched?: (transformed: TransformedData<T>) => MaybePromise<void>\n /**\n * Whether to get data immediately\n *\n * @default true\n */\n immediate?: boolean\n}\n\nexport function useHookTable<A extends ApiFn, T, C>(config: TableConfig<A, T, C>) {\n const { loading, startLoading, endLoading } = useLoading()\n const { bool: empty, setBool: setEmpty } = useBoolean()\n\n const { apiFn, apiParams, transformer, immediate = true, getColumnChecks, getColumns } = config\n\n const searchParams: NonNullable<Parameters<A>[0]> = reactive(jsonClone({ ...apiParams }))\n\n const allColumns = ref(config.columns()) as Ref<C[]>\n\n const data: Ref<TableDataWithIndex<T>[]> = ref([])\n\n const columnChecks: Ref<TableColumnCheck[]> = ref(getColumnChecks(config.columns()))\n\n const columns = computed(() => getColumns(allColumns.value, columnChecks.value))\n\n function reloadColumns() {\n allColumns.value = config.columns()\n\n const checkMap = new Map(columnChecks.value.map(col => [col.key, col.checked]))\n\n const defaultChecks = getColumnChecks(allColumns.value)\n\n columnChecks.value = defaultChecks.map(col => ({\n ...col,\n checked: checkMap.get(col.key) ?? col.checked\n }))\n }\n\n async function getData() {\n startLoading()\n\n const formattedParams = formatSearchParams(searchParams)\n\n const response = await apiFn(formattedParams)\n\n const transformed = transformer(response as Awaited<ReturnType<A>>)\n\n data.value = transformed.data\n\n setEmpty(transformed.data.length === 0)\n\n await config.onFetched?.(transformed)\n\n endLoading()\n }\n\n function formatSearchParams(params: Record<string, unknown>) {\n const formattedParams: Record<string, unknown> = {}\n\n Object.entries(params).forEach(([key, value]) => {\n if (value !== null && value !== undefined) {\n formattedParams[key] = value\n }\n })\n\n return formattedParams\n }\n\n /**\n * Update search params\n *\n * @param params\n */\n function updateSearchParams(params: Partial<Parameters<A>[0]>) {\n Object.assign(searchParams, params)\n }\n\n /** Reset search params */\n function resetSearchParams() {\n Object.assign(searchParams, jsonClone(apiParams))\n }\n\n if (immediate) {\n getData()\n }\n\n return {\n loading,\n empty,\n data,\n columns,\n columnChecks,\n reloadColumns,\n getData,\n searchParams,\n updateSearchParams,\n resetSearchParams\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,iBAAoB;AAOb,SAAS,WAAW,YAAY,OAAO;AAC5C,QAAM,WAAO,gBAAI,SAAS;AAE1B,WAAS,QAAQ,OAAgB;AAC/B,SAAK,QAAQ;AAAA,EACf;AACA,WAAS,UAAU;AACjB,YAAQ,IAAI;AAAA,EACd;AACA,WAAS,WAAW;AAClB,YAAQ,KAAK;AAAA,EACf;AACA,WAAS,SAAS;AAChB,YAAQ,CAAC,KAAK,KAAK;AAAA,EACrB;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AC7BA,IAAAA,cAAqC;;;ACD9B,IAAK,WAAL,kBAAKC,cAAL;AACL,EAAAA,UAAA,QAAK;AACL,EAAAA,UAAA,QAAK;AACL,EAAAA,UAAA,QAAK;AACL,EAAAA,UAAA,QAAK;AACL,EAAAA,UAAA,QAAK;AACL,EAAAA,UAAA,SAAM;AANI,SAAAA;AAAA,GAAA;AASL,IAAK,aAAL,kBAAKC,gBAAL;AACL,EAAAA,wBAAA,QAAK,OAAL;AACA,EAAAA,wBAAA,QAAK,OAAL;AACA,EAAAA,wBAAA,QAAK,OAAL;AACA,EAAAA,wBAAA,QAAK,OAAL;AACA,EAAAA,wBAAA,QAAK,QAAL;AACA,EAAAA,wBAAA,SAAM,QAAN;AANU,SAAAA;AAAA,GAAA;AASZ,IAAM,YAAY,oBAAI,IAAsB;AAE5C,UAAU,IAAI,eAAa,YAAa;AACxC,UAAU,IAAI,eAAa,YAAa;AACxC,UAAU,IAAI,eAAa,YAAa;AACxC,UAAU,IAAI,eAAa,YAAa;AACxC,UAAU,IAAI,eAAa,aAAa;AACxC,UAAU,IAAI,iBAAc,cAAc;;;ACxB1C,IAAAC,cAAkC;AAClC,kBAA6C;AAYtC,SAAS,iBAAiB,EAAE,KAAK,QAAQ,MAAM,UAAU,SAAS,aAAa,MAAM,aAAa,MAAM,OAAO,GAAG,GAAmD;AAE1K,MAAI,SAAwB,MAAM;AAAA,EAAE;AACpC,QAAM,eAAW,iBAAI,KAAK;AAE1B,MAAI,IAAI;AACN,UAAM,cAAU,iBAAI,EAAa;AAEjC,UAAM,UAAU,iBAAa,2BAAc,UAAU,IAAI,QAAI,2BAAc,UAAU,IAAI;AACzF,UAAM,cAAc,OAAO,UAAU;AACrC,UAAM,sBAAsB,CAAC,MAAe;AAC1C,eAAS,QAAQ;AACjB,QAAE,oBAAoB,MAAM,aAAa,OAAO;AAAA,IAClD;AACA,UAAM,mBAAmB,CAAC,MAAe,EAAE,iBAAiB,MAAM,aAAa,OAAO;AAEtF,UAAM,kBAAc;AAAA,MAClB;AAAA,MACA,CAAC,GAAG,KAAK,YAAY;AACnB,YAAI,GAAG;AACL,eAAC,mBAAM,QAAQ,KAAK,iBAAiB,CAAC;AACtC,kBAAQ,MAAM;AACZ,0BAAc,oBAAoB,CAAC;AAAA,UACrC,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,EAAE,WAAW,KAAK;AAAA,IACpB;AAEA,aAAS,MAAM;AACb,0BAAoB,QAAQ,KAAK;AACjC,kBAAY;AAAA,IACd;AAAA,EACF;AACA,SAAO,EAAE,aAAa,OAAO;AAC/B;;;AF5CA,IAAI;AACJ,IAAI;AACJ,IAAI;AAWG,SAAS,gBAAgB;AAC9B,SAAO;AAAA,IACL,eAAW,sBAAS,UAAM,mBAAM,eAAe,CAAC;AAAA,IAChD,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB;AACF;AAGO,SAAS,uBAAuB,IAA0C;AAC/E,QAAM,gBAAY,8BAAyB;AAC3C,QAAM,mBAAe,iBAAI,OAAO,UAAU;AAE1C,WAAS,iBAAiB;AACxB,UAAM,QAAQ,SAAS,KAAK;AAC5B,UAAM,KAAK,UAAU,iBAAe;AACpC,UAAM,KAAK,UAAU,iBAAe;AACpC,UAAM,KAAK,UAAU,iBAAe;AACpC,UAAM,KAAK,UAAU,iBAAe;AACpC,UAAM,KAAK,UAAU,iBAAe;AACpC,QAAI,QAAQ,IAAI;AACd,gBAAU;AAAA,IACZ,WAAW,QAAQ,IAAI;AACrB,gBAAU;AAAA,IACZ,WAAW,QAAQ,IAAI;AACrB,gBAAU;AAAA,IACZ,WAAW,QAAQ,IAAI;AACrB,gBAAU;AAAA,IACZ,WAAW,QAAQ,IAAI;AACrB,gBAAU;AAAA,IACZ,OAAO;AACL,gBAAU;AAAA,IACZ;AACA,iBAAa,QAAQ;AAAA,EACvB;AAEA,mBAAiB;AAAA,IACf,IAAI;AAAA,IACJ,MAAM;AAAA,IAEN,UAAU,MAAM;AACd,qBAAe;AACf,eAAS;AAAA,IACX;AAAA;AAAA,EAEF,CAAC;AAED,iBAAe;AACf,wBAAkB,sBAAS,UAAM,mBAAM,SAAS,CAAC;AACjD,uBAAiB,sBAAS,MAAc,UAAU,QAAI,mBAAM,SAAS,CAAE,CAAE;AACzE,2BAAqB,sBAAS,UAAc,mBAAM,YAAY,CAAC;AAE/D,WAAS,WAAW;AAClB,6BAAK;AAAA,MACH,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,WAAW;AAAA,MACX,YAAY;AAAA,MACZ;AAAA,MACA,UAAU;AAAA,IACZ;AAAA,EACF;AAEA,WAAS;AACT,SAAO;AAAA,IACL,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,cAAc;AAAA,EAChB;AACF;;;AGzFA,IAAAC,cAAsD;AActD,IAAM,YAAY,OAAO,aAAa,eAAe,OAAO,WAAW;AAEhE,SAAS,mBAAmB,eAAe,YAAY,SAAS,MAA2B;AAChG,QAAM,oBAAoB,MAAsB;AAC9C,UAAM,EAAE,MAAM,MAAM,UAAU,MAAM,QAAQ,UAAU,MAAM,UAAU,OAAO,KAAI,6CAAc,aAAY,CAAC;AAE5G,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,oBAAgB,iBAAI,kBAAkB,CAAC;AAE7C,QAAM,iBAAiB,MAAY;AACjC,kBAAc,QAAQ,kBAAkB;AAAA,EAC1C;AAEA,6BAAU,MAAM;AACd,QAAI,cAAc;AAChB,mBAAa,iBAAiB,YAAY,cAAc;AACxD,mBAAa,iBAAiB,cAAc,cAAc;AAAA,IAC5D;AAAA,EACF,CAAC;AAED,+BAAY,MAAM;AAChB,QAAI,cAAc;AAChB,mBAAa,oBAAoB,YAAY,cAAc;AAC3D,mBAAa,oBAAoB,cAAc,cAAc;AAAA,IAC/D;AAAA,EACF,CAAC;AAED,SAAO;AACT;;;ACrDA,IAAAC,cAA8E;AAGvE,SAAS,+BAA+B,eAA+C,eAAuB,gBAA+C;AAJpK;AAKE,QAAM,gBAAY,oBAAmD,eAAe,IAAI;AACxF,MAAI,cAAc,KAAM;AACxB,QAAM,MAAK,yCAAmB,MAAnB,mBAAsB;AACjC,yBAAM,gBAAgB,gBAAgB;AACtC,mBAAiB,eAAe,KAAK;AACrC,mCAAgB,MAAM;AACpB,qBAAiB,QAAW,eAAe,KAAK;AAAA,EAClD,CAAC;AACD,WAAS,iBAAiB,KAAc,QAAuB;AAC7D,QAAI,CAAC,UAAW;AAChB,UAAM,aAAa,UAAU,aAAa;AAC1C,QAAI,WAAW,OAAW,gBAAe,YAAY,MAAM;AAC3D,QAAI,QAAQ,OAAW,aAAY,YAAY,GAAG;AAAA,EACpD;AACA,WAAS,eAAe,YAAmC,KAAmB;AAC5E,QAAI,CAAC,WAAW,GAAG,EAAG,YAAW,GAAG,IAAI,CAAC;AACzC,eAAW,GAAG,EAAE;AAAA,MACd,WAAW,GAAG,EAAE,UAAU,cAAY,aAAa,EAAE;AAAA,MACrD;AAAA,IACF;AAAA,EACF;AACA,WAAS,YAAY,YAAmC,KAAmB;AACzE,QAAI,CAAC,WAAW,GAAG,EAAG,YAAW,GAAG,IAAI,CAAC;AACzC,QAAI,CAAC,CAAC,WAAW,GAAG,EAAE,UAAU,cAAY,aAAa,EAAE,GAAG;AAC5D,iBAAW,GAAG,EAAE,KAAK,EAAE;AAAA,IACzB;AAAA,EACF;AACF;AAEO,SAAS,uBAAuB,eAA+C,eAAuB,UAA0B;AACrI,QAAM,gBAAY,oBAAkC,eAAe,IAAI;AACvE,MAAI,cAAc,KAAM;AACxB,MAAI,EAAE,iBAAiB,YAAY;AACjC,cAAU,aAAa,IAAI,CAAC;AAAA,EAC9B;AACA,YAAU,aAAa,EAAE,KAAK,SAAS,KAAK;AAC5C,yBAAM,UAAU,CAAC,OAAO,cAAc;AACpC,UAAM,kBAAkB,UAAU,aAAa;AAC/C,UAAM,QAAQ,gBAAgB,UAAU,qBAAmB,oBAAoB,SAAS;AACxF,QAAI,CAAC,MAAO,iBAAgB,OAAO,OAAO,CAAC;AAC3C,oBAAgB,KAAK,KAAK;AAAA,EAC5B,CAAC;AACD,mCAAgB,MAAM;AACpB,UAAM,kBAAkB,UAAU,aAAa;AAC/C,UAAM,QAAQ,gBAAgB,UAAU,qBAAmB,oBAAoB,SAAS,KAAK;AAC7F,QAAI,CAAC,MAAO,iBAAgB,OAAO,OAAO,CAAC;AAAA,EAC7C,CAAC;AACH;AAEO,SAAS,8BAA8B,eAA+C,eAAuB,YAA4C;AAC9J,QAAM,gBAAY,oBAA6C,eAAe,IAAI;AAClF,MAAI,cAAc,KAAM;AACxB,MAAI,EAAE,iBAAiB,YAAY;AACjC,cAAU,aAAa,IAAI,CAAC;AAAA,EAC9B;AACA,6BAAU,MAAM;AACd,UAAM,KAAK,WAAW;AACtB,QAAI,CAAC,GAAI;AACT,cAAU,aAAa,EAAE,KAAK,EAAE;AAAA,EAClC,CAAC;AACD,mCAAgB,MAAM;AACpB,UAAM,kBAAkB,UAAU,aAAa;AAC/C,UAAM,UAAU,WAAW;AAC3B,UAAM,QAAQ,gBAAgB,UAAU,uBAAqB,sBAAsB,OAAO;AAC1F,QAAI,CAAC,MAAO,iBAAgB,OAAO,OAAO,CAAC;AAAA,EAC7C,CAAC;AACH;;;ACtEA,IAAAC,cAAgC;AA0DzB,SAAS,WAA8C,aAAqB,IAAO;AAGxF,QAAM,EAAE,YAAY,WAAW,SAAS,IAAI,cAAuB,WAAW;AAE9E,WAAS,cAAc,MAAqB;AAC1C,UAAM,UAAmB,GAAG,GAAG,IAAI;AACnC,WAAO,WAAW,OAAO;AAAA,EAC3B;AAEA,SAAO;AAAA;AAAA,IAEL;AAAA;AAAA,IAEA;AAAA,EACF;AACF;AAGA,SAAS,cAAiB,aAAqB;AAC7C,QAAM,YAA6B,OAAO,WAAW;AAErD,WAAS,WAAW,SAAY;AAC9B,6BAAQ,WAAW,OAAO;AAE1B,WAAO;AAAA,EACT;AAEA,WAAS,YAAY;AACnB,eAAO,oBAAO,SAAS;AAAA,EACzB;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;;;AC/FA,IAAAC,cAA8C;AAC9C,IAAAC,eAAyB;AAOlB,SAAS,aAAa,SAAiB;AAC5C,QAAM,iBAAiB;AAEvB,QAAM,UAAM,iBAAI,CAAC;AAEjB,QAAM,YAAQ,sBAAS,MAAM,KAAK,KAAK,IAAI,QAAQ,cAAc,CAAC;AAElE,QAAM,iBAAa,sBAAS,MAAM,IAAI,QAAQ,CAAC;AAE/C,QAAM,EAAE,OAAO,OAAO,QAAI;AAAA,IACxB,MAAM;AACJ,UAAI,IAAI,QAAQ,GAAG;AACjB,YAAI,SAAS;AAAA,MACf,OAAO;AACL,cAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,EAAE,WAAW,MAAM;AAAA,EACrB;AAEA,WAAS,MAAM,gBAAwB,SAAS;AAC9C,QAAI,QAAQ,iBAAiB;AAC7B,WAAO;AAAA,EACT;AAEA,WAAS,OAAO;AACd,QAAI,QAAQ;AACZ,UAAM;AAAA,EACR;AAEA,kCAAe,MAAM;AACnB,UAAM;AAAA,EACR,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AChDA,IAAAC,cAAqC;AAG9B,SAAS,gBAAgB,UAAoB,OAAe,gBAA4C;AAC7G,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,iBAAa,iBAAI,SAAS,KAAK;AACrC,MAAI,UAAyB;AAC7B,yBAAM,UAAU,WAAS;AACvB,QAAI,YAAY,KAAM,QAAO,aAAa,OAAO;AACjD,QAAI,UAAU,MAAM;AAClB,UAAI,kBAAkB,CAAC,eAAe,OAAO;AAC3C,mBAAW,QAAQ;AAAA,MACrB,OAAO;AACL,kBAAU,OAAO,WAAW,MAAM;AAChC,qBAAW,QAAQ;AAAA,QACrB,GAAG,KAAK;AAAA,MACV;AAAA,IACF,OAAO;AACL,iBAAW,QAAQ;AAAA,IACrB;AAAA,EACF,CAAC;AACD,SAAO;AACT;;;ACtBA,IAAAC,cAA8D;AAE9D,IAAM,qBAAiB,iBAAI,KAAK;AAChC,SAAS,0BAAgC;AACvC,iBAAe,QAAQ;AACzB;AACA,SAAS,wBAA8B;AACrC,iBAAe,QAAQ;AACzB;AACA,IAAI,eAAe;AAGZ,SAAS,iBAA+B;AAC7C,MAAI,YAAY,QAAQ;AACtB,mCAAc,MAAM;AAClB,UAAI,CAAC,cAAc;AACjB,eAAO,iBAAiB,oBAAoB,uBAAuB;AACnE,eAAO,iBAAiB,kBAAkB,qBAAqB;AAAA,MACjE;AACA;AAAA,IACF,CAAC;AACD,qCAAgB,MAAM;AACpB,UAAI,gBAAgB,GAAG;AACrB,eAAO,oBAAoB,oBAAoB,uBAAuB;AACtE,eAAO,oBAAoB,kBAAkB,qBAAqB;AAClE,uBAAe;AAAA,MACjB,OAAO;AACL;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACA,SAAO;AACT;;;AC/BA,IAAAC,eAAsD;AACtD,IAAAC,eAAyC;AAEzC,mBAAsC;;;ACH/B,IAAM,qCAAqC;AAE3C,IAAM,oCAAoC;AAE1C,IAAM,oCAAoC;AAE1C,IAAM,oCAAoC;;;ADA1C,SAAS,sBAAsB,aAAa,GAAG;AACpD,MAAI,iBAAwC;AAC5C,QAAM,qBAAiB,kBAA2B,IAAI;AACtD,QAAM,qBAAiB,kBAA2B,IAAI;AACtD,QAAM,oBAAgB,wBAAU,kCAAkC;AAClE,QAAM,mBAAe,wBAAU,iCAAiC;AAEhE,QAAM,mBAAe,uBAAS,MAAqB;AAdrD;AAeI,UAAM,EAAE,QAAQ,MAAM,KAAK,MAAM,KAAI,oBAAe,UAAf,YAAwB,CAAC;AAC9D,WAAO;AAAA,MACL,QAAQ,GAAG,MAAM;AAAA,MACjB,MAAM,GAAG,IAAI;AAAA,MACb,UAAU;AAAA,MACV,KAAK,GAAG,GAAG;AAAA,MACX,OAAO,GAAG,KAAK;AAAA,MACf,QAAQ;AAAA,IACV;AAAA,EACF,CAAC;AAED,QAAM,0BAAsB,4BAAc,CAAC,aAAoC;AAC7E,mBAAe,YAAQ,oCAAsB,eAAe,KAAK;AACjE,kBAAc,QAAQ,GAAG,eAAe,MAAM,SAAS,UAAU;AACjE,iBAAa,QAAQ,GAAG,eAAe,MAAM,KAAK;AAAA,EACpD,GAAG,EAAE;AAEL,8BAAU,MAAM;AACd,QAAI,eAAe,SAAS,CAAC,gBAAgB;AAC3C,uBAAiB,IAAI,eAAe,mBAAmB;AACvD,qBAAe,QAAQ,eAAe,KAAK;AAAA,IAC7C;AAAA,EACF,CAAC;AAED,gCAAY,MAAM;AAChB,qDAAgB;AAChB,qBAAiB;AAAA,EACnB,CAAC;AAED,SAAO,EAAE,gBAAgB,cAAc,eAAe;AACxD;AAEO,SAAS,uBAAuB;AACrC,QAAM,mBAAe,wBAAU,iCAAiC;AAEhE,SAAO;AAAA,IACL,uBAAuB,MAAM;AAC3B,aAAO,OAAO,SAAS,GAAG,aAAa,KAAK,IAAI,EAAE;AAAA,IACpD;AAAA,IACA,uBAAuB,CAAC,WAAmB;AACzC,mBAAa,QAAQ,GAAG,MAAM;AAAA,IAChC;AAAA,EACF;AACF;AAEO,SAAS,uBAAuB;AACrC,QAAM,mBAAe,wBAAU,iCAAiC;AAEhE,SAAO;AAAA,IACL,uBAAuB,MAAM;AAC3B,aAAO,OAAO,SAAS,GAAG,aAAa,KAAK,IAAI,EAAE;AAAA,IACpD;AAAA,IACA,uBAAuB,CAAC,WAAmB;AACzC,mBAAa,QAAQ,GAAG,MAAM;AAAA,IAChC;AAAA,EACF;AACF;;;AEhEO,SAAS,WAAW,YAAY,OAAO;AAC5C,QAAM,EAAE,MAAM,SAAS,SAAS,cAAc,UAAU,WAAW,IAAI,WAAW,SAAS;AAE3F,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ACfA,IAAAC,eAAqC;AAErC,SAAS,WAAoB,MAAW,QAAgB,UAAuB;AAC7E,QAAM,UAAU,SAAS,KAAK,OAAO,QAAQ;AAC7C,QAAM,MAAM,SAAS,OAAO,QAAQ,KAAK,KAAK,SAAS,KAAK,MAAM,QAAQ,KAAK,MAAM,IAAI,KAAK,MAAM,QAAQ,SAAS,OAAO,QAAQ,CAAC;AACrI,SAAO;AACT;AAEO,SAAS,aAAa,MAAa,UAAkB;AAC1D,QAAM,kBAAc,kBAAI,CAAC;AACzB,QAAM,kBAAc,kBAAI,QAAQ;AAChC,QAAM,cAAU,kBAAI,IAAI;AAExB,QAAM,wBAAoB,uBAAS,MAAM;AACvC,WAAO,eAAW,oBAAM,OAAO,OAAG,oBAAM,WAAW,OAAG,oBAAM,WAAW,CAAC;AAAA,EAC1E,CAAC;AAED,QAAM,eAAW,uBAAS,MAAM;AAC9B,eAAO,oBAAM,OAAO,EAAE;AAAA,EACxB,CAAC;AAED,WAAS,eAAe,MAAc;AACpC,gBAAY,QAAQ;AAAA,EACtB;AAEA,WAAS,YAAY,MAAc;AACjC,gBAAY,QAAQ;AAAA,EACtB;AAEA,WAAS,cAAc,MAAiD;AACtE,mBAAe,KAAK,WAAW;AAC/B,gBAAY,KAAK,QAAQ;AAAA,EAC3B;AAEA,WAAS,cAAc;AACrB,WAAO,eAAW,oBAAM,OAAO,OAAG,oBAAM,WAAW,OAAG,oBAAM,WAAW,CAAC;AAAA,EAC1E;AAEA,SAAO,EAAE,gBAAgB,UAAU,aAAa,mBAAmB,eAAe,YAAY;AAChG;;;ACvCA,IAAAC,eAAuF;AAEvF,IAAI,YAAY;AAChB,IAAI,sBAA8B;AAClC,IAAI,mBAA2B;AAC/B,IAAI,oBAA4B;AAChC,IAAI,oBAA4B;AACzB,IAAM,yCAAqC,kBAAI,KAAK;AAEpD,SAAS,kBAAkB,SAA6B;AAE7D,MAAI,OAAO,aAAa,YAAa;AACrC,QAAM,KAAK,SAAS;AACpB,MAAI;AACJ,MAAI,YAAY;AAChB,QAAM,SAAS,MAAY;AACzB,OAAG,MAAM,cAAc;AACvB,OAAG,MAAM,WAAW;AACpB,OAAG,MAAM,YAAY;AACrB,OAAG,MAAM,YAAY;AACrB,uCAAmC,QAAQ;AAAA,EAC7C;AACA,8BAAU,MAAM;AACd,0BAAkB;AAAA,MAChB;AAAA,MACA,WAAS;AACP,YAAI,OAAO;AACT,cAAI,CAAC,WAAW;AACd,kBAAM,iBAAiB,OAAO,aAAa,GAAG;AAC9C,gBAAI,iBAAiB,GAAG;AACtB,oCAAsB,GAAG,MAAM;AAC/B,iBAAG,MAAM,cAAc,GAAG,cAAc;AACxC,iDAAmC,QAAQ,GAAG,cAAc;AAAA,YAC9D;AACA,+BAAmB,GAAG,MAAM;AAC5B,gCAAoB,GAAG,MAAM;AAC7B,gCAAoB,GAAG,MAAM;AAC7B,eAAG,MAAM,WAAW;AACpB,eAAG,MAAM,YAAY;AACrB,eAAG,MAAM,YAAY;AAAA,UACvB;AACA,sBAAY;AACZ;AAAA,QACF,OAAO;AACL;AACA,cAAI,CAAC,WAAW;AACd,mBAAO;AAAA,UACT;AACA,sBAAY;AAAA,QACd;AAAA,MACF;AAAA,MACA;AAAA,QACE,WAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF,CAAC;AACD,oCAAgB,MAAM;AACpB;AACA,QAAI,WAAW;AACb;AACA,UAAI,CAAC,WAAW;AACd,eAAO;AAAA,MACT;AACA,kBAAY;AAAA,IACd;AAAA,EACF,CAAC;AACH;;;ACjEA,IAAAC,eAAqC;AAYrC,SAAS,QAAW,iBAAkG;AACpH,QAAM,uBAAmB,uBAAS,eAAsB;AAGxD,QAAM,eAAW,kBAAI,iBAAiB,KAAK;AAC3C,0BAAM,kBAAkB,WAAS;AAC/B,aAAS,QAAQ;AAAA,EACnB,CAAC;AACD,MAAI,OAAO,oBAAoB,YAAY;AACzC,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL,WAAW;AAAA,IACX,IAAI,QAAQ;AACV,aAAO,SAAS;AAAA,IAClB;AAAA,IACA,IAAI,MAAM,GAAM;AAEd;AAAE,MAAC,gBAA2C,IAAI,CAAC;AAAA,IACrD;AAAA,EACF;AACF;;;ACjCA,IAAAC,eAAgC;AAEzB,SAAS,eAAkB,oBAAwC,sBAA8C;AACtH,0BAAM,oBAAoB,WAAS;AACjC,QAAI,UAAU,QAAW;AACvB,2BAAqB,QAAQ;AAAA,IAC/B;AAAA,EACF,CAAC;AACD,aAAO,uBAAS,MAAM;AACpB,QAAI,mBAAmB,UAAU,QAAW;AAC1C,aAAO,qBAAqB;AAAA,IAC9B;AACA,WAAO,mBAAmB;AAAA,EAC5B,CAAC;AACH;;;ACfA,IAAAC,eAA4C;AAMrC,SAAS,UAAU,MAAqB;AAC7C,QAAM,gBAAY,kBAAI,KAAK;AAC3B,QAAM,YAAQ,kBAAI,KAAK;AACvB,QAAM,cAAU,kBAAI,KAAK;AACzB,MAAI;AAEJ,QAAM,UAAU,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC/C,gCAAU,MAAM;AACd,eAAS,SAAS,cAAc,QAAQ;AACxC,aAAO,OAAO;AACd,aAAO,SAAS,MAAM;AACpB,kBAAU,QAAQ;AAClB,gBAAQ,QAAQ;AAChB,cAAM,QAAQ;AACd,gBAAQ,EAAE;AAAA,MACZ;AAEA,aAAO,UAAU,SAAO;AACtB,kBAAU,QAAQ;AAClB,gBAAQ,QAAQ;AAChB,cAAM,QAAQ;AACd,eAAO,GAAG;AAAA,MACZ;AAEA,aAAO,MAAM,KAAK;AAClB,eAAS,KAAK,YAAY,MAAM;AAAA,IAClC,CAAC;AAAA,EACH,CAAC;AAED,gCAAY,MAAM;AAChB,cAAU,OAAO,OAAO;AAAA,EAC1B,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,MAAM;AAAA,EACnB;AACF;;;AC3CA,IAAAC,eAAmD;AACnD,IAAAC,eAA8B;AAC9B,IAAAC,gBAAmC;AAE5B,SAAS,UACd,OACA,SAKA;AACA,QAAM,WAAO,kBAAI,CAAC;AAClB,QAAM,WAAO,kBAAI,CAAC;AAClB,MAAI,UAAU,MAAM;AAClB,YAAI,wBAAS,MAAM,KAAK,GAAG;AACzB,WAAK,QAAQ,MAAM,MAAM;AACzB,WAAK,QAAQ,MAAM,MAAM;AAAA,IAC3B,WAAW,MAAM,OAAO;AACtB,WAAK,QAAS,MAAM,MAAkB;AACtC,WAAK,QAAS,MAAM,MAAkB;AAAA,IACxC;AAAA,EACF;AAEA,UAAI,wBAAS,OAAO,GAAG;AACrB,QAAI,OAAO;AACX,QAAI,WAAW,QAAQ,QAAQ,QAAQ,OAAO,GAAG;AAC/C,aAAO,QAAQ;AACf,cAAQ,eAAe,SAAS,MAAM;AAAA,IACxC;AAEA,kBAAU,4BAAc,SAAS,IAAI;AAAA,EACvC;AAEA,MAAI;AACJ,8BAAU,MAAM;AACd,oBAAY;AAAA,MACV;AAAA,MACA,CAAC,IAAI,QAAQ,cAAc;AACzB,YAAI,IAAI;AACN,aAAG,iBAAiB,UAAU,OAAO;AAAA,QACvC,WAAW,QAAQ;AACjB,iBAAO,oBAAoB,UAAU,OAAO;AAAA,QAC9C;AACA,kBAAU,MAAM;AACd,eAAK,QAAQ;AACb,eAAK,QAAQ;AACb,gBAAM,GAAG,oBAAoB,UAAU,OAAO;AAAA,QAChD,CAAC;AAAA,MACH;AAAA,MACA,EAAE,WAAW,KAAK;AAAA,IACpB;AAAA,EACF,CAAC;AAED,gCAAY,MAAM;AAChB,UAAM,SAAS,MAAM,MAAM,oBAAoB,UAAU,OAAO;AAAA,EAClE,CAAC;AAED,WAAS,OAAO;AACd,iBAAa,UAAU;AAAA,EACzB;AAEA,SAAO,EAAE,MAAM,MAAM,KAAK;AAC5B;;;ACjEA,IAAAC,eAAsD;AA4F/C,SAAS,UAAa,cAAiB,SAAoC;AAChF,QAAM,EAAE,OAAO,IAAI,WAAW,CAAC;AAE/B,QAAM,QAAQ,aAAU,kBAAI,YAAY,QAAe,yBAAW,YAAY;AAE9E,SAAO,aAAa,KAAK;AAC3B;AAIO,SAAS,YAAe,iBAAiE,cAAgC;AAC9H,QAAM,WAAW,OAAO,oBAAoB;AAE5C,QAAM,oBAAgB,uBAAS,iBAAwB,YAAY;AAEnE,MAAI,UAAU;AACZ,WAAO,MAAM,cAAc;AAAA,EAC7B;AAEA,SAAO,aAAa,aAAa;AACnC;AAEA,SAAS,aAAgB,OAA0D;AACjF,QAAM,SAAS,MAAM,MAAM;AAE3B,SAAO,MAAM,CAAC,UAAa;AACzB,UAAM,QAAQ;AAAA,EAChB;AAEA,SAAO,SAAS,CAAC,YAAwB;AACvC,UAAM,QAAQ,QAAQ,MAAM,KAAK;AAAA,EACnC;AAEA,SAAO,SAAS,CAAC,YAAwB;AACvC,YAAQ,MAAM,KAAK;AACnB,iCAAW,KAAK;AAAA,EAClB;AAEA,SAAO,SAAS,MAAM;AAEtB,SAAO;AACT;;;ACrIA,IAAAC,eAAkB;AAqBX,SAAS,iBAAiB,SAAoB;AAMnD,QAAM,eAAe,CAAC,WAAuB;AAC3C,UAAM,EAAE,OAAO,UAAU,MAAM,UAAU,IAAI;AAE7C,UAAM,QAAmB,CAAC;AAE1B,QAAI,OAAO;AACT,YAAM,QAAQ;AAAA,IAChB;AACA,QAAI,UAAU;AACZ,YAAM,WAAW,GAAG,QAAQ;AAAA,IAC9B;AAEA,QAAI,CAAC,QAAQ,CAAC,WAAW;AACvB,aAAO;AAAA,IACT;AAEA,WAAO,UAAM,gBAAE,SAAS,EAAE,MAAM,WAAW,MAAM,CAAC;AAAA,EACpD;AAEA,SAAO;AAAA,IACL;AAAA,EACF;AACF;;;ACjDA,IAAAC,eAAwC;AAExC,IAAAC,gBAA0B;AA4DnB,SAAS,aAAoC,QAA8B;AAChF,QAAM,EAAE,SAAS,cAAc,WAAW,IAAI,WAAW;AACzD,QAAM,EAAE,MAAM,OAAO,SAAS,SAAS,IAAI,WAAW;AAEtD,QAAM,EAAE,OAAO,WAAW,aAAa,YAAY,MAAM,iBAAiB,WAAW,IAAI;AAEzF,QAAM,mBAA8C,2BAAS,yBAAU,EAAE,GAAG,UAAU,CAAC,CAAC;AAExF,QAAM,iBAAa,kBAAI,OAAO,QAAQ,CAAC;AAEvC,QAAM,WAAqC,kBAAI,CAAC,CAAC;AAEjD,QAAM,mBAAwC,kBAAI,gBAAgB,OAAO,QAAQ,CAAC,CAAC;AAEnF,QAAM,cAAU,uBAAS,MAAM,WAAW,WAAW,OAAO,aAAa,KAAK,CAAC;AAE/E,WAAS,gBAAgB;AACvB,eAAW,QAAQ,OAAO,QAAQ;AAElC,UAAM,WAAW,IAAI,IAAI,aAAa,MAAM,IAAI,SAAO,CAAC,IAAI,KAAK,IAAI,OAAO,CAAC,CAAC;AAE9E,UAAM,gBAAgB,gBAAgB,WAAW,KAAK;AAEtD,iBAAa,QAAQ,cAAc,IAAI,SAAI;AArF/C;AAqFmD;AAAA,QAC7C,GAAG;AAAA,QACH,UAAS,cAAS,IAAI,IAAI,GAAG,MAApB,YAAyB,IAAI;AAAA,MACxC;AAAA,KAAE;AAAA,EACJ;AAEA,iBAAe,UAAU;AA3F3B;AA4FI,iBAAa;AAEb,UAAM,kBAAkB,mBAAmB,YAAY;AAEvD,UAAM,WAAW,MAAM,MAAM,eAAe;AAE5C,UAAM,cAAc,YAAY,QAAkC;AAElE,SAAK,QAAQ,YAAY;AAEzB,aAAS,YAAY,KAAK,WAAW,CAAC;AAEtC,YAAM,YAAO,cAAP,gCAAmB;AAEzB,eAAW;AAAA,EACb;AAEA,WAAS,mBAAmB,QAAiC;AAC3D,UAAM,kBAA2C,CAAC;AAElD,WAAO,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC/C,UAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,wBAAgB,GAAG,IAAI;AAAA,MACzB;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAOA,WAAS,mBAAmB,QAAmC;AAC7D,WAAO,OAAO,cAAc,MAAM;AAAA,EACpC;AAGA,WAAS,oBAAoB;AAC3B,WAAO,OAAO,kBAAc,yBAAU,SAAS,CAAC;AAAA,EAClD;AAEA,MAAI,WAAW;AACb,YAAQ;AAAA,EACV;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":["import_vue","SizeEnum","ScreenEnum","import_vue","import_vue","import_vue","import_vue","import_vue","import_core","import_vue","import_vue","import_vue","import_core","import_vue","import_vue","import_vue","import_vue","import_vue","import_vue","import_core","import_utils","import_vue","import_vue","import_vue","import_utils"]}
@@ -0,0 +1,443 @@
1
+ import * as vue from 'vue';
2
+ import { ComputedRef, Ref, InjectionKey, CSSProperties, WritableComputedRef, ShallowRef, ComputedGetter, DebuggerOptions, WritableComputedOptions, Component } from 'vue';
3
+ import { VisibleDomRect } from '@maxax/utils';
4
+ import { AxiosError, ResponseType, CustomAxiosRequestConfig, MappedType } from '@maxax/axios';
5
+
6
+ /**
7
+ * Boolean
8
+ *
9
+ * @param initValue Init value
10
+ */
11
+ declare function useBoolean(initValue?: boolean): {
12
+ bool: vue.Ref<boolean, boolean>;
13
+ setBool: (value: boolean) => void;
14
+ setTrue: () => void;
15
+ setFalse: () => void;
16
+ toggle: () => void;
17
+ };
18
+
19
+ declare enum SizeEnum {
20
+ XS = "XS",
21
+ SM = "SM",
22
+ MD = "MD",
23
+ LG = "LG",
24
+ XL = "XL",
25
+ XXL = "XXL"
26
+ }
27
+ declare enum ScreenEnum {
28
+ XS = 320,
29
+ SM = 640,
30
+ MD = 768,
31
+ LG = 960,
32
+ XL = 1280,
33
+ XXL = 1536
34
+ }
35
+
36
+ interface CreateCallbackParams {
37
+ screen: ComputedRef<SizeEnum | undefined>;
38
+ width: ComputedRef<number>;
39
+ realWidth: ComputedRef<number>;
40
+ screenEnum: typeof ScreenEnum;
41
+ screenMap: Map<SizeEnum, number>;
42
+ sizeEnum: typeof SizeEnum;
43
+ }
44
+ declare function useBreakpoint(): {
45
+ screenRef: ComputedRef<SizeEnum | undefined>;
46
+ widthRef: ComputedRef<number>;
47
+ screenEnum: typeof ScreenEnum;
48
+ realWidthRef: ComputedRef<number>;
49
+ };
50
+ declare function createBreakpointListen(fn?: (opt: CreateCallbackParams) => void): {
51
+ screenRef: ComputedRef<SizeEnum | undefined>;
52
+ screenEnum: typeof ScreenEnum;
53
+ widthRef: ComputedRef<number>;
54
+ realWidthRef: ComputedRef<number>;
55
+ };
56
+
57
+ interface WindowLocation {
58
+ hash?: string;
59
+ host?: string;
60
+ hostname?: string;
61
+ href?: string;
62
+ origin?: string;
63
+ pathname?: string;
64
+ port?: string;
65
+ protocol?: string;
66
+ search?: string;
67
+ }
68
+ declare function useBrowserLocation(customWindow?: (Window & typeof globalThis) | null): Ref<WindowLocation>;
69
+
70
+ declare function useInjectionInstanceCollection(injectionName: string | InjectionKey<unknown>, collectionKey: string, registerKeyRef: Ref<string | undefined>): void;
71
+ declare function useInjectionCollection(injectionName: string | InjectionKey<unknown>, collectionKey: string, valueRef: Ref<any>): void;
72
+ declare function useInjectionElementCollection(injectionName: string | InjectionKey<unknown>, collectionKey: string, getElement: () => HTMLElement | null): void;
73
+
74
+ /**
75
+ * Use context
76
+ *
77
+ * @example
78
+ * ```ts
79
+ * // there are three vue files: A.vue, B.vue, C.vue, and A.vue is the parent component of B.vue and C.vue
80
+ *
81
+ * // context.ts
82
+ * import { ref } from 'vue';
83
+ * import { useContext } from '@max/hooks';
84
+ *
85
+ * export const { setupStore, useStore } = useContext('demo', () => {
86
+ * const count = ref(0);
87
+ *
88
+ * function increment() {
89
+ * count.value++;
90
+ * }
91
+ *
92
+ * function decrement() {
93
+ * count.value--;
94
+ * }
95
+ *
96
+ * return {
97
+ * count,
98
+ * increment,
99
+ * decrement
100
+ * };
101
+ * })
102
+ * ``` // A.vue
103
+ * ```vue
104
+ * <template>
105
+ * <div>A</div>
106
+ * </template>
107
+ * <script setup lang="ts">
108
+ * import { setupStore } from './context';
109
+ *
110
+ * setupStore();
111
+ * // const { increment } = setupStore(); // also can control the store in the parent component
112
+ * </script>
113
+ * ``` // B.vue
114
+ * ```vue
115
+ * <template>
116
+ * <div>B</div>
117
+ * </template>
118
+ * <script setup lang="ts">
119
+ * import { useStore } from './context';
120
+ *
121
+ * const { count, increment } = useStore();
122
+ * </script>
123
+ * ```;
124
+ *
125
+ * // C.vue is same as B.vue
126
+ *
127
+ * @param contextName Context name
128
+ * @param fn Context function
129
+ */
130
+ declare function useContext<T extends (...args: any[]) => any>(contextName: string, fn: T): {
131
+ /** Setup store in the parent component */
132
+ setupStore: (...args: Parameters<T>) => ReturnType<T>;
133
+ /** Use store in the child component */
134
+ useStore: () => ReturnType<T>;
135
+ };
136
+
137
+ /**
138
+ * Count down
139
+ *
140
+ * @param seconds - count down seconds
141
+ */
142
+ declare function useCountDown(seconds: number): {
143
+ count: vue.ComputedRef<number>;
144
+ isCounting: vue.ComputedRef<boolean>;
145
+ start: (updateSeconds?: number) => void;
146
+ stop: () => void;
147
+ };
148
+
149
+ declare function useDeferredTrue(valueRef: Ref<any>, delay: number, shouldDelayRef: Ref<boolean>): Ref<boolean>;
150
+
151
+ type RemoveEventFn = () => void;
152
+ interface UseEventParams {
153
+ el?: Element | Ref<Element | undefined> | Window | any;
154
+ name: string;
155
+ listener: EventListener;
156
+ options?: boolean | AddEventListenerOptions;
157
+ autoRemove?: boolean;
158
+ isDebounce?: boolean;
159
+ wait?: number;
160
+ }
161
+ declare function useEventListener({ el, name, listener, options, autoRemove, isDebounce, wait }: UseEventParams): {
162
+ removeEvent: RemoveEventFn;
163
+ };
164
+
165
+ declare function useIsComposing(): Ref<boolean>;
166
+
167
+ declare function useLayoutContentStyle(diffHeight?: number): {
168
+ contentElement: vue.Ref<HTMLDivElement | null, HTMLDivElement | null>;
169
+ overlayStyle: vue.ComputedRef<CSSProperties>;
170
+ visibleDomRect: vue.Ref<{
171
+ bottom: number;
172
+ height: number;
173
+ left: number;
174
+ right: number;
175
+ top: number;
176
+ width: number;
177
+ } | null, VisibleDomRect | {
178
+ bottom: number;
179
+ height: number;
180
+ left: number;
181
+ right: number;
182
+ top: number;
183
+ width: number;
184
+ } | null>;
185
+ };
186
+ declare function useLayoutHeaderStyle(): {
187
+ getLayoutHeaderHeight: () => number;
188
+ setLayoutHeaderHeight: (height: number) => void;
189
+ };
190
+ declare function useLayoutFooterStyle(): {
191
+ getLayoutFooterHeight: () => number;
192
+ setLayoutFooterHeight: (height: number) => void;
193
+ };
194
+
195
+ /**
196
+ * Loading
197
+ *
198
+ * @param initValue Init value
199
+ */
200
+ declare function useLoading(initValue?: boolean): {
201
+ loading: vue.Ref<boolean, boolean>;
202
+ startLoading: () => void;
203
+ endLoading: () => void;
204
+ };
205
+
206
+ declare function useLocalPage(list: any[], pageSize: number): {
207
+ setCurrentPage: (page: number) => void;
208
+ getTotal: vue.ComputedRef<number>;
209
+ setPageSize: (size: number) => void;
210
+ getPaginationList: vue.ComputedRef<any[]>;
211
+ setPagination: (page: {
212
+ currentPage: number;
213
+ pageSize: number;
214
+ }) => void;
215
+ getPageList: () => any[];
216
+ };
217
+
218
+ declare const lockHtmlScrollRightCompensationRef: Ref<string, string>;
219
+ declare function useLockHtmlScroll(lockRef: Ref<boolean>): void;
220
+
221
+ type MemoGetter<T> = () => T;
222
+ type MemoSetter<T> = (v: T) => void;
223
+ interface WritableMemoOptions<T> {
224
+ get: MemoGetter<T>;
225
+ set: MemoSetter<T>;
226
+ }
227
+ declare function useMemo<T>(getter: MemoGetter<T>): ComputedRef<T>;
228
+ declare function useMemo<T>(options: WritableMemoOptions<T>): WritableComputedRef<T>;
229
+
230
+ declare function useMergedState<T>(controlledStateRef: Ref<T | undefined>, uncontrolledStateRef: Ref<T>): ComputedRef<T>;
231
+
232
+ interface HookRequestInstanceResponseSuccessData<T = any> {
233
+ data: Ref<T>;
234
+ error: Ref<null>;
235
+ }
236
+ interface HookRequestInstanceResponseFailData<ResponseData = any> {
237
+ data: Ref<null>;
238
+ error: Ref<AxiosError<ResponseData>>;
239
+ }
240
+ type HookRequestInstanceResponseData<T = any, ResponseData = any> = {
241
+ loading: Ref<boolean>;
242
+ } & (HookRequestInstanceResponseSuccessData<T> | HookRequestInstanceResponseFailData<ResponseData>);
243
+ interface HookRequestInstance<ResponseData = any> {
244
+ <T = any, R extends ResponseType = 'json'>(config: CustomAxiosRequestConfig): HookRequestInstanceResponseData<MappedType<R, T>, ResponseData>;
245
+ cancelRequest: (requestId: string) => void;
246
+ cancelAllRequest: () => void;
247
+ }
248
+
249
+ interface ScriptOptions {
250
+ src: string;
251
+ }
252
+ declare function useScript(opts: ScriptOptions): {
253
+ isLoading: vue.Ref<boolean, boolean>;
254
+ error: vue.Ref<boolean, boolean>;
255
+ success: vue.Ref<boolean, boolean>;
256
+ toPromise: () => Promise<unknown>;
257
+ };
258
+
259
+ declare function useScroll(refEl: Ref<Element | Window | null>, options?: {
260
+ wait?: number;
261
+ leading?: boolean;
262
+ trailing?: boolean;
263
+ }): {
264
+ refX: Ref<number, number>;
265
+ refY: Ref<number, number>;
266
+ stop: () => void;
267
+ };
268
+
269
+ type Updater<T> = (value: T) => T;
270
+ type Mutator<T> = (value: T) => void;
271
+ /**
272
+ * Signal is a reactive value that can be set, updated or mutated
273
+ *
274
+ * @example
275
+ * ```ts
276
+ * const count = useSignal(0);
277
+ *
278
+ * // `watchEffect`
279
+ * watchEffect(() => {
280
+ * console.log(count());
281
+ * });
282
+ *
283
+ * // watch
284
+ * watch(count, value => {
285
+ * console.log(value);
286
+ * });
287
+ *
288
+ * // useComputed
289
+ * const double = useComputed(() => count() * 2);
290
+ * const writeableDouble = useComputed({
291
+ * get: () => count() * 2,
292
+ * set: value => count.set(value / 2)
293
+ * });
294
+ * ```
295
+ */
296
+ interface Signal<T> {
297
+ (): Readonly<T>;
298
+ /**
299
+ * Set the value of the signal
300
+ *
301
+ * It recommend use `set` for primitive values
302
+ *
303
+ * @param value
304
+ */
305
+ set: (value: T) => void;
306
+ /**
307
+ * Update the value of the signal using an updater function
308
+ *
309
+ * It recommend use `update` for non-primitive values, only the first level of the object will be reactive.
310
+ *
311
+ * @param updater
312
+ */
313
+ update: (updater: Updater<T>) => void;
314
+ /**
315
+ * Mutate the value of the signal using a mutator function
316
+ *
317
+ * this action will call `triggerRef`, so the value will be tracked on `watchEffect`.
318
+ *
319
+ * It recommend use `mutate` for non-primitive values, all levels of the object will be reactive.
320
+ *
321
+ * @param mutator
322
+ */
323
+ mutate: (mutator: Mutator<T>) => void;
324
+ /**
325
+ * Get the reference of the signal
326
+ *
327
+ * Sometimes it can be useful to make `v-model` work with the signal
328
+ *
329
+ * ```vue
330
+ * <template>
331
+ * <input v-model="model.count" />
332
+ * </template>;
333
+ *
334
+ * <script setup lang="ts">
335
+ * const state = useSignal({ count: 0 }, { useRef: true });
336
+ *
337
+ * const model = state.getRef();
338
+ * </script>
339
+ * ```
340
+ */
341
+ getRef: () => Readonly<ShallowRef<Readonly<T>>>;
342
+ }
343
+ interface ReadonlySignal<T> {
344
+ (): Readonly<T>;
345
+ }
346
+ interface SignalOptions {
347
+ /**
348
+ * Whether to use `ref` to store the value
349
+ *
350
+ * @default false use `sharedRef` to store the value
351
+ */
352
+ useRef?: boolean;
353
+ }
354
+ declare function useSignal<T>(initialValue: T, options?: SignalOptions): Signal<T>;
355
+ declare function useComputed<T>(getter: ComputedGetter<T>, debugOptions?: DebuggerOptions): ReadonlySignal<T>;
356
+ declare function useComputed<T>(options: WritableComputedOptions<T>, debugOptions?: DebuggerOptions): Signal<T>;
357
+
358
+ interface IconConfig {
359
+ /** Iconify icon name */
360
+ icon?: string;
361
+ /** Local icon name */
362
+ localIcon?: string;
363
+ /** Icon color */
364
+ color?: string;
365
+ /** Icon size */
366
+ fontSize?: number;
367
+ }
368
+ /**
369
+ * Svg icon render hook
370
+ *
371
+ * @param SvgIcon Svg icon component
372
+ */
373
+ declare function useSvgIconRender(SvgIcon: Component): {
374
+ SvgIconVNode: (config: IconConfig) => (() => vue.VNode<vue.RendererNode, vue.RendererElement, {
375
+ [key: string]: any;
376
+ }>) | undefined;
377
+ };
378
+
379
+ type MaybePromise<T> = T | Promise<T>;
380
+ type ApiFn = (args: any) => Promise<unknown>;
381
+ interface TableColumnCheck {
382
+ key: string;
383
+ title: string;
384
+ checked: boolean;
385
+ }
386
+ type TableDataWithIndex<T> = T & {
387
+ index: number;
388
+ };
389
+ interface TransformedData<T> {
390
+ data: TableDataWithIndex<T>[];
391
+ pageNum: number;
392
+ pageSize: number;
393
+ total: number;
394
+ }
395
+ type Transformer<T, Response> = (response: Response) => TransformedData<T>;
396
+ interface TableConfig<A extends ApiFn, T, C> {
397
+ /** Api function to get table data */
398
+ apiFn: A;
399
+ /** Api params */
400
+ apiParams?: Parameters<A>[0];
401
+ /** Transform api response to table data */
402
+ transformer: Transformer<T, Awaited<ReturnType<A>>>;
403
+ /** Columns factory */
404
+ columns: () => C[];
405
+ /**
406
+ * Get column checks
407
+ *
408
+ * @param columns
409
+ */
410
+ getColumnChecks: (columns: C[]) => TableColumnCheck[];
411
+ /**
412
+ * Get columns
413
+ *
414
+ * @param columns
415
+ */
416
+ getColumns: (columns: C[], checks: TableColumnCheck[]) => C[];
417
+ /**
418
+ * Callback when response fetched
419
+ *
420
+ * @param transformed transformed data
421
+ */
422
+ onFetched?: (transformed: TransformedData<T>) => MaybePromise<void>;
423
+ /**
424
+ * Whether to get data immediately
425
+ *
426
+ * @default true
427
+ */
428
+ immediate?: boolean;
429
+ }
430
+ declare function useHookTable<A extends ApiFn, T, C>(config: TableConfig<A, T, C>): {
431
+ loading: Ref<boolean, boolean>;
432
+ empty: Ref<boolean, boolean>;
433
+ data: Ref<TableDataWithIndex<T>[], TableDataWithIndex<T>[]>;
434
+ columns: vue.ComputedRef<C[]>;
435
+ columnChecks: Ref<TableColumnCheck[], TableColumnCheck[]>;
436
+ reloadColumns: () => void;
437
+ getData: () => Promise<void>;
438
+ searchParams: NonNullable<Parameters<A>[0]>;
439
+ updateSearchParams: (params: Partial<Parameters<A>[0]>) => void;
440
+ resetSearchParams: () => void;
441
+ };
442
+
443
+ export { type ApiFn, type CreateCallbackParams, type HookRequestInstance, type HookRequestInstanceResponseData, type HookRequestInstanceResponseFailData, type HookRequestInstanceResponseSuccessData, type MaybePromise, type ReadonlySignal, type RemoveEventFn, type Signal, type SignalOptions, type TableColumnCheck, type TableConfig, type TableDataWithIndex, type TransformedData, type Transformer, type UseEventParams, type WindowLocation, createBreakpointListen, lockHtmlScrollRightCompensationRef, useBoolean, useBreakpoint, useBrowserLocation, useComputed, useContext, useCountDown, useDeferredTrue, useEventListener, useHookTable, useInjectionCollection, useInjectionElementCollection, useInjectionInstanceCollection, useIsComposing, useLayoutContentStyle, useLayoutFooterStyle, useLayoutHeaderStyle, useLoading, useLocalPage, useLockHtmlScroll, useMemo, useMergedState, useScript, useScroll, useSignal, useSvgIconRender };