@zyzgroup/core-vue 0.0.39 → 0.0.41

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.
Files changed (42) hide show
  1. package/ce/style.css +1 -1
  2. package/ce/yz_custom_element.iife.js +130 -112
  3. package/ce/yz_custom_element.iife.js.map +1 -1
  4. package/ce/yz_custom_element.js +9117 -8875
  5. package/ce/yz_custom_element.js.map +1 -1
  6. package/ce/yz_custom_element.umd.cjs +131 -113
  7. package/ce/yz_custom_element.umd.cjs.map +1 -1
  8. package/dist/zyzgroup_core_vue.iife.js +1 -1
  9. package/dist/zyzgroup_core_vue.iife.js.map +1 -1
  10. package/dist/zyzgroup_core_vue.js +69 -1905
  11. package/dist/zyzgroup_core_vue.js.map +1 -1
  12. package/dist/zyzgroup_core_vue.umd.cjs +1 -1
  13. package/dist/zyzgroup_core_vue.umd.cjs.map +1 -1
  14. package/package.json +1 -1
  15. package/types/components/Button.ce.vue.d.ts +5 -0
  16. package/types/components/Button.vue.d.ts +5 -0
  17. package/types/components/Container.ce.vue.d.ts +3 -8
  18. package/types/components/Container.vue.d.ts +0 -4
  19. package/types/components/VueRouterView.ce.vue.d.ts +24 -0
  20. package/types/components/VueRouterView.vue.d.ts +24 -0
  21. package/types/components/VueSuspense.ce.vue.d.ts +7 -0
  22. package/types/components/VueSuspense.vue.d.ts +7 -0
  23. package/types/components/VueTeleport.ce.vue.d.ts +2 -0
  24. package/types/components/VueTeleport.vue.d.ts +2 -0
  25. package/types/components/effect/CSSTransition.ce.vue.d.ts +12 -5
  26. package/types/components/effect/CSSTransition.vue.d.ts +1 -0
  27. package/types/components/effect/VueTransition.ce.vue.d.ts +71 -0
  28. package/types/components/effect/VueTransition.vue.d.ts +71 -0
  29. package/types/components/effect/VueTransitionGroupSlideToLeft.ce.vue.d.ts +9 -0
  30. package/types/components/effect/VueTransitionGroupSlideToLeft.vue.d.ts +9 -0
  31. package/types/components/effect/VueTransitionOpacity.ce.vue.d.ts +9 -0
  32. package/types/components/effect/VueTransitionOpacity.vue.d.ts +9 -0
  33. package/types/components/effect/VueTransitionSlideUp.ce.vue.d.ts +9 -0
  34. package/types/components/effect/VueTransitionSlideUp.vue.d.ts +9 -0
  35. package/types/components/layout/LayoutMobile.ce.vue.d.ts +1 -1
  36. package/types/components/layout/LayoutMobile.vue.d.ts +1 -1
  37. package/types/components/xg/Footer.ce.vue.d.ts +2 -0
  38. package/types/components/xg/Footer.vue.d.ts +2 -0
  39. package/types/components/xg/Lot.ce.vue.d.ts +2 -0
  40. package/types/components/xg/Lot.vue.d.ts +2 -0
  41. package/types/lib.d.ts +0 -2
  42. package/dist/style.css +0 -1
@@ -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"],"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"],"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"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@zyzgroup/core-vue",
3
3
  "private": false,
4
- "version": "0.0.39",
4
+ "version": "0.0.41",
5
5
  "sideEffects": false,
6
6
  "type": "module",
7
7
  "main": "dist/zyzgroup_core_vue.umd.cjs",
@@ -3,6 +3,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<im
3
3
  icon?: string;
4
4
  iconPosition?: string;
5
5
  disabled?: boolean;
6
+ width?: string;
6
7
  height?: string;
7
8
  padding?: string;
8
9
  fontSize?: string;
@@ -15,6 +16,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<im
15
16
  }>, {
16
17
  iconPosition: string;
17
18
  disabled: boolean;
19
+ width: string;
18
20
  height: string;
19
21
  padding: string;
20
22
  fontSize: string;
@@ -30,6 +32,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<im
30
32
  icon?: string;
31
33
  iconPosition?: string;
32
34
  disabled?: boolean;
35
+ width?: string;
33
36
  height?: string;
34
37
  padding?: string;
35
38
  fontSize?: string;
@@ -42,6 +45,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<im
42
45
  }>, {
43
46
  iconPosition: string;
44
47
  disabled: boolean;
48
+ width: string;
45
49
  height: string;
46
50
  padding: string;
47
51
  fontSize: string;
@@ -53,6 +57,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<im
53
57
  }>, {
54
58
  height: string;
55
59
  borderRadius: string;
60
+ width: string;
56
61
  iconPosition: string;
57
62
  disabled: boolean;
58
63
  padding: string;
@@ -3,6 +3,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<im
3
3
  icon?: string;
4
4
  iconPosition?: string;
5
5
  disabled?: boolean;
6
+ width?: string;
6
7
  height?: string;
7
8
  padding?: string;
8
9
  fontSize?: string;
@@ -15,6 +16,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<im
15
16
  }>, {
16
17
  iconPosition: string;
17
18
  disabled: boolean;
19
+ width: string;
18
20
  height: string;
19
21
  padding: string;
20
22
  fontSize: string;
@@ -30,6 +32,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<im
30
32
  icon?: string;
31
33
  iconPosition?: string;
32
34
  disabled?: boolean;
35
+ width?: string;
33
36
  height?: string;
34
37
  padding?: string;
35
38
  fontSize?: string;
@@ -42,6 +45,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<im
42
45
  }>, {
43
46
  iconPosition: string;
44
47
  disabled: boolean;
48
+ width: string;
45
49
  height: string;
46
50
  padding: string;
47
51
  fontSize: string;
@@ -53,6 +57,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<im
53
57
  }>, {
54
58
  height: string;
55
59
  borderRadius: string;
60
+ width: string;
56
61
  iconPosition: string;
57
62
  disabled: boolean;
58
63
  padding: string;