@zyzgroup/core-vue 0.0.39 → 0.0.40
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.
- package/ce/style.css +1 -1
- package/ce/yz_custom_element.iife.js +127 -111
- package/ce/yz_custom_element.iife.js.map +1 -1
- package/ce/yz_custom_element.js +8884 -8718
- package/ce/yz_custom_element.js.map +1 -1
- package/ce/yz_custom_element.umd.cjs +128 -112
- package/ce/yz_custom_element.umd.cjs.map +1 -1
- package/dist/style.css +1 -1
- package/dist/zyzgroup_core_vue.iife.js +17 -1
- package/dist/zyzgroup_core_vue.iife.js.map +1 -1
- package/dist/zyzgroup_core_vue.js +1128 -710
- package/dist/zyzgroup_core_vue.js.map +1 -1
- package/dist/zyzgroup_core_vue.umd.cjs +17 -1
- package/dist/zyzgroup_core_vue.umd.cjs.map +1 -1
- package/package.json +1 -1
- package/types/components/Button.ce.vue.d.ts +5 -0
- package/types/components/Button.vue.d.ts +5 -0
- package/types/components/Container.ce.vue.d.ts +3 -8
- package/types/components/Container.vue.d.ts +0 -4
- package/types/components/VueRouterView.ce.vue.d.ts +24 -0
- package/types/components/VueRouterView.vue.d.ts +24 -0
- package/types/components/VueSuspense.ce.vue.d.ts +7 -0
- package/types/components/VueSuspense.vue.d.ts +7 -0
- package/types/components/VueTeleport.ce.vue.d.ts +2 -0
- package/types/components/VueTeleport.vue.d.ts +2 -0
- package/types/components/effect/CSSTransition.ce.vue.d.ts +12 -5
- package/types/components/effect/CSSTransition.vue.d.ts +1 -0
- package/types/components/effect/VueTransition.ce.vue.d.ts +71 -0
- package/types/components/effect/VueTransition.vue.d.ts +71 -0
- package/types/components/effect/VueTransitionGroupSlideToLeft.ce.vue.d.ts +9 -0
- package/types/components/effect/VueTransitionGroupSlideToLeft.vue.d.ts +9 -0
- package/types/components/effect/VueTransitionOpacity.ce.vue.d.ts +9 -0
- package/types/components/effect/VueTransitionOpacity.vue.d.ts +9 -0
- package/types/components/effect/VueTransitionSlideUp.ce.vue.d.ts +9 -0
- package/types/components/effect/VueTransitionSlideUp.vue.d.ts +9 -0
- package/types/components/layout/LayoutMobile.ce.vue.d.ts +1 -1
- package/types/components/layout/LayoutMobile.vue.d.ts +1 -1
- package/types/components/xg/Footer.ce.vue.d.ts +2 -0
- package/types/components/xg/Footer.vue.d.ts +2 -0
- package/types/components/xg/Lot.ce.vue.d.ts +2 -0
- package/types/components/xg/Lot.vue.d.ts +2 -0
- package/types/lib.d.ts +2 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zyzgroup_core_vue.umd.cjs","sources":["../src/hooks/useVue.ts","../src/hooks/useVueEffect.ts","../src/hooks/useVueRouter.ts","../src/hooks/useVuex/useVuex.ts","../../../node_modules/.pnpm/@iconify+vue@4.1.2_vue@3.5.13/node_modules/@iconify/vue/dist/iconify.mjs","../../core-common/src/map.ts","../../core-common/src/set.ts","../../core-common/src/number.ts","../../core-common/src/event_control.ts","../../core-common/src/fp.ts","../../core-common/src/async.ts","../../core-web/src/theme.ts","../../core-web/src/rem.js","../src/components/Icon.vue","../src/components/loading/Loading11.vue","../src/components/Button.vue","../src/components/layout/LayoutMobile.vue"],"sourcesContent":["import {\n AppContext,\n VNode,\n createVNode,\n render,\n getCurrentInstance,\n VNodeProps,\n Component,\n // ComponentPublicInstance,\n ComponentInternalInstance\n} from \"vue\";\n\nexport function getInstance(): ComponentInternalInstance | null {\n return getCurrentInstance();\n}\n\nexport interface CommonComponentProps extends VNodeProps {\n [index: string]: any;\n}\n\nexport function getVNode<T extends Component>(\n component: T,\n props?: CommonComponentProps\n): VNode {\n const vNode = createVNode(component, props);\n // const vm: ComponentPublicInstance<CommonComponentProps> | null | undefined =\n // vNode.component?.proxy;\n // if (vm) {\n // for (const prop in props) {\n // if (Reflect.has(props, prop) && !Reflect.has(vm.$props, prop)) {\n // vm[prop as keyof ComponentPublicInstance] = props[prop];\n // }\n // }\n // }\n return vNode;\n}\n\nexport function renderComponent<T extends Component>(options: {\n component: T;\n props?: CommonComponentProps;\n appContext?: AppContext;\n selfContainer: HTMLElement;\n parentContainer?: HTMLElement;\n}) {\n const vNode = getVNode(options.component, options.props);\n if (options.appContext) {\n vNode.appContext = options.appContext;\n }\n render(vNode, options.selfContainer);\n options.parentContainer?.appendChild(options.selfContainer);\n}\n\n// export interface EnhancedComponentOptions extends VNodeProps {\n// [key: string]: any;\n// }\n// export function enhanceComponent<T extends Component>(\n// component: T\n// ): (options: EnhancedComponentOptions) => VNode {\n// const container = document.createElement(\"div\");\n// return (options: EnhancedComponentOptions): VNode => {\n// const vNode = renderComponent<T>({\n// Component: component,\n// props: options,\n// selfContainer: container,\n// appContext: getCurrentInstance()?.appContext\n// });\n// const vm = vNode.component\n// ?.proxy as ComponentPublicInstance<EnhancedComponentOptions>;\n// for (const prop in options) {\n// if (Reflect.has(options, prop) && !Reflect.has(vm.$props, prop)) {\n// vm[prop as keyof ComponentPublicInstance] = options[prop];\n// }\n// }\n// return vNode;\n// };\n// }\n","import { onMounted, onUnmounted } from \"vue\";\n\nexport function useVueEffect(effect: () => () => void) {\n let remove: () => void;\n onMounted(() => {\n remove = effect();\n });\n onUnmounted(() => {\n remove?.();\n });\n}\n","import {\n // RouterLink,\n // RouterView,\n // useRouter,\n createRouter,\n createWebHistory,\n // createWebHashHistory,\n // type Router,\n type RouteRecordRaw,\n type RouteRecordNormalized,\n type RouteLocationNormalized,\n type NavigationGuardNext,\n type RouteLocationRaw\n} from \"vue-router\";\n\n// <RouterLink to=\"/\">Home</RouterLink>\n// <RouterLink to=\"/about\">About</RouterLink>\n// <RouterView />\n\n// const router: Router = useRouter();\n\nexport function useVueRouter(routes: RouteRecordRaw[]) {\n const router = createRouter({\n history: createWebHistory(import.meta.env.BASE_URL),\n routes,\n // [\n // {\n // path: \"/\",\n // redirect: \"/showcase\"\n // },\n // {\n // path: \"/\",\n // path: \"/demo/:demoid\",\n // name: \"home\",\n // component: HomeView,\n // // router level code-splitting\n // // this generates a separate chunk (About.[hash].js) for this router\n // // which is lazy-loaded when the router is visited.\n // component: () => import(\"../views/AboutView.vue\"),\n // meta: {},\n // children: [\n // { path: \"\", name: \"default\", redirect: \"/demo/sub1\" },\n // {\n // path: \"sub1\",\n // name: \"sub1\",\n // component: () => import(\"@/src/views/sub1.vue\")\n // }\n // ]\n // },\n // {\n // path: \"/:pathMatch(.*)*\",\n // name: \"404\",\n // component: Page404\n // }\n // ]\n scrollBehavior: (_to, _from, savedPosition) => {\n // 这个功能只在支持 history.pushState 的浏览器中可用\n if (savedPosition) {\n return savedPosition;\n } else {\n return { left: 0, top: 0 };\n }\n }\n });\n\n // 路由导航守卫\n router.beforeEach(\n (\n _to: RouteLocationNormalized,\n _from: RouteLocationNormalized,\n next: NavigationGuardNext\n ) => {\n // console.log(\"to:\", to.fullPath, \"from:\", from.fullPath);\n // if (to.path.indexOf(\"/about\") != -1) return \"/404\";\n // else return;\n next();\n }\n );\n\n return {\n router,\n\n push: async (location: RouteLocationRaw) => {\n await router.push(location);\n },\n\n // {\n // name: Name;\n // path: Path;\n // paramsRaw: ParamsRaw;\n // params: Params;\n // meta: Meta;\n // }\n to: function (this: any, path: string) {\n this.push({ path });\n },\n\n // 动态注册路由\n // const remove = addRoute(\"demo\", {\n // path: \"sub2\",\n // name: \"sub2\",\n // component: () => import(\"@/src/views/sub2.vue\")\n // });\n // remove();\n addRoute: (name: string, route: RouteRecordRaw): (() => void) => {\n return router.addRoute(name, route);\n },\n\n removeRoute: (name: string) => {\n router.removeRoute(name);\n },\n\n hasRoute: (name: string): boolean => {\n return router.hasRoute(name);\n },\n\n getRoutes: (): RouteRecordNormalized[] => {\n return router.getRoutes();\n },\n\n getCurrentRoute: () => {\n return {\n params: router.currentRoute.value.params,\n query: router.currentRoute.value.query\n };\n }\n };\n}\n","import { computed } from \"vue\";\nimport {\n useStore,\n createNamespacedHelpers,\n mapState,\n mapGetters,\n mapMutations,\n mapActions\n} from \"vuex\";\n\n/// STATE TYPES\nexport type VuexState = VuexRootState & {\n demo: VuexDemoState;\n};\nexport interface VuexRootState {\n count: number;\n}\nexport interface VuexDemoState {\n name: string;\n}\n/// MUTATION TYPES\nexport const INCREMENT = \"increment\";\nexport const DECREMENT = \"decrement\";\n/// ACTION TYPES\nexport const INCREMENTACTION = \"incrementAction\";\n\nexport function useVuex() {\n const store = useStore<VuexState>();\n return {\n store\n // state: store.state\n\n // ...useVuexStates([\"count\"]),\n // ...useVuexStates(\"demo\", [\"name\"]),\n\n // ...useVuexGetters({ totaln: \"totaln\" }),\n // ...useVuexGetters(\"demo\", [\"nameFormat\"]),\n\n // ...useVuexMutations({\n // [INCREMENT]: INCREMENT,\n // [DECREMENT]: DECREMENT\n // }),\n // ...useVuexMutations(\"demo\", [\"changeName\"]),\n\n // ...useVuexActions({\n // [INCREMENTACTION]: INCREMENTACTION\n // }),\n // ...useVuexActions(\"demo\", [\"changeNameAction\"])\n\n // {{ state.count }}\n // {{ state.demo.name }}\n // {{ store.getters.totalCount }}\n // {{ store.getters.totaln(2) }}\n // {{ totaln(3) }}\n // {{ store.getters[\"demo/nameFormat\"] }}\n };\n}\n\n// ...mapState([\"count\"]);\n// ...mapState({ count: state => state.count });\nexport function useVuexStates(\n keyMaps: Record<string, string> | string[]\n): Record<string, any>;\nexport function useVuexStates(\n moduleName: string,\n keyMaps: Record<string, string> | string[]\n): Record<string, any>;\nexport function useVuexStates(\n moduleName: string | Record<string, string> | string[],\n keyMaps?: Record<string, string> | string[]\n): Record<string, any> {\n let mapFn = mapState;\n if (typeof moduleName == \"string\" && moduleName.length > 0) {\n mapFn = createNamespacedHelpers(moduleName).mapState;\n } else {\n keyMaps = moduleName as Record<string, string> | string[];\n }\n return useVuexMap(keyMaps!, mapFn);\n}\n\n// ...mapGetters([\"totaln\"]);\n// ...mapGetters({ totalnAnother: \"totaln\" });\nexport function useVuexGetters(\n keyMaps: Record<string, string> | string[]\n): Record<string, any>;\nexport function useVuexGetters(\n moduleName: string,\n keyMaps: Record<string, string> | string[]\n): Record<string, any>;\nexport function useVuexGetters(\n moduleName: string | Record<string, string> | string[],\n keyMaps?: Record<string, string> | string[]\n): Record<string, any> {\n let mapFn = mapGetters;\n if (typeof moduleName == \"string\" && moduleName.length > 0) {\n mapFn = createNamespacedHelpers(moduleName).mapGetters;\n } else {\n keyMaps = moduleName as Record<string, string> | string[];\n }\n return useVuexMap(keyMaps!, mapFn);\n}\n\n// ...mapMutations([INCREMENT]);\n// ...mapMutations({ inc: INCREMENT });\nexport function useVuexMutations(\n keyMaps: Record<string, string> | string[]\n): Record<string, any>;\nexport function useVuexMutations(\n moduleName: string,\n keyMaps: Record<string, string> | string[]\n): Record<string, any>;\nexport function useVuexMutations(\n moduleName: string | Record<string, string> | string[],\n keyMaps?: Record<string, string> | string[]\n): Record<string, any> {\n let mapFn = mapMutations;\n if (typeof moduleName == \"string\" && moduleName.length > 0) {\n mapFn = createNamespacedHelpers(moduleName).mapMutations;\n } else {\n keyMaps = moduleName as Record<string, string> | string[];\n }\n if (Array.isArray(keyMaps)) {\n return mapFn(keyMaps!);\n } else {\n return mapFn(keyMaps!);\n }\n}\n\n// ...mapActions([INCREMENTACTION]);\n// ...mapActions({ inca: INCREMENTACTION });\nexport function useVuexActions(\n keyMaps: Record<string, string> | string[]\n): Record<string, any>;\nexport function useVuexActions(\n moduleName: string,\n keyMaps: Record<string, string> | string[]\n): Record<string, any>;\nexport function useVuexActions(\n moduleName: string | Record<string, string> | string[],\n keyMaps?: Record<string, string> | string[]\n): Record<string, any> {\n let mapFn = mapActions;\n if (typeof moduleName == \"string\" && moduleName.length > 0) {\n mapFn = createNamespacedHelpers(moduleName).mapActions;\n } else {\n keyMaps = moduleName as Record<string, string> | string[];\n }\n if (Array.isArray(keyMaps)) {\n return mapFn(keyMaps!);\n } else {\n return mapFn(keyMaps!);\n }\n}\n\nfunction useVuexMap(\n keys: Record<string, string> | string[],\n mapFn: any\n): Record<string, any> {\n const store = useStore();\n const maps: Record<string, any> = {};\n const mappedKeyFns = mapFn(keys);\n Object.keys(mappedKeyFns).forEach((key) => {\n const fn = mappedKeyFns[key].bind({ $store: store });\n maps[key] = computed(fn);\n });\n return maps;\n}\n","import { h, defineComponent } from 'vue';\n\nconst matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;\nconst stringToIcon = (value, validate, allowSimpleName, provider = \"\") => {\n const colonSeparated = value.split(\":\");\n if (value.slice(0, 1) === \"@\") {\n if (colonSeparated.length < 2 || colonSeparated.length > 3) {\n return null;\n }\n provider = colonSeparated.shift().slice(1);\n }\n if (colonSeparated.length > 3 || !colonSeparated.length) {\n return null;\n }\n if (colonSeparated.length > 1) {\n const name2 = colonSeparated.pop();\n const prefix = colonSeparated.pop();\n const result = {\n // Allow provider without '@': \"provider:prefix:name\"\n provider: colonSeparated.length > 0 ? colonSeparated[0] : provider,\n prefix,\n name: name2\n };\n return validate && !validateIconName(result) ? null : result;\n }\n const name = colonSeparated[0];\n const dashSeparated = name.split(\"-\");\n if (dashSeparated.length > 1) {\n const result = {\n provider,\n prefix: dashSeparated.shift(),\n name: dashSeparated.join(\"-\")\n };\n return validate && !validateIconName(result) ? null : result;\n }\n if (allowSimpleName && provider === \"\") {\n const result = {\n provider,\n prefix: \"\",\n name\n };\n return validate && !validateIconName(result, allowSimpleName) ? null : result;\n }\n return null;\n};\nconst validateIconName = (icon, allowSimpleName) => {\n if (!icon) {\n return false;\n }\n return !!((icon.provider === \"\" || icon.provider.match(matchIconName)) && (allowSimpleName && icon.prefix === \"\" || icon.prefix.match(matchIconName)) && icon.name.match(matchIconName));\n};\n\nconst defaultIconDimensions = Object.freeze(\n {\n left: 0,\n top: 0,\n width: 16,\n height: 16\n }\n);\nconst defaultIconTransformations = Object.freeze({\n rotate: 0,\n vFlip: false,\n hFlip: false\n});\nconst defaultIconProps = Object.freeze({\n ...defaultIconDimensions,\n ...defaultIconTransformations\n});\nconst defaultExtendedIconProps = Object.freeze({\n ...defaultIconProps,\n body: \"\",\n hidden: false\n});\n\nfunction mergeIconTransformations(obj1, obj2) {\n const result = {};\n if (!obj1.hFlip !== !obj2.hFlip) {\n result.hFlip = true;\n }\n if (!obj1.vFlip !== !obj2.vFlip) {\n result.vFlip = true;\n }\n const rotate = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4;\n if (rotate) {\n result.rotate = rotate;\n }\n return result;\n}\n\nfunction mergeIconData(parent, child) {\n const result = mergeIconTransformations(parent, child);\n for (const key in defaultExtendedIconProps) {\n if (key in defaultIconTransformations) {\n if (key in parent && !(key in result)) {\n result[key] = defaultIconTransformations[key];\n }\n } else if (key in child) {\n result[key] = child[key];\n } else if (key in parent) {\n result[key] = parent[key];\n }\n }\n return result;\n}\n\nfunction getIconsTree(data, names) {\n const icons = data.icons;\n const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n const resolved = /* @__PURE__ */ Object.create(null);\n function resolve(name) {\n if (icons[name]) {\n return resolved[name] = [];\n }\n if (!(name in resolved)) {\n resolved[name] = null;\n const parent = aliases[name] && aliases[name].parent;\n const value = parent && resolve(parent);\n if (value) {\n resolved[name] = [parent].concat(value);\n }\n }\n return resolved[name];\n }\n (names || Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve);\n return resolved;\n}\n\nfunction internalGetIconData(data, name, tree) {\n const icons = data.icons;\n const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n let currentProps = {};\n function parse(name2) {\n currentProps = mergeIconData(\n icons[name2] || aliases[name2],\n currentProps\n );\n }\n parse(name);\n tree.forEach(parse);\n return mergeIconData(data, currentProps);\n}\n\nfunction parseIconSet(data, callback) {\n const names = [];\n if (typeof data !== \"object\" || typeof data.icons !== \"object\") {\n return names;\n }\n if (data.not_found instanceof Array) {\n data.not_found.forEach((name) => {\n callback(name, null);\n names.push(name);\n });\n }\n const tree = getIconsTree(data);\n for (const name in tree) {\n const item = tree[name];\n if (item) {\n callback(name, internalGetIconData(data, name, item));\n names.push(name);\n }\n }\n return names;\n}\n\nconst optionalPropertyDefaults = {\n provider: \"\",\n aliases: {},\n not_found: {},\n ...defaultIconDimensions\n};\nfunction checkOptionalProps(item, defaults) {\n for (const prop in defaults) {\n if (prop in item && typeof item[prop] !== typeof defaults[prop]) {\n return false;\n }\n }\n return true;\n}\nfunction quicklyValidateIconSet(obj) {\n if (typeof obj !== \"object\" || obj === null) {\n return null;\n }\n const data = obj;\n if (typeof data.prefix !== \"string\" || !obj.icons || typeof obj.icons !== \"object\") {\n return null;\n }\n if (!checkOptionalProps(obj, optionalPropertyDefaults)) {\n return null;\n }\n const icons = data.icons;\n for (const name in icons) {\n const icon = icons[name];\n if (!name.match(matchIconName) || typeof icon.body !== \"string\" || !checkOptionalProps(\n icon,\n defaultExtendedIconProps\n )) {\n return null;\n }\n }\n const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n for (const name in aliases) {\n const icon = aliases[name];\n const parent = icon.parent;\n if (!name.match(matchIconName) || typeof parent !== \"string\" || !icons[parent] && !aliases[parent] || !checkOptionalProps(\n icon,\n defaultExtendedIconProps\n )) {\n return null;\n }\n }\n return data;\n}\n\nconst dataStorage = /* @__PURE__ */ Object.create(null);\nfunction newStorage(provider, prefix) {\n return {\n provider,\n prefix,\n icons: /* @__PURE__ */ Object.create(null),\n missing: /* @__PURE__ */ new Set()\n };\n}\nfunction getStorage(provider, prefix) {\n const providerStorage = dataStorage[provider] || (dataStorage[provider] = /* @__PURE__ */ Object.create(null));\n return providerStorage[prefix] || (providerStorage[prefix] = newStorage(provider, prefix));\n}\nfunction addIconSet(storage, data) {\n if (!quicklyValidateIconSet(data)) {\n return [];\n }\n return parseIconSet(data, (name, icon) => {\n if (icon) {\n storage.icons[name] = icon;\n } else {\n storage.missing.add(name);\n }\n });\n}\nfunction addIconToStorage(storage, name, icon) {\n try {\n if (typeof icon.body === \"string\") {\n storage.icons[name] = { ...icon };\n return true;\n }\n } catch (err) {\n }\n return false;\n}\nfunction listIcons(provider, prefix) {\n let allIcons = [];\n const providers = typeof provider === \"string\" ? [provider] : Object.keys(dataStorage);\n providers.forEach((provider2) => {\n const prefixes = typeof provider2 === \"string\" && typeof prefix === \"string\" ? [prefix] : Object.keys(dataStorage[provider2] || {});\n prefixes.forEach((prefix2) => {\n const storage = getStorage(provider2, prefix2);\n allIcons = allIcons.concat(\n Object.keys(storage.icons).map(\n (name) => (provider2 !== \"\" ? \"@\" + provider2 + \":\" : \"\") + prefix2 + \":\" + name\n )\n );\n });\n });\n return allIcons;\n}\n\nlet simpleNames = false;\nfunction allowSimpleNames(allow) {\n if (typeof allow === \"boolean\") {\n simpleNames = allow;\n }\n return simpleNames;\n}\nfunction getIconData(name) {\n const icon = typeof name === \"string\" ? stringToIcon(name, true, simpleNames) : name;\n if (icon) {\n const storage = getStorage(icon.provider, icon.prefix);\n const iconName = icon.name;\n return storage.icons[iconName] || (storage.missing.has(iconName) ? null : void 0);\n }\n}\nfunction addIcon(name, data) {\n const icon = stringToIcon(name, true, simpleNames);\n if (!icon) {\n return false;\n }\n const storage = getStorage(icon.provider, icon.prefix);\n return addIconToStorage(storage, icon.name, data);\n}\nfunction addCollection(data, provider) {\n if (typeof data !== \"object\") {\n return false;\n }\n if (typeof provider !== \"string\") {\n provider = data.provider || \"\";\n }\n if (simpleNames && !provider && !data.prefix) {\n let added = false;\n if (quicklyValidateIconSet(data)) {\n data.prefix = \"\";\n parseIconSet(data, (name, icon) => {\n if (icon && addIcon(name, icon)) {\n added = true;\n }\n });\n }\n return added;\n }\n const prefix = data.prefix;\n if (!validateIconName({\n provider,\n prefix,\n name: \"a\"\n })) {\n return false;\n }\n const storage = getStorage(provider, prefix);\n return !!addIconSet(storage, data);\n}\nfunction iconLoaded(name) {\n return !!getIconData(name);\n}\nfunction getIcon(name) {\n const result = getIconData(name);\n return result ? {\n ...defaultIconProps,\n ...result\n } : null;\n}\n\nconst defaultIconSizeCustomisations = Object.freeze({\n width: null,\n height: null\n});\nconst defaultIconCustomisations = Object.freeze({\n // Dimensions\n ...defaultIconSizeCustomisations,\n // Transformations\n ...defaultIconTransformations\n});\n\nconst unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;\nconst unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;\nfunction calculateSize(size, ratio, precision) {\n if (ratio === 1) {\n return size;\n }\n precision = precision || 100;\n if (typeof size === \"number\") {\n return Math.ceil(size * ratio * precision) / precision;\n }\n if (typeof size !== \"string\") {\n return size;\n }\n const oldParts = size.split(unitsSplit);\n if (oldParts === null || !oldParts.length) {\n return size;\n }\n const newParts = [];\n let code = oldParts.shift();\n let isNumber = unitsTest.test(code);\n while (true) {\n if (isNumber) {\n const num = parseFloat(code);\n if (isNaN(num)) {\n newParts.push(code);\n } else {\n newParts.push(Math.ceil(num * ratio * precision) / precision);\n }\n } else {\n newParts.push(code);\n }\n code = oldParts.shift();\n if (code === void 0) {\n return newParts.join(\"\");\n }\n isNumber = !isNumber;\n }\n}\n\nfunction splitSVGDefs(content, tag = \"defs\") {\n let defs = \"\";\n const index = content.indexOf(\"<\" + tag);\n while (index >= 0) {\n const start = content.indexOf(\">\", index);\n const end = content.indexOf(\"</\" + tag);\n if (start === -1 || end === -1) {\n break;\n }\n const endEnd = content.indexOf(\">\", end);\n if (endEnd === -1) {\n break;\n }\n defs += content.slice(start + 1, end).trim();\n content = content.slice(0, index).trim() + content.slice(endEnd + 1);\n }\n return {\n defs,\n content\n };\n}\nfunction mergeDefsAndContent(defs, content) {\n return defs ? \"<defs>\" + defs + \"</defs>\" + content : content;\n}\nfunction wrapSVGContent(body, start, end) {\n const split = splitSVGDefs(body);\n return mergeDefsAndContent(split.defs, start + split.content + end);\n}\n\nconst isUnsetKeyword = (value) => value === \"unset\" || value === \"undefined\" || value === \"none\";\nfunction iconToSVG(icon, customisations) {\n const fullIcon = {\n ...defaultIconProps,\n ...icon\n };\n const fullCustomisations = {\n ...defaultIconCustomisations,\n ...customisations\n };\n const box = {\n left: fullIcon.left,\n top: fullIcon.top,\n width: fullIcon.width,\n height: fullIcon.height\n };\n let body = fullIcon.body;\n [fullIcon, fullCustomisations].forEach((props) => {\n const transformations = [];\n const hFlip = props.hFlip;\n const vFlip = props.vFlip;\n let rotation = props.rotate;\n if (hFlip) {\n if (vFlip) {\n rotation += 2;\n } else {\n transformations.push(\n \"translate(\" + (box.width + box.left).toString() + \" \" + (0 - box.top).toString() + \")\"\n );\n transformations.push(\"scale(-1 1)\");\n box.top = box.left = 0;\n }\n } else if (vFlip) {\n transformations.push(\n \"translate(\" + (0 - box.left).toString() + \" \" + (box.height + box.top).toString() + \")\"\n );\n transformations.push(\"scale(1 -1)\");\n box.top = box.left = 0;\n }\n let tempValue;\n if (rotation < 0) {\n rotation -= Math.floor(rotation / 4) * 4;\n }\n rotation = rotation % 4;\n switch (rotation) {\n case 1:\n tempValue = box.height / 2 + box.top;\n transformations.unshift(\n \"rotate(90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n );\n break;\n case 2:\n transformations.unshift(\n \"rotate(180 \" + (box.width / 2 + box.left).toString() + \" \" + (box.height / 2 + box.top).toString() + \")\"\n );\n break;\n case 3:\n tempValue = box.width / 2 + box.left;\n transformations.unshift(\n \"rotate(-90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n );\n break;\n }\n if (rotation % 2 === 1) {\n if (box.left !== box.top) {\n tempValue = box.left;\n box.left = box.top;\n box.top = tempValue;\n }\n if (box.width !== box.height) {\n tempValue = box.width;\n box.width = box.height;\n box.height = tempValue;\n }\n }\n if (transformations.length) {\n body = wrapSVGContent(\n body,\n '<g transform=\"' + transformations.join(\" \") + '\">',\n \"</g>\"\n );\n }\n });\n const customisationsWidth = fullCustomisations.width;\n const customisationsHeight = fullCustomisations.height;\n const boxWidth = box.width;\n const boxHeight = box.height;\n let width;\n let height;\n if (customisationsWidth === null) {\n height = customisationsHeight === null ? \"1em\" : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n width = calculateSize(height, boxWidth / boxHeight);\n } else {\n width = customisationsWidth === \"auto\" ? boxWidth : customisationsWidth;\n height = customisationsHeight === null ? calculateSize(width, boxHeight / boxWidth) : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n }\n const attributes = {};\n const setAttr = (prop, value) => {\n if (!isUnsetKeyword(value)) {\n attributes[prop] = value.toString();\n }\n };\n setAttr(\"width\", width);\n setAttr(\"height\", height);\n const viewBox = [box.left, box.top, boxWidth, boxHeight];\n attributes.viewBox = viewBox.join(\" \");\n return {\n attributes,\n viewBox,\n body\n };\n}\n\nconst regex = /\\sid=\"(\\S+)\"/g;\nconst randomPrefix = \"IconifyId\" + Date.now().toString(16) + (Math.random() * 16777216 | 0).toString(16);\nlet counter = 0;\nfunction replaceIDs(body, prefix = randomPrefix) {\n const ids = [];\n let match;\n while (match = regex.exec(body)) {\n ids.push(match[1]);\n }\n if (!ids.length) {\n return body;\n }\n const suffix = \"suffix\" + (Math.random() * 16777216 | Date.now()).toString(16);\n ids.forEach((id) => {\n const newID = typeof prefix === \"function\" ? prefix(id) : prefix + (counter++).toString();\n const escapedID = id.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n body = body.replace(\n // Allowed characters before id: [#;\"]\n // Allowed characters after id: [)\"], .[a-z]\n new RegExp('([#;\"])(' + escapedID + ')([\")]|\\\\.[a-z])', \"g\"),\n \"$1\" + newID + suffix + \"$3\"\n );\n });\n body = body.replace(new RegExp(suffix, \"g\"), \"\");\n return body;\n}\n\nconst storage = /* @__PURE__ */ Object.create(null);\nfunction setAPIModule(provider, item) {\n storage[provider] = item;\n}\nfunction getAPIModule(provider) {\n return storage[provider] || storage[\"\"];\n}\n\nfunction createAPIConfig(source) {\n let resources;\n if (typeof source.resources === \"string\") {\n resources = [source.resources];\n } else {\n resources = source.resources;\n if (!(resources instanceof Array) || !resources.length) {\n return null;\n }\n }\n const result = {\n // API hosts\n resources,\n // Root path\n path: source.path || \"/\",\n // URL length limit\n maxURL: source.maxURL || 500,\n // Timeout before next host is used.\n rotate: source.rotate || 750,\n // Timeout before failing query.\n timeout: source.timeout || 5e3,\n // Randomise default API end point.\n random: source.random === true,\n // Start index\n index: source.index || 0,\n // Receive data after time out (used if time out kicks in first, then API module sends data anyway).\n dataAfterTimeout: source.dataAfterTimeout !== false\n };\n return result;\n}\nconst configStorage = /* @__PURE__ */ Object.create(null);\nconst fallBackAPISources = [\n \"https://api.simplesvg.com\",\n \"https://api.unisvg.com\"\n];\nconst fallBackAPI = [];\nwhile (fallBackAPISources.length > 0) {\n if (fallBackAPISources.length === 1) {\n fallBackAPI.push(fallBackAPISources.shift());\n } else {\n if (Math.random() > 0.5) {\n fallBackAPI.push(fallBackAPISources.shift());\n } else {\n fallBackAPI.push(fallBackAPISources.pop());\n }\n }\n}\nconfigStorage[\"\"] = createAPIConfig({\n resources: [\"https://api.iconify.design\"].concat(fallBackAPI)\n});\nfunction addAPIProvider(provider, customConfig) {\n const config = createAPIConfig(customConfig);\n if (config === null) {\n return false;\n }\n configStorage[provider] = config;\n return true;\n}\nfunction getAPIConfig(provider) {\n return configStorage[provider];\n}\nfunction listAPIProviders() {\n return Object.keys(configStorage);\n}\n\nconst detectFetch = () => {\n let callback;\n try {\n callback = fetch;\n if (typeof callback === \"function\") {\n return callback;\n }\n } catch (err) {\n }\n};\nlet fetchModule = detectFetch();\nfunction setFetch(fetch2) {\n fetchModule = fetch2;\n}\nfunction getFetch() {\n return fetchModule;\n}\nfunction calculateMaxLength(provider, prefix) {\n const config = getAPIConfig(provider);\n if (!config) {\n return 0;\n }\n let result;\n if (!config.maxURL) {\n result = 0;\n } else {\n let maxHostLength = 0;\n config.resources.forEach((item) => {\n const host = item;\n maxHostLength = Math.max(maxHostLength, host.length);\n });\n const url = prefix + \".json?icons=\";\n result = config.maxURL - maxHostLength - config.path.length - url.length;\n }\n return result;\n}\nfunction shouldAbort(status) {\n return status === 404;\n}\nconst prepare = (provider, prefix, icons) => {\n const results = [];\n const maxLength = calculateMaxLength(provider, prefix);\n const type = \"icons\";\n let item = {\n type,\n provider,\n prefix,\n icons: []\n };\n let length = 0;\n icons.forEach((name, index) => {\n length += name.length + 1;\n if (length >= maxLength && index > 0) {\n results.push(item);\n item = {\n type,\n provider,\n prefix,\n icons: []\n };\n length = name.length;\n }\n item.icons.push(name);\n });\n results.push(item);\n return results;\n};\nfunction getPath(provider) {\n if (typeof provider === \"string\") {\n const config = getAPIConfig(provider);\n if (config) {\n return config.path;\n }\n }\n return \"/\";\n}\nconst send = (host, params, callback) => {\n if (!fetchModule) {\n callback(\"abort\", 424);\n return;\n }\n let path = getPath(params.provider);\n switch (params.type) {\n case \"icons\": {\n const prefix = params.prefix;\n const icons = params.icons;\n const iconsList = icons.join(\",\");\n const urlParams = new URLSearchParams({\n icons: iconsList\n });\n path += prefix + \".json?\" + urlParams.toString();\n break;\n }\n case \"custom\": {\n const uri = params.uri;\n path += uri.slice(0, 1) === \"/\" ? uri.slice(1) : uri;\n break;\n }\n default:\n callback(\"abort\", 400);\n return;\n }\n let defaultError = 503;\n fetchModule(host + path).then((response) => {\n const status = response.status;\n if (status !== 200) {\n setTimeout(() => {\n callback(shouldAbort(status) ? \"abort\" : \"next\", status);\n });\n return;\n }\n defaultError = 501;\n return response.json();\n }).then((data) => {\n if (typeof data !== \"object\" || data === null) {\n setTimeout(() => {\n if (data === 404) {\n callback(\"abort\", data);\n } else {\n callback(\"next\", defaultError);\n }\n });\n return;\n }\n setTimeout(() => {\n callback(\"success\", data);\n });\n }).catch(() => {\n callback(\"next\", defaultError);\n });\n};\nconst fetchAPIModule = {\n prepare,\n send\n};\n\nfunction sortIcons(icons) {\n const result = {\n loaded: [],\n missing: [],\n pending: []\n };\n const storage = /* @__PURE__ */ Object.create(null);\n icons.sort((a, b) => {\n if (a.provider !== b.provider) {\n return a.provider.localeCompare(b.provider);\n }\n if (a.prefix !== b.prefix) {\n return a.prefix.localeCompare(b.prefix);\n }\n return a.name.localeCompare(b.name);\n });\n let lastIcon = {\n provider: \"\",\n prefix: \"\",\n name: \"\"\n };\n icons.forEach((icon) => {\n if (lastIcon.name === icon.name && lastIcon.prefix === icon.prefix && lastIcon.provider === icon.provider) {\n return;\n }\n lastIcon = icon;\n const provider = icon.provider;\n const prefix = icon.prefix;\n const name = icon.name;\n const providerStorage = storage[provider] || (storage[provider] = /* @__PURE__ */ Object.create(null));\n const localStorage = providerStorage[prefix] || (providerStorage[prefix] = getStorage(provider, prefix));\n let list;\n if (name in localStorage.icons) {\n list = result.loaded;\n } else if (prefix === \"\" || localStorage.missing.has(name)) {\n list = result.missing;\n } else {\n list = result.pending;\n }\n const item = {\n provider,\n prefix,\n name\n };\n list.push(item);\n });\n return result;\n}\n\nfunction removeCallback(storages, id) {\n storages.forEach((storage) => {\n const items = storage.loaderCallbacks;\n if (items) {\n storage.loaderCallbacks = items.filter((row) => row.id !== id);\n }\n });\n}\nfunction updateCallbacks(storage) {\n if (!storage.pendingCallbacksFlag) {\n storage.pendingCallbacksFlag = true;\n setTimeout(() => {\n storage.pendingCallbacksFlag = false;\n const items = storage.loaderCallbacks ? storage.loaderCallbacks.slice(0) : [];\n if (!items.length) {\n return;\n }\n let hasPending = false;\n const provider = storage.provider;\n const prefix = storage.prefix;\n items.forEach((item) => {\n const icons = item.icons;\n const oldLength = icons.pending.length;\n icons.pending = icons.pending.filter((icon) => {\n if (icon.prefix !== prefix) {\n return true;\n }\n const name = icon.name;\n if (storage.icons[name]) {\n icons.loaded.push({\n provider,\n prefix,\n name\n });\n } else if (storage.missing.has(name)) {\n icons.missing.push({\n provider,\n prefix,\n name\n });\n } else {\n hasPending = true;\n return true;\n }\n return false;\n });\n if (icons.pending.length !== oldLength) {\n if (!hasPending) {\n removeCallback([storage], item.id);\n }\n item.callback(\n icons.loaded.slice(0),\n icons.missing.slice(0),\n icons.pending.slice(0),\n item.abort\n );\n }\n });\n });\n }\n}\nlet idCounter = 0;\nfunction storeCallback(callback, icons, pendingSources) {\n const id = idCounter++;\n const abort = removeCallback.bind(null, pendingSources, id);\n if (!icons.pending.length) {\n return abort;\n }\n const item = {\n id,\n icons,\n callback,\n abort\n };\n pendingSources.forEach((storage) => {\n (storage.loaderCallbacks || (storage.loaderCallbacks = [])).push(item);\n });\n return abort;\n}\n\nfunction listToIcons(list, validate = true, simpleNames = false) {\n const result = [];\n list.forEach((item) => {\n const icon = typeof item === \"string\" ? stringToIcon(item, validate, simpleNames) : item;\n if (icon) {\n result.push(icon);\n }\n });\n return result;\n}\n\n// src/config.ts\nvar defaultConfig = {\n resources: [],\n index: 0,\n timeout: 2e3,\n rotate: 750,\n random: false,\n dataAfterTimeout: false\n};\n\n// src/query.ts\nfunction sendQuery(config, payload, query, done) {\n const resourcesCount = config.resources.length;\n const startIndex = config.random ? Math.floor(Math.random() * resourcesCount) : config.index;\n let resources;\n if (config.random) {\n let list = config.resources.slice(0);\n resources = [];\n while (list.length > 1) {\n const nextIndex = Math.floor(Math.random() * list.length);\n resources.push(list[nextIndex]);\n list = list.slice(0, nextIndex).concat(list.slice(nextIndex + 1));\n }\n resources = resources.concat(list);\n } else {\n resources = config.resources.slice(startIndex).concat(config.resources.slice(0, startIndex));\n }\n const startTime = Date.now();\n let status = \"pending\";\n let queriesSent = 0;\n let lastError;\n let timer = null;\n let queue = [];\n let doneCallbacks = [];\n if (typeof done === \"function\") {\n doneCallbacks.push(done);\n }\n function resetTimer() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n }\n function abort() {\n if (status === \"pending\") {\n status = \"aborted\";\n }\n resetTimer();\n queue.forEach((item) => {\n if (item.status === \"pending\") {\n item.status = \"aborted\";\n }\n });\n queue = [];\n }\n function subscribe(callback, overwrite) {\n if (overwrite) {\n doneCallbacks = [];\n }\n if (typeof callback === \"function\") {\n doneCallbacks.push(callback);\n }\n }\n function getQueryStatus() {\n return {\n startTime,\n payload,\n status,\n queriesSent,\n queriesPending: queue.length,\n subscribe,\n abort\n };\n }\n function failQuery() {\n status = \"failed\";\n doneCallbacks.forEach((callback) => {\n callback(void 0, lastError);\n });\n }\n function clearQueue() {\n queue.forEach((item) => {\n if (item.status === \"pending\") {\n item.status = \"aborted\";\n }\n });\n queue = [];\n }\n function moduleResponse(item, response, data) {\n const isError = response !== \"success\";\n queue = queue.filter((queued) => queued !== item);\n switch (status) {\n case \"pending\":\n break;\n case \"failed\":\n if (isError || !config.dataAfterTimeout) {\n return;\n }\n break;\n default:\n return;\n }\n if (response === \"abort\") {\n lastError = data;\n failQuery();\n return;\n }\n if (isError) {\n lastError = data;\n if (!queue.length) {\n if (!resources.length) {\n failQuery();\n } else {\n execNext();\n }\n }\n return;\n }\n resetTimer();\n clearQueue();\n if (!config.random) {\n const index = config.resources.indexOf(item.resource);\n if (index !== -1 && index !== config.index) {\n config.index = index;\n }\n }\n status = \"completed\";\n doneCallbacks.forEach((callback) => {\n callback(data);\n });\n }\n function execNext() {\n if (status !== \"pending\") {\n return;\n }\n resetTimer();\n const resource = resources.shift();\n if (resource === void 0) {\n if (queue.length) {\n timer = setTimeout(() => {\n resetTimer();\n if (status === \"pending\") {\n clearQueue();\n failQuery();\n }\n }, config.timeout);\n return;\n }\n failQuery();\n return;\n }\n const item = {\n status: \"pending\",\n resource,\n callback: (status2, data) => {\n moduleResponse(item, status2, data);\n }\n };\n queue.push(item);\n queriesSent++;\n timer = setTimeout(execNext, config.rotate);\n query(resource, payload, item.callback);\n }\n setTimeout(execNext);\n return getQueryStatus;\n}\n\n// src/index.ts\nfunction initRedundancy(cfg) {\n const config = {\n ...defaultConfig,\n ...cfg\n };\n let queries = [];\n function cleanup() {\n queries = queries.filter((item) => item().status === \"pending\");\n }\n function query(payload, queryCallback, doneCallback) {\n const query2 = sendQuery(\n config,\n payload,\n queryCallback,\n (data, error) => {\n cleanup();\n if (doneCallback) {\n doneCallback(data, error);\n }\n }\n );\n queries.push(query2);\n return query2;\n }\n function find(callback) {\n return queries.find((value) => {\n return callback(value);\n }) || null;\n }\n const instance = {\n query,\n find,\n setIndex: (index) => {\n config.index = index;\n },\n getIndex: () => config.index,\n cleanup\n };\n return instance;\n}\n\nfunction emptyCallback$1() {\n}\nconst redundancyCache = /* @__PURE__ */ Object.create(null);\nfunction getRedundancyCache(provider) {\n if (!redundancyCache[provider]) {\n const config = getAPIConfig(provider);\n if (!config) {\n return;\n }\n const redundancy = initRedundancy(config);\n const cachedReundancy = {\n config,\n redundancy\n };\n redundancyCache[provider] = cachedReundancy;\n }\n return redundancyCache[provider];\n}\nfunction sendAPIQuery(target, query, callback) {\n let redundancy;\n let send;\n if (typeof target === \"string\") {\n const api = getAPIModule(target);\n if (!api) {\n callback(void 0, 424);\n return emptyCallback$1;\n }\n send = api.send;\n const cached = getRedundancyCache(target);\n if (cached) {\n redundancy = cached.redundancy;\n }\n } else {\n const config = createAPIConfig(target);\n if (config) {\n redundancy = initRedundancy(config);\n const moduleKey = target.resources ? target.resources[0] : \"\";\n const api = getAPIModule(moduleKey);\n if (api) {\n send = api.send;\n }\n }\n }\n if (!redundancy || !send) {\n callback(void 0, 424);\n return emptyCallback$1;\n }\n return redundancy.query(query, send, callback)().abort;\n}\n\nconst browserCacheVersion = \"iconify2\";\nconst browserCachePrefix = \"iconify\";\nconst browserCacheCountKey = browserCachePrefix + \"-count\";\nconst browserCacheVersionKey = browserCachePrefix + \"-version\";\nconst browserStorageHour = 36e5;\nconst browserStorageCacheExpiration = 168;\nconst browserStorageLimit = 50;\n\nfunction getStoredItem(func, key) {\n try {\n return func.getItem(key);\n } catch (err) {\n }\n}\nfunction setStoredItem(func, key, value) {\n try {\n func.setItem(key, value);\n return true;\n } catch (err) {\n }\n}\nfunction removeStoredItem(func, key) {\n try {\n func.removeItem(key);\n } catch (err) {\n }\n}\n\nfunction setBrowserStorageItemsCount(storage, value) {\n return setStoredItem(storage, browserCacheCountKey, value.toString());\n}\nfunction getBrowserStorageItemsCount(storage) {\n return parseInt(getStoredItem(storage, browserCacheCountKey)) || 0;\n}\n\nconst browserStorageConfig = {\n local: true,\n session: true\n};\nconst browserStorageEmptyItems = {\n local: /* @__PURE__ */ new Set(),\n session: /* @__PURE__ */ new Set()\n};\nlet browserStorageStatus = false;\nfunction setBrowserStorageStatus(status) {\n browserStorageStatus = status;\n}\n\nlet _window = typeof window === \"undefined\" ? {} : window;\nfunction getBrowserStorage(key) {\n const attr = key + \"Storage\";\n try {\n if (_window && _window[attr] && typeof _window[attr].length === \"number\") {\n return _window[attr];\n }\n } catch (err) {\n }\n browserStorageConfig[key] = false;\n}\n\nfunction iterateBrowserStorage(key, callback) {\n const func = getBrowserStorage(key);\n if (!func) {\n return;\n }\n const version = getStoredItem(func, browserCacheVersionKey);\n if (version !== browserCacheVersion) {\n if (version) {\n const total2 = getBrowserStorageItemsCount(func);\n for (let i = 0; i < total2; i++) {\n removeStoredItem(func, browserCachePrefix + i.toString());\n }\n }\n setStoredItem(func, browserCacheVersionKey, browserCacheVersion);\n setBrowserStorageItemsCount(func, 0);\n return;\n }\n const minTime = Math.floor(Date.now() / browserStorageHour) - browserStorageCacheExpiration;\n const parseItem = (index) => {\n const name = browserCachePrefix + index.toString();\n const item = getStoredItem(func, name);\n if (typeof item !== \"string\") {\n return;\n }\n try {\n const data = JSON.parse(item);\n if (typeof data === \"object\" && typeof data.cached === \"number\" && data.cached > minTime && typeof data.provider === \"string\" && typeof data.data === \"object\" && typeof data.data.prefix === \"string\" && // Valid item: run callback\n callback(data, index)) {\n return true;\n }\n } catch (err) {\n }\n removeStoredItem(func, name);\n };\n let total = getBrowserStorageItemsCount(func);\n for (let i = total - 1; i >= 0; i--) {\n if (!parseItem(i)) {\n if (i === total - 1) {\n total--;\n setBrowserStorageItemsCount(func, total);\n } else {\n browserStorageEmptyItems[key].add(i);\n }\n }\n }\n}\n\nfunction initBrowserStorage() {\n if (browserStorageStatus) {\n return;\n }\n setBrowserStorageStatus(true);\n for (const key in browserStorageConfig) {\n iterateBrowserStorage(key, (item) => {\n const iconSet = item.data;\n const provider = item.provider;\n const prefix = iconSet.prefix;\n const storage = getStorage(\n provider,\n prefix\n );\n if (!addIconSet(storage, iconSet).length) {\n return false;\n }\n const lastModified = iconSet.lastModified || -1;\n storage.lastModifiedCached = storage.lastModifiedCached ? Math.min(storage.lastModifiedCached, lastModified) : lastModified;\n return true;\n });\n }\n}\n\nfunction updateLastModified(storage, lastModified) {\n const lastValue = storage.lastModifiedCached;\n if (\n // Matches or newer\n lastValue && lastValue >= lastModified\n ) {\n return lastValue === lastModified;\n }\n storage.lastModifiedCached = lastModified;\n if (lastValue) {\n for (const key in browserStorageConfig) {\n iterateBrowserStorage(key, (item) => {\n const iconSet = item.data;\n return item.provider !== storage.provider || iconSet.prefix !== storage.prefix || iconSet.lastModified === lastModified;\n });\n }\n }\n return true;\n}\nfunction storeInBrowserStorage(storage, data) {\n if (!browserStorageStatus) {\n initBrowserStorage();\n }\n function store(key) {\n let func;\n if (!browserStorageConfig[key] || !(func = getBrowserStorage(key))) {\n return;\n }\n const set = browserStorageEmptyItems[key];\n let index;\n if (set.size) {\n set.delete(index = Array.from(set).shift());\n } else {\n index = getBrowserStorageItemsCount(func);\n if (index >= browserStorageLimit || !setBrowserStorageItemsCount(func, index + 1)) {\n return;\n }\n }\n const item = {\n cached: Math.floor(Date.now() / browserStorageHour),\n provider: storage.provider,\n data\n };\n return setStoredItem(\n func,\n browserCachePrefix + index.toString(),\n JSON.stringify(item)\n );\n }\n if (data.lastModified && !updateLastModified(storage, data.lastModified)) {\n return;\n }\n if (!Object.keys(data.icons).length) {\n return;\n }\n if (data.not_found) {\n data = Object.assign({}, data);\n delete data.not_found;\n }\n if (!store(\"local\")) {\n store(\"session\");\n }\n}\n\nfunction emptyCallback() {\n}\nfunction loadedNewIcons(storage) {\n if (!storage.iconsLoaderFlag) {\n storage.iconsLoaderFlag = true;\n setTimeout(() => {\n storage.iconsLoaderFlag = false;\n updateCallbacks(storage);\n });\n }\n}\nfunction loadNewIcons(storage, icons) {\n if (!storage.iconsToLoad) {\n storage.iconsToLoad = icons;\n } else {\n storage.iconsToLoad = storage.iconsToLoad.concat(icons).sort();\n }\n if (!storage.iconsQueueFlag) {\n storage.iconsQueueFlag = true;\n setTimeout(() => {\n storage.iconsQueueFlag = false;\n const { provider, prefix } = storage;\n const icons2 = storage.iconsToLoad;\n delete storage.iconsToLoad;\n let api;\n if (!icons2 || !(api = getAPIModule(provider))) {\n return;\n }\n const params = api.prepare(provider, prefix, icons2);\n params.forEach((item) => {\n sendAPIQuery(provider, item, (data) => {\n if (typeof data !== \"object\") {\n item.icons.forEach((name) => {\n storage.missing.add(name);\n });\n } else {\n try {\n const parsed = addIconSet(\n storage,\n data\n );\n if (!parsed.length) {\n return;\n }\n const pending = storage.pendingIcons;\n if (pending) {\n parsed.forEach((name) => {\n pending.delete(name);\n });\n }\n storeInBrowserStorage(storage, data);\n } catch (err) {\n console.error(err);\n }\n }\n loadedNewIcons(storage);\n });\n });\n });\n }\n}\nconst loadIcons = (icons, callback) => {\n const cleanedIcons = listToIcons(icons, true, allowSimpleNames());\n const sortedIcons = sortIcons(cleanedIcons);\n if (!sortedIcons.pending.length) {\n let callCallback = true;\n if (callback) {\n setTimeout(() => {\n if (callCallback) {\n callback(\n sortedIcons.loaded,\n sortedIcons.missing,\n sortedIcons.pending,\n emptyCallback\n );\n }\n });\n }\n return () => {\n callCallback = false;\n };\n }\n const newIcons = /* @__PURE__ */ Object.create(null);\n const sources = [];\n let lastProvider, lastPrefix;\n sortedIcons.pending.forEach((icon) => {\n const { provider, prefix } = icon;\n if (prefix === lastPrefix && provider === lastProvider) {\n return;\n }\n lastProvider = provider;\n lastPrefix = prefix;\n sources.push(getStorage(provider, prefix));\n const providerNewIcons = newIcons[provider] || (newIcons[provider] = /* @__PURE__ */ Object.create(null));\n if (!providerNewIcons[prefix]) {\n providerNewIcons[prefix] = [];\n }\n });\n sortedIcons.pending.forEach((icon) => {\n const { provider, prefix, name } = icon;\n const storage = getStorage(provider, prefix);\n const pendingQueue = storage.pendingIcons || (storage.pendingIcons = /* @__PURE__ */ new Set());\n if (!pendingQueue.has(name)) {\n pendingQueue.add(name);\n newIcons[provider][prefix].push(name);\n }\n });\n sources.forEach((storage) => {\n const { provider, prefix } = storage;\n if (newIcons[provider][prefix].length) {\n loadNewIcons(storage, newIcons[provider][prefix]);\n }\n });\n return callback ? storeCallback(callback, sortedIcons, sources) : emptyCallback;\n};\nconst loadIcon = (icon) => {\n return new Promise((fulfill, reject) => {\n const iconObj = typeof icon === \"string\" ? stringToIcon(icon, true) : icon;\n if (!iconObj) {\n reject(icon);\n return;\n }\n loadIcons([iconObj || icon], (loaded) => {\n if (loaded.length && iconObj) {\n const data = getIconData(iconObj);\n if (data) {\n fulfill({\n ...defaultIconProps,\n ...data\n });\n return;\n }\n }\n reject(icon);\n });\n });\n};\n\nfunction toggleBrowserCache(storage, value) {\n switch (storage) {\n case \"local\":\n case \"session\":\n browserStorageConfig[storage] = value;\n break;\n case \"all\":\n for (const key in browserStorageConfig) {\n browserStorageConfig[key] = value;\n }\n break;\n }\n}\n\nfunction mergeCustomisations(defaults, item) {\n const result = {\n ...defaults\n };\n for (const key in item) {\n const value = item[key];\n const valueType = typeof value;\n if (key in defaultIconSizeCustomisations) {\n if (value === null || value && (valueType === \"string\" || valueType === \"number\")) {\n result[key] = value;\n }\n } else if (valueType === typeof result[key]) {\n result[key] = key === \"rotate\" ? value % 4 : value;\n }\n }\n return result;\n}\n\nconst separator = /[\\s,]+/;\nfunction flipFromString(custom, flip) {\n flip.split(separator).forEach((str) => {\n const value = str.trim();\n switch (value) {\n case \"horizontal\":\n custom.hFlip = true;\n break;\n case \"vertical\":\n custom.vFlip = true;\n break;\n }\n });\n}\n\nfunction rotateFromString(value, defaultValue = 0) {\n const units = value.replace(/^-?[0-9.]*/, \"\");\n function cleanup(value2) {\n while (value2 < 0) {\n value2 += 4;\n }\n return value2 % 4;\n }\n if (units === \"\") {\n const num = parseInt(value);\n return isNaN(num) ? 0 : cleanup(num);\n } else if (units !== value) {\n let split = 0;\n switch (units) {\n case \"%\":\n split = 25;\n break;\n case \"deg\":\n split = 90;\n }\n if (split) {\n let num = parseFloat(value.slice(0, value.length - units.length));\n if (isNaN(num)) {\n return 0;\n }\n num = num / split;\n return num % 1 === 0 ? cleanup(num) : 0;\n }\n }\n return defaultValue;\n}\n\nfunction iconToHTML(body, attributes) {\n let renderAttribsHTML = body.indexOf(\"xlink:\") === -1 ? \"\" : ' xmlns:xlink=\"http://www.w3.org/1999/xlink\"';\n for (const attr in attributes) {\n renderAttribsHTML += \" \" + attr + '=\"' + attributes[attr] + '\"';\n }\n return '<svg xmlns=\"http://www.w3.org/2000/svg\"' + renderAttribsHTML + \">\" + body + \"</svg>\";\n}\n\nfunction encodeSVGforURL(svg) {\n return svg.replace(/\"/g, \"'\").replace(/%/g, \"%25\").replace(/#/g, \"%23\").replace(/</g, \"%3C\").replace(/>/g, \"%3E\").replace(/\\s+/g, \" \");\n}\nfunction svgToData(svg) {\n return \"data:image/svg+xml,\" + encodeSVGforURL(svg);\n}\nfunction svgToURL(svg) {\n return 'url(\"' + svgToData(svg) + '\")';\n}\n\nconst defaultExtendedIconCustomisations = {\n ...defaultIconCustomisations,\n inline: false,\n};\n\n/**\n * Default SVG attributes\n */\nconst svgDefaults = {\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'xmlns:xlink': 'http://www.w3.org/1999/xlink',\n 'aria-hidden': true,\n 'role': 'img',\n};\n/**\n * Style modes\n */\nconst commonProps = {\n display: 'inline-block',\n};\nconst monotoneProps = {\n backgroundColor: 'currentColor',\n};\nconst coloredProps = {\n backgroundColor: 'transparent',\n};\n// Dynamically add common props to variables above\nconst propsToAdd = {\n Image: 'var(--svg)',\n Repeat: 'no-repeat',\n Size: '100% 100%',\n};\nconst propsToAddTo = {\n webkitMask: monotoneProps,\n mask: monotoneProps,\n background: coloredProps,\n};\nfor (const prefix in propsToAddTo) {\n const list = propsToAddTo[prefix];\n for (const prop in propsToAdd) {\n list[prefix + prop] = propsToAdd[prop];\n }\n}\n/**\n * Aliases for customisations.\n * In Vue 'v-' properties are reserved, so v-flip must be renamed\n */\nconst customisationAliases = {};\n['horizontal', 'vertical'].forEach((prefix) => {\n const attr = prefix.slice(0, 1) + 'Flip';\n // vertical-flip\n customisationAliases[prefix + '-flip'] = attr;\n // v-flip\n customisationAliases[prefix.slice(0, 1) + '-flip'] = attr;\n // verticalFlip\n customisationAliases[prefix + 'Flip'] = attr;\n});\n/**\n * Fix size: add 'px' to numbers\n */\nfunction fixSize(value) {\n return value + (value.match(/^[-0-9.]+$/) ? 'px' : '');\n}\n/**\n * Render icon\n */\nconst render = (\n// Icon must be validated before calling this function\nicon, \n// Partial properties\nprops) => {\n // Split properties\n const customisations = mergeCustomisations(defaultExtendedIconCustomisations, props);\n const componentProps = { ...svgDefaults };\n // Check mode\n const mode = props.mode || 'svg';\n // Copy style\n const style = {};\n const propsStyle = props.style;\n const customStyle = typeof propsStyle === 'object' && !(propsStyle instanceof Array)\n ? propsStyle\n : {};\n // Get element properties\n for (let key in props) {\n const value = props[key];\n if (value === void 0) {\n continue;\n }\n switch (key) {\n // Properties to ignore\n case 'icon':\n case 'style':\n case 'onLoad':\n case 'mode':\n break;\n // Boolean attributes\n case 'inline':\n case 'hFlip':\n case 'vFlip':\n customisations[key] =\n value === true || value === 'true' || value === 1;\n break;\n // Flip as string: 'horizontal,vertical'\n case 'flip':\n if (typeof value === 'string') {\n flipFromString(customisations, value);\n }\n break;\n // Color: override style\n case 'color':\n style.color = value;\n break;\n // Rotation as string\n case 'rotate':\n if (typeof value === 'string') {\n customisations[key] = rotateFromString(value);\n }\n else if (typeof value === 'number') {\n customisations[key] = value;\n }\n break;\n // Remove aria-hidden\n case 'ariaHidden':\n case 'aria-hidden':\n // Vue transforms 'aria-hidden' property to 'ariaHidden'\n if (value !== true && value !== 'true') {\n delete componentProps['aria-hidden'];\n }\n break;\n default: {\n const alias = customisationAliases[key];\n if (alias) {\n // Aliases for boolean customisations\n if (value === true || value === 'true' || value === 1) {\n customisations[alias] = true;\n }\n }\n else if (defaultExtendedIconCustomisations[key] === void 0) {\n // Copy missing property if it does not exist in customisations\n componentProps[key] = value;\n }\n }\n }\n }\n // Generate icon\n const item = iconToSVG(icon, customisations);\n const renderAttribs = item.attributes;\n // Inline display\n if (customisations.inline) {\n style.verticalAlign = '-0.125em';\n }\n if (mode === 'svg') {\n // Add style\n componentProps.style = {\n ...style,\n ...customStyle,\n };\n // Add icon stuff\n Object.assign(componentProps, renderAttribs);\n // Counter for ids based on \"id\" property to render icons consistently on server and client\n let localCounter = 0;\n let id = props.id;\n if (typeof id === 'string') {\n // Convert '-' to '_' to avoid errors in animations\n id = id.replace(/-/g, '_');\n }\n // Add innerHTML and style to props\n componentProps['innerHTML'] = replaceIDs(item.body, id ? () => id + 'ID' + localCounter++ : 'iconifyVue');\n // Render icon\n return h('svg', componentProps);\n }\n // Render <span> with style\n const { body, width, height } = icon;\n const useMask = mode === 'mask' ||\n (mode === 'bg' ? false : body.indexOf('currentColor') !== -1);\n // Generate SVG\n const html = iconToHTML(body, {\n ...renderAttribs,\n width: width + '',\n height: height + '',\n });\n // Generate style\n componentProps.style = {\n ...style,\n '--svg': svgToURL(html),\n 'width': fixSize(renderAttribs.width),\n 'height': fixSize(renderAttribs.height),\n ...commonProps,\n ...(useMask ? monotoneProps : coloredProps),\n ...customStyle,\n };\n return h('span', componentProps);\n};\n\n/**\n * Enable cache\n */\nfunction enableCache(storage) {\n toggleBrowserCache(storage, true);\n}\n/**\n * Disable cache\n */\nfunction disableCache(storage) {\n toggleBrowserCache(storage, false);\n}\n/**\n * Initialise stuff\n */\n// Enable short names\nallowSimpleNames(true);\n// Set API module\nsetAPIModule('', fetchAPIModule);\n/**\n * Browser stuff\n */\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n // Set cache and load existing cache\n initBrowserStorage();\n const _window = window;\n // Load icons from global \"IconifyPreload\"\n if (_window.IconifyPreload !== void 0) {\n const preload = _window.IconifyPreload;\n const err = 'Invalid IconifyPreload syntax.';\n if (typeof preload === 'object' && preload !== null) {\n (preload instanceof Array ? preload : [preload]).forEach((item) => {\n try {\n if (\n // Check if item is an object and not null/array\n typeof item !== 'object' ||\n item === null ||\n item instanceof Array ||\n // Check for 'icons' and 'prefix'\n typeof item.icons !== 'object' ||\n typeof item.prefix !== 'string' ||\n // Add icon set\n !addCollection(item)) {\n console.error(err);\n }\n }\n catch (e) {\n console.error(err);\n }\n });\n }\n }\n // Set API from global \"IconifyProviders\"\n if (_window.IconifyProviders !== void 0) {\n const providers = _window.IconifyProviders;\n if (typeof providers === 'object' && providers !== null) {\n for (let key in providers) {\n const err = 'IconifyProviders[' + key + '] is invalid.';\n try {\n const value = providers[key];\n if (typeof value !== 'object' ||\n !value ||\n value.resources === void 0) {\n continue;\n }\n if (!addAPIProvider(key, value)) {\n console.error(err);\n }\n }\n catch (e) {\n console.error(err);\n }\n }\n }\n }\n}\n/**\n * Empty icon data, rendered when icon is not available\n */\nconst emptyIcon = {\n ...defaultIconProps,\n body: '',\n};\nconst Icon = defineComponent({\n // Do not inherit other attributes: it is handled by render()\n inheritAttrs: false,\n // Set initial data\n data() {\n return {\n // Current icon name\n _name: '',\n // Loading\n _loadingIcon: null,\n // Mounted status\n iconMounted: false,\n // Callback counter to trigger re-render\n counter: 0,\n };\n },\n mounted() {\n // Mark as mounted\n this.iconMounted = true;\n },\n unmounted() {\n this.abortLoading();\n },\n methods: {\n abortLoading() {\n if (this._loadingIcon) {\n this._loadingIcon.abort();\n this._loadingIcon = null;\n }\n },\n // Get data for icon to render or null\n getIcon(icon, onload) {\n // Icon is an object\n if (typeof icon === 'object' &&\n icon !== null &&\n typeof icon.body === 'string') {\n // Stop loading\n this._name = '';\n this.abortLoading();\n return {\n data: icon,\n };\n }\n // Invalid icon?\n let iconName;\n if (typeof icon !== 'string' ||\n (iconName = stringToIcon(icon, false, true)) === null) {\n this.abortLoading();\n return null;\n }\n // Load icon\n const data = getIconData(iconName);\n if (!data) {\n // Icon data is not available\n if (!this._loadingIcon || this._loadingIcon.name !== icon) {\n // New icon to load\n this.abortLoading();\n this._name = '';\n if (data !== null) {\n // Icon was not loaded\n this._loadingIcon = {\n name: icon,\n abort: loadIcons([iconName], () => {\n this.counter++;\n }),\n };\n }\n }\n return null;\n }\n // Icon data is available\n this.abortLoading();\n if (this._name !== icon) {\n this._name = icon;\n if (onload) {\n onload(icon);\n }\n }\n // Add classes\n const classes = ['iconify'];\n if (iconName.prefix !== '') {\n classes.push('iconify--' + iconName.prefix);\n }\n if (iconName.provider !== '') {\n classes.push('iconify--' + iconName.provider);\n }\n return { data, classes };\n },\n },\n // Render icon\n render() {\n // Re-render when counter changes\n this.counter;\n const props = this.$attrs;\n // Get icon data\n const icon = (this.iconMounted || props.ssr)\n ? this.getIcon(props.icon, props.onLoad)\n : null;\n // Validate icon object\n if (!icon) {\n return render(emptyIcon, props);\n }\n // Add classes\n let newProps = props;\n if (icon.classes) {\n newProps = {\n ...props,\n class: (typeof props['class'] === 'string'\n ? props['class'] + ' '\n : '') + icon.classes.join(' '),\n };\n }\n // Render icon\n return render({\n ...defaultIconProps,\n ...icon.data,\n }, newProps);\n },\n});\n/**\n * Internal API\n */\nconst _api = {\n getAPIConfig,\n setAPIModule,\n sendAPIQuery,\n setFetch,\n getFetch,\n listAPIProviders,\n};\n\nexport { Icon, _api, addAPIProvider, addCollection, addIcon, iconToSVG as buildIcon, calculateSize, disableCache, enableCache, getIcon, iconLoaded as iconExists, iconLoaded, listIcons, loadIcon, loadIcons, replaceIDs };\n","import { Entry } from \"./entries\";\n\nlet _nativeMap;\ntry {\n _nativeMap = Map;\n} catch (_) {\n /// UNDO mock Map\n _nativeMap = function () {};\n}\nexport const nativeMap = _nativeMap;\n\nexport function mapToArray(map: Map<any, any>): Entry[] {\n const array = Array(map.size);\n map.forEach(function (v, k) {\n array.push([k, v]);\n });\n return array;\n}\n\nexport function addMapEntry(map: Map<any, any>, pair: Entry) {\n map.set(pair[0], pair[1]);\n return map;\n}\n\n/// 有 cloneFunc 代表 深拷贝\nexport function cloneMap(\n map: Map<any, any>,\n cloneFunc?: (entries: Entry[], isDeep: boolean) => Entry[]\n): Map<any, any> {\n return (\n cloneFunc ? cloneFunc(mapToArray(map), true) : mapToArray(map)\n ).reduce(addMapEntry, new Map());\n}\n","let _nativeSet;\ntry {\n _nativeSet = Set;\n} catch (_) {\n /// UNDO mock Set\n _nativeSet = function () {};\n}\nexport const nativeSet = _nativeSet;\n\nexport function setToArray(set: Set<any>): any[] {\n const array = Array(set.size);\n set.forEach((v, i) => {\n array[i] = v;\n });\n return array;\n}\n\nexport function addSetEntry(set: Set<any>, value: any) {\n // Don't return `set.add` because it's not chainable in IE 11.\n set.add(value);\n return set;\n}\n\n/// 有 cloneFunc 代表 深拷贝\nexport function cloneSet(\n set: Set<any>,\n cloneFunc?: (values: any[], isDeep: boolean) => any[]\n) {\n return (\n cloneFunc ? cloneFunc(setToArray(set), true) : setToArray(set)\n ).reduce(addSetEntry, new Set());\n}\n","import { isOK } from \"./object\";\nimport { regMatch } from \"./string\";\n\n// Number.MAX_SAFE_INTEGER === Math.pow(2, 53) - 1 === 9007199254740991;\nexport const MAX_SAFE_INTEGER = 9007199254740991;\n// Number.MIN_SAFE_INTEGER === -Number.MAX_SAFE_INTEGER === -9007199254740991;\nexport const MIN_SAFE_INTEGER = -9007199254740991;\n// Number.EPSILON === Math.pow(2, -52)\nexport const EPSILON = Math.pow(2, -52);\n// Number.isNaN(NaN); // true\n// Number.isFinite(-Infinity); // false\n// Number.isSafeInteger(9007199254740990); // true\n// Number.isSafeInteger(9007199254740992); // false\n\nexport const isEven = (num: number) => num % 2 === 0;\n\nexport const average = (...args: number[]) =>\n args.reduce((a, b) => a + b) / args.length;\n\nexport function parseNumber(value: any, defaultValue?: number): number {\n value = parseFloat(value);\n if (isNaN(value)) {\n if (typeof defaultValue === \"number\") {\n return defaultValue;\n }\n throw new Error(`parseNumber(${value}) isNaN!`);\n }\n return value;\n}\n\nexport function parseRelativeNumber(\n value: any,\n relativeSize: number,\n defaultValue?: number\n): number {\n if (typeof value == \"string\") {\n value = value.trim().toLowerCase();\n if (value.indexOf(\"%\") > 0) {\n return (parseNumber(value, defaultValue) / 100) * relativeSize;\n } else if (value.indexOf(\"vw\") > 0) {\n return (parseNumber(value, defaultValue) / 100) * window.innerWidth;\n } else if (value.indexOf(\"vh\") > 0) {\n return (parseNumber(value, defaultValue) / 100) * window.innerHeight;\n } else if (value.indexOf(\"vm\") > 0) {\n return (\n (parseNumber(value, defaultValue) / 100) *\n Math.min(window.innerWidth, window.innerHeight)\n );\n } else if (value == \"top\" || value == \"left\") {\n return 0;\n } else if (value == \"center\" || value == \"middle\") {\n return relativeSize * 0.5;\n } else if (value == \"bottom\" || value == \"right\") {\n return relativeSize;\n } else {\n return parseNumber(value, defaultValue);\n }\n } else {\n return parseNumber(value, defaultValue);\n }\n}\n\n// 0.1 + 0.2 - 0.3; // 5.551115123125783e-17\n// 0.1 + 0.2 === 0.3; // 0.30000000000000004 // false\n// withinErrorMarginNumber(0.1 + 0.2, 0.3); // true\n// 1.1 + 1.3 === 2.4; // false\n// withinErrorMarginNumber(1.1 + 1.3, 2.4); // true\nexport function withinErrorMarginNumber(\n left: number,\n right: number,\n margin = Number.EPSILON * Math.pow(2, 2)\n) {\n return Math.abs(left - right) < margin;\n}\n\n/// 精确加法\nexport function add(num1: number, num2: number) {\n const num1Digits = (num1.toString().split(\".\")[1] || \"\").length;\n const num2Digits = (num2.toString().split(\".\")[1] || \"\").length;\n const baseNum = Math.pow(10, Math.max(num1Digits, num2Digits));\n return (num1 * baseNum + num2 * baseNum) / baseNum;\n}\n\nexport const clamp = (x: number, min: number, max: number) =>\n x < min ? min : x > max ? max : x;\n// Math.min(Math.max(min, x), max);\n\nexport const round = (\n number: number,\n digits = 0,\n base = Math.pow(10, digits)\n): number => {\n return Math.round(base * number) / base;\n};\n\n// compute euclidean modulo of m % n\n// 计算 m % n 的欧几里德模数\n// https://en.wikipedia.org/wiki/Modulo_operation\nexport function euclideanModulo(n: number, m: number) {\n return ((n % m) + m) % m;\n}\n\n// https://en.wikipedia.org/wiki/Linear_interpolation\nexport function lerp(x: number, y: number, t: number) {\n return (1 - t) * x + t * y;\n}\n\nexport function lerpMap(\n v: number,\n fromStart: number,\n fromEnd: number,\n toStart: number,\n toEnd: number\n) {\n return (\n toStart + (toEnd - toStart) * ((v - fromStart) / (fromEnd - fromStart))\n );\n}\n\nexport const stepNumber =\n (min: number, max: number, step: number) => (value: number) => {\n const v = clamp(value, min, max);\n if (step == 0) {\n return v;\n }\n if (max - v < step) {\n return max;\n }\n return Math.round(v / step) * step;\n };\n\n// fixedNumberString(1.12345678, 6) = '1.12346'\n// fixedNumberString(1234,3) = '1.23e+3'\nexport function fixedNumberString(num: any, precision = 12): string {\n return parseNumber(num).toPrecision(precision);\n}\n\n// fixedDotNumberString(1.12345678, 6) = '1.123457'\nexport function fixedDotNumberString(num: any, precision = 12): string {\n return parseNumber(num).toFixed(precision);\n}\n\n// maxDotNumber(1234,3) = 1234\n// maxDotNumber(1.12345678, 6) = 1.123457\nexport function maxDotNumber(num: any, precision = 12): number {\n return +fixedDotNumberString(num, precision);\n}\n\n// decimalNumber(11.234) = 11\nexport function decimalNumber(num: any): number {\n return maxDotNumber(num, 0);\n}\n\nexport function formatNumber(n: number, count = 4, glue = \",\") {\n const regexp = new RegExp(`\\\\d{1,${count}}(?=(\\\\d{${count}})+$)`, \"g\");\n return String(n).replace(regexp, `$&${glue}`);\n}\n\nexport function extractNumber(str: any, defaultNumber?: number) {\n const match = regMatch(\"number-single\", String(str));\n return {\n hasNumber: !!match,\n number:\n match && !Array.isArray(match) && match.fullMatch\n ? parseFloat(match.fullMatch)\n : isOK(defaultNumber)\n ? (defaultNumber as number)\n : NaN,\n prefix:\n match && !Array.isArray(match) && match.fullMatch\n ? str.substring(0, match.matchIndex)\n : \"\",\n suffix:\n match && !Array.isArray(match) && match.fullMatch\n ? str.substring(match.matchIndex + match.fullMatch.length)\n : \"\"\n };\n}\n\nexport function extractAllNumbers(str: string): number[] {\n const matches = regMatch(\"number\", str);\n return matches\n ? Array.isArray(matches)\n ? matches.map((m) => Number(m.fullMatch))\n : [Number(matches.fullMatch)]\n : [];\n}\n\n/// 输出随机 1 或 -1\nexport function randomDirection() {\n return Math.random() > 0.5 ? 1 : -1;\n}\n\n/// 生成随机数 max = Infinity\nexport function randomFloat(min = 0, max = 100): number {\n return Math.random() * (max - min) + min;\n}\n\n/// 生成随机整数 max = Infinity\nexport function randomInt(min = 0, max = 100): number {\n return Math.floor(randomFloat(min, max));\n}\n\nexport function createNextInt(start = 0) {\n return () => ++start;\n}\n\n// Fast Half Float Conversions, http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf\nconst _tables = _generateTables();\nfunction _generateTables() {\n // float32 to float16 helpers\n const buffer = new ArrayBuffer(4);\n const floatView = new Float32Array(buffer);\n const uint32View = new Uint32Array(buffer);\n const baseTable = new Uint32Array(512);\n const shiftTable = new Uint32Array(512);\n for (let i = 0; i < 256; ++i) {\n const e = i - 127;\n // very small number (0, -0)\n if (e < -27) {\n baseTable[i] = 0x0000;\n baseTable[i | 0x100] = 0x8000;\n shiftTable[i] = 24;\n shiftTable[i | 0x100] = 24;\n // small number (denorm)\n } else if (e < -14) {\n baseTable[i] = 0x0400 >> (-e - 14);\n baseTable[i | 0x100] = (0x0400 >> (-e - 14)) | 0x8000;\n shiftTable[i] = -e - 1;\n shiftTable[i | 0x100] = -e - 1;\n // normal number\n } else if (e <= 15) {\n baseTable[i] = (e + 15) << 10;\n baseTable[i | 0x100] = ((e + 15) << 10) | 0x8000;\n shiftTable[i] = 13;\n shiftTable[i | 0x100] = 13;\n // large number (Infinity, -Infinity)\n } else if (e < 128) {\n baseTable[i] = 0x7c00;\n baseTable[i | 0x100] = 0xfc00;\n shiftTable[i] = 24;\n shiftTable[i | 0x100] = 24;\n // stay (NaN, Infinity, -Infinity)\n } else {\n baseTable[i] = 0x7c00;\n baseTable[i | 0x100] = 0xfc00;\n shiftTable[i] = 13;\n shiftTable[i | 0x100] = 13;\n }\n }\n // float16 to float32 helpers\n const mantissaTable = new Uint32Array(2048);\n const exponentTable = new Uint32Array(64);\n const offsetTable = new Uint32Array(64);\n for (let i = 1; i < 1024; ++i) {\n let m = i << 13; // zero pad mantissa bits\n let e = 0; // zero exponent\n // normalized\n while ((m & 0x00800000) === 0) {\n m <<= 1;\n e -= 0x00800000; // decrement exponent\n }\n m &= ~0x00800000; // clear leading 1 bit\n e += 0x38800000; // adjust bias\n mantissaTable[i] = m | e;\n }\n for (let i = 1024; i < 2048; ++i) {\n mantissaTable[i] = 0x38000000 + ((i - 1024) << 13);\n }\n for (let i = 1; i < 31; ++i) {\n exponentTable[i] = i << 23;\n }\n exponentTable[31] = 0x47800000;\n exponentTable[32] = 0x80000000;\n for (let i = 33; i < 63; ++i) {\n exponentTable[i] = 0x80000000 + ((i - 32) << 23);\n }\n exponentTable[63] = 0xc7800000;\n for (let i = 1; i < 64; ++i) {\n if (i !== 32) {\n offsetTable[i] = 1024;\n }\n }\n return {\n floatView: floatView,\n uint32View: uint32View,\n baseTable: baseTable,\n shiftTable: shiftTable,\n mantissaTable: mantissaTable,\n exponentTable: exponentTable,\n offsetTable: offsetTable\n };\n}\n\n// float32 to float16\nexport function toHalfFloat(val: number): number {\n if (Math.abs(val) > 65504) {\n console.warn(\"toHalfFloat(): Value out of range.\");\n }\n val = clamp(val, -65504, 65504);\n _tables.floatView[0] = val;\n const f = _tables.uint32View[0];\n const e = (f >> 23) & 0x1ff;\n return _tables.baseTable[e] + ((f & 0x007fffff) >> _tables.shiftTable[e]);\n}\n\n// float16 to float32\nexport function fromHalfFloat(val: number): number {\n const m = val >> 10;\n _tables.uint32View[0] =\n _tables.mantissaTable[_tables.offsetTable[m] + (val & 0x3ff)] +\n _tables.exponentTable[m];\n return _tables.floatView[0];\n}\n","/**\n * throttle 节流\n * ms 毫秒内只运行一次,若在 ms 毫秒内重复触发,只有一次生效\n */\nexport function throttle(fn: (...args: any[]) => any, ms: number) {\n let ready = true;\n return function (this: any, ...args: any[]) {\n if (!ready) {\n return;\n }\n ready = false;\n fn.apply(this, args);\n setTimeout(() => {\n ready = true;\n }, ms);\n };\n}\n\n/**\n * debounce 防抖\n * ms 毫秒后再执行该事件,若在 ms 毫秒内被重复触发,则重新计时\n * debounce 的问题在于它“太有耐心了”\n * 试想,如果用户的操作十分频繁——他每次都不等 debounce 设置的 delay 时间结束就进行下一次操作,\n * 于是每次 debounce 都为该用户重新生成定时器,回调函数被延迟了不计其数次。\n * 频繁的延迟会导致用户迟迟得不到响应,用户同样会产生“这个页面卡死了”的观感。\n */\nexport function debounce(fn: (...args: any[]) => any, ms: number) {\n let timer: ReturnType<typeof setTimeout>;\n return function (this: any, ...args: any[]) {\n clearTimeout(timer);\n timer = setTimeout(() => {\n fn.apply(this, args);\n }, ms);\n };\n}\n\n/// 用 Throttle 来优化 Debounce\nexport function debounceBetter(fn: (...args: any[]) => any, ms: number) {\n let last = +new Date();\n let timer: ReturnType<typeof setTimeout>;\n return function (this: any, ...args: any[]) {\n const now = +new Date();\n if (now - last < ms) {\n // 如果时间间隔小于我们设定的时间间隔阈值,则为本次触发操作设立一个新的定时器\n clearTimeout(timer);\n timer = setTimeout(() => {\n last = now;\n fn.apply(this, args);\n }, ms);\n } else {\n // 如果时间间隔超出了我们设定的时间间隔阈值,那就不等了,无论如何要反馈给用户一次响应\n clearTimeout(timer);\n last = now;\n fn.apply(this, args);\n }\n };\n}\n","import { unaryFn, variadicFn } from \"./type_symbol\";\n\nexport const noop = () => {};\nexport const identity = <T = any>(v: T) => v;\nexport const konst =\n <T = any>(v: T) =>\n () =>\n v;\nexport const kTrue = konst<true>(true);\nexport const kFalse = konst<false>(false);\n\n// 柯里化\nexport function curry(fn: variadicFn, ...args: any[]) {\n const length = fn.length; // fn 的参数个数\n args = args || [];\n return function (this: any, ...otherArgs: any[]) {\n const totalArgs = args.concat(Array.prototype.slice.call(otherArgs));\n if (totalArgs.length < length) {\n return curry.call(this, fn, ...totalArgs);\n } else {\n return fn.apply(this, totalArgs);\n }\n };\n}\n\n// 组合\n// compose(f, g, h) = (...args) => f(g(h(...args)))\nexport function compose(...fns: variadicFn[]): variadicFn {\n if (fns.length === 0) {\n return (...args: any[]) => args;\n }\n if (fns.length === 1) {\n return fns[0];\n }\n return fns.reduce(\n (a, b) =>\n (...args) =>\n a(b(...args))\n );\n}\n\n// 串联 | 管道\n// pip(f, g, h) = (...args) => h(g(f(...args)))\nexport const pipe = (...fns: variadicFn[]): variadicFn => {\n if (fns.length === 0) {\n return (...args: any[]) => args;\n }\n if (fns.length === 1) {\n return fns[0];\n }\n return fns.reduceRight(\n (a, b) =>\n (...args) =>\n a(b(...args))\n );\n};\n\n// 异步串联\n/**\n * const addA = (value, next) => {\n * next(value + 'A', 'a');\n * };\n * const addB = (value, anotherValue, next) => {\n * console.log(anotherValue); // => a\n * next(value + 'B');\n * };\n * const consoleLog = (value, next) => {\n * console.log(value);\n * };\n * pipeNext(addA, addB, consoleLog)('1'); // 1AB\n */\nexport const pipeNext = (...fns: variadicFn[]): variadicFn => {\n if (fns.length === 0) {\n return (...args: any[]) => args;\n }\n if (fns.length === 1) {\n return fns[0];\n }\n return fns.reduceRight(\n (next, fn) =>\n (...args) =>\n fn(...args, next),\n noop\n );\n};\n\n/**\n * @description 蹦床函数,循环调用返回函数的函数,将递归执行转为循环执行,适用于没有尾递归优化的环境\n *\n * 原递归函数\n * function sum(x, y) {\n * if (y > 0) {\n * return sum( x + 1, y - 1);\n * } else {\n * return x;\n * }\n * }\n * 改造后的递归函数,返回函数\n * function sum(x, y) {\n * if (y > 0) {\n * return sum.bind(null, x + 1, y - 1); // 这里是返回一个函数,而不是函数里面调用函数,从而避免递归执行\n * } else {\n * return x;\n * }\n * }\n * trampoline(sum(1,1000000));\n */\nexport function trampoline(f: variadicFn) {\n while (f && f instanceof Function) {\n f = f();\n }\n return f;\n}\n\n/**\n * @description 尾递归优化\n *\n * const sum = tco(function(x, y) {\n * \t if (y > 0) {\n * \t return sum(x + 1, y - 1)\n * \t }\n * \t else {\n * \t return x\n * \t }\n * \t});\n * \tsum(1, 100000)\t// 100001\n */\nexport function tco(f: variadicFn) {\n let value: any;\n let active = false;\n const accumulated: any[] = [];\n return function accumulator(this: any, ...args: any) {\n accumulated.push(args); // 第二次及以后只push参数\n // 避免递归执行: 只第一次执行,递归转为循环\n if (!active) {\n active = true;\n while (accumulated.length) {\n value = f.apply(this, accumulated.shift());\n }\n active = false;\n return value;\n }\n };\n}\n\n/**\n * 缓存函数结果\n */\nexport function memoize(f: variadicFn) {\n const cache: Record<string, any> = {};\n return function (this: any, ...args: any[]) {\n const str = JSON.stringify(args);\n cache[str] = cache[str] || f.apply(this, args);\n return cache[str];\n };\n}\n\n/**\n * 函数参数反转\n */\nexport function reverseArgs(fn: variadicFn) {\n return function (this: any, ...args: any[]) {\n return fn.apply(this, args.reverse());\n };\n}\n\nexport function once(fn: variadicFn) {\n let called = false;\n return function (this: any, ...args: any[]) {\n if (called) {\n return;\n }\n called = true;\n return fn.apply(this, args);\n };\n}\n\nexport function conditional(\n ifFn: variadicFn,\n thenFn: variadicFn,\n elseFn: variadicFn\n) {\n return function (this: any, ...args: any[]) {\n return ifFn.apply(this, args)\n ? thenFn.apply(this, args)\n : elseFn.apply(this, args);\n };\n}\n\nexport function tryCatch(tryer: variadicFn, catcher: unaryFn) {\n return function (this: any, ...args: any[]) {\n try {\n return tryer.apply(this, args);\n } catch (e: any) {\n return catcher.apply(this, e);\n }\n };\n}\n\n// 函数式编程调试, trace不是纯函数\nexport function trace(tag: string) {\n return (x: any) => {\n console.log(tag, x);\n return x;\n };\n}\n\nexport function transformUnaryArg(\n fn: unaryFn,\n transform: (v: any) => any\n): unaryFn {\n return function (this: any, arg: any) {\n return fn.call(this, transform(arg));\n };\n}\n\nexport const map =\n <T = any>(fn: (v: T, i?: number, a?: T[]) => any) =>\n (arr: T[]) =>\n arr.map(fn);\n\nexport const reduce =\n <T = any>(fn: (p: T, c: T, i?: number, a?: T[]) => any) =>\n (arr: T[], init?: any) =>\n arr.reduce(fn, init);\n\n// export const add = (x: number) => (y: number) => x + y;\n// export const minus = (x: number) => (y: number) => x - y;\n// export const multiply = (x: number) => (y: number) => x * y;\n// export const divide = (x: number) => (y: number) => x / y;\n\ndeclare global {\n interface Array<T> {\n ap: (args: any[]) => any[];\n }\n}\n// const arg1 = [1, 3];\n// const arg2 = [4, 5];\n// const partiallyAppliedAdds = [add].ap(arg1); // [(y) => 1 + y, (y) => 3 + y]\n// partiallyAppliedAdds.ap(arg2); // [5, 6, 7, 8]\nArray.prototype.ap = function (args: any[]) {\n return this.reduce((acc, fn) => acc.concat(args.map(fn)), []);\n};\n","/* eslint-disable prefer-rest-params */\nimport { Iterator, Generator, variadicFn, Thunk } from \"./type_symbol\";\nimport { isPromise, isGenerator, isIterator, isPlainObject } from \"./object\";\n\n// function* gen() {\n// try {\n// yield xxx;\n// yield* anotherGen;\n// } catch (e) {\n// console.log(\"内部捕获\", e);\n// }\n// }\n// const i = gen();\n// i.next();\n// try {\n// i.throw(\"a\"); // 内部捕获\n// i.throw(\"b\"); // 外部捕获\n// } catch (e) {\n// console.log(\"外部捕获\", e);\n// }\n\n// - Generator运行:惰性求值(Lazy Evaluation)\n// \t- 1. 遇到 yield 表达式,就暂停执行,并将紧跟在 yield 后面的那个表达式的值,作为返回的 iterator.value\n// \t- 2. 下一次调用 next 方法时,再恢复执行,直到遇到下一个 yield 表达式\n// \t\t- next 方法可以带一个参数,该参数就会被当作上一个 yield 表达式的返回值。\n// \t\t- 如果 next 方法未带参数,上一个 yield 表达式的返回值为 undefined\n// \t- 3. 如果没有再遇到新的 yield 表达式,就一直运行到函数结束,直到 return 语句为止,并将 return 语句后面的表达式的值,作为返回的对象的 value 属性值,此时返回的对象的 done 属性值为 true\n// \t\t- 如果该函数没有return语句,则返回的对象的 value 属性值为 undefined\n\n// 如果 Generator 函数内部没有 try...catch 代码块,那么 throw 方法抛出的错误,将被外部 try...catch 代码块捕获\n// 如果 Generator 函数内部和外部,都没有 try...catch 代码块,那么程序将报错,直接中断执行\n// throw()方法抛出的错误要被内部捕获,前提是必须至少执行过一次 next 方法。否则不会被内部捕获\n// throw()方法被捕获以后,会附带执行下一条 yield 表达式。也就是说,会附带执行一次 next 方法。\n// 一旦 Generator 执行过程中抛出错误,且没有被内部捕获,就不会再执行下去了。如果此后还调用 next 方法,将返回一个 value 属性等于 undefined、done 等于 true 的对象\n\n// Generator 函数可以作为异步编程的完整解决方案是因为:函数体内外的数据交换和错误处理机制。\n// 一个线程(或函数)执行到一半,可以暂停执行,将执行权交给另一个线程(或函数),等到稍后收回执行权的时候,再恢复执行。\n// 这种可以并行执行、交换执行权的线程(或函数),就称为协程\n// Generator 函数是 ES6 对协程的实现,但属于不完全实现。Generator 函数被称为“半协程”(semi-coroutine),\n// 意思是只有 Generator 函数的调用者,才能将程序的执行权还给 Generator 函数。如果是完全执行的协程,任何函数都可以让暂停的协程继续执行\n\n// function* main() {\n// var result = yield request(\"http://some.url\");\n// var resp = JSON.parse(result);\n// console.log(resp.value);\n// }\n// function request(url) {\n// makeAjaxCall(url, function (response) {\n// it.next(response);\n// });\n// }\n// var it = main();\n// it.next();\n\n// async + await\n// async 就是 Generator 函数的语法糖,就是将 Generator 函数的星号* 替换成 async,将 yield 替换成 await\n// - 1. 内置执行器\n// \t- Generator 函数的执行必须靠执行器,所以才有了co模块,而 async 函数自带执行器。也就是说,async 函数的执行,与普通函数一模一样。\n// - 2. 更好的语义\n// \t- async 和 await,比起 星号 和 yield,语义更清楚了。async 表示函数里有异步操作,await 表示紧跟在后面的表达式需要等待结果。\n// - 3. 更广的适用性\n// \t- co模块约定,yield 命令后面只能是 Thunk 函数或 Promise 对象,而 async 函数的 await 命令后面,可以是 Promise 对象和原始类型的值(数值、字符串和布尔值,但这时会自动转成立即 resolved 的 Promise 对象)。\n// - 4. 返回值是 Promise\n// \t- async 函数的返回值是 Promise 对象,这比 Generator 函数的返回值是 Iterator 对象方便多了。你可以用 then 方法指定下一步的操作。\n// \t- 进一步说,async 函数完全可以看作多个异步操作,包装成的一个 Promise 对象,而 await 命令就是内部 then 命令的语法糖。\n\nexport type Deferred<T = any> = {\n resolve: (value: T | PromiseLike<T>) => void;\n reject: (reason?: any) => void;\n promise: Promise<T>;\n};\nexport function deferred<T = any>(): Deferred<T> {\n const def: any = {};\n def.promise = new Promise<T>((resolve, reject) => {\n def.resolve = resolve;\n def.reject = reject;\n });\n return def as Deferred<T>;\n}\n\nexport function arrayOfDeferred(length: number) {\n const arr = [];\n for (let i = 0; i < length; i++) {\n arr.push(deferred());\n }\n return arr;\n}\n\nexport function runSyncGenerator(gen: Generator) {\n const i = gen();\n let result = i.next();\n while (!result.done) {\n result = i.next(result.value);\n }\n}\n\nexport function runAsyncGeneratorValueThunk(gen: Generator) {\n const i = gen();\n // thunk函数签名\n function run(err?: any, data?: any) {\n if (err) {\n return i.throw?.(err);\n }\n const result = i.next(data);\n if (result.done) {\n return;\n }\n // result.value 就是 thunk函数,异步完成后将执行权交还\n result.value(run);\n }\n run();\n}\n\nexport function runAsyncGeneratorValuePromise(gen: Generator) {\n const i = gen();\n function run(data?: any) {\n const result = i.next(data);\n if (result.done) {\n return result.value;\n }\n // result.value 就是 Promise对象,异步完成后将执行权交还\n result.value.then(run).catch(i?.throw);\n }\n run();\n}\n\n/**\n * 将多参数函数替换成一个只接受 Thunk回调函数 作为参数的单参数函数\n * fn(args1, args2, ... , callback) = thunkify(fn)(args1, args2, ... )(callback)\n */\nexport function thunkify(this: any, fn: variadicFn) {\n const ctx = this;\n return (...rest: any[]) =>\n // Thunk函数签名\n (callback: (err?: any, data?: any) => void) => {\n let called: boolean;\n try {\n fn.apply(ctx, [\n ...rest,\n (err?: any, data?: any) => {\n if (called) {\n return;\n }\n called = true;\n // 原fn的callback参数过多\n if (arguments.length > 2) {\n data = Array.prototype.slice.call(arguments, 1);\n callback(err, ...data);\n } else {\n callback(err, data);\n }\n }\n ]);\n } catch (err) {\n callback(err);\n }\n };\n}\n\n/// Convert a `yield`ed value into a promise\nexport function toPromise(this: any, obj: any): any {\n if (!obj) {\n return obj;\n }\n if (isPromise(obj)) {\n return obj;\n }\n if (isGenerator(obj) || isIterator(obj)) {\n return co.call(this, obj);\n }\n if (\"function\" == typeof obj) {\n return thunkToPromise.call(this, obj);\n }\n if (Array.isArray(obj)) {\n return arrayToPromise.call(this, obj);\n }\n if (isPlainObject(obj)) {\n return objectToPromise.call(this, obj);\n }\n return obj;\n}\n\nfunction thunkToPromise(this: any, thunk: Thunk) {\n const ctx = this;\n return new Promise(function (resolve, reject) {\n thunk.call(ctx, function (err?: any, res?: any) {\n if (err) {\n return reject(err);\n }\n if (arguments.length > 2) {\n res = Array.prototype.slice.call(arguments, 1);\n }\n resolve(res);\n });\n });\n}\n\nfunction arrayToPromise(this: any, obj: any[]) {\n return Promise.all(obj.map(toPromise, this));\n}\n\nfunction objectToPromise(this: any, obj: any) {\n const results = new obj.constructor();\n const keys = Object.keys(obj);\n const promises: Promise<any>[] = [];\n for (let i = 0, c = keys.length; i < c; i++) {\n const key = keys[i];\n const promise = toPromise.call(this, obj[key]);\n if (promise && isPromise(promise)) {\n results[key] = undefined;\n promises.push(\n promise.then(function (res: any) {\n results[key] = res;\n })\n );\n } else {\n results[key] = obj[key];\n }\n }\n return Promise.all(promises).then(function () {\n return results;\n });\n}\n\nexport function co(this: any, gen: Generator | Iterator): Promise<any> {\n const ctx = this;\n const args = Array.prototype.slice.call(arguments, 1);\n\n // we wrap everything in a promise to avoid promise chaining,\n // which leads to memory leak errors.\n // see https://github.com/tj/co/issues/180\n return new Promise(function (resolve, reject) {\n const iterator = isIterator(gen)\n ? (gen as Iterator)\n : (gen as Generator).apply(ctx, args);\n\n if (typeof iterator.next !== \"function\") {\n return resolve(iterator);\n }\n\n onFulfilled();\n\n function onFulfilled(res?: any) {\n let ret;\n try {\n ret = iterator.next(res);\n } catch (e) {\n return reject(e);\n }\n next(ret);\n }\n\n function onRejected(err?: any) {\n let ret;\n try {\n ret = iterator.throw?.(err);\n } catch (e) {\n return reject(e);\n }\n next(ret);\n }\n\n function next(ret?: any) {\n if (ret.done) {\n return resolve(ret.value);\n }\n const value = toPromise.call(ctx, ret.value);\n if (value && isPromise(value)) {\n return value.then(onFulfilled, onRejected);\n }\n return onRejected(\n new TypeError(\n \"You may only yield a function, promise, generator, array, or object, \" +\n 'but the following object was passed: \"' +\n String(ret.value) +\n '\"'\n )\n );\n }\n });\n}\n\n/// Promise\nlet _nativePromise;\ntry {\n _nativePromise = Promise;\n} catch (_) {\n // UNDO mock Promise\n _nativePromise = function () {};\n}\nexport const nativePromise = _nativePromise;\n\nexport const cancelablePromise = (promise: Promise<any>) => {\n let isCanceled = false;\n return {\n promise: new Promise((resolve, reject) => {\n promise.then(\n (value) =>\n isCanceled ? reject({ isCanceled: true, value }) : resolve(value),\n (error) => reject({ isCanceled: isCanceled, error })\n );\n }),\n cancel: () => (isCanceled = true)\n };\n};\n\nexport function timeoutLimitPromise(promise: Promise<any>, timeout: number) {\n let timeoutHandle: ReturnType<typeof setTimeout>;\n return Promise.race([\n promise,\n new Promise((resolve, reject) => {\n timeoutHandle = setTimeout(() => reject(new Error(\"Timeout\")), timeout);\n })\n ])\n .then((data) => {\n clearTimeout(timeoutHandle);\n return data;\n })\n .catch((e) => {\n clearTimeout(timeoutHandle);\n return e;\n });\n}\n\nexport function chainPromise(promises: Promise<any>[]) {\n let result: any = null;\n let p = Promise.resolve();\n for (const _p of promises) {\n p = p.then((val) => {\n result = val;\n return _p;\n });\n }\n return p\n .catch((e) => {\n /* 忽略错误,继续执行 */\n })\n .then(() => {\n return result;\n });\n}\n\nconst MAX_SIGNED_INT = 2147483647;\n\n/// await delayAsync(300)\nexport function delayAsync(ms: number) {\n return new Promise<void>((resolve) => {\n setTimeout(resolve, Math.min(MAX_SIGNED_INT, ms));\n });\n}\n\nexport function delaySync(ms: number) {\n ms = Math.min(MAX_SIGNED_INT, ms);\n let flag = true;\n const now = Date.now();\n while (flag) {\n if (Date.now() - now > ms) {\n flag = false;\n }\n }\n}\n","// import '@zyzgroup/core-web/dist/theme.css'\n\n// import '@zyzgroup/core-web/dist/rem_750.css'\n// import { setRem } from \"@zyzgroup/core-web\";\n// setRem(750);\n\nimport { clamp, maxDotNumber } from \"@zyzgroup/core-common\";\n\nconst styleDeclaration = getComputedStyle(document.documentElement);\n\nexport function getCSSVar(name: string) {\n return styleDeclaration.getPropertyValue(name);\n}\n\nexport function setCSSVar(name: string, value: string) {\n document.documentElement.style.setProperty(name, value);\n styleDeclaration.setProperty(name, value);\n}\n\nexport const theme: Record<string, string> = {\n safeAreaTop: getCSSVar(\"--safe-area-inset-top\"),\n safeAreaRight: getCSSVar(\"--safe-area-inset-right\"),\n safeAreaBottom: getCSSVar(\"--safe-area-inset-bottom\"),\n safeAreaLeft: getCSSVar(\"--safe-area-inset-left\"),\n\n colorPrimary: getCSSVar(\"--color-primary\") || \"#5078f0\",\n colorRed: getCSSVar(\"--color-red\") || \"#ff5050\",\n colorOrange: getCSSVar(\"--color-orange\") || \"#fa8c00\",\n colorYellow: getCSSVar(\"--color-yellow\") || \"#fadc32\",\n colorGreen: getCSSVar(\"--color-green\") || \"#00c878\",\n colorBlue: getCSSVar(\"--color-blue\") || \"#00b4fa\",\n colorPurple: getCSSVar(\"--color-purple\") || \"#6464fa\",\n colorBlack: getCSSVar(\"--color-black\") || \"#001428\",\n\n colorGray00: getCSSVar(\"--color-gray-00\") || \"#000000\",\n colorGray33: getCSSVar(\"--color-gray-33\") || \"#333333\",\n colorGray66: getCSSVar(\"--color-gray-66\") || \"#666666\",\n colorGray99: getCSSVar(\"--color-gray-99\") || \"#999999\",\n colorGrayCC: getCSSVar(\"--color-gray-cc\") || \"#cccccc\",\n colorGrayDD: getCSSVar(\"--color-gray-dd\") || \"#dddddd\",\n colorGrayE6: getCSSVar(\"--color-gray-e6\") || \"#e6e6e6\",\n colorGrayEE: getCSSVar(\"--color-gray-ee\") || \"#eeeeee\",\n colorGrayEF: getCSSVar(\"--color-gray-ef\") || \"#efefef\",\n colorGrayF5: getCSSVar(\"--color-gray-f5\") || \"#f5f5f5\",\n colorGrayFF: getCSSVar(\"--color-gray-ff\") || \"#ffffff\",\n\n fontLineHeight: getCSSVar(\"--font-line-height\") || \"1.4\",\n\n fontSize32: getCSSVar(\"--font-size-32\") || \"32px\",\n fontSize24: getCSSVar(\"--font-size-24\") || \"24px\",\n fontSize22: getCSSVar(\"--font-size-22\") || \"22px\",\n fontSize20: getCSSVar(\"--font-size-20\") || \"20px\",\n fontSize18: getCSSVar(\"--font-size-18\") || \"18px\",\n fontSize16: getCSSVar(\"--font-size-16\") || \"16px\",\n fontSize14: getCSSVar(\"--font-size-14\") || \"14px\",\n fontSize12: getCSSVar(\"--font-size-12\") || \"12px\",\n fontSize10: getCSSVar(\"--font-size-10\") || \"10px\",\n\n d4: getCSSVar(\"--distance-4\") || \"4px\", /// borderRadius\n d8: getCSSVar(\"--distance-8\") || \"8px\",\n d12: getCSSVar(\"--distance-12\") || \"12px\",\n d16: getCSSVar(\"--distance-16\") || \"16px\",\n d20: getCSSVar(\"--distance-20\") || \"20px\",\n d32: getCSSVar(\"--distance-32\") || \"32px\",\n d40: getCSSVar(\"--distance-40\") || \"40px\",\n d44: getCSSVar(\"--distance-44\") || \"44px\" /// button-height\n};\nexport default theme;\n\nexport class Color {\n private __color = {\n r: 0, // 0 - 255\n g: 0, // 0 - 255\n b: 0, // 0 - 255\n a: 1 // 0 - 1\n };\n\n constructor(color?: any, forceAlpha?: number) {\n if (color) {\n this.setColor(color);\n }\n if (typeof forceAlpha === \"number\") {\n this.setAlpha(forceAlpha);\n }\n }\n\n get color() {\n return this.__color;\n }\n set color(color: any) {\n this.__color = parseColor(color);\n }\n setColor(color: any) {\n this.color = color;\n return this;\n }\n\n get r() {\n return this.__color.r;\n }\n set r(v: number) {\n this.__color.r = clamp(Math.round(v), 0, 255);\n }\n\n get g() {\n return this.__color.g;\n }\n set g(v: number) {\n this.__color.g = clamp(Math.round(v), 0, 255);\n }\n\n get b() {\n return this.__color.b;\n }\n set b(v: number) {\n this.__color.b = clamp(Math.round(v), 0, 255);\n }\n\n get a() {\n return this.__color.a;\n }\n set a(a: number) {\n this.__color.a = clamp(a, 0, 1);\n }\n setAlpha(a: number) {\n this.a = a;\n return this;\n }\n\n setRGB(r: number, g: number, b: number) {\n this.r = r;\n this.g = g;\n this.b = b;\n return this;\n }\n setRGBA(r: number, g: number, b: number, a: number) {\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n return this;\n }\n\n get hex() {\n const hex = (this.r << 16) + (this.g << 8) + this.b;\n // if (this.a !== 1) {\n // hex += Math.round(this.a * 255) << 24;\n // }\n // if (this.a !== 1) {\n // hex <<= 8;\n // hex += Math.round(this.a * 255);\n // }\n return hex;\n }\n\n toString() {\n if (this.a === 1) {\n const str = \"000000\" + this.hex.toString(16);\n return \"#\" + str.slice(str.length - 6);\n } else {\n return `rgba(${this.r},${this.g},${this.b},${maxDotNumber(this.a, 6)})`;\n }\n }\n\n clone(): Color {\n return new Color(this.color);\n }\n\n copy(c: Color) {\n this.setColor(c.color);\n }\n\n opposite(\n bw = false, // whether to invert to black or white\n blackColor = \"#000000\",\n whiteColor = \"#ffffff\"\n ): Color {\n if (bw) {\n // https://stackoverflow.com/a/3943023/112731\n return new Color(\n this.r * 0.299 + this.g * 0.587 + this.b * 0.114 > 186\n ? blackColor\n : whiteColor\n );\n } else {\n const c = this.clone();\n c.r = 255 - c.r;\n c.g = 255 - c.g;\n c.b = 255 - c.b;\n // c.a = 1 - c.a;\n return c;\n }\n }\n\n /// t: 0 ~ 1\n lighten(t: number): Color {\n t = clamp(Math.abs(t), 0, 1);\n let { r, g, b } = this.color;\n r += (255 - r) * t;\n g += (255 - g) * t;\n b += (255 - b) * t;\n return new Color().setRGBA(r, g, b, this.color.a);\n }\n\n /// t: 0 ~ 1\n darken(t: number): Color {\n t = clamp(Math.abs(t), 0, 1);\n let { r, g, b } = this.color;\n r = r * (1 - t);\n g = g * (1 - t);\n b = b * (1 - t);\n return new Color().setRGBA(r, g, b, this.color.a);\n }\n\n // 渐变色\n static gradient(\n startColor: string,\n endColor: string,\n t: number // 0 - 1\n ): Color {\n try {\n const s = parseColor(startColor);\n const e = parseColor(endColor);\n return new Color().setRGB(\n (e.r - s.r) * t + s.r,\n (e.g - s.g) * t + s.g,\n (e.b - s.b) * t + s.b\n );\n // .setAlpha((e.a - s.a) * t + s.a);\n } catch (e) {\n return new Color(endColor);\n }\n }\n\n static random(): Color {\n return new Color(Math.random() * 0xffffff);\n }\n\n get hsv() {\n const { r, g, b, a } = this.color;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let h;\n if (r === max) {\n h = (g - b) / delta;\n } else if (g === max) {\n h = 2 + (b - r) / delta;\n } else {\n h = 4 + (r - g) / delta;\n }\n h /= 6;\n if (h < 0) {\n h += 1;\n }\n return {\n h: delta == 0 ? 0 : h * 360,\n s: max === 0 ? 0 : delta / max,\n v: max / 255,\n a\n };\n }\n\n set h(h: number) {\n const hsv = this.hsv;\n hsv.h = clamp(h, 0, 360);\n this.setColor(hsv);\n }\n get h() {\n return this.hsv.h;\n }\n\n set s(s: number) {\n const hsv = this.hsv;\n hsv.s = clamp(s, 0, 1);\n this.setColor(hsv);\n }\n get s() {\n return this.hsv.s;\n }\n\n set v(v: number) {\n const hsv = this.hsv;\n hsv.v = clamp(v, 0, 1);\n this.setColor(hsv);\n }\n get v() {\n return this.hsv.v;\n }\n}\n\nexport function color(color?: any, forceAlpha?: number): Color {\n return new Color(color, forceAlpha);\n}\n\nfunction parseColor(color: any): {\n r: number; // 0 - 255\n g: number; // 0 - 255\n b: number; // 0 - 255\n a: number; // 0 - 1\n} {\n const a = Object.prototype.hasOwnProperty.call(color, \"a\")\n ? clamp(color.a, 0, 1)\n : 1;\n /// rgb(a)\n if (\n Object.prototype.hasOwnProperty.call(color, \"r\") &&\n Object.prototype.hasOwnProperty.call(color, \"g\") &&\n Object.prototype.hasOwnProperty.call(color, \"b\")\n ) {\n color.r = clamp(Math.round(color.r), 0, 255);\n color.g = clamp(Math.round(color.g), 0, 255);\n color.b = clamp(Math.round(color.b), 0, 255);\n color.a = a;\n return color;\n }\n /// hsv(a) / hsb(a) : hue 色相 + saturation 饱和度 + value or brightness 明度\n /// UNDO hsl(a) : hue 色相 + saturation 饱和度 + lightness luminosity 亮度\n if (\n Object.prototype.hasOwnProperty.call(color, \"h\") &&\n Object.prototype.hasOwnProperty.call(color, \"s\") &&\n Object.prototype.hasOwnProperty.call(color, \"v\")\n ) {\n const h = clamp(color.h, 0, 360);\n const s = clamp(color.s, 0, 1);\n const v = clamp(color.v, 0, 1);\n const hi = Math.floor(h / 60) % 6;\n const f = h / 60 - Math.floor(h / 60);\n const p = v * (1.0 - s);\n const q = v * (1.0 - f * s);\n const t = v * (1.0 - (1.0 - f) * s);\n const c = [\n [v, t, p],\n [q, v, p],\n [p, v, t],\n [p, q, v],\n [t, p, v],\n [v, p, q]\n ][hi];\n return {\n r: Math.round(c[0] * 255),\n g: Math.round(c[1] * 255),\n b: Math.round(c[2] * 255),\n a: a\n };\n }\n const result = {\n r: 0,\n g: 0,\n b: 0,\n a: a\n };\n if (typeof color === \"number\") {\n /// RRGGBB(AA)\n if (color < Math.pow(2, 24)) {\n result.r = (color >> 16) & 0xff;\n result.g = (color >> 8) & 0xff;\n result.b = color & 0xff;\n } else {\n result.r = (color >> 24) & 0xff;\n result.g = (color >> 16) & 0xff;\n result.b = (color >> 8) & 0xff;\n result.a = (color & 0xff) / 255;\n }\n } else if (typeof color === \"string\") {\n /// rgba(r,g,b,a)\n const matches =\n /rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,?\\s*(\\d?\\.?\\d*)?\\s*\\)/gi.exec(\n color\n );\n if (matches) {\n result.r = parseInt(matches[1]);\n result.g = parseInt(matches[2]);\n result.b = parseInt(matches[3]);\n if (matches[4]) {\n result.a = parseFloat(matches[4]);\n }\n } else {\n let matches = color.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);\n if (matches) {\n /// #RGB\n result.r = parseInt(`${matches[1]}${matches[1]}`, 16);\n result.g = parseInt(`${matches[2]}${matches[2]}`, 16);\n result.b = parseInt(`${matches[3]}${matches[3]}`, 16);\n } else {\n matches = color.match(/^#([A-F0-9]{2})([A-F0-9]{2})([A-F0-9]{2})$/i);\n if (matches) {\n /// #RRGGBB\n result.r = parseInt(matches[1], 16);\n result.g = parseInt(matches[2], 16);\n result.b = parseInt(matches[3], 16);\n } else {\n matches = color.match(\n /^#([A-F0-9]{2})([A-F0-9]{2})([A-F0-9]{2})([A-F0-9]{2})$/i\n );\n if (matches) {\n /// #RRGGBBAA\n result.r = parseInt(matches[1], 16);\n result.g = parseInt(matches[2], 16);\n result.b = parseInt(matches[3], 16);\n result.a = parseInt(matches[4], 16) / 255;\n } else {\n if (color === \"none\") {\n result.a = 0;\n } else {\n /// 其他 string 为 默认值\n }\n }\n }\n }\n }\n } else {\n throw new Error(\"parseColor 不支持的颜色解析:\" + color);\n }\n result.r = clamp(result.r, 0, 255);\n result.g = clamp(result.g, 0, 255);\n result.b = clamp(result.b, 0, 255);\n result.a = clamp(result.a, 0, 1);\n return result;\n}\n\nexport const NormalColors = [\n \"#0ac2d2\",\n \"#7bb7fa\",\n \"#60d7a9\",\n \"#fdc162\",\n \"#fd6a62\",\n \"#f68dbb\",\n \"#26ccff\",\n \"#a25afd\",\n \"#ff5e7e\",\n \"#88ff5a\",\n \"#fcff42\",\n \"#ffa62d\",\n \"#ff36ff\",\n \"#dc4916\",\n \"#6871b1\",\n \"#d1b935\",\n \"#1bbc9b\",\n \"#FF7F50\",\n \"#4BBFC3\",\n \"#ff9900\"\n];\n\nexport const ControlsColorPattern = {\n backgroundColor: \"#1a1a1a\",\n numberColor: \"#2FA1D6\",\n booleanColor: \"#806787\",\n stringColor: \"#1ed36f\",\n functionColor: \"#e61d5f\",\n saveRowColor: \"#dad5cb\",\n buttonColor: \"\",\n borderColor: \"\",\n inputColor: \"\"\n};\nControlsColorPattern.buttonColor = new Color(ControlsColorPattern.saveRowColor)\n .darken(0.1)\n .toString();\nControlsColorPattern.borderColor = new Color(\n ControlsColorPattern.backgroundColor\n)\n .lighten(0.07)\n .toString();\nControlsColorPattern.inputColor = new Color(\n ControlsColorPattern.backgroundColor\n)\n .lighten(0.085)\n .toString();\n","// import { isAndroid } from \"./env\";\n\nexport function setRem(designWidth) {\n // 修正页面高度100%的渲染错误\n // document.documentElement.style.height = window.innerHeight + \"px\";\n\n const docEl = document.documentElement;\n\n // const dpr = isAndroid()\n // ? 1\n // : window.top === window.self\n // ? window.devicePixelRatio\n // : 1;\n const dpr = window.top === window.self ? window.devicePixelRatio : 1;\n docEl.dataset.dpr = dpr;\n\n // 设置viewport,进行缩放,达到高清效果\n // const metaEl = document.querySelector('meta[name=\"viewport\"]');\n // const scale = 1 / dpr;\n // metaEl.setAttribute(\n // \"content\",\n // \"width=device-width\" +\n // \",initial-scale=\" +\n // scale +\n // \",maximum-scale=\" +\n // scale +\n // \", minimum-scale=\" +\n // scale +\n // \",user-scalable=no, viewport-fit=cover, shrink-to-fit=no\"\n // );\n\n // default: 1rem = 100px\n let rem = 100;\n const recalc = function () {\n // let clientWidth = docEl.clientWidth;\n // // 限制最大rem\n // if (clientWidth > maxWidth) {\n // clientWidth = maxWidth;\n // }\n // // 限制最小rem\n // if (clientWidth < minWidth) {\n // clientWidth = minWidth;\n // }\n const clientWidth = Math.min(docEl.clientWidth, designWidth);\n docEl.dataset.width = clientWidth;\n docEl.dataset.rem = rem = Math.round(100 * (clientWidth / designWidth));\n // 配合:设置viewport,进行缩放,达到高清效果\n // docEl.dataset.rem = rem =\n // Math.round(100 * (clientWidth / designWidth)) * dpr;\n docEl.style.fontSize = rem + \"px\";\n };\n\n recalc();\n\n // 给js调用的,某一dpr下rem和px之间的转换函数\n window.rem2px = function (v) {\n v = parseFloat(v);\n return v * rem;\n };\n window.px2rem = function (v) {\n v = parseFloat(v);\n return v / rem;\n };\n\n if (!window.addEventListener) {\n return;\n }\n window.addEventListener(\n \"orientationchange\" in window ? \"orientationchange\" : \"resize\",\n recalc,\n false\n );\n}\n","<script setup lang=\"ts\">\n// https://icon-sets.iconify.design/\n\n// SUCCESS\n// import IconAccessibility from \"~icons/carbon/accessibility\";\n// <icon-accessibility />\n// import IconAccountBox from \"~icons/mdi/account-box\";\n// <icon-account-box style=\"font-size: 2em; color: red\" />\n\n// import { ChevronUpDownIcon } from \"@heroicons/vue/24/solid\";\n\n// UNSUCCESS : 使用 unplugin-icons 和 unplugin-auto-import 从 iconify 中自动导入任何图标集\n// in Vite\n// pnpm i unplugin-icons --save-dev\n// pnpm i unplugin-vue-component --save-dev\n// pnpm i @iconify/json --save-dev\n// pnpm i @iconify-json/mdi --save-dev\n// <icon-carbon-accessibility />\n// <icon-mdi-account-box style=\"font-size: 2em; color: red\" />\n\nimport { Icon } from \"@iconify/vue\";\nimport { theme } from \"@zyzgroup/core-web\";\n\nconst props = withDefaults(\n defineProps<{\n icon?: string;\n color?: string;\n }>(),\n { icon: \"mdi-light:home\", color: theme.colorPrimary }\n);\n</script>\n\n<template>\n <span\n class=\"icon\"\n :style=\"['color: ' + color]\"\n >\n <Icon\n :icon=\"props.icon\"\n :color=\"color\"\n />\n </span>\n</template>\n\n<style scoped>\n.icon {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n font-size: 1em;\n}\n</style>\n","<script setup lang=\"tsx\">\nimport { theme } from \"@zyzgroup/core-web\";\n\nconst props = withDefaults(\n defineProps<{\n color?: string;\n width?: string;\n }>(),\n {\n color: theme.colorPrimary,\n width: \"0.8em\"\n }\n);\n</script>\n\n<template>\n <div\n class=\"loading-11\"\n ref=\"loading11\"\n >\n <div\n class=\"loading-11-inner\"\n :style=\"{ width: props.width, height: props.width }\"\n >\n <div class=\"container container-1\">\n <div\n class=\"dot dot-1\"\n :style=\"{ backgroundColor: props.color }\"\n ></div>\n <div\n class=\"dot dot-2\"\n :style=\"{ backgroundColor: props.color }\"\n ></div>\n <div\n class=\"dot dot-3\"\n :style=\"{ backgroundColor: props.color }\"\n ></div>\n <div\n class=\"dot dot-4\"\n :style=\"{ backgroundColor: props.color }\"\n ></div>\n </div>\n <div class=\"container container-2\">\n <div\n class=\"dot dot-1\"\n :style=\"{ backgroundColor: props.color }\"\n ></div>\n <div\n class=\"dot dot-2\"\n :style=\"{ backgroundColor: props.color }\"\n ></div>\n <div\n class=\"dot dot-3\"\n :style=\"{ backgroundColor: props.color }\"\n ></div>\n <div\n class=\"dot dot-4\"\n :style=\"{ backgroundColor: props.color }\"\n ></div>\n </div>\n <div class=\"container container-3\">\n <div\n class=\"dot dot-1\"\n :style=\"{ backgroundColor: props.color }\"\n ></div>\n <div\n class=\"dot dot-2\"\n :style=\"{ backgroundColor: props.color }\"\n ></div>\n <div\n class=\"dot dot-3\"\n :style=\"{ backgroundColor: props.color }\"\n ></div>\n <div\n class=\"dot dot-4\"\n :style=\"{ backgroundColor: props.color }\"\n ></div>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.loading-11 {\n position: relative;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n}\n.loading-11-inner {\n position: relative;\n}\n.loading-11-inner .container {\n position: absolute;\n width: 100%;\n height: 100%;\n}\n.loading-11-inner .container .dot {\n width: 20%;\n height: 20%;\n border-radius: 100%;\n position: absolute;\n animation: bouncedelay 1.2s infinite ease-in-out;\n animation-fill-mode: both;\n}\n.loading-11-inner .container .dot-1 {\n top: 0;\n left: 0;\n}\n.loading-11-inner .container .dot-2 {\n top: 0;\n right: 0;\n}\n.loading-11-inner .container .dot-3 {\n right: 0;\n bottom: 0;\n}\n.loading-11-inner .container .dot-4 {\n left: 0;\n bottom: 0;\n}\n.loading-11-inner .container-1 .dot-2 {\n animation-delay: -0.9s;\n}\n.loading-11-inner .container-1 .dot-3 {\n animation-delay: -0.6s;\n}\n.loading-11-inner .container-1 .dot-4 {\n animation-delay: -0.3s;\n}\n.loading-11-inner .container-2 {\n transform: rotateZ(45deg);\n}\n.loading-11-inner .container-2 .dot-1 {\n animation-delay: -1.1s;\n}\n.loading-11-inner .container-2 .dot-2 {\n animation-delay: -0.8s;\n}\n.loading-11-inner .container-2 .dot-3 {\n animation-delay: -0.5s;\n}\n.loading-11-inner .container-2 .dot-4 {\n animation-delay: -0.2s;\n}\n.loading-11-inner .container-3 {\n transform: rotateZ(90deg);\n}\n.loading-11-inner .container-3 .dot-1 {\n animation-delay: -1s;\n}\n.loading-11-inner .container-3 .dot-2 {\n animation-delay: -0.7s;\n}\n.loading-11-inner .container-3 .dot-3 {\n animation-delay: -0.4s;\n}\n.loading-11-inner .container-3 .dot-4 {\n animation-delay: -0.1s;\n}\n@keyframes bouncedelay {\n 0%,\n 80%,\n 100% {\n transform: scale(0.3);\n }\n 40% {\n transform: scale(1);\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ref, watch } from \"vue\";\nimport Icon from \"./Icon.vue\";\nimport { throttle } from \"@zyzgroup/core-common\";\nimport { color, theme } from \"@zyzgroup/core-web\";\nimport Loading11 from \"./loading/Loading11.vue\";\n\n// for merge ce shadow-root styles\ndefineOptions({\n customOptions: { Loading11 },\n inheritAttrs: true\n});\n\nconst props = withDefaults(\n defineProps<{\n label?: string;\n icon?: string;\n iconPosition?: string;\n disabled?: boolean;\n height?: string;\n padding?: string;\n fontSize?: string;\n borderRadius?: string;\n\n stylePattern?: \"fullfilled\" | \"outline\";\n borderColor?: string;\n bgColor?: string;\n fontColor?: string;\n\n asyncClick?: () => Promise<void>;\n }>(),\n {\n iconPosition: \"left\",\n disabled: false,\n height: \"44px\",\n padding: \"20px\",\n fontSize: \"14px\",\n borderRadius: \"4px\",\n stylePattern: \"fullfilled\"\n }\n);\n\nconst emits = defineEmits<{\n // for ce element\n (event: \"yz-click\"): void;\n (event: \"click\"): void;\n}>();\n\n// 父组件ref子Button组件时:xxx.value.el.getBoundingClientRect()\nconst el = ref<HTMLElement>();\n\nconst borderColor = ref(props.borderColor);\nconst bgColor = ref(props.bgColor);\nconst fontColor = ref(props.fontColor);\n\nconst baseBorderColor = ref(props.borderColor);\nconst baseBgColor = ref(props.bgColor);\n\nfunction changeStylePattern(stylePattern: string) {\n switch (stylePattern) {\n case \"outline\":\n borderColor.value = props.borderColor ?? theme.colorPrimary;\n bgColor.value = props.bgColor ?? theme.colorGrayFF;\n fontColor.value = props.fontColor ?? theme.colorPrimary;\n\n baseBorderColor.value = borderColor.value;\n baseBgColor.value = bgColor.value;\n break;\n case \"fullfilled\":\n default:\n borderColor.value = props.borderColor ?? theme.colorPrimary;\n bgColor.value = props.bgColor ?? theme.colorPrimary;\n fontColor.value = props.fontColor ?? theme.colorGrayFF;\n\n baseBorderColor.value = borderColor.value;\n baseBgColor.value = bgColor.value;\n break;\n }\n}\nwatch(\n () => props.stylePattern,\n () => {\n changeStylePattern(props.stylePattern);\n },\n { immediate: true }\n);\n\nconst opacity = ref(props.disabled ? \"0.6\" : \"1\");\nconst cursor = ref(props.disabled ? \"not-allowed\" : \"pointer\");\n\nlet isMouseOver = false;\nconst mouseover = () => {\n if (props.disabled) return;\n isMouseOver = true;\n borderColor.value = color(baseBorderColor.value!).lighten(0.05).toString();\n bgColor.value = color(baseBgColor.value!).lighten(0.05).toString();\n};\n\nconst mouseleave = () => {\n if (props.disabled) return;\n isMouseOver = false;\n borderColor.value = baseBorderColor.value;\n bgColor.value = baseBgColor.value;\n};\n\nconst asyncClickResultPending = ref(false);\nconst click = () => {\n if (props.disabled || asyncClickResultPending.value) {\n return;\n }\n borderColor.value = color(baseBorderColor.value!).darken(0.05).toString();\n bgColor.value = color(baseBgColor.value!).darken(0.05).toString();\n setTimeout(() => {\n if (isMouseOver) {\n mouseover();\n } else {\n mouseleave();\n }\n }, 150);\n emits(\"yz-click\");\n emits(\"click\");\n if (props.asyncClick) {\n asyncClickResultPending.value = true;\n props\n .asyncClick()\n .then(() => {\n asyncClickResultPending.value = false;\n })\n .catch(() => {\n asyncClickResultPending.value = false;\n });\n }\n};\n\nconst throttleClick = throttle(click, 500);\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div\n ref=\"el\"\n class=\"button\"\n :style=\"[\n `opacity: ${opacity}`,\n `border: 1px solid ${borderColor}`,\n `background-color: ${bgColor}`,\n `color: ${fontColor}`,\n `border-radius: ${props.borderRadius}`,\n `height: ${props.height}`,\n `line-height: ${props.height}`,\n `font-size: ${props.fontSize}`,\n `cursor: ${cursor}`,\n `user-select: none`\n ]\"\n @mouseover=\"mouseover\"\n @mouseleave=\"mouseleave\"\n @click=\"throttleClick\"\n >\n <label\n class=\"label truncate\"\n :style=\"{\n padding: '0 ' + padding,\n cursor: cursor\n }\"\n >\n <div\n v-if=\"asyncClickResultPending\"\n class=\"loading\"\n >\n <Loading11 :color=\"fontColor\"></Loading11>\n </div>\n <slot>\n <Icon\n v-if=\"icon && iconPosition === 'left'\"\n :icon=\"icon\"\n :color=\"fontColor\"\n :style=\"{\n marginRight: theme.d4,\n cursor: cursor\n }\"\n ></Icon>\n <span\n :style=\"{\n cursor: cursor\n }\"\n >\n {{ label }}\n </span>\n <Icon\n v-if=\"icon && iconPosition === 'right'\"\n :icon=\"icon\"\n :color=\"fontColor\"\n :style=\"{\n marginLeft: theme.d4,\n cursor: cursor\n }\"\n ></Icon>\n </slot>\n </label>\n </div>\n</template>\n\n<!--\n ce 中不要使用v-bind\n border: 1px solid v-bind(borderColor);\n background-color: v-bind(bgColor);\n color: v-bind(fontColor);\n-->\n<style scoped>\n.button {\n box-sizing: border-box;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n z-index: 0;\n}\n.label {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n}\n.loading {\n margin-right: 6px;\n}\n</style>\n","<script setup lang=\"ts\">\nimport \"@zyzgroup/core-web/dist/rem_750.css\";\nimport { setRem } from \"@zyzgroup/core-web\";\n\n// for merge ce shadow-root styles\ndefineOptions({\n customOptions: {},\n inheritAttrs: true\n});\n\nconst props = withDefaults(\n defineProps<{\n designWidth?: number;\n }>(),\n {\n designWidth: 750\n }\n);\n\n// import(\n// /* @vite-ignore */ `@zyzgroup/core-web/dist/rem_${props.designWidth}.css`\n// );\nsetRem(props.designWidth);\n\nconst emits = defineEmits<{\n // (event: \"close\"): void;\n}>();\n\ndefineExpose({});\n</script>\n\n<template>\n <div class=\"page\">\n <header class=\"header\">\n <slot name=\"header\"></slot>\n </header>\n\n <div class=\"main\">\n <div class=\"main-scroll\">\n <slot name=\"main\"></slot>\n </div>\n </div>\n\n <footer class=\"footer\">\n <slot name=\"footer\"></slot>\n </footer>\n </div>\n</template>\n\n<style scoped>\n.page {\n width: 100%;\n height: 100%;\n position: relative;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n.main {\n flex: 1 1 auto;\n width: 100%;\n overflow-y: scroll;\n display: flex;\n flex-direction: column;\n}\n.main-scroll {\n flex: 1 1 auto;\n width: 100%;\n}\n.main-scroll > :nth-child(1) {\n min-height: 100%;\n}\n.header {\n flex: 0 0 auto;\n}\n.footer {\n flex: 0 0 auto;\n}\n</style>\n"],"names":["getInstance","getCurrentInstance","getVNode","component","props","createVNode","renderComponent","options","vNode","render","useVueEffect","effect","remove","onMounted","onUnmounted","useVueRouter","routes","router","createRouter","createWebHistory","_to","_from","savedPosition","next","location","path","name","route","INCREMENT","DECREMENT","INCREMENTACTION","useVuex","useStore","useVuexStates","moduleName","keyMaps","mapFn","mapState","createNamespacedHelpers","useVuexMap","useVuexGetters","mapGetters","useVuexMutations","mapMutations","useVuexActions","mapActions","keys","store","maps","mappedKeyFns","key","fn","computed","matchIconName","stringToIcon","value","validate","allowSimpleName","provider","colonSeparated","name2","prefix","result","validateIconName","dashSeparated","icon","defaultIconDimensions","defaultIconTransformations","defaultIconProps","defaultExtendedIconProps","mergeIconTransformations","obj1","obj2","rotate","mergeIconData","parent","child","getIconsTree","data","names","icons","aliases","resolved","resolve","internalGetIconData","tree","currentProps","parse","parseIconSet","callback","item","optionalPropertyDefaults","checkOptionalProps","defaults","prop","quicklyValidateIconSet","obj","dataStorage","newStorage","getStorage","providerStorage","addIconSet","storage","addIconToStorage","simpleNames","allowSimpleNames","allow","getIconData","iconName","addIcon","addCollection","added","defaultIconSizeCustomisations","defaultIconCustomisations","unitsSplit","unitsTest","calculateSize","size","ratio","precision","oldParts","newParts","code","isNumber","num","splitSVGDefs","content","tag","defs","index","start","end","endEnd","mergeDefsAndContent","wrapSVGContent","body","split","isUnsetKeyword","iconToSVG","customisations","fullIcon","fullCustomisations","box","transformations","hFlip","vFlip","rotation","tempValue","customisationsWidth","customisationsHeight","boxWidth","boxHeight","width","height","attributes","setAttr","viewBox","regex","randomPrefix","counter","replaceIDs","ids","match","suffix","id","newID","escapedID","setAPIModule","getAPIModule","createAPIConfig","source","resources","configStorage","fallBackAPISources","fallBackAPI","addAPIProvider","customConfig","config","getAPIConfig","fetchModule","calculateMaxLength","maxHostLength","url","shouldAbort","status","prepare","results","maxLength","type","length","getPath","fetchAPIModule","host","params","iconsList","urlParams","uri","defaultError","response","sortIcons","a","b","lastIcon","localStorage","list","removeCallback","storages","items","row","updateCallbacks","hasPending","oldLength","idCounter","storeCallback","pendingSources","abort","listToIcons","defaultConfig","sendQuery","payload","query","done","resourcesCount","startIndex","nextIndex","startTime","queriesSent","lastError","timer","queue","doneCallbacks","resetTimer","subscribe","overwrite","getQueryStatus","failQuery","clearQueue","moduleResponse","isError","queued","execNext","resource","status2","initRedundancy","cfg","queries","cleanup","queryCallback","doneCallback","query2","error","find","emptyCallback$1","redundancyCache","getRedundancyCache","redundancy","cachedReundancy","sendAPIQuery","target","send","api","cached","moduleKey","browserCacheVersion","browserCachePrefix","browserCacheCountKey","browserCacheVersionKey","browserStorageHour","browserStorageCacheExpiration","browserStorageLimit","getStoredItem","func","setStoredItem","removeStoredItem","setBrowserStorageItemsCount","getBrowserStorageItemsCount","browserStorageConfig","browserStorageEmptyItems","browserStorageStatus","setBrowserStorageStatus","_window","getBrowserStorage","attr","iterateBrowserStorage","version","total2","minTime","parseItem","total","i","initBrowserStorage","iconSet","lastModified","updateLastModified","lastValue","storeInBrowserStorage","set","emptyCallback","loadedNewIcons","loadNewIcons","icons2","parsed","pending","err","loadIcons","cleanedIcons","sortedIcons","callCallback","newIcons","sources","lastProvider","lastPrefix","providerNewIcons","pendingQueue","mergeCustomisations","valueType","separator","flipFromString","custom","flip","str","rotateFromString","defaultValue","units","value2","iconToHTML","renderAttribsHTML","encodeSVGforURL","svg","svgToData","svgToURL","defaultExtendedIconCustomisations","svgDefaults","commonProps","monotoneProps","coloredProps","propsToAdd","propsToAddTo","customisationAliases","fixSize","componentProps","mode","style","propsStyle","customStyle","alias","renderAttribs","localCounter","h","useMask","html","preload","providers","emptyIcon","Icon","defineComponent","onload","classes","newProps","_nativeMap","_nativeSet","parseNumber","clamp","x","min","max","fixedDotNumberString","maxDotNumber","_generateTables","buffer","floatView","uint32View","baseTable","shiftTable","e","mantissaTable","exponentTable","offsetTable","m","throttle","ms","ready","args","acc","_nativePromise","styleDeclaration","getCSSVar","theme","Color","color","forceAlpha","parseColor","v","r","g","c","bw","blackColor","whiteColor","startColor","endColor","t","s","delta","hsv","hi","f","p","q","matches","ControlsColorPattern","setRem","designWidth","docEl","dpr","rem","recalc","clientWidth","__props","emits","__emit","el","ref","borderColor","bgColor","fontColor","baseBorderColor","baseBgColor","changeStylePattern","stylePattern","watch","opacity","cursor","isMouseOver","mouseover","mouseleave","asyncClickResultPending","throttleClick","__expose"],"mappings":"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","x_google_ignoreList":[4]}
|
|
1
|
+
{"version":3,"file":"zyzgroup_core_vue.umd.cjs","sources":["../src/hooks/useVue.ts","../src/hooks/useVueEffect.ts","../src/hooks/useVueRouter.ts","../src/hooks/useVuex/useVuex.ts","../../../node_modules/.pnpm/@iconify+vue@4.1.2_vue@3.5.13_typescript@5.2.2_/node_modules/@iconify/vue/dist/iconify.mjs","../../core-common/src/env.ts","../../core-common/src/map.ts","../../core-common/src/set.ts","../../core-common/src/number.ts","../../core-common/src/event_control.ts","../../core-common/src/EventBus.ts","../../core-common/src/fp.ts","../../core-common/src/reactive.ts","../../core-common/src/async.ts","../../core-web/src/hooks/useEventListener.ts","../../core-web/src/hooks/useEmit.ts","../../core-web/src/hooks/useWindow.ts","../../core-web/src/env.js","../../core-web/src/hooks/useStyle.ts","../../core-web/src/hooks/useSafeArea.ts","../../core-web/src/theme.ts","../../core-web/src/rem.js","../src/components/Icon.vue","../src/components/loading/Loading11.vue","../src/components/Button.vue","../src/components/layout/LayoutMobile.vue","../src/components/xg/Footer.vue"],"sourcesContent":["import {\n AppContext,\n VNode,\n createVNode,\n render,\n getCurrentInstance,\n VNodeProps,\n Component,\n // ComponentPublicInstance,\n ComponentInternalInstance\n} from \"vue\";\n\nexport function getInstance(): ComponentInternalInstance | null {\n return getCurrentInstance();\n}\n\nexport interface CommonComponentProps extends VNodeProps {\n [index: string]: any;\n}\n\nexport function getVNode<T extends Component>(\n component: T,\n props?: CommonComponentProps\n): VNode {\n const vNode = createVNode(component, props);\n // const vm: ComponentPublicInstance<CommonComponentProps> | null | undefined =\n // vNode.component?.proxy;\n // if (vm) {\n // for (const prop in props) {\n // if (Reflect.has(props, prop) && !Reflect.has(vm.$props, prop)) {\n // vm[prop as keyof ComponentPublicInstance] = props[prop];\n // }\n // }\n // }\n return vNode;\n}\n\nexport function renderComponent<T extends Component>(options: {\n component: T;\n props?: CommonComponentProps;\n appContext?: AppContext;\n selfContainer: HTMLElement;\n parentContainer?: HTMLElement;\n}) {\n const vNode = getVNode(options.component, options.props);\n if (options.appContext) {\n vNode.appContext = options.appContext;\n }\n render(vNode, options.selfContainer);\n options.parentContainer?.appendChild(options.selfContainer);\n}\n\n// export interface EnhancedComponentOptions extends VNodeProps {\n// [key: string]: any;\n// }\n// export function enhanceComponent<T extends Component>(\n// component: T\n// ): (options: EnhancedComponentOptions) => VNode {\n// const container = document.createElement(\"div\");\n// return (options: EnhancedComponentOptions): VNode => {\n// const vNode = renderComponent<T>({\n// Component: component,\n// props: options,\n// selfContainer: container,\n// appContext: getCurrentInstance()?.appContext\n// });\n// const vm = vNode.component\n// ?.proxy as ComponentPublicInstance<EnhancedComponentOptions>;\n// for (const prop in options) {\n// if (Reflect.has(options, prop) && !Reflect.has(vm.$props, prop)) {\n// vm[prop as keyof ComponentPublicInstance] = options[prop];\n// }\n// }\n// return vNode;\n// };\n// }\n","import { onMounted, onUnmounted } from \"vue\";\n\nexport function useVueEffect(effect: () => () => void) {\n let remove: () => void;\n onMounted(() => {\n remove = effect();\n });\n onUnmounted(() => {\n remove?.();\n });\n}\n","import {\n // RouterLink,\n // RouterView,\n // useRouter,\n createRouter,\n createWebHistory,\n // createWebHashHistory,\n // type Router,\n type RouteRecordRaw,\n type RouteRecordNormalized,\n type RouteLocationNormalized,\n type NavigationGuardNext,\n type RouteLocationRaw\n} from \"vue-router\";\n\n// <RouterLink to=\"/\">Home</RouterLink>\n// <RouterLink to=\"/about\">About</RouterLink>\n// <RouterView />\n\n// const router: Router = useRouter();\n\nexport function useVueRouter(routes: RouteRecordRaw[]) {\n const router = createRouter({\n history: createWebHistory(import.meta.env.BASE_URL),\n routes,\n // [\n // {\n // path: \"/\",\n // redirect: \"/showcase\"\n // },\n // {\n // path: \"/\",\n // path: \"/demo/:demoid\",\n // name: \"home\",\n // component: HomeView,\n // // router level code-splitting\n // // this generates a separate chunk (About.[hash].js) for this router\n // // which is lazy-loaded when the router is visited.\n // component: () => import(\"../views/AboutView.vue\"),\n // meta: {},\n // children: [\n // { path: \"\", name: \"default\", redirect: \"/demo/sub1\" },\n // {\n // path: \"sub1\",\n // name: \"sub1\",\n // component: () => import(\"@/src/views/sub1.vue\")\n // }\n // ]\n // },\n // {\n // path: \"/:pathMatch(.*)*\",\n // name: \"404\",\n // component: Page404\n // }\n // ]\n scrollBehavior: (_to, _from, savedPosition) => {\n // 这个功能只在支持 history.pushState 的浏览器中可用\n if (savedPosition) {\n return savedPosition;\n } else {\n return { left: 0, top: 0 };\n }\n }\n });\n\n // 路由导航守卫\n router.beforeEach(\n (\n _to: RouteLocationNormalized,\n _from: RouteLocationNormalized,\n next: NavigationGuardNext\n ) => {\n // console.log(\"to:\", to.fullPath, \"from:\", from.fullPath);\n // if (to.path.indexOf(\"/about\") != -1) return \"/404\";\n // else return;\n next();\n }\n );\n\n return {\n router,\n\n push: async (location: RouteLocationRaw) => {\n await router.push(location);\n },\n\n // {\n // name: Name;\n // path: Path;\n // paramsRaw: ParamsRaw;\n // params: Params;\n // meta: Meta;\n // }\n to: function (this: any, path: string) {\n this.push({ path });\n },\n\n // 动态注册路由\n // const remove = addRoute(\"demo\", {\n // path: \"sub2\",\n // name: \"sub2\",\n // component: () => import(\"@/src/views/sub2.vue\")\n // });\n // remove();\n addRoute: (name: string, route: RouteRecordRaw): (() => void) => {\n return router.addRoute(name, route);\n },\n\n removeRoute: (name: string) => {\n router.removeRoute(name);\n },\n\n hasRoute: (name: string): boolean => {\n return router.hasRoute(name);\n },\n\n getRoutes: (): RouteRecordNormalized[] => {\n return router.getRoutes();\n },\n\n getCurrentRoute: () => {\n return {\n params: router.currentRoute.value.params,\n query: router.currentRoute.value.query\n };\n }\n };\n}\n","import { computed } from \"vue\";\nimport {\n useStore,\n createNamespacedHelpers,\n mapState,\n mapGetters,\n mapMutations,\n mapActions\n} from \"vuex\";\n\n/// STATE TYPES\nexport type VuexState = VuexRootState & {\n demo: VuexDemoState;\n};\nexport interface VuexRootState {\n count: number;\n}\nexport interface VuexDemoState {\n name: string;\n}\n/// MUTATION TYPES\nexport const INCREMENT = \"increment\";\nexport const DECREMENT = \"decrement\";\n/// ACTION TYPES\nexport const INCREMENTACTION = \"incrementAction\";\n\nexport function useVuex() {\n const store = useStore<VuexState>();\n return {\n store\n // state: store.state\n\n // ...useVuexStates([\"count\"]),\n // ...useVuexStates(\"demo\", [\"name\"]),\n\n // ...useVuexGetters({ totaln: \"totaln\" }),\n // ...useVuexGetters(\"demo\", [\"nameFormat\"]),\n\n // ...useVuexMutations({\n // [INCREMENT]: INCREMENT,\n // [DECREMENT]: DECREMENT\n // }),\n // ...useVuexMutations(\"demo\", [\"changeName\"]),\n\n // ...useVuexActions({\n // [INCREMENTACTION]: INCREMENTACTION\n // }),\n // ...useVuexActions(\"demo\", [\"changeNameAction\"])\n\n // {{ state.count }}\n // {{ state.demo.name }}\n // {{ store.getters.totalCount }}\n // {{ store.getters.totaln(2) }}\n // {{ totaln(3) }}\n // {{ store.getters[\"demo/nameFormat\"] }}\n };\n}\n\n// ...mapState([\"count\"]);\n// ...mapState({ count: state => state.count });\nexport function useVuexStates(\n keyMaps: Record<string, string> | string[]\n): Record<string, any>;\nexport function useVuexStates(\n moduleName: string,\n keyMaps: Record<string, string> | string[]\n): Record<string, any>;\nexport function useVuexStates(\n moduleName: string | Record<string, string> | string[],\n keyMaps?: Record<string, string> | string[]\n): Record<string, any> {\n let mapFn = mapState;\n if (typeof moduleName == \"string\" && moduleName.length > 0) {\n mapFn = createNamespacedHelpers(moduleName).mapState;\n } else {\n keyMaps = moduleName as Record<string, string> | string[];\n }\n return useVuexMap(keyMaps!, mapFn);\n}\n\n// ...mapGetters([\"totaln\"]);\n// ...mapGetters({ totalnAnother: \"totaln\" });\nexport function useVuexGetters(\n keyMaps: Record<string, string> | string[]\n): Record<string, any>;\nexport function useVuexGetters(\n moduleName: string,\n keyMaps: Record<string, string> | string[]\n): Record<string, any>;\nexport function useVuexGetters(\n moduleName: string | Record<string, string> | string[],\n keyMaps?: Record<string, string> | string[]\n): Record<string, any> {\n let mapFn = mapGetters;\n if (typeof moduleName == \"string\" && moduleName.length > 0) {\n mapFn = createNamespacedHelpers(moduleName).mapGetters;\n } else {\n keyMaps = moduleName as Record<string, string> | string[];\n }\n return useVuexMap(keyMaps!, mapFn);\n}\n\n// ...mapMutations([INCREMENT]);\n// ...mapMutations({ inc: INCREMENT });\nexport function useVuexMutations(\n keyMaps: Record<string, string> | string[]\n): Record<string, any>;\nexport function useVuexMutations(\n moduleName: string,\n keyMaps: Record<string, string> | string[]\n): Record<string, any>;\nexport function useVuexMutations(\n moduleName: string | Record<string, string> | string[],\n keyMaps?: Record<string, string> | string[]\n): Record<string, any> {\n let mapFn = mapMutations;\n if (typeof moduleName == \"string\" && moduleName.length > 0) {\n mapFn = createNamespacedHelpers(moduleName).mapMutations;\n } else {\n keyMaps = moduleName as Record<string, string> | string[];\n }\n if (Array.isArray(keyMaps)) {\n return mapFn(keyMaps!);\n } else {\n return mapFn(keyMaps!);\n }\n}\n\n// ...mapActions([INCREMENTACTION]);\n// ...mapActions({ inca: INCREMENTACTION });\nexport function useVuexActions(\n keyMaps: Record<string, string> | string[]\n): Record<string, any>;\nexport function useVuexActions(\n moduleName: string,\n keyMaps: Record<string, string> | string[]\n): Record<string, any>;\nexport function useVuexActions(\n moduleName: string | Record<string, string> | string[],\n keyMaps?: Record<string, string> | string[]\n): Record<string, any> {\n let mapFn = mapActions;\n if (typeof moduleName == \"string\" && moduleName.length > 0) {\n mapFn = createNamespacedHelpers(moduleName).mapActions;\n } else {\n keyMaps = moduleName as Record<string, string> | string[];\n }\n if (Array.isArray(keyMaps)) {\n return mapFn(keyMaps!);\n } else {\n return mapFn(keyMaps!);\n }\n}\n\nfunction useVuexMap(\n keys: Record<string, string> | string[],\n mapFn: any\n): Record<string, any> {\n const store = useStore();\n const maps: Record<string, any> = {};\n const mappedKeyFns = mapFn(keys);\n Object.keys(mappedKeyFns).forEach((key) => {\n const fn = mappedKeyFns[key].bind({ $store: store });\n maps[key] = computed(fn);\n });\n return maps;\n}\n","import { h, defineComponent } from 'vue';\n\nconst matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;\nconst stringToIcon = (value, validate, allowSimpleName, provider = \"\") => {\n const colonSeparated = value.split(\":\");\n if (value.slice(0, 1) === \"@\") {\n if (colonSeparated.length < 2 || colonSeparated.length > 3) {\n return null;\n }\n provider = colonSeparated.shift().slice(1);\n }\n if (colonSeparated.length > 3 || !colonSeparated.length) {\n return null;\n }\n if (colonSeparated.length > 1) {\n const name2 = colonSeparated.pop();\n const prefix = colonSeparated.pop();\n const result = {\n // Allow provider without '@': \"provider:prefix:name\"\n provider: colonSeparated.length > 0 ? colonSeparated[0] : provider,\n prefix,\n name: name2\n };\n return validate && !validateIconName(result) ? null : result;\n }\n const name = colonSeparated[0];\n const dashSeparated = name.split(\"-\");\n if (dashSeparated.length > 1) {\n const result = {\n provider,\n prefix: dashSeparated.shift(),\n name: dashSeparated.join(\"-\")\n };\n return validate && !validateIconName(result) ? null : result;\n }\n if (allowSimpleName && provider === \"\") {\n const result = {\n provider,\n prefix: \"\",\n name\n };\n return validate && !validateIconName(result, allowSimpleName) ? null : result;\n }\n return null;\n};\nconst validateIconName = (icon, allowSimpleName) => {\n if (!icon) {\n return false;\n }\n return !!((icon.provider === \"\" || icon.provider.match(matchIconName)) && (allowSimpleName && icon.prefix === \"\" || icon.prefix.match(matchIconName)) && icon.name.match(matchIconName));\n};\n\nconst defaultIconDimensions = Object.freeze(\n {\n left: 0,\n top: 0,\n width: 16,\n height: 16\n }\n);\nconst defaultIconTransformations = Object.freeze({\n rotate: 0,\n vFlip: false,\n hFlip: false\n});\nconst defaultIconProps = Object.freeze({\n ...defaultIconDimensions,\n ...defaultIconTransformations\n});\nconst defaultExtendedIconProps = Object.freeze({\n ...defaultIconProps,\n body: \"\",\n hidden: false\n});\n\nfunction mergeIconTransformations(obj1, obj2) {\n const result = {};\n if (!obj1.hFlip !== !obj2.hFlip) {\n result.hFlip = true;\n }\n if (!obj1.vFlip !== !obj2.vFlip) {\n result.vFlip = true;\n }\n const rotate = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4;\n if (rotate) {\n result.rotate = rotate;\n }\n return result;\n}\n\nfunction mergeIconData(parent, child) {\n const result = mergeIconTransformations(parent, child);\n for (const key in defaultExtendedIconProps) {\n if (key in defaultIconTransformations) {\n if (key in parent && !(key in result)) {\n result[key] = defaultIconTransformations[key];\n }\n } else if (key in child) {\n result[key] = child[key];\n } else if (key in parent) {\n result[key] = parent[key];\n }\n }\n return result;\n}\n\nfunction getIconsTree(data, names) {\n const icons = data.icons;\n const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n const resolved = /* @__PURE__ */ Object.create(null);\n function resolve(name) {\n if (icons[name]) {\n return resolved[name] = [];\n }\n if (!(name in resolved)) {\n resolved[name] = null;\n const parent = aliases[name] && aliases[name].parent;\n const value = parent && resolve(parent);\n if (value) {\n resolved[name] = [parent].concat(value);\n }\n }\n return resolved[name];\n }\n (names || Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve);\n return resolved;\n}\n\nfunction internalGetIconData(data, name, tree) {\n const icons = data.icons;\n const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n let currentProps = {};\n function parse(name2) {\n currentProps = mergeIconData(\n icons[name2] || aliases[name2],\n currentProps\n );\n }\n parse(name);\n tree.forEach(parse);\n return mergeIconData(data, currentProps);\n}\n\nfunction parseIconSet(data, callback) {\n const names = [];\n if (typeof data !== \"object\" || typeof data.icons !== \"object\") {\n return names;\n }\n if (data.not_found instanceof Array) {\n data.not_found.forEach((name) => {\n callback(name, null);\n names.push(name);\n });\n }\n const tree = getIconsTree(data);\n for (const name in tree) {\n const item = tree[name];\n if (item) {\n callback(name, internalGetIconData(data, name, item));\n names.push(name);\n }\n }\n return names;\n}\n\nconst optionalPropertyDefaults = {\n provider: \"\",\n aliases: {},\n not_found: {},\n ...defaultIconDimensions\n};\nfunction checkOptionalProps(item, defaults) {\n for (const prop in defaults) {\n if (prop in item && typeof item[prop] !== typeof defaults[prop]) {\n return false;\n }\n }\n return true;\n}\nfunction quicklyValidateIconSet(obj) {\n if (typeof obj !== \"object\" || obj === null) {\n return null;\n }\n const data = obj;\n if (typeof data.prefix !== \"string\" || !obj.icons || typeof obj.icons !== \"object\") {\n return null;\n }\n if (!checkOptionalProps(obj, optionalPropertyDefaults)) {\n return null;\n }\n const icons = data.icons;\n for (const name in icons) {\n const icon = icons[name];\n if (!name.match(matchIconName) || typeof icon.body !== \"string\" || !checkOptionalProps(\n icon,\n defaultExtendedIconProps\n )) {\n return null;\n }\n }\n const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n for (const name in aliases) {\n const icon = aliases[name];\n const parent = icon.parent;\n if (!name.match(matchIconName) || typeof parent !== \"string\" || !icons[parent] && !aliases[parent] || !checkOptionalProps(\n icon,\n defaultExtendedIconProps\n )) {\n return null;\n }\n }\n return data;\n}\n\nconst dataStorage = /* @__PURE__ */ Object.create(null);\nfunction newStorage(provider, prefix) {\n return {\n provider,\n prefix,\n icons: /* @__PURE__ */ Object.create(null),\n missing: /* @__PURE__ */ new Set()\n };\n}\nfunction getStorage(provider, prefix) {\n const providerStorage = dataStorage[provider] || (dataStorage[provider] = /* @__PURE__ */ Object.create(null));\n return providerStorage[prefix] || (providerStorage[prefix] = newStorage(provider, prefix));\n}\nfunction addIconSet(storage, data) {\n if (!quicklyValidateIconSet(data)) {\n return [];\n }\n return parseIconSet(data, (name, icon) => {\n if (icon) {\n storage.icons[name] = icon;\n } else {\n storage.missing.add(name);\n }\n });\n}\nfunction addIconToStorage(storage, name, icon) {\n try {\n if (typeof icon.body === \"string\") {\n storage.icons[name] = { ...icon };\n return true;\n }\n } catch (err) {\n }\n return false;\n}\nfunction listIcons(provider, prefix) {\n let allIcons = [];\n const providers = typeof provider === \"string\" ? [provider] : Object.keys(dataStorage);\n providers.forEach((provider2) => {\n const prefixes = typeof provider2 === \"string\" && typeof prefix === \"string\" ? [prefix] : Object.keys(dataStorage[provider2] || {});\n prefixes.forEach((prefix2) => {\n const storage = getStorage(provider2, prefix2);\n allIcons = allIcons.concat(\n Object.keys(storage.icons).map(\n (name) => (provider2 !== \"\" ? \"@\" + provider2 + \":\" : \"\") + prefix2 + \":\" + name\n )\n );\n });\n });\n return allIcons;\n}\n\nlet simpleNames = false;\nfunction allowSimpleNames(allow) {\n if (typeof allow === \"boolean\") {\n simpleNames = allow;\n }\n return simpleNames;\n}\nfunction getIconData(name) {\n const icon = typeof name === \"string\" ? stringToIcon(name, true, simpleNames) : name;\n if (icon) {\n const storage = getStorage(icon.provider, icon.prefix);\n const iconName = icon.name;\n return storage.icons[iconName] || (storage.missing.has(iconName) ? null : void 0);\n }\n}\nfunction addIcon(name, data) {\n const icon = stringToIcon(name, true, simpleNames);\n if (!icon) {\n return false;\n }\n const storage = getStorage(icon.provider, icon.prefix);\n return addIconToStorage(storage, icon.name, data);\n}\nfunction addCollection(data, provider) {\n if (typeof data !== \"object\") {\n return false;\n }\n if (typeof provider !== \"string\") {\n provider = data.provider || \"\";\n }\n if (simpleNames && !provider && !data.prefix) {\n let added = false;\n if (quicklyValidateIconSet(data)) {\n data.prefix = \"\";\n parseIconSet(data, (name, icon) => {\n if (icon && addIcon(name, icon)) {\n added = true;\n }\n });\n }\n return added;\n }\n const prefix = data.prefix;\n if (!validateIconName({\n provider,\n prefix,\n name: \"a\"\n })) {\n return false;\n }\n const storage = getStorage(provider, prefix);\n return !!addIconSet(storage, data);\n}\nfunction iconLoaded(name) {\n return !!getIconData(name);\n}\nfunction getIcon(name) {\n const result = getIconData(name);\n return result ? {\n ...defaultIconProps,\n ...result\n } : null;\n}\n\nconst defaultIconSizeCustomisations = Object.freeze({\n width: null,\n height: null\n});\nconst defaultIconCustomisations = Object.freeze({\n // Dimensions\n ...defaultIconSizeCustomisations,\n // Transformations\n ...defaultIconTransformations\n});\n\nconst unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;\nconst unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;\nfunction calculateSize(size, ratio, precision) {\n if (ratio === 1) {\n return size;\n }\n precision = precision || 100;\n if (typeof size === \"number\") {\n return Math.ceil(size * ratio * precision) / precision;\n }\n if (typeof size !== \"string\") {\n return size;\n }\n const oldParts = size.split(unitsSplit);\n if (oldParts === null || !oldParts.length) {\n return size;\n }\n const newParts = [];\n let code = oldParts.shift();\n let isNumber = unitsTest.test(code);\n while (true) {\n if (isNumber) {\n const num = parseFloat(code);\n if (isNaN(num)) {\n newParts.push(code);\n } else {\n newParts.push(Math.ceil(num * ratio * precision) / precision);\n }\n } else {\n newParts.push(code);\n }\n code = oldParts.shift();\n if (code === void 0) {\n return newParts.join(\"\");\n }\n isNumber = !isNumber;\n }\n}\n\nfunction splitSVGDefs(content, tag = \"defs\") {\n let defs = \"\";\n const index = content.indexOf(\"<\" + tag);\n while (index >= 0) {\n const start = content.indexOf(\">\", index);\n const end = content.indexOf(\"</\" + tag);\n if (start === -1 || end === -1) {\n break;\n }\n const endEnd = content.indexOf(\">\", end);\n if (endEnd === -1) {\n break;\n }\n defs += content.slice(start + 1, end).trim();\n content = content.slice(0, index).trim() + content.slice(endEnd + 1);\n }\n return {\n defs,\n content\n };\n}\nfunction mergeDefsAndContent(defs, content) {\n return defs ? \"<defs>\" + defs + \"</defs>\" + content : content;\n}\nfunction wrapSVGContent(body, start, end) {\n const split = splitSVGDefs(body);\n return mergeDefsAndContent(split.defs, start + split.content + end);\n}\n\nconst isUnsetKeyword = (value) => value === \"unset\" || value === \"undefined\" || value === \"none\";\nfunction iconToSVG(icon, customisations) {\n const fullIcon = {\n ...defaultIconProps,\n ...icon\n };\n const fullCustomisations = {\n ...defaultIconCustomisations,\n ...customisations\n };\n const box = {\n left: fullIcon.left,\n top: fullIcon.top,\n width: fullIcon.width,\n height: fullIcon.height\n };\n let body = fullIcon.body;\n [fullIcon, fullCustomisations].forEach((props) => {\n const transformations = [];\n const hFlip = props.hFlip;\n const vFlip = props.vFlip;\n let rotation = props.rotate;\n if (hFlip) {\n if (vFlip) {\n rotation += 2;\n } else {\n transformations.push(\n \"translate(\" + (box.width + box.left).toString() + \" \" + (0 - box.top).toString() + \")\"\n );\n transformations.push(\"scale(-1 1)\");\n box.top = box.left = 0;\n }\n } else if (vFlip) {\n transformations.push(\n \"translate(\" + (0 - box.left).toString() + \" \" + (box.height + box.top).toString() + \")\"\n );\n transformations.push(\"scale(1 -1)\");\n box.top = box.left = 0;\n }\n let tempValue;\n if (rotation < 0) {\n rotation -= Math.floor(rotation / 4) * 4;\n }\n rotation = rotation % 4;\n switch (rotation) {\n case 1:\n tempValue = box.height / 2 + box.top;\n transformations.unshift(\n \"rotate(90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n );\n break;\n case 2:\n transformations.unshift(\n \"rotate(180 \" + (box.width / 2 + box.left).toString() + \" \" + (box.height / 2 + box.top).toString() + \")\"\n );\n break;\n case 3:\n tempValue = box.width / 2 + box.left;\n transformations.unshift(\n \"rotate(-90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n );\n break;\n }\n if (rotation % 2 === 1) {\n if (box.left !== box.top) {\n tempValue = box.left;\n box.left = box.top;\n box.top = tempValue;\n }\n if (box.width !== box.height) {\n tempValue = box.width;\n box.width = box.height;\n box.height = tempValue;\n }\n }\n if (transformations.length) {\n body = wrapSVGContent(\n body,\n '<g transform=\"' + transformations.join(\" \") + '\">',\n \"</g>\"\n );\n }\n });\n const customisationsWidth = fullCustomisations.width;\n const customisationsHeight = fullCustomisations.height;\n const boxWidth = box.width;\n const boxHeight = box.height;\n let width;\n let height;\n if (customisationsWidth === null) {\n height = customisationsHeight === null ? \"1em\" : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n width = calculateSize(height, boxWidth / boxHeight);\n } else {\n width = customisationsWidth === \"auto\" ? boxWidth : customisationsWidth;\n height = customisationsHeight === null ? calculateSize(width, boxHeight / boxWidth) : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n }\n const attributes = {};\n const setAttr = (prop, value) => {\n if (!isUnsetKeyword(value)) {\n attributes[prop] = value.toString();\n }\n };\n setAttr(\"width\", width);\n setAttr(\"height\", height);\n const viewBox = [box.left, box.top, boxWidth, boxHeight];\n attributes.viewBox = viewBox.join(\" \");\n return {\n attributes,\n viewBox,\n body\n };\n}\n\nconst regex = /\\sid=\"(\\S+)\"/g;\nconst randomPrefix = \"IconifyId\" + Date.now().toString(16) + (Math.random() * 16777216 | 0).toString(16);\nlet counter = 0;\nfunction replaceIDs(body, prefix = randomPrefix) {\n const ids = [];\n let match;\n while (match = regex.exec(body)) {\n ids.push(match[1]);\n }\n if (!ids.length) {\n return body;\n }\n const suffix = \"suffix\" + (Math.random() * 16777216 | Date.now()).toString(16);\n ids.forEach((id) => {\n const newID = typeof prefix === \"function\" ? prefix(id) : prefix + (counter++).toString();\n const escapedID = id.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n body = body.replace(\n // Allowed characters before id: [#;\"]\n // Allowed characters after id: [)\"], .[a-z]\n new RegExp('([#;\"])(' + escapedID + ')([\")]|\\\\.[a-z])', \"g\"),\n \"$1\" + newID + suffix + \"$3\"\n );\n });\n body = body.replace(new RegExp(suffix, \"g\"), \"\");\n return body;\n}\n\nconst storage = /* @__PURE__ */ Object.create(null);\nfunction setAPIModule(provider, item) {\n storage[provider] = item;\n}\nfunction getAPIModule(provider) {\n return storage[provider] || storage[\"\"];\n}\n\nfunction createAPIConfig(source) {\n let resources;\n if (typeof source.resources === \"string\") {\n resources = [source.resources];\n } else {\n resources = source.resources;\n if (!(resources instanceof Array) || !resources.length) {\n return null;\n }\n }\n const result = {\n // API hosts\n resources,\n // Root path\n path: source.path || \"/\",\n // URL length limit\n maxURL: source.maxURL || 500,\n // Timeout before next host is used.\n rotate: source.rotate || 750,\n // Timeout before failing query.\n timeout: source.timeout || 5e3,\n // Randomise default API end point.\n random: source.random === true,\n // Start index\n index: source.index || 0,\n // Receive data after time out (used if time out kicks in first, then API module sends data anyway).\n dataAfterTimeout: source.dataAfterTimeout !== false\n };\n return result;\n}\nconst configStorage = /* @__PURE__ */ Object.create(null);\nconst fallBackAPISources = [\n \"https://api.simplesvg.com\",\n \"https://api.unisvg.com\"\n];\nconst fallBackAPI = [];\nwhile (fallBackAPISources.length > 0) {\n if (fallBackAPISources.length === 1) {\n fallBackAPI.push(fallBackAPISources.shift());\n } else {\n if (Math.random() > 0.5) {\n fallBackAPI.push(fallBackAPISources.shift());\n } else {\n fallBackAPI.push(fallBackAPISources.pop());\n }\n }\n}\nconfigStorage[\"\"] = createAPIConfig({\n resources: [\"https://api.iconify.design\"].concat(fallBackAPI)\n});\nfunction addAPIProvider(provider, customConfig) {\n const config = createAPIConfig(customConfig);\n if (config === null) {\n return false;\n }\n configStorage[provider] = config;\n return true;\n}\nfunction getAPIConfig(provider) {\n return configStorage[provider];\n}\nfunction listAPIProviders() {\n return Object.keys(configStorage);\n}\n\nconst detectFetch = () => {\n let callback;\n try {\n callback = fetch;\n if (typeof callback === \"function\") {\n return callback;\n }\n } catch (err) {\n }\n};\nlet fetchModule = detectFetch();\nfunction setFetch(fetch2) {\n fetchModule = fetch2;\n}\nfunction getFetch() {\n return fetchModule;\n}\nfunction calculateMaxLength(provider, prefix) {\n const config = getAPIConfig(provider);\n if (!config) {\n return 0;\n }\n let result;\n if (!config.maxURL) {\n result = 0;\n } else {\n let maxHostLength = 0;\n config.resources.forEach((item) => {\n const host = item;\n maxHostLength = Math.max(maxHostLength, host.length);\n });\n const url = prefix + \".json?icons=\";\n result = config.maxURL - maxHostLength - config.path.length - url.length;\n }\n return result;\n}\nfunction shouldAbort(status) {\n return status === 404;\n}\nconst prepare = (provider, prefix, icons) => {\n const results = [];\n const maxLength = calculateMaxLength(provider, prefix);\n const type = \"icons\";\n let item = {\n type,\n provider,\n prefix,\n icons: []\n };\n let length = 0;\n icons.forEach((name, index) => {\n length += name.length + 1;\n if (length >= maxLength && index > 0) {\n results.push(item);\n item = {\n type,\n provider,\n prefix,\n icons: []\n };\n length = name.length;\n }\n item.icons.push(name);\n });\n results.push(item);\n return results;\n};\nfunction getPath(provider) {\n if (typeof provider === \"string\") {\n const config = getAPIConfig(provider);\n if (config) {\n return config.path;\n }\n }\n return \"/\";\n}\nconst send = (host, params, callback) => {\n if (!fetchModule) {\n callback(\"abort\", 424);\n return;\n }\n let path = getPath(params.provider);\n switch (params.type) {\n case \"icons\": {\n const prefix = params.prefix;\n const icons = params.icons;\n const iconsList = icons.join(\",\");\n const urlParams = new URLSearchParams({\n icons: iconsList\n });\n path += prefix + \".json?\" + urlParams.toString();\n break;\n }\n case \"custom\": {\n const uri = params.uri;\n path += uri.slice(0, 1) === \"/\" ? uri.slice(1) : uri;\n break;\n }\n default:\n callback(\"abort\", 400);\n return;\n }\n let defaultError = 503;\n fetchModule(host + path).then((response) => {\n const status = response.status;\n if (status !== 200) {\n setTimeout(() => {\n callback(shouldAbort(status) ? \"abort\" : \"next\", status);\n });\n return;\n }\n defaultError = 501;\n return response.json();\n }).then((data) => {\n if (typeof data !== \"object\" || data === null) {\n setTimeout(() => {\n if (data === 404) {\n callback(\"abort\", data);\n } else {\n callback(\"next\", defaultError);\n }\n });\n return;\n }\n setTimeout(() => {\n callback(\"success\", data);\n });\n }).catch(() => {\n callback(\"next\", defaultError);\n });\n};\nconst fetchAPIModule = {\n prepare,\n send\n};\n\nfunction sortIcons(icons) {\n const result = {\n loaded: [],\n missing: [],\n pending: []\n };\n const storage = /* @__PURE__ */ Object.create(null);\n icons.sort((a, b) => {\n if (a.provider !== b.provider) {\n return a.provider.localeCompare(b.provider);\n }\n if (a.prefix !== b.prefix) {\n return a.prefix.localeCompare(b.prefix);\n }\n return a.name.localeCompare(b.name);\n });\n let lastIcon = {\n provider: \"\",\n prefix: \"\",\n name: \"\"\n };\n icons.forEach((icon) => {\n if (lastIcon.name === icon.name && lastIcon.prefix === icon.prefix && lastIcon.provider === icon.provider) {\n return;\n }\n lastIcon = icon;\n const provider = icon.provider;\n const prefix = icon.prefix;\n const name = icon.name;\n const providerStorage = storage[provider] || (storage[provider] = /* @__PURE__ */ Object.create(null));\n const localStorage = providerStorage[prefix] || (providerStorage[prefix] = getStorage(provider, prefix));\n let list;\n if (name in localStorage.icons) {\n list = result.loaded;\n } else if (prefix === \"\" || localStorage.missing.has(name)) {\n list = result.missing;\n } else {\n list = result.pending;\n }\n const item = {\n provider,\n prefix,\n name\n };\n list.push(item);\n });\n return result;\n}\n\nfunction removeCallback(storages, id) {\n storages.forEach((storage) => {\n const items = storage.loaderCallbacks;\n if (items) {\n storage.loaderCallbacks = items.filter((row) => row.id !== id);\n }\n });\n}\nfunction updateCallbacks(storage) {\n if (!storage.pendingCallbacksFlag) {\n storage.pendingCallbacksFlag = true;\n setTimeout(() => {\n storage.pendingCallbacksFlag = false;\n const items = storage.loaderCallbacks ? storage.loaderCallbacks.slice(0) : [];\n if (!items.length) {\n return;\n }\n let hasPending = false;\n const provider = storage.provider;\n const prefix = storage.prefix;\n items.forEach((item) => {\n const icons = item.icons;\n const oldLength = icons.pending.length;\n icons.pending = icons.pending.filter((icon) => {\n if (icon.prefix !== prefix) {\n return true;\n }\n const name = icon.name;\n if (storage.icons[name]) {\n icons.loaded.push({\n provider,\n prefix,\n name\n });\n } else if (storage.missing.has(name)) {\n icons.missing.push({\n provider,\n prefix,\n name\n });\n } else {\n hasPending = true;\n return true;\n }\n return false;\n });\n if (icons.pending.length !== oldLength) {\n if (!hasPending) {\n removeCallback([storage], item.id);\n }\n item.callback(\n icons.loaded.slice(0),\n icons.missing.slice(0),\n icons.pending.slice(0),\n item.abort\n );\n }\n });\n });\n }\n}\nlet idCounter = 0;\nfunction storeCallback(callback, icons, pendingSources) {\n const id = idCounter++;\n const abort = removeCallback.bind(null, pendingSources, id);\n if (!icons.pending.length) {\n return abort;\n }\n const item = {\n id,\n icons,\n callback,\n abort\n };\n pendingSources.forEach((storage) => {\n (storage.loaderCallbacks || (storage.loaderCallbacks = [])).push(item);\n });\n return abort;\n}\n\nfunction listToIcons(list, validate = true, simpleNames = false) {\n const result = [];\n list.forEach((item) => {\n const icon = typeof item === \"string\" ? stringToIcon(item, validate, simpleNames) : item;\n if (icon) {\n result.push(icon);\n }\n });\n return result;\n}\n\n// src/config.ts\nvar defaultConfig = {\n resources: [],\n index: 0,\n timeout: 2e3,\n rotate: 750,\n random: false,\n dataAfterTimeout: false\n};\n\n// src/query.ts\nfunction sendQuery(config, payload, query, done) {\n const resourcesCount = config.resources.length;\n const startIndex = config.random ? Math.floor(Math.random() * resourcesCount) : config.index;\n let resources;\n if (config.random) {\n let list = config.resources.slice(0);\n resources = [];\n while (list.length > 1) {\n const nextIndex = Math.floor(Math.random() * list.length);\n resources.push(list[nextIndex]);\n list = list.slice(0, nextIndex).concat(list.slice(nextIndex + 1));\n }\n resources = resources.concat(list);\n } else {\n resources = config.resources.slice(startIndex).concat(config.resources.slice(0, startIndex));\n }\n const startTime = Date.now();\n let status = \"pending\";\n let queriesSent = 0;\n let lastError;\n let timer = null;\n let queue = [];\n let doneCallbacks = [];\n if (typeof done === \"function\") {\n doneCallbacks.push(done);\n }\n function resetTimer() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n }\n function abort() {\n if (status === \"pending\") {\n status = \"aborted\";\n }\n resetTimer();\n queue.forEach((item) => {\n if (item.status === \"pending\") {\n item.status = \"aborted\";\n }\n });\n queue = [];\n }\n function subscribe(callback, overwrite) {\n if (overwrite) {\n doneCallbacks = [];\n }\n if (typeof callback === \"function\") {\n doneCallbacks.push(callback);\n }\n }\n function getQueryStatus() {\n return {\n startTime,\n payload,\n status,\n queriesSent,\n queriesPending: queue.length,\n subscribe,\n abort\n };\n }\n function failQuery() {\n status = \"failed\";\n doneCallbacks.forEach((callback) => {\n callback(void 0, lastError);\n });\n }\n function clearQueue() {\n queue.forEach((item) => {\n if (item.status === \"pending\") {\n item.status = \"aborted\";\n }\n });\n queue = [];\n }\n function moduleResponse(item, response, data) {\n const isError = response !== \"success\";\n queue = queue.filter((queued) => queued !== item);\n switch (status) {\n case \"pending\":\n break;\n case \"failed\":\n if (isError || !config.dataAfterTimeout) {\n return;\n }\n break;\n default:\n return;\n }\n if (response === \"abort\") {\n lastError = data;\n failQuery();\n return;\n }\n if (isError) {\n lastError = data;\n if (!queue.length) {\n if (!resources.length) {\n failQuery();\n } else {\n execNext();\n }\n }\n return;\n }\n resetTimer();\n clearQueue();\n if (!config.random) {\n const index = config.resources.indexOf(item.resource);\n if (index !== -1 && index !== config.index) {\n config.index = index;\n }\n }\n status = \"completed\";\n doneCallbacks.forEach((callback) => {\n callback(data);\n });\n }\n function execNext() {\n if (status !== \"pending\") {\n return;\n }\n resetTimer();\n const resource = resources.shift();\n if (resource === void 0) {\n if (queue.length) {\n timer = setTimeout(() => {\n resetTimer();\n if (status === \"pending\") {\n clearQueue();\n failQuery();\n }\n }, config.timeout);\n return;\n }\n failQuery();\n return;\n }\n const item = {\n status: \"pending\",\n resource,\n callback: (status2, data) => {\n moduleResponse(item, status2, data);\n }\n };\n queue.push(item);\n queriesSent++;\n timer = setTimeout(execNext, config.rotate);\n query(resource, payload, item.callback);\n }\n setTimeout(execNext);\n return getQueryStatus;\n}\n\n// src/index.ts\nfunction initRedundancy(cfg) {\n const config = {\n ...defaultConfig,\n ...cfg\n };\n let queries = [];\n function cleanup() {\n queries = queries.filter((item) => item().status === \"pending\");\n }\n function query(payload, queryCallback, doneCallback) {\n const query2 = sendQuery(\n config,\n payload,\n queryCallback,\n (data, error) => {\n cleanup();\n if (doneCallback) {\n doneCallback(data, error);\n }\n }\n );\n queries.push(query2);\n return query2;\n }\n function find(callback) {\n return queries.find((value) => {\n return callback(value);\n }) || null;\n }\n const instance = {\n query,\n find,\n setIndex: (index) => {\n config.index = index;\n },\n getIndex: () => config.index,\n cleanup\n };\n return instance;\n}\n\nfunction emptyCallback$1() {\n}\nconst redundancyCache = /* @__PURE__ */ Object.create(null);\nfunction getRedundancyCache(provider) {\n if (!redundancyCache[provider]) {\n const config = getAPIConfig(provider);\n if (!config) {\n return;\n }\n const redundancy = initRedundancy(config);\n const cachedReundancy = {\n config,\n redundancy\n };\n redundancyCache[provider] = cachedReundancy;\n }\n return redundancyCache[provider];\n}\nfunction sendAPIQuery(target, query, callback) {\n let redundancy;\n let send;\n if (typeof target === \"string\") {\n const api = getAPIModule(target);\n if (!api) {\n callback(void 0, 424);\n return emptyCallback$1;\n }\n send = api.send;\n const cached = getRedundancyCache(target);\n if (cached) {\n redundancy = cached.redundancy;\n }\n } else {\n const config = createAPIConfig(target);\n if (config) {\n redundancy = initRedundancy(config);\n const moduleKey = target.resources ? target.resources[0] : \"\";\n const api = getAPIModule(moduleKey);\n if (api) {\n send = api.send;\n }\n }\n }\n if (!redundancy || !send) {\n callback(void 0, 424);\n return emptyCallback$1;\n }\n return redundancy.query(query, send, callback)().abort;\n}\n\nconst browserCacheVersion = \"iconify2\";\nconst browserCachePrefix = \"iconify\";\nconst browserCacheCountKey = browserCachePrefix + \"-count\";\nconst browserCacheVersionKey = browserCachePrefix + \"-version\";\nconst browserStorageHour = 36e5;\nconst browserStorageCacheExpiration = 168;\nconst browserStorageLimit = 50;\n\nfunction getStoredItem(func, key) {\n try {\n return func.getItem(key);\n } catch (err) {\n }\n}\nfunction setStoredItem(func, key, value) {\n try {\n func.setItem(key, value);\n return true;\n } catch (err) {\n }\n}\nfunction removeStoredItem(func, key) {\n try {\n func.removeItem(key);\n } catch (err) {\n }\n}\n\nfunction setBrowserStorageItemsCount(storage, value) {\n return setStoredItem(storage, browserCacheCountKey, value.toString());\n}\nfunction getBrowserStorageItemsCount(storage) {\n return parseInt(getStoredItem(storage, browserCacheCountKey)) || 0;\n}\n\nconst browserStorageConfig = {\n local: true,\n session: true\n};\nconst browserStorageEmptyItems = {\n local: /* @__PURE__ */ new Set(),\n session: /* @__PURE__ */ new Set()\n};\nlet browserStorageStatus = false;\nfunction setBrowserStorageStatus(status) {\n browserStorageStatus = status;\n}\n\nlet _window = typeof window === \"undefined\" ? {} : window;\nfunction getBrowserStorage(key) {\n const attr = key + \"Storage\";\n try {\n if (_window && _window[attr] && typeof _window[attr].length === \"number\") {\n return _window[attr];\n }\n } catch (err) {\n }\n browserStorageConfig[key] = false;\n}\n\nfunction iterateBrowserStorage(key, callback) {\n const func = getBrowserStorage(key);\n if (!func) {\n return;\n }\n const version = getStoredItem(func, browserCacheVersionKey);\n if (version !== browserCacheVersion) {\n if (version) {\n const total2 = getBrowserStorageItemsCount(func);\n for (let i = 0; i < total2; i++) {\n removeStoredItem(func, browserCachePrefix + i.toString());\n }\n }\n setStoredItem(func, browserCacheVersionKey, browserCacheVersion);\n setBrowserStorageItemsCount(func, 0);\n return;\n }\n const minTime = Math.floor(Date.now() / browserStorageHour) - browserStorageCacheExpiration;\n const parseItem = (index) => {\n const name = browserCachePrefix + index.toString();\n const item = getStoredItem(func, name);\n if (typeof item !== \"string\") {\n return;\n }\n try {\n const data = JSON.parse(item);\n if (typeof data === \"object\" && typeof data.cached === \"number\" && data.cached > minTime && typeof data.provider === \"string\" && typeof data.data === \"object\" && typeof data.data.prefix === \"string\" && // Valid item: run callback\n callback(data, index)) {\n return true;\n }\n } catch (err) {\n }\n removeStoredItem(func, name);\n };\n let total = getBrowserStorageItemsCount(func);\n for (let i = total - 1; i >= 0; i--) {\n if (!parseItem(i)) {\n if (i === total - 1) {\n total--;\n setBrowserStorageItemsCount(func, total);\n } else {\n browserStorageEmptyItems[key].add(i);\n }\n }\n }\n}\n\nfunction initBrowserStorage() {\n if (browserStorageStatus) {\n return;\n }\n setBrowserStorageStatus(true);\n for (const key in browserStorageConfig) {\n iterateBrowserStorage(key, (item) => {\n const iconSet = item.data;\n const provider = item.provider;\n const prefix = iconSet.prefix;\n const storage = getStorage(\n provider,\n prefix\n );\n if (!addIconSet(storage, iconSet).length) {\n return false;\n }\n const lastModified = iconSet.lastModified || -1;\n storage.lastModifiedCached = storage.lastModifiedCached ? Math.min(storage.lastModifiedCached, lastModified) : lastModified;\n return true;\n });\n }\n}\n\nfunction updateLastModified(storage, lastModified) {\n const lastValue = storage.lastModifiedCached;\n if (\n // Matches or newer\n lastValue && lastValue >= lastModified\n ) {\n return lastValue === lastModified;\n }\n storage.lastModifiedCached = lastModified;\n if (lastValue) {\n for (const key in browserStorageConfig) {\n iterateBrowserStorage(key, (item) => {\n const iconSet = item.data;\n return item.provider !== storage.provider || iconSet.prefix !== storage.prefix || iconSet.lastModified === lastModified;\n });\n }\n }\n return true;\n}\nfunction storeInBrowserStorage(storage, data) {\n if (!browserStorageStatus) {\n initBrowserStorage();\n }\n function store(key) {\n let func;\n if (!browserStorageConfig[key] || !(func = getBrowserStorage(key))) {\n return;\n }\n const set = browserStorageEmptyItems[key];\n let index;\n if (set.size) {\n set.delete(index = Array.from(set).shift());\n } else {\n index = getBrowserStorageItemsCount(func);\n if (index >= browserStorageLimit || !setBrowserStorageItemsCount(func, index + 1)) {\n return;\n }\n }\n const item = {\n cached: Math.floor(Date.now() / browserStorageHour),\n provider: storage.provider,\n data\n };\n return setStoredItem(\n func,\n browserCachePrefix + index.toString(),\n JSON.stringify(item)\n );\n }\n if (data.lastModified && !updateLastModified(storage, data.lastModified)) {\n return;\n }\n if (!Object.keys(data.icons).length) {\n return;\n }\n if (data.not_found) {\n data = Object.assign({}, data);\n delete data.not_found;\n }\n if (!store(\"local\")) {\n store(\"session\");\n }\n}\n\nfunction emptyCallback() {\n}\nfunction loadedNewIcons(storage) {\n if (!storage.iconsLoaderFlag) {\n storage.iconsLoaderFlag = true;\n setTimeout(() => {\n storage.iconsLoaderFlag = false;\n updateCallbacks(storage);\n });\n }\n}\nfunction loadNewIcons(storage, icons) {\n if (!storage.iconsToLoad) {\n storage.iconsToLoad = icons;\n } else {\n storage.iconsToLoad = storage.iconsToLoad.concat(icons).sort();\n }\n if (!storage.iconsQueueFlag) {\n storage.iconsQueueFlag = true;\n setTimeout(() => {\n storage.iconsQueueFlag = false;\n const { provider, prefix } = storage;\n const icons2 = storage.iconsToLoad;\n delete storage.iconsToLoad;\n let api;\n if (!icons2 || !(api = getAPIModule(provider))) {\n return;\n }\n const params = api.prepare(provider, prefix, icons2);\n params.forEach((item) => {\n sendAPIQuery(provider, item, (data) => {\n if (typeof data !== \"object\") {\n item.icons.forEach((name) => {\n storage.missing.add(name);\n });\n } else {\n try {\n const parsed = addIconSet(\n storage,\n data\n );\n if (!parsed.length) {\n return;\n }\n const pending = storage.pendingIcons;\n if (pending) {\n parsed.forEach((name) => {\n pending.delete(name);\n });\n }\n storeInBrowserStorage(storage, data);\n } catch (err) {\n console.error(err);\n }\n }\n loadedNewIcons(storage);\n });\n });\n });\n }\n}\nconst loadIcons = (icons, callback) => {\n const cleanedIcons = listToIcons(icons, true, allowSimpleNames());\n const sortedIcons = sortIcons(cleanedIcons);\n if (!sortedIcons.pending.length) {\n let callCallback = true;\n if (callback) {\n setTimeout(() => {\n if (callCallback) {\n callback(\n sortedIcons.loaded,\n sortedIcons.missing,\n sortedIcons.pending,\n emptyCallback\n );\n }\n });\n }\n return () => {\n callCallback = false;\n };\n }\n const newIcons = /* @__PURE__ */ Object.create(null);\n const sources = [];\n let lastProvider, lastPrefix;\n sortedIcons.pending.forEach((icon) => {\n const { provider, prefix } = icon;\n if (prefix === lastPrefix && provider === lastProvider) {\n return;\n }\n lastProvider = provider;\n lastPrefix = prefix;\n sources.push(getStorage(provider, prefix));\n const providerNewIcons = newIcons[provider] || (newIcons[provider] = /* @__PURE__ */ Object.create(null));\n if (!providerNewIcons[prefix]) {\n providerNewIcons[prefix] = [];\n }\n });\n sortedIcons.pending.forEach((icon) => {\n const { provider, prefix, name } = icon;\n const storage = getStorage(provider, prefix);\n const pendingQueue = storage.pendingIcons || (storage.pendingIcons = /* @__PURE__ */ new Set());\n if (!pendingQueue.has(name)) {\n pendingQueue.add(name);\n newIcons[provider][prefix].push(name);\n }\n });\n sources.forEach((storage) => {\n const { provider, prefix } = storage;\n if (newIcons[provider][prefix].length) {\n loadNewIcons(storage, newIcons[provider][prefix]);\n }\n });\n return callback ? storeCallback(callback, sortedIcons, sources) : emptyCallback;\n};\nconst loadIcon = (icon) => {\n return new Promise((fulfill, reject) => {\n const iconObj = typeof icon === \"string\" ? stringToIcon(icon, true) : icon;\n if (!iconObj) {\n reject(icon);\n return;\n }\n loadIcons([iconObj || icon], (loaded) => {\n if (loaded.length && iconObj) {\n const data = getIconData(iconObj);\n if (data) {\n fulfill({\n ...defaultIconProps,\n ...data\n });\n return;\n }\n }\n reject(icon);\n });\n });\n};\n\nfunction toggleBrowserCache(storage, value) {\n switch (storage) {\n case \"local\":\n case \"session\":\n browserStorageConfig[storage] = value;\n break;\n case \"all\":\n for (const key in browserStorageConfig) {\n browserStorageConfig[key] = value;\n }\n break;\n }\n}\n\nfunction mergeCustomisations(defaults, item) {\n const result = {\n ...defaults\n };\n for (const key in item) {\n const value = item[key];\n const valueType = typeof value;\n if (key in defaultIconSizeCustomisations) {\n if (value === null || value && (valueType === \"string\" || valueType === \"number\")) {\n result[key] = value;\n }\n } else if (valueType === typeof result[key]) {\n result[key] = key === \"rotate\" ? value % 4 : value;\n }\n }\n return result;\n}\n\nconst separator = /[\\s,]+/;\nfunction flipFromString(custom, flip) {\n flip.split(separator).forEach((str) => {\n const value = str.trim();\n switch (value) {\n case \"horizontal\":\n custom.hFlip = true;\n break;\n case \"vertical\":\n custom.vFlip = true;\n break;\n }\n });\n}\n\nfunction rotateFromString(value, defaultValue = 0) {\n const units = value.replace(/^-?[0-9.]*/, \"\");\n function cleanup(value2) {\n while (value2 < 0) {\n value2 += 4;\n }\n return value2 % 4;\n }\n if (units === \"\") {\n const num = parseInt(value);\n return isNaN(num) ? 0 : cleanup(num);\n } else if (units !== value) {\n let split = 0;\n switch (units) {\n case \"%\":\n split = 25;\n break;\n case \"deg\":\n split = 90;\n }\n if (split) {\n let num = parseFloat(value.slice(0, value.length - units.length));\n if (isNaN(num)) {\n return 0;\n }\n num = num / split;\n return num % 1 === 0 ? cleanup(num) : 0;\n }\n }\n return defaultValue;\n}\n\nfunction iconToHTML(body, attributes) {\n let renderAttribsHTML = body.indexOf(\"xlink:\") === -1 ? \"\" : ' xmlns:xlink=\"http://www.w3.org/1999/xlink\"';\n for (const attr in attributes) {\n renderAttribsHTML += \" \" + attr + '=\"' + attributes[attr] + '\"';\n }\n return '<svg xmlns=\"http://www.w3.org/2000/svg\"' + renderAttribsHTML + \">\" + body + \"</svg>\";\n}\n\nfunction encodeSVGforURL(svg) {\n return svg.replace(/\"/g, \"'\").replace(/%/g, \"%25\").replace(/#/g, \"%23\").replace(/</g, \"%3C\").replace(/>/g, \"%3E\").replace(/\\s+/g, \" \");\n}\nfunction svgToData(svg) {\n return \"data:image/svg+xml,\" + encodeSVGforURL(svg);\n}\nfunction svgToURL(svg) {\n return 'url(\"' + svgToData(svg) + '\")';\n}\n\nconst defaultExtendedIconCustomisations = {\n ...defaultIconCustomisations,\n inline: false,\n};\n\n/**\n * Default SVG attributes\n */\nconst svgDefaults = {\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'xmlns:xlink': 'http://www.w3.org/1999/xlink',\n 'aria-hidden': true,\n 'role': 'img',\n};\n/**\n * Style modes\n */\nconst commonProps = {\n display: 'inline-block',\n};\nconst monotoneProps = {\n backgroundColor: 'currentColor',\n};\nconst coloredProps = {\n backgroundColor: 'transparent',\n};\n// Dynamically add common props to variables above\nconst propsToAdd = {\n Image: 'var(--svg)',\n Repeat: 'no-repeat',\n Size: '100% 100%',\n};\nconst propsToAddTo = {\n webkitMask: monotoneProps,\n mask: monotoneProps,\n background: coloredProps,\n};\nfor (const prefix in propsToAddTo) {\n const list = propsToAddTo[prefix];\n for (const prop in propsToAdd) {\n list[prefix + prop] = propsToAdd[prop];\n }\n}\n/**\n * Aliases for customisations.\n * In Vue 'v-' properties are reserved, so v-flip must be renamed\n */\nconst customisationAliases = {};\n['horizontal', 'vertical'].forEach((prefix) => {\n const attr = prefix.slice(0, 1) + 'Flip';\n // vertical-flip\n customisationAliases[prefix + '-flip'] = attr;\n // v-flip\n customisationAliases[prefix.slice(0, 1) + '-flip'] = attr;\n // verticalFlip\n customisationAliases[prefix + 'Flip'] = attr;\n});\n/**\n * Fix size: add 'px' to numbers\n */\nfunction fixSize(value) {\n return value + (value.match(/^[-0-9.]+$/) ? 'px' : '');\n}\n/**\n * Render icon\n */\nconst render = (\n// Icon must be validated before calling this function\nicon, \n// Partial properties\nprops) => {\n // Split properties\n const customisations = mergeCustomisations(defaultExtendedIconCustomisations, props);\n const componentProps = { ...svgDefaults };\n // Check mode\n const mode = props.mode || 'svg';\n // Copy style\n const style = {};\n const propsStyle = props.style;\n const customStyle = typeof propsStyle === 'object' && !(propsStyle instanceof Array)\n ? propsStyle\n : {};\n // Get element properties\n for (let key in props) {\n const value = props[key];\n if (value === void 0) {\n continue;\n }\n switch (key) {\n // Properties to ignore\n case 'icon':\n case 'style':\n case 'onLoad':\n case 'mode':\n break;\n // Boolean attributes\n case 'inline':\n case 'hFlip':\n case 'vFlip':\n customisations[key] =\n value === true || value === 'true' || value === 1;\n break;\n // Flip as string: 'horizontal,vertical'\n case 'flip':\n if (typeof value === 'string') {\n flipFromString(customisations, value);\n }\n break;\n // Color: override style\n case 'color':\n style.color = value;\n break;\n // Rotation as string\n case 'rotate':\n if (typeof value === 'string') {\n customisations[key] = rotateFromString(value);\n }\n else if (typeof value === 'number') {\n customisations[key] = value;\n }\n break;\n // Remove aria-hidden\n case 'ariaHidden':\n case 'aria-hidden':\n // Vue transforms 'aria-hidden' property to 'ariaHidden'\n if (value !== true && value !== 'true') {\n delete componentProps['aria-hidden'];\n }\n break;\n default: {\n const alias = customisationAliases[key];\n if (alias) {\n // Aliases for boolean customisations\n if (value === true || value === 'true' || value === 1) {\n customisations[alias] = true;\n }\n }\n else if (defaultExtendedIconCustomisations[key] === void 0) {\n // Copy missing property if it does not exist in customisations\n componentProps[key] = value;\n }\n }\n }\n }\n // Generate icon\n const item = iconToSVG(icon, customisations);\n const renderAttribs = item.attributes;\n // Inline display\n if (customisations.inline) {\n style.verticalAlign = '-0.125em';\n }\n if (mode === 'svg') {\n // Add style\n componentProps.style = {\n ...style,\n ...customStyle,\n };\n // Add icon stuff\n Object.assign(componentProps, renderAttribs);\n // Counter for ids based on \"id\" property to render icons consistently on server and client\n let localCounter = 0;\n let id = props.id;\n if (typeof id === 'string') {\n // Convert '-' to '_' to avoid errors in animations\n id = id.replace(/-/g, '_');\n }\n // Add innerHTML and style to props\n componentProps['innerHTML'] = replaceIDs(item.body, id ? () => id + 'ID' + localCounter++ : 'iconifyVue');\n // Render icon\n return h('svg', componentProps);\n }\n // Render <span> with style\n const { body, width, height } = icon;\n const useMask = mode === 'mask' ||\n (mode === 'bg' ? false : body.indexOf('currentColor') !== -1);\n // Generate SVG\n const html = iconToHTML(body, {\n ...renderAttribs,\n width: width + '',\n height: height + '',\n });\n // Generate style\n componentProps.style = {\n ...style,\n '--svg': svgToURL(html),\n 'width': fixSize(renderAttribs.width),\n 'height': fixSize(renderAttribs.height),\n ...commonProps,\n ...(useMask ? monotoneProps : coloredProps),\n ...customStyle,\n };\n return h('span', componentProps);\n};\n\n/**\n * Enable cache\n */\nfunction enableCache(storage) {\n toggleBrowserCache(storage, true);\n}\n/**\n * Disable cache\n */\nfunction disableCache(storage) {\n toggleBrowserCache(storage, false);\n}\n/**\n * Initialise stuff\n */\n// Enable short names\nallowSimpleNames(true);\n// Set API module\nsetAPIModule('', fetchAPIModule);\n/**\n * Browser stuff\n */\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n // Set cache and load existing cache\n initBrowserStorage();\n const _window = window;\n // Load icons from global \"IconifyPreload\"\n if (_window.IconifyPreload !== void 0) {\n const preload = _window.IconifyPreload;\n const err = 'Invalid IconifyPreload syntax.';\n if (typeof preload === 'object' && preload !== null) {\n (preload instanceof Array ? preload : [preload]).forEach((item) => {\n try {\n if (\n // Check if item is an object and not null/array\n typeof item !== 'object' ||\n item === null ||\n item instanceof Array ||\n // Check for 'icons' and 'prefix'\n typeof item.icons !== 'object' ||\n typeof item.prefix !== 'string' ||\n // Add icon set\n !addCollection(item)) {\n console.error(err);\n }\n }\n catch (e) {\n console.error(err);\n }\n });\n }\n }\n // Set API from global \"IconifyProviders\"\n if (_window.IconifyProviders !== void 0) {\n const providers = _window.IconifyProviders;\n if (typeof providers === 'object' && providers !== null) {\n for (let key in providers) {\n const err = 'IconifyProviders[' + key + '] is invalid.';\n try {\n const value = providers[key];\n if (typeof value !== 'object' ||\n !value ||\n value.resources === void 0) {\n continue;\n }\n if (!addAPIProvider(key, value)) {\n console.error(err);\n }\n }\n catch (e) {\n console.error(err);\n }\n }\n }\n }\n}\n/**\n * Empty icon data, rendered when icon is not available\n */\nconst emptyIcon = {\n ...defaultIconProps,\n body: '',\n};\nconst Icon = defineComponent({\n // Do not inherit other attributes: it is handled by render()\n inheritAttrs: false,\n // Set initial data\n data() {\n return {\n // Current icon name\n _name: '',\n // Loading\n _loadingIcon: null,\n // Mounted status\n iconMounted: false,\n // Callback counter to trigger re-render\n counter: 0,\n };\n },\n mounted() {\n // Mark as mounted\n this.iconMounted = true;\n },\n unmounted() {\n this.abortLoading();\n },\n methods: {\n abortLoading() {\n if (this._loadingIcon) {\n this._loadingIcon.abort();\n this._loadingIcon = null;\n }\n },\n // Get data for icon to render or null\n getIcon(icon, onload) {\n // Icon is an object\n if (typeof icon === 'object' &&\n icon !== null &&\n typeof icon.body === 'string') {\n // Stop loading\n this._name = '';\n this.abortLoading();\n return {\n data: icon,\n };\n }\n // Invalid icon?\n let iconName;\n if (typeof icon !== 'string' ||\n (iconName = stringToIcon(icon, false, true)) === null) {\n this.abortLoading();\n return null;\n }\n // Load icon\n const data = getIconData(iconName);\n if (!data) {\n // Icon data is not available\n if (!this._loadingIcon || this._loadingIcon.name !== icon) {\n // New icon to load\n this.abortLoading();\n this._name = '';\n if (data !== null) {\n // Icon was not loaded\n this._loadingIcon = {\n name: icon,\n abort: loadIcons([iconName], () => {\n this.counter++;\n }),\n };\n }\n }\n return null;\n }\n // Icon data is available\n this.abortLoading();\n if (this._name !== icon) {\n this._name = icon;\n if (onload) {\n onload(icon);\n }\n }\n // Add classes\n const classes = ['iconify'];\n if (iconName.prefix !== '') {\n classes.push('iconify--' + iconName.prefix);\n }\n if (iconName.provider !== '') {\n classes.push('iconify--' + iconName.provider);\n }\n return { data, classes };\n },\n },\n // Render icon\n render() {\n // Re-render when counter changes\n this.counter;\n const props = this.$attrs;\n // Get icon data\n const icon = (this.iconMounted || props.ssr)\n ? this.getIcon(props.icon, props.onLoad)\n : null;\n // Validate icon object\n if (!icon) {\n return render(emptyIcon, props);\n }\n // Add classes\n let newProps = props;\n if (icon.classes) {\n newProps = {\n ...props,\n class: (typeof props['class'] === 'string'\n ? props['class'] + ' '\n : '') + icon.classes.join(' '),\n };\n }\n // Render icon\n return render({\n ...defaultIconProps,\n ...icon.data,\n }, newProps);\n },\n});\n/**\n * Internal API\n */\nconst _api = {\n getAPIConfig,\n setAPIModule,\n sendAPIQuery,\n setFetch,\n getFetch,\n listAPIProviders,\n};\n\nexport { Icon, _api, addAPIProvider, addCollection, addIcon, iconToSVG as buildIcon, calculateSize, disableCache, enableCache, getIcon, iconLoaded as iconExists, iconLoaded, listIcons, loadIcon, loadIcons, replaceIDs };\n","export function getGlobal(this: any) {\n return typeof window != \"undefined\"\n ? window\n : typeof global != \"undefined\"\n ? global\n : this || {};\n}\n\nexport const root = getGlobal();\n\nexport const isBrowser =\n typeof window === \"object\" && typeof document === \"object\";\n\n// import.meta.env\n// if (process.env.NODE_ENV === \"development\") {\n// } else if (process.env.NODE_ENV === \"production\") {\n// }\n\nexport const BigIntSupported = typeof BigInt !== \"undefined\";\nexport const SymbolSupported = typeof Symbol !== \"undefined\";\n","import { Entry } from \"./entries\";\n\nlet _nativeMap;\ntry {\n _nativeMap = Map;\n} catch (_) {\n /// UNDO mock Map\n _nativeMap = function () {};\n}\nexport const nativeMap = _nativeMap;\n\nexport function mapToArray(map: Map<any, any>): Entry[] {\n const array = Array(map.size);\n map.forEach(function (v, k) {\n array.push([k, v]);\n });\n return array;\n}\n\nexport function addMapEntry(map: Map<any, any>, pair: Entry) {\n map.set(pair[0], pair[1]);\n return map;\n}\n\n/// 有 cloneFunc 代表 深拷贝\nexport function cloneMap(\n map: Map<any, any>,\n cloneFunc?: (entries: Entry[], isDeep: boolean) => Entry[]\n): Map<any, any> {\n return (\n cloneFunc ? cloneFunc(mapToArray(map), true) : mapToArray(map)\n ).reduce(addMapEntry, new Map());\n}\n","let _nativeSet;\ntry {\n _nativeSet = Set;\n} catch (_) {\n /// UNDO mock Set\n _nativeSet = function () {};\n}\nexport const nativeSet = _nativeSet;\n\nexport function setToArray(set: Set<any>): any[] {\n const array = Array(set.size);\n set.forEach((v, i) => {\n array[i] = v;\n });\n return array;\n}\n\nexport function addSetEntry(set: Set<any>, value: any) {\n // Don't return `set.add` because it's not chainable in IE 11.\n set.add(value);\n return set;\n}\n\n/// 有 cloneFunc 代表 深拷贝\nexport function cloneSet(\n set: Set<any>,\n cloneFunc?: (values: any[], isDeep: boolean) => any[]\n) {\n return (\n cloneFunc ? cloneFunc(setToArray(set), true) : setToArray(set)\n ).reduce(addSetEntry, new Set());\n}\n","import { isOK } from \"./object\";\nimport { regMatch } from \"./string\";\n\n// Number.MAX_SAFE_INTEGER === Math.pow(2, 53) - 1 === 9007199254740991;\nexport const MAX_SAFE_INTEGER = 9007199254740991;\n// Number.MIN_SAFE_INTEGER === -Number.MAX_SAFE_INTEGER === -9007199254740991;\nexport const MIN_SAFE_INTEGER = -9007199254740991;\n// Number.EPSILON === Math.pow(2, -52)\nexport const EPSILON = Math.pow(2, -52);\n// Number.isNaN(NaN); // true\n// Number.isFinite(-Infinity); // false\n// Number.isSafeInteger(9007199254740990); // true\n// Number.isSafeInteger(9007199254740992); // false\n\nexport const isEven = (num: number) => num % 2 === 0;\n\nexport const average = (...args: number[]) =>\n args.reduce((a, b) => a + b) / args.length;\n\nexport function parseNumber(value: any, defaultValue?: number): number {\n value = parseFloat(value);\n if (isNaN(value)) {\n if (typeof defaultValue === \"number\") {\n return defaultValue;\n }\n throw new Error(`parseNumber(${value}) isNaN!`);\n }\n return value;\n}\n\nexport function parseRelativeNumber(\n value: any,\n relativeSize: number,\n defaultValue?: number\n): number {\n if (typeof value == \"string\") {\n value = value.trim().toLowerCase();\n if (value.indexOf(\"%\") > 0) {\n return (parseNumber(value, defaultValue) / 100) * relativeSize;\n } else if (value.indexOf(\"vw\") > 0) {\n return (parseNumber(value, defaultValue) / 100) * window.innerWidth;\n } else if (value.indexOf(\"vh\") > 0) {\n return (parseNumber(value, defaultValue) / 100) * window.innerHeight;\n } else if (value.indexOf(\"vm\") > 0) {\n return (\n (parseNumber(value, defaultValue) / 100) *\n Math.min(window.innerWidth, window.innerHeight)\n );\n } else if (value == \"top\" || value == \"left\") {\n return 0;\n } else if (value == \"center\" || value == \"middle\") {\n return relativeSize * 0.5;\n } else if (value == \"bottom\" || value == \"right\") {\n return relativeSize;\n } else {\n return parseNumber(value, defaultValue);\n }\n } else {\n return parseNumber(value, defaultValue);\n }\n}\n\n// 0.1 + 0.2 - 0.3; // 5.551115123125783e-17\n// 0.1 + 0.2 === 0.3; // 0.30000000000000004 // false\n// withinErrorMarginNumber(0.1 + 0.2, 0.3); // true\n// 1.1 + 1.3 === 2.4; // false\n// withinErrorMarginNumber(1.1 + 1.3, 2.4); // true\nexport function withinErrorMarginNumber(\n left: number,\n right: number,\n margin = Number.EPSILON * Math.pow(2, 2)\n) {\n return Math.abs(left - right) < margin;\n}\n\n/// 精确加法\nexport function add(num1: number, num2: number) {\n const num1Digits = (num1.toString().split(\".\")[1] || \"\").length;\n const num2Digits = (num2.toString().split(\".\")[1] || \"\").length;\n const baseNum = Math.pow(10, Math.max(num1Digits, num2Digits));\n return (num1 * baseNum + num2 * baseNum) / baseNum;\n}\n\nexport const clamp = (x: number, min: number, max: number) =>\n x < min ? min : x > max ? max : x;\n// Math.min(Math.max(min, x), max);\n\nexport const round = (\n number: number,\n digits = 0,\n base = Math.pow(10, digits)\n): number => {\n return Math.round(base * number) / base;\n};\n\n// compute euclidean modulo of m % n\n// 计算 m % n 的欧几里德模数\n// https://en.wikipedia.org/wiki/Modulo_operation\nexport function euclideanModulo(n: number, m: number) {\n return ((n % m) + m) % m;\n}\n\n// https://en.wikipedia.org/wiki/Linear_interpolation\nexport function lerp(x: number, y: number, t: number) {\n return (1 - t) * x + t * y;\n}\n\nexport function lerpMap(\n v: number,\n fromStart: number,\n fromEnd: number,\n toStart: number,\n toEnd: number\n) {\n return (\n toStart + (toEnd - toStart) * ((v - fromStart) / (fromEnd - fromStart))\n );\n}\n\nexport const stepNumber =\n (min: number, max: number, step: number) => (value: number) => {\n const v = clamp(value, min, max);\n if (step == 0) {\n return v;\n }\n if (max - v < step) {\n return max;\n }\n return Math.round(v / step) * step;\n };\n\n// fixedNumberString(1.12345678, 6) = '1.12346'\n// fixedNumberString(1234,3) = '1.23e+3'\nexport function fixedNumberString(num: any, precision = 12): string {\n return parseNumber(num).toPrecision(precision);\n}\n\n// fixedDotNumberString(1.12345678, 6) = '1.123457'\nexport function fixedDotNumberString(num: any, precision = 12): string {\n return parseNumber(num).toFixed(precision);\n}\n\n// maxDotNumber(1234,3) = 1234\n// maxDotNumber(1.12345678, 6) = 1.123457\nexport function maxDotNumber(num: any, precision = 12): number {\n return +fixedDotNumberString(num, precision);\n}\n\n// decimalNumber(11.234) = 11\nexport function decimalNumber(num: any): number {\n return maxDotNumber(num, 0);\n}\n\nexport function formatNumber(n: number, count = 4, glue = \",\") {\n const regexp = new RegExp(`\\\\d{1,${count}}(?=(\\\\d{${count}})+$)`, \"g\");\n return String(n).replace(regexp, `$&${glue}`);\n}\n\nexport function extractNumber(str: any, defaultNumber?: number) {\n const match = regMatch(\"number-single\", String(str));\n return {\n hasNumber: !!match,\n number:\n match && !Array.isArray(match) && match.fullMatch\n ? parseFloat(match.fullMatch)\n : isOK(defaultNumber)\n ? (defaultNumber as number)\n : NaN,\n prefix:\n match && !Array.isArray(match) && match.fullMatch\n ? str.substring(0, match.matchIndex)\n : \"\",\n suffix:\n match && !Array.isArray(match) && match.fullMatch\n ? str.substring(match.matchIndex + match.fullMatch.length)\n : \"\"\n };\n}\n\nexport function extractAllNumbers(str: string): number[] {\n const matches = regMatch(\"number\", str);\n return matches\n ? Array.isArray(matches)\n ? matches.map((m) => Number(m.fullMatch))\n : [Number(matches.fullMatch)]\n : [];\n}\n\n/// 输出随机 1 或 -1\nexport function randomDirection() {\n return Math.random() > 0.5 ? 1 : -1;\n}\n\n/// 生成随机数 max = Infinity\nexport function randomFloat(min = 0, max = 100): number {\n return Math.random() * (max - min) + min;\n}\n\n/// 生成随机整数 max = Infinity\nexport function randomInt(min = 0, max = 100): number {\n return Math.floor(randomFloat(min, max));\n}\n\nexport function createNextInt(start = 0) {\n return () => ++start;\n}\n\n// Fast Half Float Conversions, http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf\nconst _tables = _generateTables();\nfunction _generateTables() {\n // float32 to float16 helpers\n const buffer = new ArrayBuffer(4);\n const floatView = new Float32Array(buffer);\n const uint32View = new Uint32Array(buffer);\n const baseTable = new Uint32Array(512);\n const shiftTable = new Uint32Array(512);\n for (let i = 0; i < 256; ++i) {\n const e = i - 127;\n // very small number (0, -0)\n if (e < -27) {\n baseTable[i] = 0x0000;\n baseTable[i | 0x100] = 0x8000;\n shiftTable[i] = 24;\n shiftTable[i | 0x100] = 24;\n // small number (denorm)\n } else if (e < -14) {\n baseTable[i] = 0x0400 >> (-e - 14);\n baseTable[i | 0x100] = (0x0400 >> (-e - 14)) | 0x8000;\n shiftTable[i] = -e - 1;\n shiftTable[i | 0x100] = -e - 1;\n // normal number\n } else if (e <= 15) {\n baseTable[i] = (e + 15) << 10;\n baseTable[i | 0x100] = ((e + 15) << 10) | 0x8000;\n shiftTable[i] = 13;\n shiftTable[i | 0x100] = 13;\n // large number (Infinity, -Infinity)\n } else if (e < 128) {\n baseTable[i] = 0x7c00;\n baseTable[i | 0x100] = 0xfc00;\n shiftTable[i] = 24;\n shiftTable[i | 0x100] = 24;\n // stay (NaN, Infinity, -Infinity)\n } else {\n baseTable[i] = 0x7c00;\n baseTable[i | 0x100] = 0xfc00;\n shiftTable[i] = 13;\n shiftTable[i | 0x100] = 13;\n }\n }\n // float16 to float32 helpers\n const mantissaTable = new Uint32Array(2048);\n const exponentTable = new Uint32Array(64);\n const offsetTable = new Uint32Array(64);\n for (let i = 1; i < 1024; ++i) {\n let m = i << 13; // zero pad mantissa bits\n let e = 0; // zero exponent\n // normalized\n while ((m & 0x00800000) === 0) {\n m <<= 1;\n e -= 0x00800000; // decrement exponent\n }\n m &= ~0x00800000; // clear leading 1 bit\n e += 0x38800000; // adjust bias\n mantissaTable[i] = m | e;\n }\n for (let i = 1024; i < 2048; ++i) {\n mantissaTable[i] = 0x38000000 + ((i - 1024) << 13);\n }\n for (let i = 1; i < 31; ++i) {\n exponentTable[i] = i << 23;\n }\n exponentTable[31] = 0x47800000;\n exponentTable[32] = 0x80000000;\n for (let i = 33; i < 63; ++i) {\n exponentTable[i] = 0x80000000 + ((i - 32) << 23);\n }\n exponentTable[63] = 0xc7800000;\n for (let i = 1; i < 64; ++i) {\n if (i !== 32) {\n offsetTable[i] = 1024;\n }\n }\n return {\n floatView: floatView,\n uint32View: uint32View,\n baseTable: baseTable,\n shiftTable: shiftTable,\n mantissaTable: mantissaTable,\n exponentTable: exponentTable,\n offsetTable: offsetTable\n };\n}\n\n// float32 to float16\nexport function toHalfFloat(val: number): number {\n if (Math.abs(val) > 65504) {\n console.warn(\"toHalfFloat(): Value out of range.\");\n }\n val = clamp(val, -65504, 65504);\n _tables.floatView[0] = val;\n const f = _tables.uint32View[0];\n const e = (f >> 23) & 0x1ff;\n return _tables.baseTable[e] + ((f & 0x007fffff) >> _tables.shiftTable[e]);\n}\n\n// float16 to float32\nexport function fromHalfFloat(val: number): number {\n const m = val >> 10;\n _tables.uint32View[0] =\n _tables.mantissaTable[_tables.offsetTable[m] + (val & 0x3ff)] +\n _tables.exponentTable[m];\n return _tables.floatView[0];\n}\n","/**\n * throttle 节流\n * ms 毫秒内只运行一次,若在 ms 毫秒内重复触发,只有一次生效\n */\nexport function throttle(fn: (...args: any[]) => any, ms: number) {\n let ready = true;\n return function (this: any, ...args: any[]) {\n if (!ready) {\n return;\n }\n ready = false;\n fn.apply(this, args);\n setTimeout(() => {\n ready = true;\n }, ms);\n };\n}\n\n/**\n * debounce 防抖\n * ms 毫秒后再执行该事件,若在 ms 毫秒内被重复触发,则重新计时\n * debounce 的问题在于它“太有耐心了”\n * 试想,如果用户的操作十分频繁——他每次都不等 debounce 设置的 delay 时间结束就进行下一次操作,\n * 于是每次 debounce 都为该用户重新生成定时器,回调函数被延迟了不计其数次。\n * 频繁的延迟会导致用户迟迟得不到响应,用户同样会产生“这个页面卡死了”的观感。\n */\nexport function debounce(fn: (...args: any[]) => any, ms: number) {\n let timer: ReturnType<typeof setTimeout>;\n return function (this: any, ...args: any[]) {\n clearTimeout(timer);\n timer = setTimeout(() => {\n fn.apply(this, args);\n }, ms);\n };\n}\n\n/// 用 Throttle 来优化 Debounce\nexport function debounceBetter(fn: (...args: any[]) => any, ms: number) {\n let last = +new Date();\n let timer: ReturnType<typeof setTimeout>;\n return function (this: any, ...args: any[]) {\n const now = +new Date();\n if (now - last < ms) {\n // 如果时间间隔小于我们设定的时间间隔阈值,则为本次触发操作设立一个新的定时器\n clearTimeout(timer);\n timer = setTimeout(() => {\n last = now;\n fn.apply(this, args);\n }, ms);\n } else {\n // 如果时间间隔超出了我们设定的时间间隔阈值,那就不等了,无论如何要反馈给用户一次响应\n clearTimeout(timer);\n last = now;\n fn.apply(this, args);\n }\n };\n}\n","// import { EventEmitter } from \"events\";\nimport type { Overloading } from \"./type_symbol\";\n\nexport interface EventBusListeners {\n [key: string | symbol]: (...payload: any[]) => void;\n}\n\n// export type EventBusListenersParameters<T extends EventBusListeners> =\n// Parameters<Values<T>>;\n\n// type Overloading<T> = (Values<T> extends any ? (...k: any[]) => void : any) extends (...k: infer I) => infer R ? I : any\nexport type EventBusListenersParameters<T extends EventBusListeners> =\n Overloading<T>;\n\n// 使用方式\n// import { EventBusListeners, EventBus, EventBusRaw } from \"@zyzgroup/core-common\";\n// interface CustomEventBusListeners extends EventBusListeners {\n// test: (a: string, b: number) => void;\n// }\n// const eb = new EventBus<CustomEventBusListeners>();\n// const ebr = new EventBusRaw<CustomEventBusListeners>();\n\n// in Node\n// export class EventBus<\n// T extends EventBusListeners = EventBusListeners,\n// K extends Extract<keyof T, string | symbol> = Extract<\n// keyof T,\n// string | symbol\n// >\n// > extends EventEmitter {\n// constructor() {\n// super();\n\n// // process.nextTick(() => {});\n// }\n\n// public on(eventName: K, listener: T[K]): this {\n// return super.on(eventName, listener);\n// }\n\n// public addListener(eventName: K, listener: T[K]): this {\n// return this.on(eventName, listener);\n// }\n\n// public prependListener(eventName: K, listener: T[K]): this {\n// return super.prependListener(eventName, listener);\n// }\n\n// public once(eventName: K, listener: T[K]): this {\n// return super.once(eventName, listener);\n// }\n\n// public prependOnceListener(eventName: K, listener: T[K]): this {\n// return super.prependOnceListener(eventName, listener);\n// }\n\n// public removeListener(eventName: K, listener: T[K]): this {\n// return super.removeListener(eventName, listener);\n// }\n\n// public off(eventName: K, listener: T[K]): this {\n// return super.off(eventName, listener);\n// }\n\n// public removeAllListeners(eventName?: K): this {\n// return super.removeAllListeners(eventName);\n// }\n\n// public emit(\n// eventName: K,\n// ...payload: T[K] extends (...args: infer Args) => infer Return\n// ? Args\n// : never\n// ): boolean {\n// return super.emit(eventName, ...payload);\n// }\n\n// public listeners(eventName: K) {\n// return super.listeners(eventName) as T[K][];\n// }\n\n// public rawListeners(eventName: K) {\n// return super.rawListeners(eventName) as T[K][];\n// }\n\n// public listenerCount(eventName: K) {\n// return super.listenerCount(eventName);\n// }\n// }\n\n// in Browser\nexport class EventBusRaw<\n T extends EventBusListeners,\n K extends keyof T = keyof T\n> {\n events: { [index: string | symbol]: T[K][] };\n\n constructor() {\n this.events = {};\n }\n\n on(type: K, handler: T[K]) {\n if (!this.events[type]) {\n this.events[type] = [];\n }\n this.events[type].push(handler);\n return this;\n }\n\n addListener(type: K, handler: T[K]) {\n this.on(type, handler);\n return this;\n }\n\n prependListener(type: K, handler: T[K]) {\n if (!this.events[type]) {\n this.events[type] = [];\n }\n this.events[type].unshift(handler);\n return this;\n }\n\n removeListener(type: K, handler: T[K]) {\n if (!this.events[type]) {\n return;\n }\n this.events[type] = this.events[type].filter((item) => item !== handler);\n return this;\n }\n\n off(type: K, handler: T[K]) {\n this.removeListener(type, handler);\n return this;\n }\n\n removeAllListeners(type?: K) {\n if (type) {\n this.events[type] = [];\n } else {\n this.events = {};\n }\n return this;\n }\n\n emit(\n type: K,\n ...payload: EventBusListenersParameters<T> // ...payload: T[K] extends (...args: infer Args) => infer Return ? Args : never\n ) {\n if (this.events[type]) {\n this.events[type].forEach((item) => {\n // Reflect.apply(item, this, payload);\n item(...payload);\n });\n }\n return this;\n }\n\n once(type: K, handler: T[K]) {\n const getOnceWrapFn = () => {\n let fired = false;\n return ((\n ...payload: EventBusListenersParameters<T> // ...payload: T[K] extends (...args: infer Args) => infer Return ? Args : never\n ): void => {\n if (!fired) {\n fired = true;\n // Reflect.apply(handler, this, payload);\n handler(...payload);\n this.off(type, onceFn);\n }\n }) as T[K];\n };\n const onceFn = getOnceWrapFn();\n this.on(type, onceFn);\n return this;\n }\n}\n","import { unaryFn, variadicFn } from \"./type_symbol\";\n\nexport const noop = () => {};\nexport const identity = <T = any>(v: T) => v;\nexport const konst =\n <T = any>(v: T) =>\n () =>\n v;\nexport const kTrue = konst<true>(true);\nexport const kFalse = konst<false>(false);\n\n// 柯里化\nexport function curry(fn: variadicFn, ...args: any[]) {\n const length = fn.length; // fn 的参数个数\n args = args || [];\n return function (this: any, ...otherArgs: any[]) {\n const totalArgs = args.concat(Array.prototype.slice.call(otherArgs));\n if (totalArgs.length < length) {\n return curry.call(this, fn, ...totalArgs);\n } else {\n return fn.apply(this, totalArgs);\n }\n };\n}\n\n// 组合\n// compose(f, g, h) = (...args) => f(g(h(...args)))\nexport function compose(...fns: variadicFn[]): variadicFn {\n if (fns.length === 0) {\n return (...args: any[]) => args;\n }\n if (fns.length === 1) {\n return fns[0];\n }\n return fns.reduce(\n (a, b) =>\n (...args) =>\n a(b(...args))\n );\n}\n\n// 串联 | 管道\n// pip(f, g, h) = (...args) => h(g(f(...args)))\nexport const pipe = (...fns: variadicFn[]): variadicFn => {\n if (fns.length === 0) {\n return (...args: any[]) => args;\n }\n if (fns.length === 1) {\n return fns[0];\n }\n return fns.reduceRight(\n (a, b) =>\n (...args) =>\n a(b(...args))\n );\n};\n\n// 异步串联\n/**\n * const addA = (value, next) => {\n * next(value + 'A', 'a');\n * };\n * const addB = (value, anotherValue, next) => {\n * console.log(anotherValue); // => a\n * next(value + 'B');\n * };\n * const consoleLog = (value, next) => {\n * console.log(value);\n * };\n * pipeNext(addA, addB, consoleLog)('1'); // 1AB\n */\nexport const pipeNext = (...fns: variadicFn[]): variadicFn => {\n if (fns.length === 0) {\n return (...args: any[]) => args;\n }\n if (fns.length === 1) {\n return fns[0];\n }\n return fns.reduceRight(\n (next, fn) =>\n (...args) =>\n fn(...args, next),\n noop\n );\n};\n\n/**\n * @description 蹦床函数,循环调用返回函数的函数,将递归执行转为循环执行,适用于没有尾递归优化的环境\n *\n * 原递归函数\n * function sum(x, y) {\n * if (y > 0) {\n * return sum( x + 1, y - 1);\n * } else {\n * return x;\n * }\n * }\n * 改造后的递归函数,返回函数\n * function sum(x, y) {\n * if (y > 0) {\n * return sum.bind(null, x + 1, y - 1); // 这里是返回一个函数,而不是函数里面调用函数,从而避免递归执行\n * } else {\n * return x;\n * }\n * }\n * trampoline(sum(1,1000000));\n */\nexport function trampoline(f: variadicFn) {\n while (f && f instanceof Function) {\n f = f();\n }\n return f;\n}\n\n/**\n * @description 尾递归优化\n *\n * const sum = tco(function(x, y) {\n * \t if (y > 0) {\n * \t return sum(x + 1, y - 1)\n * \t }\n * \t else {\n * \t return x\n * \t }\n * \t});\n * \tsum(1, 100000)\t// 100001\n */\nexport function tco(f: variadicFn) {\n let value: any;\n let active = false;\n const accumulated: any[] = [];\n return function accumulator(this: any, ...args: any) {\n accumulated.push(args); // 第二次及以后只push参数\n // 避免递归执行: 只第一次执行,递归转为循环\n if (!active) {\n active = true;\n while (accumulated.length) {\n value = f.apply(this, accumulated.shift());\n }\n active = false;\n return value;\n }\n };\n}\n\n/**\n * 缓存函数结果\n */\nexport function memoize(f: variadicFn) {\n const cache: Record<string, any> = {};\n return function (this: any, ...args: any[]) {\n const str = JSON.stringify(args);\n cache[str] = cache[str] || f.apply(this, args);\n return cache[str];\n };\n}\n\n/**\n * 函数参数反转\n */\nexport function reverseArgs(fn: variadicFn) {\n return function (this: any, ...args: any[]) {\n return fn.apply(this, args.reverse());\n };\n}\n\nexport function once(fn: variadicFn) {\n let called = false;\n return function (this: any, ...args: any[]) {\n if (called) {\n return;\n }\n called = true;\n return fn.apply(this, args);\n };\n}\n\nexport function conditional(\n ifFn: variadicFn,\n thenFn: variadicFn,\n elseFn: variadicFn\n) {\n return function (this: any, ...args: any[]) {\n return ifFn.apply(this, args)\n ? thenFn.apply(this, args)\n : elseFn.apply(this, args);\n };\n}\n\nexport function tryCatch(tryer: variadicFn, catcher: unaryFn) {\n return function (this: any, ...args: any[]) {\n try {\n return tryer.apply(this, args);\n } catch (e: any) {\n return catcher.apply(this, e);\n }\n };\n}\n\n// 函数式编程调试, trace不是纯函数\nexport function trace(tag: string) {\n return (x: any) => {\n console.log(tag, x);\n return x;\n };\n}\n\nexport function transformUnaryArg(\n fn: unaryFn,\n transform: (v: any) => any\n): unaryFn {\n return function (this: any, arg: any) {\n return fn.call(this, transform(arg));\n };\n}\n\nexport const map =\n <T = any>(fn: (v: T, i?: number, a?: T[]) => any) =>\n (arr: T[]) =>\n arr.map(fn);\n\nexport const reduce =\n <T = any>(fn: (p: T, c: T, i?: number, a?: T[]) => any) =>\n (arr: T[], init?: any) =>\n arr.reduce(fn, init);\n\n// export const add = (x: number) => (y: number) => x + y;\n// export const minus = (x: number) => (y: number) => x - y;\n// export const multiply = (x: number) => (y: number) => x * y;\n// export const divide = (x: number) => (y: number) => x / y;\n\ndeclare global {\n interface Array<T> {\n ap: (args: any[]) => any[];\n }\n}\n// const arg1 = [1, 3];\n// const arg2 = [4, 5];\n// const partiallyAppliedAdds = [add].ap(arg1); // [(y) => 1 + y, (y) => 3 + y]\n// partiallyAppliedAdds.ap(arg2); // [5, 6, 7, 8]\nArray.prototype.ap = function (args: any[]) {\n return this.reduce((acc, fn) => acc.concat(args.map(fn)), []);\n};\n","import { type State, type ObjectKey, type voidFn } from \"./type_symbol\";\n\n// 响应式系统 的核心就是 数据代理\n// 数据 在 getter 时进行 依赖收集,在 setter 时对依赖 触发更新\n\n// 响应函数\ntype Effect = voidFn;\n\nlet activeEffect: Effect | null;\n\n// 订阅者 : 执行一次,自动收集依赖\nexport function watchEffect(effect: Effect) {\n activeEffect = effect;\n effect(); // effect 里面 get数据 时 自动收集依赖\n activeEffect = null;\n}\n\n// 订阅器 : 发布订阅\nexport class Dep {\n subscribers: Set<Effect> = new Set();\n add() {\n if (activeEffect && !this.subscribers.has(activeEffect)) {\n this.subscribers.add(activeEffect);\n }\n }\n notify() {\n this.subscribers.forEach((effect) => effect());\n }\n}\n\nconst targetKeyDepMap = new WeakMap<State, Map<ObjectKey, Dep>>();\n\nfunction getDep(target: State, key: ObjectKey) {\n let keyDepMap = targetKeyDepMap.get(target);\n if (!keyDepMap) {\n keyDepMap = new Map();\n targetKeyDepMap.set(target, keyDepMap);\n }\n let dep = keyDepMap.get(key);\n if (!dep) {\n dep = new Dep();\n keyDepMap.set(key, dep);\n }\n return dep;\n}\n\n// 监听器 : defineProperty 数据劫持\n// 无法劫持新创建的属性\n// 无法劫持数组的变化\n// 无法劫持利用索引修改数组元素\nexport function reactiveVue2<T extends State>(raw: T, deep = false): T {\n (Object.keys(raw) as Array<keyof T>).forEach((key) => {\n let value = raw[key];\n if (deep && typeof value === \"object\" && value !== null) {\n // array or object\n raw[key] = reactiveVue3(value, deep);\n } else {\n const dep = getDep(raw, key);\n Object.defineProperty(raw, key, {\n configurable: true, // 是否可删除、可配置\n enumerable: true, // 是否可枚举\n // 数据描述符\n // value : 默认为 undefined\n // writable : 是否可读写\n // 存取描述符\n get() {\n // 通过 getter 自动收集依赖\n dep.add();\n return value; // 避免死循环\n },\n set(v) {\n if (value != v) {\n value = v;\n // 通过 setter 触发更新\n dep.notify();\n }\n }\n });\n }\n });\n return raw;\n}\n\nexport function ref(value: any, deep = false) {\n return reactiveVue2({ value }, deep);\n}\n\nexport function toValue(maybeRefOrGetter: any) {\n if (maybeRefOrGetter.value) {\n return maybeRefOrGetter.value;\n }\n if (typeof maybeRefOrGetter == \"function\") {\n return maybeRefOrGetter();\n }\n return maybeRefOrGetter;\n}\n\n// export function reactiveArrayVue2(arr: any[]) {\n// const originProto = Array.prototype;\n// const arrayPrototype = Object.create(originProto);\n// // 定义需要重写的方法\n// const methods = [\n// \"push\",\n// \"pop\",\n// \"shift\",\n// \"unshift\",\n// \"splice\",\n// \"sort\",\n// \"reverse\"\n// ];\n// methods.forEach((method) => {\n// arrayPrototype[method] = function (...params: any[]) {\n// const result = originProto[method].apply(this, params);\n// return result;\n// };\n// });\n// Object.setPrototypeOf(arr, arrayPrototype);\n// }\n\n// 监听器 : Proxy 数据代理\n// 可以监听新创建的属性\n// 可以监听数组的变化\n// 可以监听利用索引修改数组元素\nexport function reactiveVue3<T extends State>(raw: T, deep = false): T {\n const handler: ProxyHandler<T> = {\n // 拦截对象属性的读取\n // target 目标对象、key 键值、receiver 当前proxy实例\n get(target, key, receiver) {\n // 只要 Proxy 对象具有的代理方法,Reflect 对象全部具有,以静态方法的形式存在\n // - 修改某些 Object 方法的返回结果,让其变得更合理(定义不存在属性行为的时候不报错而是返回 false)\n const prevValue = Reflect.get(target, key, receiver);\n if (\n deep &&\n typeof prevValue === \"object\" &&\n prevValue !== null &&\n !(\"isYZReactiveProxy\" in prevValue)\n ) {\n // 递归 : array or object,以支持深层次对象的数据代理\n const deepProxy = reactiveVue3(prevValue, deep) as any;\n deepProxy[\"YZReactiveProxyParentTarget\"] = target;\n deepProxy[\"YZReactiveProxyParentKey\"] = key;\n Reflect.set(receiver, key, deepProxy);\n }\n // 通过 getter 自动收集依赖\n const dep = getDep(target, key);\n dep.add();\n return Reflect.get(target, key, receiver);\n },\n // 拦截对象属性的设置\n // target 目标对象、key 键值、value 值、receiver 当前proxy实例\n set(target, key, value, receiver) {\n const prevValue = Reflect.get(target, key, receiver);\n const r = Reflect.set(target, key, value, receiver);\n if (Array.isArray(target)) {\n // 通过 setter 触发更新\n const dep = getDep(\n target[\"YZReactiveProxyParentTarget\"],\n target[\"YZReactiveProxyParentKey\"]\n );\n dep.notify();\n } else {\n if (prevValue != value) {\n // 通过 setter 触发更新\n const dep = getDep(target, key);\n dep.notify();\n }\n }\n return r;\n },\n // 拦截 `key in proxy` 的操作,返回一个布尔值\n has(target, key) {\n return key === \"isYZReactiveProxy\" || key in target;\n }\n // 拦截 `delete proxy[key]` 的操作,返回一个布尔值\n // deleteProperty(target, key) {\n // return true;\n // },\n // 拦截 `Object.keys(proxy)`、`for...in` 等循环,返回一个数组\n // ownKeys(target) {\n // return [];\n // },\n // 拦截 `Object.getOwnPropertyDescriptor(proxy, key)`,返回属性的描述对象\n // getOwnPropertyDescriptor(target, key) {\n // return {};\n // },\n // 拦截 `Object.defineProperty(proxy, key, desc`,返回一个布尔值\n // defineProperty(target, key, desc) {\n // return true;\n // },\n // 拦截 `Object.preventExtensions(proxy)`,返回一个布尔值\n // preventExtensions(target) {\n // return true;\n // },\n // 拦截 `Object.getPrototypeOf(proxy)`,返回一个对象\n // getPrototypeOf(target) {\n // return {};\n // },\n // 拦截 `Object.isExtensible(proxy)`,返回一个布尔值\n // isExtensible(target) {\n // return true;\n // },\n // 拦截 `Object.setPrototypeOf(proxy, proto)`,返回一个布尔值\n // setPrototypeOf(target, proto) {\n // return true;\n // },\n // 拦截 Proxy 实例作为函数调用的操作\n // apply(target, thisArg, args) {\n // return target.apply(thisArg, args);\n // }\n // 拦截 Proxy 实例作为构造函数调用的操作\n // construct(target, args) {\n // return {};\n // }\n };\n const proxy = new Proxy(raw, handler);\n // 取消代理 : Proxy.revocable(target, handler);\n return proxy;\n}\n\nexport const reactive = reactiveVue3;\n\n// const info1 = reactive({ name: \"David\", age: 18 });\n// const info2 = reactive({ count: 100 });\n\n// watchEffect(() => {\n// console.log(`effect1: ${info1.name} ${info1.age}`);\n// });\n// watchEffect(() => {\n// console.log(`effect2: ${info1.name}`);\n// });\n// watchEffect(() => {\n// console.log(`effect3: ${info1.age}`);\n// });\n// watchEffect(() => {\n// console.log(`effect4: ${info2.count}`);\n// });\n\n// console.log(\"------\");\n// info1.name = \"John\";\n// console.log(\"------\");\n// info1.age++;\n// console.log(\"------\");\n// info2.count++;\n\n// 执行结果\n// 'effect1: David 18'\n// 'effect2: David'\n// 'effect3: 18'\n// 'effect4: 100'\n// '------'\n// 'effect1: John 18'\n// 'effect2: John'\n// '------'\n// 'effect1: John 19'\n// 'effect3: 19'\n// '------'\n// 'effect4: 101'\n","/* eslint-disable prefer-rest-params */\nimport { Iterator, Generator, variadicFn, Thunk } from \"./type_symbol\";\nimport { isPromise, isGenerator, isIterator, isPlainObject } from \"./object\";\n\n// function* gen() {\n// try {\n// yield xxx;\n// yield* anotherGen;\n// } catch (e) {\n// console.log(\"内部捕获\", e);\n// }\n// }\n// const i = gen();\n// i.next();\n// try {\n// i.throw(\"a\"); // 内部捕获\n// i.throw(\"b\"); // 外部捕获\n// } catch (e) {\n// console.log(\"外部捕获\", e);\n// }\n\n// - Generator运行:惰性求值(Lazy Evaluation)\n// \t- 1. 遇到 yield 表达式,就暂停执行,并将紧跟在 yield 后面的那个表达式的值,作为返回的 iterator.value\n// \t- 2. 下一次调用 next 方法时,再恢复执行,直到遇到下一个 yield 表达式\n// \t\t- next 方法可以带一个参数,该参数就会被当作上一个 yield 表达式的返回值。\n// \t\t- 如果 next 方法未带参数,上一个 yield 表达式的返回值为 undefined\n// \t- 3. 如果没有再遇到新的 yield 表达式,就一直运行到函数结束,直到 return 语句为止,并将 return 语句后面的表达式的值,作为返回的对象的 value 属性值,此时返回的对象的 done 属性值为 true\n// \t\t- 如果该函数没有return语句,则返回的对象的 value 属性值为 undefined\n\n// 如果 Generator 函数内部没有 try...catch 代码块,那么 throw 方法抛出的错误,将被外部 try...catch 代码块捕获\n// 如果 Generator 函数内部和外部,都没有 try...catch 代码块,那么程序将报错,直接中断执行\n// throw()方法抛出的错误要被内部捕获,前提是必须至少执行过一次 next 方法。否则不会被内部捕获\n// throw()方法被捕获以后,会附带执行下一条 yield 表达式。也就是说,会附带执行一次 next 方法。\n// 一旦 Generator 执行过程中抛出错误,且没有被内部捕获,就不会再执行下去了。如果此后还调用 next 方法,将返回一个 value 属性等于 undefined、done 等于 true 的对象\n\n// Generator 函数可以作为异步编程的完整解决方案是因为:函数体内外的数据交换和错误处理机制。\n// 一个线程(或函数)执行到一半,可以暂停执行,将执行权交给另一个线程(或函数),等到稍后收回执行权的时候,再恢复执行。\n// 这种可以并行执行、交换执行权的线程(或函数),就称为协程\n// Generator 函数是 ES6 对协程的实现,但属于不完全实现。Generator 函数被称为“半协程”(semi-coroutine),\n// 意思是只有 Generator 函数的调用者,才能将程序的执行权还给 Generator 函数。如果是完全执行的协程,任何函数都可以让暂停的协程继续执行\n\n// function* main() {\n// var result = yield request(\"http://some.url\");\n// var resp = JSON.parse(result);\n// console.log(resp.value);\n// }\n// function request(url) {\n// makeAjaxCall(url, function (response) {\n// it.next(response);\n// });\n// }\n// var it = main();\n// it.next();\n\n// async + await\n// async 就是 Generator 函数的语法糖,就是将 Generator 函数的星号* 替换成 async,将 yield 替换成 await\n// - 1. 内置执行器\n// \t- Generator 函数的执行必须靠执行器,所以才有了co模块,而 async 函数自带执行器。也就是说,async 函数的执行,与普通函数一模一样。\n// - 2. 更好的语义\n// \t- async 和 await,比起 星号 和 yield,语义更清楚了。async 表示函数里有异步操作,await 表示紧跟在后面的表达式需要等待结果。\n// - 3. 更广的适用性\n// \t- co模块约定,yield 命令后面只能是 Thunk 函数或 Promise 对象,而 async 函数的 await 命令后面,可以是 Promise 对象和原始类型的值(数值、字符串和布尔值,但这时会自动转成立即 resolved 的 Promise 对象)。\n// - 4. 返回值是 Promise\n// \t- async 函数的返回值是 Promise 对象,这比 Generator 函数的返回值是 Iterator 对象方便多了。你可以用 then 方法指定下一步的操作。\n// \t- 进一步说,async 函数完全可以看作多个异步操作,包装成的一个 Promise 对象,而 await 命令就是内部 then 命令的语法糖。\n\nexport type Deferred<T = any> = {\n resolve: (value: T | PromiseLike<T>) => void;\n reject: (reason?: any) => void;\n promise: Promise<T>;\n};\nexport function deferred<T = any>(): Deferred<T> {\n const def: any = {};\n def.promise = new Promise<T>((resolve, reject) => {\n def.resolve = resolve;\n def.reject = reject;\n });\n return def as Deferred<T>;\n}\n\nexport function arrayOfDeferred(length: number) {\n const arr = [];\n for (let i = 0; i < length; i++) {\n arr.push(deferred());\n }\n return arr;\n}\n\nexport function runSyncGenerator(gen: Generator) {\n const i = gen();\n let result = i.next();\n while (!result.done) {\n result = i.next(result.value);\n }\n}\n\nexport function runAsyncGeneratorValueThunk(gen: Generator) {\n const i = gen();\n // thunk函数签名\n function run(err?: any, data?: any) {\n if (err) {\n return i.throw?.(err);\n }\n const result = i.next(data);\n if (result.done) {\n return;\n }\n // result.value 就是 thunk函数,异步完成后将执行权交还\n result.value(run);\n }\n run();\n}\n\nexport function runAsyncGeneratorValuePromise(gen: Generator) {\n const i = gen();\n function run(data?: any) {\n const result = i.next(data);\n if (result.done) {\n return result.value;\n }\n // result.value 就是 Promise对象,异步完成后将执行权交还\n result.value.then(run).catch(i?.throw);\n }\n run();\n}\n\n/**\n * 将多参数函数替换成一个只接受 Thunk回调函数 作为参数的单参数函数\n * fn(args1, args2, ... , callback) = thunkify(fn)(args1, args2, ... )(callback)\n */\nexport function thunkify(this: any, fn: variadicFn) {\n const ctx = this;\n return (...rest: any[]) =>\n // Thunk函数签名\n (callback: (err?: any, data?: any) => void) => {\n let called: boolean;\n try {\n fn.apply(ctx, [\n ...rest,\n (err?: any, data?: any) => {\n if (called) {\n return;\n }\n called = true;\n // 原fn的callback参数过多\n if (arguments.length > 2) {\n data = Array.prototype.slice.call(arguments, 1);\n callback(err, ...data);\n } else {\n callback(err, data);\n }\n }\n ]);\n } catch (err) {\n callback(err);\n }\n };\n}\n\n/// Convert a `yield`ed value into a promise\nexport function toPromise(this: any, obj: any): any {\n if (!obj) {\n return obj;\n }\n if (isPromise(obj)) {\n return obj;\n }\n if (isGenerator(obj) || isIterator(obj)) {\n return co.call(this, obj);\n }\n if (\"function\" == typeof obj) {\n return thunkToPromise.call(this, obj);\n }\n if (Array.isArray(obj)) {\n return arrayToPromise.call(this, obj);\n }\n if (isPlainObject(obj)) {\n return objectToPromise.call(this, obj);\n }\n return obj;\n}\n\nfunction thunkToPromise(this: any, thunk: Thunk) {\n const ctx = this;\n return new Promise(function (resolve, reject) {\n thunk.call(ctx, function (err?: any, res?: any) {\n if (err) {\n return reject(err);\n }\n if (arguments.length > 2) {\n res = Array.prototype.slice.call(arguments, 1);\n }\n resolve(res);\n });\n });\n}\n\nfunction arrayToPromise(this: any, obj: any[]) {\n return Promise.all(obj.map(toPromise, this));\n}\n\nfunction objectToPromise(this: any, obj: any) {\n const results = new obj.constructor();\n const keys = Object.keys(obj);\n const promises: Promise<any>[] = [];\n for (let i = 0, c = keys.length; i < c; i++) {\n const key = keys[i];\n const promise = toPromise.call(this, obj[key]);\n if (promise && isPromise(promise)) {\n results[key] = undefined;\n promises.push(\n promise.then(function (res: any) {\n results[key] = res;\n })\n );\n } else {\n results[key] = obj[key];\n }\n }\n return Promise.all(promises).then(function () {\n return results;\n });\n}\n\nexport function co(this: any, gen: Generator | Iterator): Promise<any> {\n const ctx = this;\n const args = Array.prototype.slice.call(arguments, 1);\n\n // we wrap everything in a promise to avoid promise chaining,\n // which leads to memory leak errors.\n // see https://github.com/tj/co/issues/180\n return new Promise(function (resolve, reject) {\n const iterator = isIterator(gen)\n ? (gen as Iterator)\n : (gen as Generator).apply(ctx, args);\n\n if (typeof iterator.next !== \"function\") {\n return resolve(iterator);\n }\n\n onFulfilled();\n\n function onFulfilled(res?: any) {\n let ret;\n try {\n ret = iterator.next(res);\n } catch (e) {\n return reject(e);\n }\n next(ret);\n }\n\n function onRejected(err?: any) {\n let ret;\n try {\n ret = iterator.throw?.(err);\n } catch (e) {\n return reject(e);\n }\n next(ret);\n }\n\n function next(ret?: any) {\n if (ret.done) {\n return resolve(ret.value);\n }\n const value = toPromise.call(ctx, ret.value);\n if (value && isPromise(value)) {\n return value.then(onFulfilled, onRejected);\n }\n return onRejected(\n new TypeError(\n \"You may only yield a function, promise, generator, array, or object, \" +\n 'but the following object was passed: \"' +\n String(ret.value) +\n '\"'\n )\n );\n }\n });\n}\n\n/// Promise\nlet _nativePromise;\ntry {\n _nativePromise = Promise;\n} catch (_) {\n // UNDO mock Promise\n _nativePromise = function () {};\n}\nexport const nativePromise = _nativePromise;\n\nexport const cancelablePromise = (promise: Promise<any>) => {\n let isCanceled = false;\n return {\n promise: new Promise((resolve, reject) => {\n promise.then(\n (value) =>\n isCanceled ? reject({ isCanceled: true, value }) : resolve(value),\n (error) => reject({ isCanceled: isCanceled, error })\n );\n }),\n cancel: () => (isCanceled = true)\n };\n};\n\nexport function timeoutLimitPromise(promise: Promise<any>, timeout: number) {\n let timeoutHandle: ReturnType<typeof setTimeout>;\n return Promise.race([\n promise,\n new Promise((resolve, reject) => {\n timeoutHandle = setTimeout(() => reject(new Error(\"Timeout\")), timeout);\n })\n ])\n .then((data) => {\n clearTimeout(timeoutHandle);\n return data;\n })\n .catch((e) => {\n clearTimeout(timeoutHandle);\n return e;\n });\n}\n\nexport function chainPromise(promises: Promise<any>[]) {\n let result: any = null;\n let p = Promise.resolve();\n for (const _p of promises) {\n p = p.then((val) => {\n result = val;\n return _p;\n });\n }\n return p\n .catch((e) => {\n /* 忽略错误,继续执行 */\n })\n .then(() => {\n return result;\n });\n}\n\nconst MAX_SIGNED_INT = 2147483647;\n\n/// await delayAsync(300)\nexport function delayAsync(ms: number) {\n return new Promise<void>((resolve) => {\n setTimeout(resolve, Math.min(MAX_SIGNED_INT, ms));\n });\n}\n\nexport function delaySync(ms: number) {\n ms = Math.min(MAX_SIGNED_INT, ms);\n let flag = true;\n const now = Date.now();\n while (flag) {\n if (Date.now() - now > ms) {\n flag = false;\n }\n }\n}\n","type EventMap = GlobalEventHandlersEventMap &\n ElementEventMap &\n HTMLElementEventMap &\n DocumentEventMap &\n WindowEventHandlersEventMap &\n WindowEventMap &\n MediaQueryListEventMap;\n\nexport const useEventListener = <K extends keyof EventMap>(\n target: EventTarget,\n event: K,\n handler: (e: EventMap[K]) => void | Promise<void>\n): (() => void) => {\n const eventHandler = async (e: Event) => {\n await handler(e as EventMap[K]);\n };\n\n // 捕获阶段 -> 目标阶段 -> 冒泡阶段\n // useCapture 用于指定是否在捕获阶段进行处理,一般设置为 false 与 IE浏览器保持一致\n target.addEventListener(event, eventHandler, false);\n\n return () => {\n target.removeEventListener(event, eventHandler, false);\n };\n};\n","import { EventBusRaw } from \"@zyzgroup/core-common\";\n\nexport function useEmit() {\n const eb = new EventBusRaw();\n\n return {\n on: (name: string, cb: (...v: any[]) => void) => {\n eb.on(name, cb);\n },\n off: (name: string, cb: (...v: any[]) => void) => {\n eb.off(name, cb);\n },\n emit: (name: string, ...v: any[]) => {\n eb.emit(name, ...v);\n }\n };\n}\n","import { once } from \"@zyzgroup/core-common\";\nimport { useEmit } from \"./useEmit\";\nimport { useEventListener } from \"./useEventListener\";\n\n// eslint-disable-next-line no-debugger\n// debugger;\n\n// BOM Browser Object Model\n// BOM 的顶级对象是 window\n\n// const vendors = [\"-moz-\", \"-o-\", \"-webkit-\", \"-ms-\", \"\"];\n\n// const target = document.documentElement || document || window;\n\n// history\n// history.go(3); //向前跳转三个记录\n// history.go(-1); //向后跳转一个记录\n// history.forward() 向前跳转一个页面\n// history.back() 向后跳转一个页面\n// history.length 获取历史记录数\n\n// location.reload(true)\n\n// screen\n\n// const myWin = window.open(\"htttp://www.vue3js.cn\", \"topFrame\");\n// myWin.close();\n\nconst eb = useEmit();\n\nlet prevUrl = \"\";\nconst observer = new MutationObserver((_records, _observer) => {\n if (location.href !== prevUrl) {\n prevUrl = location.href;\n eb.emit(\"urlchange\", location.href);\n }\n});\nobserver.observe(document, {\n attributes: true,\n childList: true,\n subtree: true\n});\n// observer.disconnect();\n\nuseEventListener(window, \"hashchange\", () => {\n eb.emit(\"hashchange\", location.hash);\n});\n\nuseEventListener(window, \"popstate\", (e: PopStateEvent) => {\n eb.emit(\"popstate\", e.state);\n});\n\nuseEventListener(\n window,\n \"orientationchange\" in window ? \"orientationchange\" : \"resize\",\n (e: Event | UIEvent) => {\n const width = (e.target as Window).innerWidth;\n const height = (e.target as Window).innerHeight;\n eb.emit(\"windowresize\", width, height);\n }\n);\n\nlet isWindowLoaded = false;\nuseEventListener(window, \"load\", () => {\n eb.emit(\"load\");\n isWindowLoaded = true;\n});\n\nuseEventListener(window, \"beforeunload\", (e: BeforeUnloadEvent) => {\n eb.emit(\"beforeunload\", e);\n});\n\nuseEventListener(window, \"pagehide\", (e: Event) => {\n eb.emit(\"pagehide\", e);\n});\n\nuseEventListener(window, \"focus\", (e: Event) => {\n eb.emit(\"focus\", e);\n});\n\nuseEventListener(window, \"blur\", (e: Event) => {\n eb.emit(\"blur\", e);\n});\n\n/// The most reliable way\nuseEventListener(window, \"visibilitychange\", (e: Event) => {\n if (document.hidden) {\n eb.emit(\"windowhidden\", e);\n } else {\n eb.emit(\"windowvisible\", e);\n }\n});\n\n// 单例模式\nexport const useWindow = {\n getSelectedText: () => window.getSelection()?.toString() || \"\",\n\n isTabInView: () => !document.hidden,\n\n onurlchange: (cb: (...v: any[]) => void) => {\n eb.on(\"urlchange\", cb);\n return () => {\n eb.off(\"urlchange\", cb);\n };\n },\n\n onhashchange: (cb: (hash: any) => void) => {\n eb.on(\"hashchange\", cb);\n return () => {\n eb.off(\"hashchange\", cb);\n };\n },\n\n onpopstate: (cb: (state: any) => void) => {\n eb.on(\"popstate\", cb);\n return () => {\n eb.off(\"popstate\", cb);\n };\n },\n\n // pushstate(\"/home?name=xxx\")\n pushstate: (url: string, state: any = null) => {\n history.pushState(state, \"\", url);\n // window.dispatchEvent(new PopStateEvent(\"name\", { state }));\n },\n\n replacestate: (url: string, state: any = null) => {\n history.replaceState(state, \"\", url);\n },\n\n onwindowresize: (cb: (width: number, height: number) => void) => {\n eb.on(\"windowresize\", cb);\n return () => {\n eb.off(\"windowresize\", cb);\n };\n },\n\n onload: (cb: () => void) => {\n const cbOnce = once(cb);\n eb.on(\"load\", cbOnce);\n if (isWindowLoaded) {\n cbOnce();\n }\n return () => {\n eb.off(\"load\", cbOnce);\n };\n },\n\n onbeforeunload: (cb: (v: any) => void) => {\n eb.on(\"beforeunload\", cb);\n return () => {\n eb.off(\"beforeunload\", cb);\n };\n },\n\n onpagehide: (cb: (v: any) => void) => {\n eb.on(\"pagehide\", cb);\n return () => {\n eb.off(\"pagehide\", cb);\n };\n },\n\n onfocus: (cb: (v: any) => void) => {\n eb.on(\"focus\", cb);\n return () => {\n eb.off(\"focus\", cb);\n };\n },\n\n onblur: (cb: (v: any) => void) => {\n eb.on(\"blur\", cb);\n return () => {\n eb.off(\"blur\", cb);\n };\n },\n\n onwindowvisible: (cb: (v: any) => void) => {\n eb.on(\"windowvisible\", cb);\n return () => {\n eb.off(\"windowvisible\", cb);\n };\n },\n\n onwindowhidden: (cb: (v: any) => void) => {\n eb.on(\"windowhidden\", cb);\n return () => {\n eb.off(\"windowhidden\", cb);\n };\n }\n};\n\n// The DOMContentLoaded event is fired when the document has been completely loaded and parsed, without waiting for stylesheets, images, and subframes to finish loading\n// the load event can be used to detect a fully-loaded page\nexport function onDocumentReady(cb: () => void) {\n let isCalled = false;\n function check() {\n if (document.readyState === \"loading\") {\n return;\n }\n if (isCalled) {\n document.removeEventListener(\"DOMContentLoaded\", check, false);\n return;\n }\n isCalled = true;\n document.removeEventListener(\"DOMContentLoaded\", check, false);\n cb();\n }\n document.addEventListener(\"DOMContentLoaded\", check, false);\n check();\n}\n","import { getGlobal } from \"@zyzgroup/core-common\";\n\n// Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Mobile Safari/537.36\n// Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36\nexport const getOperatingSystem = () => {\n const userAgent = navigator.userAgent.toLowerCase();\n let operatingSystem = \"Unknown\";\n if (/iphone|ipad|ipod/i.test(userAgent)) {\n operatingSystem = \"iOS\";\n } else if (/android/i.test(userAgent)) {\n operatingSystem = \"Android\";\n } else if (/BlackBerry/i.test(userAgent)) {\n operatingSystem = \"BlackBerry\";\n } else if (/mac/i.test(userAgent)) {\n operatingSystem = \"macOS\";\n } else if (/win/i.test(userAgent)) {\n operatingSystem = \"Windows\";\n } else if (/linux/i.test(userAgent)) {\n operatingSystem = \"Linux\";\n } else if (/bsd/i.test(userAgent)) {\n operatingSystem = \"BSD\";\n }\n return operatingSystem.toLowerCase();\n};\n\nexport function getOperatingSystemVersion(ua = navigator.userAgent) {\n let osVersion = \"Unknown\";\n if (/iPhone|iPad|iPod/i.test(ua)) {\n const match = ua.match(/OS (\\d+_\\d+)/i);\n if (match) {\n osVersion = match[1].replace(\"_\", \".\");\n }\n } else if (/Android/i.test(ua)) {\n const match = ua.match(/Android (\\d+\\.\\d+)/i);\n if (match) {\n osVersion = match[1];\n }\n } else if (/Mac OS X/i.test(ua)) {\n const match = ua.match(/Mac OS X (\\d+_\\d+)/i);\n if (match) {\n osVersion = match[1].replace(\"_\", \".\");\n }\n } else if (/Windows NT/i.test(ua)) {\n const match = ua.match(/Windows NT (\\d+\\.\\d+)/i);\n if (match) {\n osVersion = match[1];\n }\n }\n return osVersion.toLowerCase();\n}\n\nexport function compareVersion(v1, v2) {\n const vs1 = v1.split(\".\");\n const vs2 = v2.split(\".\");\n for (let i = 0, n = vs1.length; i < n; i++) {\n if (vs2.length == i) {\n return 1;\n }\n if (vs1[i] == vs2[i]) {\n continue;\n } else if (vs1[i] > vs2[i]) {\n return 1;\n } else {\n return -1;\n }\n }\n if (vs1.length != vs2.length) {\n return -1;\n }\n return 0;\n}\n\nexport const getBrowserClient = () => {\n const userAgent = navigator.userAgent.toLowerCase();\n let client = \"Unknown\";\n if (/opr/i.test(userAgent) || /opera/i.test(userAgent)) {\n client = \"Opera\";\n } else if (/chrome/i.test(userAgent)) {\n client = \"Chrome\";\n } else if (/firefox/i.test(userAgent)) {\n client = \"Firefox\";\n } else if (/safari/i.test(userAgent)) {\n client = \"Safari\";\n } else if (/edge/i.test(userAgent)) {\n client = \"Edge\";\n } else if (/msie|trident/i.test(userAgent)) {\n // client = \"Internet Explorer\";\n client = \"IE\";\n } else if (/MicroMessenger/i.test(userAgent)) {\n client = \"Wechat\";\n } else if (/alipay/i.test(userAgent)) {\n client = \"Ali\";\n }\n return client.toLowerCase();\n};\n\nexport const getBrowserClientVersion = () => {\n const userAgent = navigator.userAgent;\n let browserVersion = \"Unknown\";\n if (/Chrome/.test(userAgent)) {\n const match = userAgent.match(/Chrome\\/(\\d+\\.\\d+)/);\n if (match) {\n browserVersion = match[1];\n }\n } else if (/Firefox/.test(userAgent)) {\n const match = userAgent.match(/Firefox\\/(\\d+\\.\\d+)/);\n if (match) {\n browserVersion = match[1];\n }\n } else if (/Safari/.test(userAgent)) {\n const match = userAgent.match(/Version\\/(\\d+\\.\\d+)/);\n if (match) {\n browserVersion = match[1];\n }\n } else if (/Edge/.test(userAgent)) {\n const match = userAgent.match(/Edge\\/(\\d+\\.\\d+)/);\n if (match) {\n browserVersion = match[1];\n }\n } else if (/MSIE|Trident/.test(userAgent)) {\n const match = userAgent.match(/(?:MSIE|rv:)(\\d+\\.\\d+)/);\n if (match) {\n browserVersion = match[1];\n }\n }\n return browserVersion;\n};\n\nexport function getBrowserLanguage() {\n return (navigator.browserLanguage || navigator.language).toLowerCase();\n}\n\nexport function getTimeZone() {\n return Intl.DateTimeFormat().resolvedOptions().timeZone.toLowerCase();\n}\n\nexport function isIOS() {\n return getOperatingSystem() === \"ios\";\n}\n\nexport function isMacOS() {\n return getOperatingSystem() === \"macos\";\n}\n\nexport function isAppleDevice() {\n return isIOS() | isMacOS();\n}\n\nexport function isAndroid() {\n return getOperatingSystem() === \"android\";\n}\n\nexport function isMobile() {\n return isIOS() || isAndroid();\n}\n\nexport function getInternetExplorerVersion() {\n const ua = window.navigator.userAgent;\n const msie = ua.indexOf(\"MSIE \");\n if (msie > 0) {\n // IE 10 or older => return version number\n return parseInt(ua.substring(msie + 5, ua.indexOf(\".\", msie)), 10);\n }\n const trident = ua.indexOf(\"Trident/\");\n if (trident > 0) {\n // IE 11 => return version number\n const rv = ua.indexOf(\"rv:\");\n return parseInt(ua.substring(rv + 3, ua.indexOf(\".\", rv)), 10);\n }\n const edge = ua.indexOf(\"Edge/\");\n if (edge > 0) {\n // Edge (IE 12+) => return version number\n return parseInt(ua.substring(edge + 5, ua.indexOf(\".\", edge)), 10);\n }\n // other browser\n return -1;\n}\n\nexport const isIE = getInternetExplorerVersion() !== -1;\n// export function isIE() {\n// return getBrowserClient() === \"ie\";\n// }\n\nexport function isIE9or10() {\n const mode = document.documentMode;\n return mode && (mode === 9 || mode === 10);\n}\n\nexport function isWxBrowser() {\n return getBrowserClient() === \"wechat\";\n}\n\nexport function isAliBrowser() {\n return getBrowserClient() === \"ali\";\n}\n\n// 是否为微信小程序环境\nexport function isWxMiniProgram() {\n return (\n (isWxBrowser() && navigator.userAgent.match(/miniprogram/i)) ||\n window.__wxjs_environment === \"miniprogram\"\n );\n}\n\n// 是否为支付宝小程序环境\nexport function isAliMiniProgram() {\n return isAliBrowser() && navigator.userAgent.match(/miniprogram/i);\n}\n\nexport const hasDocument = \"undefined\" !== typeof document;\nexport const hasWindow = \"undefined\" !== typeof window;\nexport const hasHistory = \"undefined\" !== typeof history;\n\nexport const isBrowserSupportFileAPI =\n hasWindow &&\n window.File &&\n window.FileReader &&\n window.FileList &&\n window.Blob;\n\nexport const canUseWorker = (() => {\n const global = getGlobal();\n return !!(\n global.Worker &&\n global.Blob &&\n global.Promise &&\n global.OffscreenCanvas &&\n global.OffscreenCanvasRenderingContext2D &&\n global.HTMLCanvasElement &&\n global.HTMLCanvasElement.prototype.transferControlToOffscreen &&\n global.URL &&\n global.URL.createObjectURL\n );\n})();\n\nexport const canUsePaths =\n typeof Path2D === \"function\" && typeof DOMMatrix === \"function\";\n\nexport const canDrawBitmap = (function () {\n const global = getGlobal();\n // this mostly supports ssr\n if (!global.OffscreenCanvas) {\n return false;\n }\n const canvas = new OffscreenCanvas(1, 1);\n const ctx = canvas.getContext(\"2d\");\n ctx.fillRect(0, 0, 1, 1);\n const bitmap = canvas.transferToImageBitmap();\n try {\n ctx.createPattern(bitmap, \"no-repeat\");\n } catch (e) {\n return false;\n }\n return true;\n})();\n\n// http://stackoverflow.com/a/384380/182183\nexport const isElement =\n typeof HTMLElement === \"object\"\n ? function isElementDOM2(obj) {\n return obj instanceof HTMLElement;\n }\n : function isElementQuirky(obj) {\n return (\n obj &&\n typeof obj === \"object\" &&\n obj.nodeType === 1 &&\n typeof obj.nodeName === \"string\"\n );\n };\n\nexport const prefixes = \"webkit moz ms o\".split(\" \");\n\n/// 是不是浏览器内置函数\nexport function isNative(value) {\n return typeof value === \"function\" && /native code/.test(value.toString());\n}\n","import { toKebab, type AnyElement, toCamel } from \"@zyzgroup/core-common\";\nimport { VNode } from \"../vnode\";\nimport { getVnode, scheduleVnode } from \"./useVnode\";\nimport { parseTransformToMatrix } from \"../math/Matrix\";\n\n////// window.getComputedStyle() 可能导致性能问题的一些因素:\n// 1. 计算成本:\n// getComputedStyle 涉及到遍历元素的所有 CSS 规则(包括层叠和继承),计算出每个属性的最终值\n// 对于复杂的 CSS 树结构、大量样式规则或频繁变动的动态样式,这种计算可能较为耗时,尤其是在大型或复杂的网页中\n// 2. DOM 访问:\n// 调用 getComputedStyle 通常伴随着 DOM 元素的访问。频繁地跨 DOM 查询元素,特别是深度嵌套或数量众多的元素,会增加 DOM 访问的成本,导致潜在的性能瓶颈\n// 3. 重排与重绘:\n// 如果 getComputedStyle 被触发在元素样式改变之后,且这些变化影响了布局(如尺寸、位置变化),浏览器可能需要进行重新布局(重排)和/或重新绘制\n// 这些操作通常是昂贵的,尤其是在没有优化的情况下连续触发\n// 4. 内存消耗:\n// getComputedStyle 返回一个 CSSStyleDeclaration 对象,它包含了元素所有计算后的样式属性\n// 频繁调用并保存这些对象可能会增加内存消耗,特别是在循环或定时器中持续查询多个元素时\n// 5. 阻塞主线程:\n// 如果在关键渲染路径(如页面加载或用户交互期间)中同步调用 getComputedStyle,可能会阻塞浏览器主线程,延迟其他重要任务(如脚本执行、布局、绘制等)的处理,从而影响页面响应速度和用户体验\n////// 为了缓解上述潜在的性能问题,可以采取以下策略:\n// 1. 缓存计算结果:如果可能,尽量避免对同一元素的样式进行重复查询。将 getComputedStyle 的结果缓存起来,只有当知道样式确实发生变更时才重新计算\n// 2. 批量处理:如果有多个元素需要查询样式,尝试一次性收集所有元素并批量调用 getComputedStyle,而不是逐个查询,以减少 DOM 访问和计算次数\n// 3. 使用事件监听:对于动态变化的样式,使用 MutationObserver 或相关的事件(如 transitionend、animationend)来监听样式变化,而不是频繁轮询\n// 4. 优化查询时机:\n// 4.1 避免在动画帧、滚动事件等高频率回调中无必要地调用 getComputedStyle\n// 4.2 尽量在微任务中执行,利用浏览器的异步更新机制,减少对主线程的阻塞\n// 5. 减少不必要的样式计算:\n// 5.1 精简 CSS 规则,避免过度复杂和冗余的样式\n// 5.2 使用 CSS Containment 属性(如 contain: layout)来限制样式计算的范围\n\n// 考虑替代方案:\n// 如果只需要检测特定样式属性的变化,可以尝试使用更轻量级的 API,如 elment.getBoundingClientRect()(获取布局信息)或 elment.classList.contains()(检查类名存在)等\n////// elment.getBoundingClientRect() 方法相对于 window.getComputedStyle() 在某些情况下可以被认为是一种性能优化的选择,主要是基于以下几个原因:\n// 1. 更有限的计算范围:\n// getComputedStyle 计算的是元素的所有计算样式属性,包括但不限于尺寸、颜色、字体、边框、定位、背景等,这涉及对整个 CSSOM(CSS Object Model)和样式层叠过程的遍历。\n// 而 getBoundingClientRect() 只关心元素在视口中的几何位置和尺寸(top, right, bottom, left, width, height),计算范围明显更为有限\n// 它直接从布局引擎获取已计算好的布局信息,无需处理样式层叠和解析等复杂过程,因此通常具有较低的计算成本\n// 2. 避免样式计算:\n// getBoundingClientRect() 不涉及样式计算,它返回的是浏览器已经完成布局后,元素在当前视口坐标系统下的实际位置和大小\n// 这意味着即使元素的样式发生变化,只要尚未触发布局更新,该方法的结果不会立即改变\n// 相比之下,getComputedStyle 需要实时反映样式变化,每次调用都可能触发样式计算\n// 3. 非阻塞性:\n// getBoundingClientRect() 不触发重排(reflow)或重绘(repaint)。它提供的信息是布局阶段的副产品,浏览器在渲染过程中已经计算好并存储了这些数据\n// 因此,调用此方法不会直接影响渲染流水线,避免了可能阻塞主线程的操作\n// 4. 更低的内存开销:\n// getComputedStyle 返回一个包含所有计算样式的 CSSStyleDeclaration 对象,如果频繁调用且不及时释放内存,可能会积累大量临时对象\n// 相反,getBoundingClientRect() 返回的是一个相对轻量的 DOMRect 对象,仅包含位置和尺寸信息,内存占用较小\n// 5. 适用场景明确:\n// 当仅需要获取元素的布局相关数据(如位置、尺寸)时,使用 getBoundingClientRect() 直接满足需求,无需处理与当前任务无关的其他样式信息\n// 针对性更强的方法使用可以避免不必要的计算和资源消耗\n// 6. 更好的跨浏览器兼容性:\n// getBoundingClientRect() 是一个历史悠久且广泛支持的 API,其性能表现和行为在各主流浏览器中通常更为一致,减少了因浏览器差异带来的潜在性能问题\n\n// 对外接口\nexport function getStyle(\n el: AnyElement | any,\n prop?: string,\n pseudo?: string // :before\n) {\n const vnode = getVnode(el);\n vnode.props.style = vnode.props.style || {};\n if (!prop) {\n // read all\n // return atomReadStyles(el);\n return vnode.props.style;\n } else {\n // read single\n // return atomReadStyle(el, prop, pseudo);\n return (\n vnode.props.style[prop] ||\n vnode.props.style[toCamel(prop)] ||\n vnode.props.style[toKebab(prop)] ||\n \"\"\n );\n }\n}\n\n// 对外接口\nexport function setStyle(\n el: HTMLElement | any,\n prop: string | Record<string, string>,\n value?: string\n) {\n scheduleVnode(\n el,\n (vnode: VNode) => {\n vnode.props.style = vnode.props.style || {};\n if (typeof prop == \"string\" && value) {\n vnode.props.style[prop] = value;\n } else if (prop instanceof Object) {\n Object.keys(prop).forEach((key: string) => {\n vnode.props.style[key] = prop[key];\n });\n }\n },\n true\n );\n}\n\nexport function atomReadStyles(el: HTMLElement | any) {\n const styleStrings = [];\n if (getComputedStyle) {\n const styles = getComputedStyle(el);\n for (let i = 0, n = styles.length; i < n; i++) {\n styleStrings.push(styles[i] + \":\" + styles.getPropertyValue(styles[i]));\n }\n } else {\n // IE\n const styles = el.currentStyle;\n for (const prop in styles) {\n styleStrings.push(prop + \":\" + styles[prop]);\n }\n }\n styleStrings.push(...(el.style.cssText || \"\").split(\";\"));\n return Object.fromEntries(\n styleStrings\n .filter((a: string) => !!a) // filter: non-empty\n .map((a: string) =>\n a.split(\":\").map((a, i) => {\n if (i == 0) {\n return toCamel(a).trim();\n }\n return a.trim();\n })\n )\n );\n}\n\nexport function atomReadStyle(\n el: HTMLElement | any,\n prop: string,\n pseudo?: string // :before\n) {\n if (getComputedStyle) {\n prop = toKebab(prop);\n const style = getComputedStyle(el, pseudo);\n const priority = style.getPropertyPriority(prop);\n return (\n style.getPropertyValue(prop).trim() + (priority ? \"!\" + priority : \"\")\n );\n } else {\n return el.currentStyle[toCamel(prop)];\n }\n}\n\nexport function atomWriteStyle(\n el: HTMLElement | any,\n prop: string | Record<string, string>,\n value?: string\n) {\n if (typeof prop == \"string\" && value) {\n el.style.setProperty(\n toKebab(prop),\n value.replace(/!important/i, \"\"),\n String(value).toLowerCase().includes(\"!important\") ? \"important\" : \"\"\n );\n } else if (prop instanceof Object) {\n Object.keys(prop).forEach((key: string) => {\n atomWriteStyle(el, key, prop[key]);\n });\n }\n}\n\nexport function atomRemoveStyle(\n el: HTMLElement | any,\n prop: string | Record<string, string>\n) {\n if (typeof prop == \"string\") {\n el.style.removeProperty(toKebab(prop));\n } else {\n Object.keys(prop).forEach((key: string) => {\n atomRemoveStyle(el, key);\n });\n }\n}\n\nexport function injectStyle(\n styleSheetInnerText: string,\n el?: AnyElement | string\n) {\n let dom: Element | ShadowRoot | null;\n if (typeof el === \"string\") {\n const shadowRoot = document.querySelector(el)?.shadowRoot;\n if (shadowRoot) {\n dom = shadowRoot;\n } else {\n dom = document.querySelector(el);\n }\n } else {\n dom = el || document.getElementsByTagName(\"head\")[0];\n }\n const style = document.createElement(\"style\");\n style.innerHTML = styleSheetInnerText;\n if (dom) {\n dom.appendChild(style);\n return () => {\n if (dom instanceof HTMLElement || dom instanceof ShadowRoot) {\n dom.removeChild(style);\n }\n };\n } else {\n // const sheet = new CSSStyleSheet();\n // sheet.replaceSync(`.color { color: pink }`);\n // host.shadowRoot.adoptedStyleSheets.push(sheet);\n const position = document.styleSheets[0].insertRule(styleSheetInnerText);\n return () => {\n document.styleSheets[0].deleteRule(position);\n };\n }\n}\n\n/// convert css transform to matrix together\nexport function combineTransformToMatrix(\n el: AnyElement,\n changeAttrs: Record<string, any>,\n originAttrs: Record<string, any> = {}\n): Record<string, string> {\n if (!Object.prototype.hasOwnProperty.call(originAttrs, \"transform\")) {\n Object.assign(originAttrs, {\n transform: getStyle(el, \"transform\") || \"\"\n });\n }\n const matrix = parseTransformToMatrix(originAttrs.transform);\n const toAttrs: Record<string, string> = {};\n for (const attrName in changeAttrs) {\n const attrValue = changeAttrs[attrName];\n switch (attrName) {\n case \"transform\":\n break;\n case \"translate\":\n matrix.translate(attrValue[0] || 0, attrValue[1] || 0);\n break;\n case \"translateTo\":\n matrix.translateTo(attrValue[0] || 0, attrValue[1] || 0);\n break;\n case \"translateX\":\n matrix.translateX(attrValue || 0);\n break;\n case \"translateXTo\":\n matrix.translateXTo(attrValue || 0);\n break;\n case \"translateY\":\n matrix.translateY(attrValue || 0);\n break;\n case \"translateYTo\":\n matrix.translateYTo(attrValue || 0);\n break;\n case \"translateZ\":\n matrix.translateZ(attrValue || 0);\n break;\n case \"translateZTo\":\n matrix.translateZTo(attrValue || 0);\n break;\n case \"translate3d\":\n matrix.translate3d(\n attrValue[0] || 0,\n attrValue[1] || 0,\n attrValue[2] || 0\n );\n break;\n case \"translate3dTo\":\n matrix.translate3dTo(\n attrValue[0] || 0,\n attrValue[1] || 0,\n attrValue[2] || 0\n );\n break;\n case \"rotate\":\n if (typeof attrValue == \"number\") {\n matrix.rotate(attrValue || 0);\n } else {\n matrix.rotate(\n attrValue[0] || 0,\n attrValue[1] || 0,\n attrValue[2] || 0\n );\n }\n break;\n case \"rotateTo\":\n if (typeof attrValue == \"number\") {\n matrix.rotateTo(attrValue || 0);\n } else {\n matrix.rotateTo(\n attrValue[0] || 0,\n attrValue[1] || 0,\n attrValue[2] || 0\n );\n }\n break;\n case \"rotateX\":\n matrix.rotateX(attrValue || 0);\n break;\n case \"rotateXTo\":\n matrix.rotateXTo(attrValue || 0);\n break;\n case \"rotateY\":\n matrix.rotateY(attrValue || 0);\n break;\n case \"rotateYTo\":\n matrix.rotateYTo(attrValue || 0);\n break;\n case \"rotateZ\":\n matrix.rotateZ(attrValue || 0);\n break;\n case \"rotateZTo\":\n matrix.rotateZTo(attrValue || 0);\n break;\n case \"rotate3d\":\n matrix.rotate3d(\n attrValue[0] || 0,\n attrValue[1] || 0,\n attrValue[2] || 0\n );\n break;\n case \"rotate3dTo\":\n matrix.rotate3dTo(\n attrValue[0] || 0,\n attrValue[1] || 0,\n attrValue[2] || 0\n );\n break;\n case \"scale\":\n if (typeof attrValue == \"number\") {\n matrix.scale(attrValue || 1);\n } else {\n matrix.scale(\n attrValue[0] || 1,\n attrValue[1] || 1,\n attrValue[2] || 0,\n attrValue[3] || 0\n );\n }\n break;\n case \"scaleTo\":\n if (typeof attrValue == \"number\") {\n matrix.scaleTo(attrValue || 1);\n } else {\n matrix.scaleTo(\n attrValue[0] || 1,\n attrValue[1] || 1,\n attrValue[2] || 0,\n attrValue[3] || 0\n );\n }\n break;\n case \"scaleX\":\n matrix.scaleX(attrValue || 1);\n break;\n case \"scaleXTo\":\n matrix.scaleXTo(attrValue || 1);\n break;\n case \"scaleY\":\n matrix.scaleY(attrValue || 1);\n break;\n case \"scaleYTo\":\n matrix.scaleYTo(attrValue || 1);\n break;\n case \"scaleZ\":\n matrix.scaleZ(attrValue || 1);\n break;\n case \"scaleZTo\":\n matrix.scaleZTo(attrValue || 1);\n break;\n case \"scale3d\":\n if (typeof attrValue == \"number\") {\n matrix.scale3d(attrValue || 1);\n } else {\n matrix.scale3d(\n attrValue[0] || 1,\n attrValue[1] || 1,\n attrValue[2] || 1\n );\n }\n break;\n case \"scale3dTo\":\n if (typeof attrValue == \"number\") {\n matrix.scale3dTo(attrValue || 1);\n } else {\n matrix.scale3dTo(\n attrValue[0] || 1,\n attrValue[1] || 1,\n attrValue[2] || 1\n );\n }\n break;\n case \"skew\":\n if (typeof attrValue == \"number\") {\n matrix.skew(attrValue || 0);\n } else {\n matrix.skew(attrValue[0] || 0, attrValue[1] || 0);\n }\n break;\n case \"skewTo\":\n if (typeof attrValue == \"number\") {\n matrix.skewTo(attrValue || 0);\n } else {\n matrix.skewTo(attrValue[0] || 0, attrValue[1] || 0);\n }\n break;\n case \"skewX\":\n matrix.skewX(attrValue || 0);\n break;\n case \"skewXTo\":\n matrix.skewXTo(attrValue || 0);\n break;\n case \"skewY\":\n matrix.skewY(attrValue || 0);\n break;\n case \"skewYTo\":\n matrix.skewYTo(attrValue || 0);\n break;\n case \"skewZ\":\n break;\n case \"skewZTo\":\n break;\n case \"skew3d\":\n break;\n case \"skew3dTo\":\n break;\n case \"perspective\":\n matrix.perspective(attrValue || 0);\n break;\n // 其他属性 opacity display ...\n default:\n if (!Object.prototype.hasOwnProperty.call(originAttrs, attrName)) {\n originAttrs[attrName] = getStyle(el, attrName);\n }\n Object.assign(toAttrs, {\n [attrName]: `${attrValue}`\n });\n break;\n }\n }\n Object.assign(toAttrs, {\n transform: matrix.toString()\n });\n return toAttrs;\n}\n\n// /// combine css transform together\n// function combineTransform(\n// changeAttrs: Record<string, any>,\n// unit = \"%\"\n// ): string {\n// let transform = \"\";\n// for (const attrName in changeAttrs) {\n// const attrValue = changeAttrs[attrName];\n// switch (attrName) {\n// case \"transform\":\n// transform += ` ${attrValue}`;\n// break;\n// case \"translate\":\n// if (typeof attrValue == \"number\") {\n// transform += ` translate(${attrValue}${unit})`;\n// } else {\n// transform += ` translate(${attrValue[0]}${unit}, ${attrValue[1]}${unit})`;\n// }\n// break;\n// case \"translateX\":\n// transform += ` translateX(${attrValue}${unit})`;\n// break;\n// case \"translateY\":\n// transform += ` translateY(${attrValue}${unit})`;\n// break;\n// case \"translateZ\":\n// transform += ` translateZ(${attrValue}${unit})`;\n// break;\n// case \"translate3d\":\n// transform += ` translate3d(${attrValue[0]}${unit}, ${attrValue[1]}${unit}, ${attrValue[2]}${unit})`;\n// break;\n// case \"rotate\":\n// transform += ` rotate(${attrValue}${unit})`;\n// break;\n// case \"rotateX\":\n// transform += ` rotateX(${attrValue}${unit})`;\n// break;\n// case \"rotateY\":\n// transform += ` rotateY(${attrValue}${unit})`;\n// break;\n// case \"rotateZ\":\n// transform += ` rotateZ(${attrValue}${unit})`;\n// break;\n// case \"rotate3d\":\n// transform += ` rotate3d(${attrValue[0]}${unit}, ${attrValue[1]}${unit}, ${attrValue[2]}${unit})`;\n// break;\n// case \"scale\":\n// if (typeof attrValue == \"number\") {\n// transform += ` scale(${attrValue}${unit})`;\n// } else {\n// transform += ` scale(${attrValue[0]}${unit}, ${attrValue[1]}${unit})`;\n// }\n// break;\n// case \"scaleX\":\n// transform += ` scaleX(${attrValue}${unit})`;\n// break;\n// case \"scaleY\":\n// transform += ` scaleY(${attrValue}${unit})`;\n// break;\n// case \"scaleZ\":\n// transform += ` scaleZ(${attrValue}${unit})`;\n// break;\n// case \"scale3d\":\n// transform += ` scale3d(${attrValue[0]}${unit}, ${attrValue[1]}${unit}, ${attrValue[2]}${unit})`;\n// break;\n// case \"skew\":\n// if (typeof attrValue == \"number\") {\n// transform += ` skew(${attrValue}${unit})`;\n// } else {\n// transform += ` skew(${attrValue[0]}${unit}, ${attrValue[1]}${unit})`;\n// }\n// break;\n// case \"skewX\":\n// transform += ` skewX(${attrValue}${unit})`;\n// break;\n// case \"skewY\":\n// transform += ` skewY(${attrValue}${unit})`;\n// break;\n// case \"skewZ\":\n// break;\n// case \"skewZTo\":\n// break;\n// case \"skew3d\":\n// break;\n// case \"skew3dTo\":\n// break;\n// }\n// }\n// return transform;\n// }\n","import { ref } from \"@zyzgroup/core-common\";\nimport { useWindow } from \"./useWindow\";\nimport { injectStyle } from \"./useStyle\";\nimport { isIOS, getOperatingSystemVersion, compareVersion } from \"../env\";\n\n/* iPhoneX 可能有问题 */\nif (isIOS() && compareVersion(getOperatingSystemVersion(), \"11.2\") < 0) {\n injectStyle(`\n :root {\n /* iOS < 11.2 */\n --sat: constant(safe-area-inset-top);\n --sar: constant(safe-area-inset-right);\n --sab: constant(safe-area-inset-bottom);\n --sal: constant(safe-area-inset-left);\n }\n `);\n} else {\n injectStyle(`\n :root {\n /* iOS > 11.2 */\n --sat: env(safe-area-inset-top);\n --sar: env(safe-area-inset-right);\n --sab: env(safe-area-inset-bottom);\n --sal: env(safe-area-inset-left);\n }\n `);\n}\n\nconst safeAreaTop = ref(\"0px\");\nconst safeAreaRight = ref(\"0px\");\nconst safeAreaBottom = ref(\"0px\");\nconst safeAreaLeft = ref(\"0px\");\n\nuseWindow.onload(() => {\n const styleDeclaration = getComputedStyle(document.documentElement);\n safeAreaTop.value = styleDeclaration.getPropertyValue(\"--sat\");\n safeAreaRight.value = styleDeclaration.getPropertyValue(\"--sar\");\n safeAreaBottom.value = styleDeclaration.getPropertyValue(\"--sab\");\n safeAreaLeft.value = styleDeclaration.getPropertyValue(\"--sal\");\n});\n\n// 单例\nexport const useSafeArea = {\n top: () => safeAreaTop.value,\n right: () => safeAreaRight.value,\n bottom: () => safeAreaBottom.value,\n left: () => safeAreaLeft.value\n};\n","// import '@zyzgroup/core-web/dist/theme.css'\n\n// import '@zyzgroup/core-web/dist/rem_750.css'\n// import { setRem } from \"@zyzgroup/core-web\";\n// setRem(750);\n\nimport { clamp, maxDotNumber } from \"@zyzgroup/core-common\";\n\nconst styleDeclaration = getComputedStyle(document.documentElement);\n\nexport function getCSSVar(name: string) {\n return styleDeclaration.getPropertyValue(name);\n}\n\nexport function setCSSVar(name: string, value: string) {\n document.documentElement.style.setProperty(name, value);\n styleDeclaration.setProperty(name, value);\n}\n\nexport const theme: Record<string, string> = {\n colorPrimary: getCSSVar(\"--color-primary\") || \"#5A82F0\",\n colorRed: getCSSVar(\"--color-red\") || \"#ff5050\",\n colorOrange: getCSSVar(\"--color-orange\") || \"#fa8c00\",\n colorYellow: getCSSVar(\"--color-yellow\") || \"#fadc32\",\n colorGreen: getCSSVar(\"--color-green\") || \"#00c878\",\n colorBlue: getCSSVar(\"--color-blue\") || \"#00b4fa\",\n colorPurple: getCSSVar(\"--color-purple\") || \"#6464fa\",\n colorBlack: getCSSVar(\"--color-black\") || \"#001428\",\n\n colorGray00: getCSSVar(\"--color-gray-00\") || \"#000000\",\n colorGray33: getCSSVar(\"--color-gray-33\") || \"#333333\",\n colorGray66: getCSSVar(\"--color-gray-66\") || \"#666666\",\n colorGray99: getCSSVar(\"--color-gray-99\") || \"#999999\",\n colorGrayCC: getCSSVar(\"--color-gray-cc\") || \"#cccccc\",\n colorGrayDD: getCSSVar(\"--color-gray-dd\") || \"#dddddd\",\n colorGrayE6: getCSSVar(\"--color-gray-e6\") || \"#e6e6e6\",\n colorGrayEE: getCSSVar(\"--color-gray-ee\") || \"#eeeeee\",\n colorGrayEF: getCSSVar(\"--color-gray-ef\") || \"#efefef\",\n colorGrayF5: getCSSVar(\"--color-gray-f5\") || \"#f5f5f5\",\n colorGrayFF: getCSSVar(\"--color-gray-ff\") || \"#ffffff\",\n\n fontLineHeight: getCSSVar(\"--font-line-height\") || \"1.4\",\n\n fontSize32: getCSSVar(\"--font-size-32\") || \"32px\",\n fontSize24: getCSSVar(\"--font-size-24\") || \"24px\",\n fontSize22: getCSSVar(\"--font-size-22\") || \"22px\",\n fontSize20: getCSSVar(\"--font-size-20\") || \"20px\",\n fontSize18: getCSSVar(\"--font-size-18\") || \"18px\",\n fontSize16: getCSSVar(\"--font-size-16\") || \"16px\",\n fontSize14: getCSSVar(\"--font-size-14\") || \"14px\",\n fontSize12: getCSSVar(\"--font-size-12\") || \"12px\",\n fontSize10: getCSSVar(\"--font-size-10\") || \"10px\",\n\n d4: getCSSVar(\"--distance-4\") || \"4px\", /// borderRadius\n d8: getCSSVar(\"--distance-8\") || \"8px\",\n d12: getCSSVar(\"--distance-12\") || \"12px\",\n d16: getCSSVar(\"--distance-16\") || \"16px\",\n d20: getCSSVar(\"--distance-20\") || \"20px\",\n d32: getCSSVar(\"--distance-32\") || \"32px\",\n d40: getCSSVar(\"--distance-40\") || \"40px\",\n d44: getCSSVar(\"--distance-44\") || \"44px\" /// button-height\n};\nexport default theme;\n\nexport class Color {\n private __color = {\n r: 0, // 0 - 255\n g: 0, // 0 - 255\n b: 0, // 0 - 255\n a: 1 // 0 - 1\n };\n\n constructor(color?: any, forceAlpha?: number) {\n if (color) {\n this.setColor(color);\n }\n if (typeof forceAlpha === \"number\") {\n this.setAlpha(forceAlpha);\n }\n }\n\n get color() {\n return this.__color;\n }\n set color(color: any) {\n this.__color = parseColor(color);\n }\n setColor(color: any) {\n this.color = color;\n return this;\n }\n\n get r() {\n return this.__color.r;\n }\n set r(v: number) {\n this.__color.r = clamp(Math.round(v), 0, 255);\n }\n\n get g() {\n return this.__color.g;\n }\n set g(v: number) {\n this.__color.g = clamp(Math.round(v), 0, 255);\n }\n\n get b() {\n return this.__color.b;\n }\n set b(v: number) {\n this.__color.b = clamp(Math.round(v), 0, 255);\n }\n\n get a() {\n return this.__color.a;\n }\n set a(a: number) {\n this.__color.a = clamp(a, 0, 1);\n }\n setAlpha(a: number) {\n this.a = a;\n return this;\n }\n\n setRGB(r: number, g: number, b: number) {\n this.r = r;\n this.g = g;\n this.b = b;\n return this;\n }\n setRGBA(r: number, g: number, b: number, a: number) {\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n return this;\n }\n\n get hex() {\n const hex = (this.r << 16) + (this.g << 8) + this.b;\n // if (this.a !== 1) {\n // hex += Math.round(this.a * 255) << 24;\n // }\n // if (this.a !== 1) {\n // hex <<= 8;\n // hex += Math.round(this.a * 255);\n // }\n return hex;\n }\n\n toString() {\n if (this.a === 1) {\n const str = \"000000\" + this.hex.toString(16);\n return \"#\" + str.slice(str.length - 6);\n } else {\n return `rgba(${this.r},${this.g},${this.b},${maxDotNumber(this.a, 6)})`;\n }\n }\n\n clone(): Color {\n return new Color(this.color);\n }\n\n copy(c: Color) {\n this.setColor(c.color);\n }\n\n opposite(\n bw = false, // whether to invert to black or white\n blackColor = \"#000000\",\n whiteColor = \"#ffffff\"\n ): Color {\n if (bw) {\n // https://stackoverflow.com/a/3943023/112731\n return new Color(\n this.r * 0.299 + this.g * 0.587 + this.b * 0.114 > 186\n ? blackColor\n : whiteColor\n );\n } else {\n const c = this.clone();\n c.r = 255 - c.r;\n c.g = 255 - c.g;\n c.b = 255 - c.b;\n // c.a = 1 - c.a;\n return c;\n }\n }\n\n /// t: 0 ~ 1\n lighten(t: number): Color {\n t = clamp(Math.abs(t), 0, 1);\n let { r, g, b } = this.color;\n r += (255 - r) * t;\n g += (255 - g) * t;\n b += (255 - b) * t;\n return new Color().setRGBA(r, g, b, this.color.a);\n }\n\n /// t: 0 ~ 1\n darken(t: number): Color {\n t = clamp(Math.abs(t), 0, 1);\n let { r, g, b } = this.color;\n r = r * (1 - t);\n g = g * (1 - t);\n b = b * (1 - t);\n return new Color().setRGBA(r, g, b, this.color.a);\n }\n\n // 渐变色\n static gradient(\n startColor: string,\n endColor: string,\n t: number // 0 - 1\n ): Color {\n try {\n const s = parseColor(startColor);\n const e = parseColor(endColor);\n return new Color().setRGB(\n (e.r - s.r) * t + s.r,\n (e.g - s.g) * t + s.g,\n (e.b - s.b) * t + s.b\n );\n // .setAlpha((e.a - s.a) * t + s.a);\n } catch (e) {\n return new Color(endColor);\n }\n }\n\n static random(): Color {\n return new Color(Math.random() * 0xffffff);\n }\n\n get hsv() {\n const { r, g, b, a } = this.color;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let h;\n if (r === max) {\n h = (g - b) / delta;\n } else if (g === max) {\n h = 2 + (b - r) / delta;\n } else {\n h = 4 + (r - g) / delta;\n }\n h /= 6;\n if (h < 0) {\n h += 1;\n }\n return {\n h: delta == 0 ? 0 : h * 360,\n s: max === 0 ? 0 : delta / max,\n v: max / 255,\n a\n };\n }\n\n set h(h: number) {\n const hsv = this.hsv;\n hsv.h = clamp(h, 0, 360);\n this.setColor(hsv);\n }\n get h() {\n return this.hsv.h;\n }\n\n set s(s: number) {\n const hsv = this.hsv;\n hsv.s = clamp(s, 0, 1);\n this.setColor(hsv);\n }\n get s() {\n return this.hsv.s;\n }\n\n set v(v: number) {\n const hsv = this.hsv;\n hsv.v = clamp(v, 0, 1);\n this.setColor(hsv);\n }\n get v() {\n return this.hsv.v;\n }\n}\n\nexport function color(color?: any, forceAlpha?: number): Color {\n return new Color(color, forceAlpha);\n}\n\nfunction parseColor(color: any): {\n r: number; // 0 - 255\n g: number; // 0 - 255\n b: number; // 0 - 255\n a: number; // 0 - 1\n} {\n const a = Object.prototype.hasOwnProperty.call(color, \"a\")\n ? clamp(color.a, 0, 1)\n : 1;\n /// rgb(a)\n if (\n Object.prototype.hasOwnProperty.call(color, \"r\") &&\n Object.prototype.hasOwnProperty.call(color, \"g\") &&\n Object.prototype.hasOwnProperty.call(color, \"b\")\n ) {\n color.r = clamp(Math.round(color.r), 0, 255);\n color.g = clamp(Math.round(color.g), 0, 255);\n color.b = clamp(Math.round(color.b), 0, 255);\n color.a = a;\n return color;\n }\n /// hsv(a) / hsb(a) : hue 色相 + saturation 饱和度 + value or brightness 明度\n /// UNDO hsl(a) : hue 色相 + saturation 饱和度 + lightness luminosity 亮度\n if (\n Object.prototype.hasOwnProperty.call(color, \"h\") &&\n Object.prototype.hasOwnProperty.call(color, \"s\") &&\n Object.prototype.hasOwnProperty.call(color, \"v\")\n ) {\n const h = clamp(color.h, 0, 360);\n const s = clamp(color.s, 0, 1);\n const v = clamp(color.v, 0, 1);\n const hi = Math.floor(h / 60) % 6;\n const f = h / 60 - Math.floor(h / 60);\n const p = v * (1.0 - s);\n const q = v * (1.0 - f * s);\n const t = v * (1.0 - (1.0 - f) * s);\n const c = [\n [v, t, p],\n [q, v, p],\n [p, v, t],\n [p, q, v],\n [t, p, v],\n [v, p, q]\n ][hi];\n return {\n r: Math.round(c[0] * 255),\n g: Math.round(c[1] * 255),\n b: Math.round(c[2] * 255),\n a: a\n };\n }\n const result = {\n r: 0,\n g: 0,\n b: 0,\n a: a\n };\n if (typeof color === \"number\") {\n /// RRGGBB(AA)\n if (color < Math.pow(2, 24)) {\n result.r = (color >> 16) & 0xff;\n result.g = (color >> 8) & 0xff;\n result.b = color & 0xff;\n } else {\n result.r = (color >> 24) & 0xff;\n result.g = (color >> 16) & 0xff;\n result.b = (color >> 8) & 0xff;\n result.a = (color & 0xff) / 255;\n }\n } else if (typeof color === \"string\") {\n /// rgba(r,g,b,a)\n const matches =\n /rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,?\\s*(\\d?\\.?\\d*)?\\s*\\)/gi.exec(\n color\n );\n if (matches) {\n result.r = parseInt(matches[1]);\n result.g = parseInt(matches[2]);\n result.b = parseInt(matches[3]);\n if (matches[4]) {\n result.a = parseFloat(matches[4]);\n }\n } else {\n let matches = color.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);\n if (matches) {\n /// #RGB\n result.r = parseInt(`${matches[1]}${matches[1]}`, 16);\n result.g = parseInt(`${matches[2]}${matches[2]}`, 16);\n result.b = parseInt(`${matches[3]}${matches[3]}`, 16);\n } else {\n matches = color.match(/^#([A-F0-9]{2})([A-F0-9]{2})([A-F0-9]{2})$/i);\n if (matches) {\n /// #RRGGBB\n result.r = parseInt(matches[1], 16);\n result.g = parseInt(matches[2], 16);\n result.b = parseInt(matches[3], 16);\n } else {\n matches = color.match(\n /^#([A-F0-9]{2})([A-F0-9]{2})([A-F0-9]{2})([A-F0-9]{2})$/i\n );\n if (matches) {\n /// #RRGGBBAA\n result.r = parseInt(matches[1], 16);\n result.g = parseInt(matches[2], 16);\n result.b = parseInt(matches[3], 16);\n result.a = parseInt(matches[4], 16) / 255;\n } else {\n if (color === \"none\") {\n result.a = 0;\n } else {\n /// 其他 string 为 默认值\n }\n }\n }\n }\n }\n } else {\n throw new Error(\"parseColor 不支持的颜色解析:\" + color);\n }\n result.r = clamp(result.r, 0, 255);\n result.g = clamp(result.g, 0, 255);\n result.b = clamp(result.b, 0, 255);\n result.a = clamp(result.a, 0, 1);\n return result;\n}\n\nexport const NormalColors = [\n \"#0ac2d2\",\n \"#7bb7fa\",\n \"#60d7a9\",\n \"#fdc162\",\n \"#fd6a62\",\n \"#f68dbb\",\n \"#26ccff\",\n \"#a25afd\",\n \"#ff5e7e\",\n \"#88ff5a\",\n \"#fcff42\",\n \"#ffa62d\",\n \"#ff36ff\",\n \"#dc4916\",\n \"#6871b1\",\n \"#d1b935\",\n \"#1bbc9b\",\n \"#FF7F50\",\n \"#4BBFC3\",\n \"#ff9900\"\n];\n\nexport const ControlsColorPattern = {\n backgroundColor: \"#1a1a1a\",\n numberColor: \"#2FA1D6\",\n booleanColor: \"#806787\",\n stringColor: \"#1ed36f\",\n functionColor: \"#e61d5f\",\n saveRowColor: \"#dad5cb\",\n buttonColor: \"\",\n borderColor: \"\",\n inputColor: \"\"\n};\nControlsColorPattern.buttonColor = new Color(ControlsColorPattern.saveRowColor)\n .darken(0.1)\n .toString();\nControlsColorPattern.borderColor = new Color(\n ControlsColorPattern.backgroundColor\n)\n .lighten(0.07)\n .toString();\nControlsColorPattern.inputColor = new Color(\n ControlsColorPattern.backgroundColor\n)\n .lighten(0.085)\n .toString();\n","// import { isAndroid } from \"./env\";\n\nexport function setRem(designWidth) {\n // 修正页面高度100%的渲染错误\n // document.documentElement.style.height = window.innerHeight + \"px\";\n\n const docEl = document.documentElement;\n\n // const dpr = isAndroid()\n // ? 1\n // : window.top === window.self\n // ? window.devicePixelRatio\n // : 1;\n const dpr = window.top === window.self ? window.devicePixelRatio : 1;\n docEl.dataset.dpr = dpr;\n\n // 设置viewport,进行缩放,达到高清效果\n // const metaEl = document.querySelector('meta[name=\"viewport\"]');\n // const scale = 1 / dpr;\n // metaEl.setAttribute(\n // \"content\",\n // \"width=device-width\" +\n // \",initial-scale=\" +\n // scale +\n // \",maximum-scale=\" +\n // scale +\n // \", minimum-scale=\" +\n // scale +\n // \",user-scalable=no, viewport-fit=cover, shrink-to-fit=no\"\n // );\n\n // default: 1rem = 100px\n let rem = 100;\n const recalc = function () {\n // let clientWidth = docEl.clientWidth;\n // // 限制最大rem\n // if (clientWidth > maxWidth) {\n // clientWidth = maxWidth;\n // }\n // // 限制最小rem\n // if (clientWidth < minWidth) {\n // clientWidth = minWidth;\n // }\n const clientWidth = Math.min(docEl.clientWidth, designWidth);\n docEl.dataset.width = clientWidth;\n docEl.dataset.rem = rem = Math.round(100 * (clientWidth / designWidth));\n // 配合:设置viewport,进行缩放,达到高清效果\n // docEl.dataset.rem = rem =\n // Math.round(100 * (clientWidth / designWidth)) * dpr;\n docEl.style.fontSize = rem + \"px\";\n };\n\n recalc();\n\n // 给js调用的,某一dpr下rem和px之间的转换函数\n window.rem2px = function (v) {\n v = parseFloat(v);\n return v * rem;\n };\n window.px2rem = function (v) {\n v = parseFloat(v);\n return v / rem;\n };\n\n if (!window.addEventListener) {\n return;\n }\n window.addEventListener(\n \"orientationchange\" in window ? \"orientationchange\" : \"resize\",\n recalc,\n false\n );\n}\n","<script setup lang=\"ts\">\n// https://icon-sets.iconify.design/\n\n// SUCCESS\n// import IconAccessibility from \"~icons/carbon/accessibility\";\n// <icon-accessibility />\n// import IconAccountBox from \"~icons/mdi/account-box\";\n// <icon-account-box style=\"font-size: 2em; color: red\" />\n\n// import { ChevronUpDownIcon } from \"@heroicons/vue/24/solid\";\n\n// UNSUCCESS : 使用 unplugin-icons 和 unplugin-auto-import 从 iconify 中自动导入任何图标集\n// in Vite\n// pnpm i unplugin-icons --save-dev\n// pnpm i unplugin-vue-component --save-dev\n// pnpm i @iconify/json --save-dev\n// pnpm i @iconify-json/mdi --save-dev\n// <icon-carbon-accessibility />\n// <icon-mdi-account-box style=\"font-size: 2em; color: red\" />\n\nimport { Icon } from \"@iconify/vue\";\nimport { theme } from \"@zyzgroup/core-web\";\n\nconst props = withDefaults(\n defineProps<{\n icon?: string;\n color?: string;\n }>(),\n { icon: \"mdi-light:home\", color: theme.colorPrimary }\n);\n</script>\n\n<template>\n <span\n class=\"icon\"\n :style=\"['color: ' + color]\"\n >\n <Icon\n :icon=\"props.icon\"\n :color=\"color\"\n />\n </span>\n</template>\n\n<style scoped>\n.icon {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n font-size: 1em;\n}\n</style>\n","<script setup lang=\"tsx\">\nimport { theme } from \"@zyzgroup/core-web\";\n\nconst props = withDefaults(\n defineProps<{\n color?: string;\n width?: string;\n }>(),\n {\n color: theme.colorPrimary,\n width: \"0.8em\"\n }\n);\n</script>\n\n<template>\n <div\n class=\"loading-11\"\n ref=\"loading11\"\n >\n <div\n class=\"loading-11-inner\"\n :style=\"{ width: props.width, height: props.width }\"\n >\n <div class=\"container container-1\">\n <div\n class=\"dot dot-1\"\n :style=\"{ backgroundColor: props.color }\"\n ></div>\n <div\n class=\"dot dot-2\"\n :style=\"{ backgroundColor: props.color }\"\n ></div>\n <div\n class=\"dot dot-3\"\n :style=\"{ backgroundColor: props.color }\"\n ></div>\n <div\n class=\"dot dot-4\"\n :style=\"{ backgroundColor: props.color }\"\n ></div>\n </div>\n <div class=\"container container-2\">\n <div\n class=\"dot dot-1\"\n :style=\"{ backgroundColor: props.color }\"\n ></div>\n <div\n class=\"dot dot-2\"\n :style=\"{ backgroundColor: props.color }\"\n ></div>\n <div\n class=\"dot dot-3\"\n :style=\"{ backgroundColor: props.color }\"\n ></div>\n <div\n class=\"dot dot-4\"\n :style=\"{ backgroundColor: props.color }\"\n ></div>\n </div>\n <div class=\"container container-3\">\n <div\n class=\"dot dot-1\"\n :style=\"{ backgroundColor: props.color }\"\n ></div>\n <div\n class=\"dot dot-2\"\n :style=\"{ backgroundColor: props.color }\"\n ></div>\n <div\n class=\"dot dot-3\"\n :style=\"{ backgroundColor: props.color }\"\n ></div>\n <div\n class=\"dot dot-4\"\n :style=\"{ backgroundColor: props.color }\"\n ></div>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.loading-11 {\n position: relative;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n}\n.loading-11-inner {\n position: relative;\n}\n.loading-11-inner .container {\n position: absolute;\n width: 100%;\n height: 100%;\n}\n.loading-11-inner .container .dot {\n width: 20%;\n height: 20%;\n border-radius: 100%;\n position: absolute;\n animation: bouncedelay 1.2s infinite ease-in-out;\n animation-fill-mode: both;\n}\n.loading-11-inner .container .dot-1 {\n top: 0;\n left: 0;\n}\n.loading-11-inner .container .dot-2 {\n top: 0;\n right: 0;\n}\n.loading-11-inner .container .dot-3 {\n right: 0;\n bottom: 0;\n}\n.loading-11-inner .container .dot-4 {\n left: 0;\n bottom: 0;\n}\n.loading-11-inner .container-1 .dot-2 {\n animation-delay: -0.9s;\n}\n.loading-11-inner .container-1 .dot-3 {\n animation-delay: -0.6s;\n}\n.loading-11-inner .container-1 .dot-4 {\n animation-delay: -0.3s;\n}\n.loading-11-inner .container-2 {\n transform: rotateZ(45deg);\n}\n.loading-11-inner .container-2 .dot-1 {\n animation-delay: -1.1s;\n}\n.loading-11-inner .container-2 .dot-2 {\n animation-delay: -0.8s;\n}\n.loading-11-inner .container-2 .dot-3 {\n animation-delay: -0.5s;\n}\n.loading-11-inner .container-2 .dot-4 {\n animation-delay: -0.2s;\n}\n.loading-11-inner .container-3 {\n transform: rotateZ(90deg);\n}\n.loading-11-inner .container-3 .dot-1 {\n animation-delay: -1s;\n}\n.loading-11-inner .container-3 .dot-2 {\n animation-delay: -0.7s;\n}\n.loading-11-inner .container-3 .dot-3 {\n animation-delay: -0.4s;\n}\n.loading-11-inner .container-3 .dot-4 {\n animation-delay: -0.1s;\n}\n@keyframes bouncedelay {\n 0%,\n 80%,\n 100% {\n transform: scale(0.3);\n }\n 40% {\n transform: scale(1);\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ref, watch } from \"vue\";\nimport Icon from \"./Icon.vue\";\nimport { throttle } from \"@zyzgroup/core-common\";\nimport { color, theme } from \"@zyzgroup/core-web\";\nimport Loading11 from \"./loading/Loading11.vue\";\n\n// for merge ce shadow-root styles\ndefineOptions({\n customOptions: { Loading11 },\n inheritAttrs: true\n});\n\nconst props = withDefaults(\n defineProps<{\n label?: string;\n icon?: string;\n iconPosition?: string;\n disabled?: boolean;\n width?: string;\n height?: string;\n padding?: string;\n fontSize?: string;\n borderRadius?: string;\n\n stylePattern?: \"fullfilled\" | \"outline\";\n borderColor?: string;\n bgColor?: string;\n fontColor?: string;\n\n asyncClick?: () => Promise<void>;\n }>(),\n {\n iconPosition: \"left\",\n disabled: false,\n width: \"auto\",\n height: \"44px\",\n padding: \"20px\",\n fontSize: \"14px\",\n borderRadius: \"4px\",\n stylePattern: \"fullfilled\"\n }\n);\n\nconst emits = defineEmits<{\n // for ce element\n (event: \"yz-click\"): void;\n (event: \"click\"): void;\n}>();\n\n// 父组件ref子Button组件时:xxx.value.el.getBoundingClientRect()\nconst el = ref<HTMLElement>();\n\nconst borderColor = ref(props.borderColor);\nconst bgColor = ref(props.bgColor);\nconst fontColor = ref(props.fontColor);\n\nconst baseBorderColor = ref(props.borderColor);\nconst baseBgColor = ref(props.bgColor);\n\nfunction changeStylePattern(stylePattern: string) {\n switch (stylePattern) {\n case \"outline\":\n borderColor.value = props.borderColor ?? theme.colorPrimary;\n bgColor.value = props.bgColor ?? theme.colorGrayFF;\n fontColor.value = props.fontColor ?? theme.colorPrimary;\n\n baseBorderColor.value = borderColor.value;\n baseBgColor.value = bgColor.value;\n break;\n case \"fullfilled\":\n default:\n borderColor.value = props.borderColor ?? theme.colorPrimary;\n bgColor.value = props.bgColor ?? theme.colorPrimary;\n fontColor.value = props.fontColor ?? theme.colorGrayFF;\n\n baseBorderColor.value = borderColor.value;\n baseBgColor.value = bgColor.value;\n break;\n }\n}\nwatch(\n () => props.stylePattern,\n () => {\n changeStylePattern(props.stylePattern);\n },\n { immediate: true }\n);\n\nconst opacity = ref(props.disabled ? \"0.6\" : \"1\");\nconst cursor = ref(props.disabled ? \"not-allowed\" : \"pointer\");\n\nlet isMouseOver = false;\nconst mouseover = () => {\n if (props.disabled) return;\n isMouseOver = true;\n borderColor.value = color(baseBorderColor.value!).lighten(0.05).toString();\n bgColor.value = color(baseBgColor.value!).lighten(0.05).toString();\n};\n\nconst mouseleave = () => {\n if (props.disabled) return;\n isMouseOver = false;\n borderColor.value = baseBorderColor.value;\n bgColor.value = baseBgColor.value;\n};\n\nconst asyncClickResultPending = ref(false);\nconst click = () => {\n if (props.disabled || asyncClickResultPending.value) {\n return;\n }\n borderColor.value = color(baseBorderColor.value!).darken(0.05).toString();\n bgColor.value = color(baseBgColor.value!).darken(0.05).toString();\n setTimeout(() => {\n if (isMouseOver) {\n mouseover();\n } else {\n mouseleave();\n }\n }, 150);\n emits(\"yz-click\");\n emits(\"click\");\n if (props.asyncClick) {\n asyncClickResultPending.value = true;\n props\n .asyncClick()\n .then(() => {\n asyncClickResultPending.value = false;\n })\n .catch(() => {\n asyncClickResultPending.value = false;\n });\n }\n};\n\nconst throttleClick = throttle(click, 500);\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div\n ref=\"el\"\n class=\"button\"\n :style=\"[\n `opacity: ${opacity}`,\n `border: 1px solid ${borderColor}`,\n `background-color: ${bgColor}`,\n `color: ${fontColor}`,\n `border-radius: ${props.borderRadius}`,\n `width: ${props.width}`,\n `height: ${props.height}`,\n `line-height: ${props.height}`,\n `font-size: ${props.fontSize}`,\n `cursor: ${cursor}`,\n `user-select: none`\n ]\"\n @mouseover=\"mouseover\"\n @mouseleave=\"mouseleave\"\n @click=\"throttleClick\"\n >\n <label\n class=\"label truncate\"\n :style=\"{\n padding: '0 ' + padding,\n cursor: cursor\n }\"\n >\n <div\n v-if=\"asyncClickResultPending\"\n class=\"loading\"\n >\n <Loading11 :color=\"fontColor\"></Loading11>\n </div>\n <slot>\n <Icon\n v-if=\"icon && iconPosition === 'left'\"\n :icon=\"icon\"\n :color=\"fontColor\"\n :style=\"{\n marginRight: theme.d4,\n cursor: cursor\n }\"\n ></Icon>\n <span\n :style=\"{\n cursor: cursor\n }\"\n >\n {{ label }}\n </span>\n <Icon\n v-if=\"icon && iconPosition === 'right'\"\n :icon=\"icon\"\n :color=\"fontColor\"\n :style=\"{\n marginLeft: theme.d4,\n cursor: cursor\n }\"\n ></Icon>\n </slot>\n </label>\n </div>\n</template>\n\n<!--\n ce 中不要使用v-bind\n border: 1px solid v-bind(borderColor);\n background-color: v-bind(bgColor);\n color: v-bind(fontColor);\n-->\n<style scoped>\n.button {\n box-sizing: border-box;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n z-index: 0;\n}\n.label {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n}\n.loading {\n margin-right: 6px;\n}\n</style>\n","<script setup lang=\"ts\">\nimport \"@zyzgroup/core-web/dist/rem_750.css\";\nimport { setRem } from \"@zyzgroup/core-web\";\n\n// for merge ce shadow-root styles\ndefineOptions({\n customOptions: {},\n inheritAttrs: true\n});\n\nconst props = withDefaults(\n defineProps<{\n designWidth?: number;\n }>(),\n {\n designWidth: 750\n }\n);\n\n// import(\n// /* @vite-ignore */ `@zyzgroup/core-web/dist/rem_${props.designWidth}.css`\n// );\nsetRem(props.designWidth);\n\nconst emits = defineEmits<{\n // (event: \"close\"): void;\n}>();\n\ndefineExpose({});\n</script>\n\n<template>\n <div class=\"page\">\n <header class=\"header\">\n <slot name=\"header\"></slot>\n </header>\n\n <div class=\"main\">\n <div class=\"main-scroll\">\n <slot></slot>\n </div>\n </div>\n\n <footer class=\"footer\">\n <slot name=\"footer\"></slot>\n </footer>\n </div>\n</template>\n\n<style scoped>\n.page {\n width: 100%;\n height: 100%;\n position: relative;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n.main {\n flex: 1 1 auto;\n width: 100%;\n overflow-y: scroll;\n display: flex;\n flex-direction: column;\n}\n.main-scroll {\n flex: 1 1 auto;\n width: 100%;\n}\n.main-scroll > :nth-child(1) {\n min-height: 100%;\n}\n.header {\n flex: 0 0 auto;\n}\n.footer {\n flex: 0 0 auto;\n}\n</style>\n","<template>\n <div\n class=\"xg-footer\"\n :style=\"{ paddingBottom }\"\n >\n <div class=\"xg-footer-inner\">\n <Button\n label=\"去支付\"\n width=\"100%\"\n ></Button>\n </div>\n </div>\n</template>\n\n<style scoped>\n.xg-footer {\n box-sizing: border-box;\n background-color: #ffffff;\n border-top: 1px solid #cccccc;\n}\n.xg-footer-inner {\n box-sizing: border-box;\n width: 100%;\n padding: 0.1rem 0.15rem;\n}\n</style>\n\n<script setup lang=\"tsx\">\nimport { ref, onMounted } from \"vue\";\nimport { useSafeArea } from \"@zyzgroup/core-web\";\nimport Button from \"../Button.vue\";\n\nconst paddingBottom = ref(\"0px\");\nonMounted(() => {\n paddingBottom.value = useSafeArea.bottom();\n});\n</script>\n"],"names":["getInstance","getCurrentInstance","getVNode","component","props","createVNode","renderComponent","options","vNode","render","useVueEffect","effect","remove","onMounted","onUnmounted","useVueRouter","routes","router","createRouter","createWebHistory","_to","_from","savedPosition","next","location","path","name","route","INCREMENT","DECREMENT","INCREMENTACTION","useVuex","useStore","useVuexStates","moduleName","keyMaps","mapFn","mapState","createNamespacedHelpers","useVuexMap","useVuexGetters","mapGetters","useVuexMutations","mapMutations","useVuexActions","mapActions","keys","store","maps","mappedKeyFns","key","fn","computed","matchIconName","stringToIcon","value","validate","allowSimpleName","provider","colonSeparated","name2","prefix","result","validateIconName","dashSeparated","icon","defaultIconDimensions","defaultIconTransformations","defaultIconProps","defaultExtendedIconProps","mergeIconTransformations","obj1","obj2","rotate","mergeIconData","parent","child","getIconsTree","data","names","icons","aliases","resolved","resolve","internalGetIconData","tree","currentProps","parse","parseIconSet","callback","item","optionalPropertyDefaults","checkOptionalProps","defaults","prop","quicklyValidateIconSet","obj","dataStorage","newStorage","getStorage","providerStorage","addIconSet","storage","addIconToStorage","simpleNames","allowSimpleNames","allow","getIconData","iconName","addIcon","addCollection","added","defaultIconSizeCustomisations","defaultIconCustomisations","unitsSplit","unitsTest","calculateSize","size","ratio","precision","oldParts","newParts","code","isNumber","num","splitSVGDefs","content","tag","defs","index","start","end","endEnd","mergeDefsAndContent","wrapSVGContent","body","split","isUnsetKeyword","iconToSVG","customisations","fullIcon","fullCustomisations","box","transformations","hFlip","vFlip","rotation","tempValue","customisationsWidth","customisationsHeight","boxWidth","boxHeight","width","height","attributes","setAttr","viewBox","regex","randomPrefix","counter","replaceIDs","ids","match","suffix","id","newID","escapedID","setAPIModule","getAPIModule","createAPIConfig","source","resources","configStorage","fallBackAPISources","fallBackAPI","addAPIProvider","customConfig","config","getAPIConfig","fetchModule","calculateMaxLength","maxHostLength","url","shouldAbort","status","prepare","results","maxLength","type","length","getPath","fetchAPIModule","host","params","iconsList","urlParams","uri","defaultError","response","sortIcons","a","b","lastIcon","localStorage","list","removeCallback","storages","items","row","updateCallbacks","hasPending","oldLength","idCounter","storeCallback","pendingSources","abort","listToIcons","defaultConfig","sendQuery","payload","query","done","resourcesCount","startIndex","nextIndex","startTime","queriesSent","lastError","timer","queue","doneCallbacks","resetTimer","subscribe","overwrite","getQueryStatus","failQuery","clearQueue","moduleResponse","isError","queued","execNext","resource","status2","initRedundancy","cfg","queries","cleanup","queryCallback","doneCallback","query2","error","find","emptyCallback$1","redundancyCache","getRedundancyCache","redundancy","cachedReundancy","sendAPIQuery","target","send","api","cached","moduleKey","browserCacheVersion","browserCachePrefix","browserCacheCountKey","browserCacheVersionKey","browserStorageHour","browserStorageCacheExpiration","browserStorageLimit","getStoredItem","func","setStoredItem","removeStoredItem","setBrowserStorageItemsCount","getBrowserStorageItemsCount","browserStorageConfig","browserStorageEmptyItems","browserStorageStatus","setBrowserStorageStatus","_window","getBrowserStorage","attr","iterateBrowserStorage","version","total2","i","minTime","parseItem","total","initBrowserStorage","iconSet","lastModified","updateLastModified","lastValue","storeInBrowserStorage","set","emptyCallback","loadedNewIcons","loadNewIcons","icons2","parsed","pending","err","loadIcons","cleanedIcons","sortedIcons","callCallback","newIcons","sources","lastProvider","lastPrefix","providerNewIcons","pendingQueue","mergeCustomisations","valueType","separator","flipFromString","custom","flip","str","rotateFromString","defaultValue","units","value2","iconToHTML","renderAttribsHTML","encodeSVGforURL","svg","svgToData","svgToURL","defaultExtendedIconCustomisations","svgDefaults","commonProps","monotoneProps","coloredProps","propsToAdd","propsToAddTo","customisationAliases","fixSize","componentProps","mode","style","propsStyle","customStyle","alias","renderAttribs","localCounter","h","useMask","html","preload","providers","emptyIcon","Icon","defineComponent","onload","classes","newProps","getGlobal","_nativeMap","_nativeSet","parseNumber","clamp","x","min","max","fixedDotNumberString","maxDotNumber","_generateTables","buffer","floatView","uint32View","baseTable","shiftTable","e","mantissaTable","exponentTable","offsetTable","m","throttle","ms","ready","args","EventBusRaw","handler","onceFn","fired","once","called","acc","Dep","targetKeyDepMap","getDep","keyDepMap","dep","reactiveVue2","raw","deep","reactiveVue3","v","ref","receiver","prevValue","deepProxy","r","_nativePromise","useEventListener","event","eventHandler","useEmit","eb","cb","prevUrl","_records","_observer","isWindowLoaded","useWindow","state","cbOnce","getOperatingSystem","userAgent","operatingSystem","getOperatingSystemVersion","ua","osVersion","compareVersion","v1","v2","vs1","vs2","n","isIOS","getInternetExplorerVersion","msie","rv","edge","global","canvas","ctx","bitmap","injectStyle","styleSheetInnerText","el","dom","shadowRoot","position","safeAreaTop","safeAreaRight","safeAreaBottom","safeAreaLeft","styleDeclaration","useSafeArea","getCSSVar","theme","Color","color","forceAlpha","parseColor","g","c","bw","blackColor","whiteColor","startColor","endColor","t","s","delta","hsv","hi","f","p","q","matches","ControlsColorPattern","setRem","designWidth","docEl","dpr","rem","recalc","clientWidth","__props","emits","__emit","borderColor","bgColor","fontColor","baseBorderColor","baseBgColor","changeStylePattern","stylePattern","watch","opacity","cursor","isMouseOver","mouseover","mouseleave","asyncClickResultPending","throttleClick","__expose","paddingBottom"],"mappings":"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","x_google_ignoreList":[4]}
|