import { isReactive, isRef, toRaw } from './chunk-Z6W6QRLO.js'; // ../node_modules/.pnpm/@vue+devtools-shared@7.2.1/node_modules/@vue/devtools-shared/dist/index.js var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __esm = (fn, res) => function __init() { return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])((fn = 0))), res; }; var __commonJS = (cb, mod) => function __require() { return ( mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports ); }; var __copyProps = (to, from, except, desc) => { if ((from && typeof from === 'object') || typeof from === 'function') { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable, }); } return to; }; var __toESM = (mod, isNodeMode, target2) => ( (target2 = mod != null ? __create(__getProtoOf(mod)) : {}), __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target2, 'default', { value: mod, enumerable: true }) : target2, mod, ) ); var init_esm_shims = __esm({ '../../node_modules/.pnpm/tsup@8.0.2_@microsoft+api-extractor@7.43.0_@types+node@20.12.12__postcss@8.4.38_typescript@5.4.5/node_modules/tsup/assets/esm_shims.js'() { 'use strict'; }, }); var require_rfdc = __commonJS({ '../../node_modules/.pnpm/rfdc@1.3.1/node_modules/rfdc/index.js'( exports, module, ) { 'use strict'; init_esm_shims(); module.exports = rfdc2; function copyBuffer(cur) { if (cur instanceof Buffer) { return Buffer.from(cur); } return new cur.constructor( cur.buffer.slice(), cur.byteOffset, cur.length, ); } function rfdc2(opts) { opts = opts || {}; if (opts.circles) return rfdcCircles(opts); return opts.proto ? cloneProto : clone; function cloneArray(a, fn) { var keys = Object.keys(a); var a2 = new Array(keys.length); for (var i = 0; i < keys.length; i++) { var k = keys[i]; var cur = a[k]; if (typeof cur !== 'object' || cur === null) { a2[k] = cur; } else if (cur instanceof Date) { a2[k] = new Date(cur); } else if (ArrayBuffer.isView(cur)) { a2[k] = copyBuffer(cur); } else { a2[k] = fn(cur); } } return a2; } function clone(o) { if (typeof o !== 'object' || o === null) return o; if (o instanceof Date) return new Date(o); if (Array.isArray(o)) return cloneArray(o, clone); if (o instanceof Map) return new Map(cloneArray(Array.from(o), clone)); if (o instanceof Set) return new Set(cloneArray(Array.from(o), clone)); var o2 = {}; for (var k in o) { if (Object.hasOwnProperty.call(o, k) === false) continue; var cur = o[k]; if (typeof cur !== 'object' || cur === null) { o2[k] = cur; } else if (cur instanceof Date) { o2[k] = new Date(cur); } else if (cur instanceof Map) { o2[k] = new Map(cloneArray(Array.from(cur), clone)); } else if (cur instanceof Set) { o2[k] = new Set(cloneArray(Array.from(cur), clone)); } else if (ArrayBuffer.isView(cur)) { o2[k] = copyBuffer(cur); } else { o2[k] = clone(cur); } } return o2; } function cloneProto(o) { if (typeof o !== 'object' || o === null) return o; if (o instanceof Date) return new Date(o); if (Array.isArray(o)) return cloneArray(o, cloneProto); if (o instanceof Map) return new Map(cloneArray(Array.from(o), cloneProto)); if (o instanceof Set) return new Set(cloneArray(Array.from(o), cloneProto)); var o2 = {}; for (var k in o) { var cur = o[k]; if (typeof cur !== 'object' || cur === null) { o2[k] = cur; } else if (cur instanceof Date) { o2[k] = new Date(cur); } else if (cur instanceof Map) { o2[k] = new Map(cloneArray(Array.from(cur), cloneProto)); } else if (cur instanceof Set) { o2[k] = new Set(cloneArray(Array.from(cur), cloneProto)); } else if (ArrayBuffer.isView(cur)) { o2[k] = copyBuffer(cur); } else { o2[k] = cloneProto(cur); } } return o2; } } function rfdcCircles(opts) { var refs = []; var refsNew = []; return opts.proto ? cloneProto : clone; function cloneArray(a, fn) { var keys = Object.keys(a); var a2 = new Array(keys.length); for (var i = 0; i < keys.length; i++) { var k = keys[i]; var cur = a[k]; if (typeof cur !== 'object' || cur === null) { a2[k] = cur; } else if (cur instanceof Date) { a2[k] = new Date(cur); } else if (ArrayBuffer.isView(cur)) { a2[k] = copyBuffer(cur); } else { var index = refs.indexOf(cur); if (index !== -1) { a2[k] = refsNew[index]; } else { a2[k] = fn(cur); } } } return a2; } function clone(o) { if (typeof o !== 'object' || o === null) return o; if (o instanceof Date) return new Date(o); if (Array.isArray(o)) return cloneArray(o, clone); if (o instanceof Map) return new Map(cloneArray(Array.from(o), clone)); if (o instanceof Set) return new Set(cloneArray(Array.from(o), clone)); var o2 = {}; refs.push(o); refsNew.push(o2); for (var k in o) { if (Object.hasOwnProperty.call(o, k) === false) continue; var cur = o[k]; if (typeof cur !== 'object' || cur === null) { o2[k] = cur; } else if (cur instanceof Date) { o2[k] = new Date(cur); } else if (cur instanceof Map) { o2[k] = new Map(cloneArray(Array.from(cur), clone)); } else if (cur instanceof Set) { o2[k] = new Set(cloneArray(Array.from(cur), clone)); } else if (ArrayBuffer.isView(cur)) { o2[k] = copyBuffer(cur); } else { var i = refs.indexOf(cur); if (i !== -1) { o2[k] = refsNew[i]; } else { o2[k] = clone(cur); } } } refs.pop(); refsNew.pop(); return o2; } function cloneProto(o) { if (typeof o !== 'object' || o === null) return o; if (o instanceof Date) return new Date(o); if (Array.isArray(o)) return cloneArray(o, cloneProto); if (o instanceof Map) return new Map(cloneArray(Array.from(o), cloneProto)); if (o instanceof Set) return new Set(cloneArray(Array.from(o), cloneProto)); var o2 = {}; refs.push(o); refsNew.push(o2); for (var k in o) { var cur = o[k]; if (typeof cur !== 'object' || cur === null) { o2[k] = cur; } else if (cur instanceof Date) { o2[k] = new Date(cur); } else if (cur instanceof Map) { o2[k] = new Map(cloneArray(Array.from(cur), cloneProto)); } else if (cur instanceof Set) { o2[k] = new Set(cloneArray(Array.from(cur), cloneProto)); } else if (ArrayBuffer.isView(cur)) { o2[k] = copyBuffer(cur); } else { var i = refs.indexOf(cur); if (i !== -1) { o2[k] = refsNew[i]; } else { o2[k] = cloneProto(cur); } } } refs.pop(); refsNew.pop(); return o2; } } }, }); init_esm_shims(); init_esm_shims(); var isBrowser = typeof navigator !== 'undefined'; var target = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : {}; var isInChromePanel = typeof target.chrome !== 'undefined' && !!target.chrome.devtools; var isInIframe = isBrowser && target.self !== target.top; var isInElectron = typeof navigator !== 'undefined' && navigator.userAgent.toLowerCase().includes('electron'); var isNuxtApp = typeof window !== 'undefined' && !!window.__NUXT__; init_esm_shims(); var import_rfdc = __toESM(require_rfdc(), 1); var deepClone = (0, import_rfdc.default)({ circles: true }); init_esm_shims(); // ../node_modules/.pnpm/hookable@5.5.3/node_modules/hookable/dist/index.mjs function flatHooks(configHooks, hooks = {}, parentName) { for (const key in configHooks) { const subHook = configHooks[key]; const name = parentName ? `${parentName}:${key}` : key; if (typeof subHook === 'object' && subHook !== null) { flatHooks(subHook, hooks, name); } else if (typeof subHook === 'function') { hooks[name] = subHook; } } return hooks; } var defaultTask = { run: (function_) => function_() }; var _createTask = () => defaultTask; var createTask = typeof console.createTask !== 'undefined' ? console.createTask : _createTask; function serialTaskCaller(hooks, args) { const name = args.shift(); const task = createTask(name); return hooks.reduce( (promise, hookFunction) => promise.then(() => task.run(() => hookFunction(...args))), Promise.resolve(), ); } function parallelTaskCaller(hooks, args) { const name = args.shift(); const task = createTask(name); return Promise.all(hooks.map((hook2) => task.run(() => hook2(...args)))); } function callEachWith(callbacks, arg0) { for (const callback of [...callbacks]) { callback(arg0); } } var Hookable = class { constructor() { this._hooks = {}; this._before = void 0; this._after = void 0; this._deprecatedMessages = void 0; this._deprecatedHooks = {}; this.hook = this.hook.bind(this); this.callHook = this.callHook.bind(this); this.callHookWith = this.callHookWith.bind(this); } hook(name, function_, options = {}) { if (!name || typeof function_ !== 'function') { return () => {}; } const originalName = name; let dep; while (this._deprecatedHooks[name]) { dep = this._deprecatedHooks[name]; name = dep.to; } if (dep && !options.allowDeprecated) { let message = dep.message; if (!message) { message = `${originalName} hook has been deprecated` + (dep.to ? `, please use ${dep.to}` : ''); } if (!this._deprecatedMessages) { this._deprecatedMessages = /* @__PURE__ */ new Set(); } if (!this._deprecatedMessages.has(message)) { console.warn(message); this._deprecatedMessages.add(message); } } if (!function_.name) { try { Object.defineProperty(function_, 'name', { get: () => '_' + name.replace(/\W+/g, '_') + '_hook_cb', configurable: true, }); } catch {} } this._hooks[name] = this._hooks[name] || []; this._hooks[name].push(function_); return () => { if (function_) { this.removeHook(name, function_); function_ = void 0; } }; } hookOnce(name, function_) { let _unreg; let _function = (...arguments_) => { if (typeof _unreg === 'function') { _unreg(); } _unreg = void 0; _function = void 0; return function_(...arguments_); }; _unreg = this.hook(name, _function); return _unreg; } removeHook(name, function_) { if (this._hooks[name]) { const index = this._hooks[name].indexOf(function_); if (index !== -1) { this._hooks[name].splice(index, 1); } if (this._hooks[name].length === 0) { delete this._hooks[name]; } } } deprecateHook(name, deprecated) { this._deprecatedHooks[name] = typeof deprecated === 'string' ? { to: deprecated } : deprecated; const _hooks = this._hooks[name] || []; delete this._hooks[name]; for (const hook2 of _hooks) { this.hook(name, hook2); } } deprecateHooks(deprecatedHooks) { Object.assign(this._deprecatedHooks, deprecatedHooks); for (const name in deprecatedHooks) { this.deprecateHook(name, deprecatedHooks[name]); } } addHooks(configHooks) { const hooks = flatHooks(configHooks); const removeFns = Object.keys(hooks).map((key) => this.hook(key, hooks[key]), ); return () => { for (const unreg of removeFns.splice(0, removeFns.length)) { unreg(); } }; } removeHooks(configHooks) { const hooks = flatHooks(configHooks); for (const key in hooks) { this.removeHook(key, hooks[key]); } } removeAllHooks() { for (const key in this._hooks) { delete this._hooks[key]; } } callHook(name, ...arguments_) { arguments_.unshift(name); return this.callHookWith(serialTaskCaller, name, ...arguments_); } callHookParallel(name, ...arguments_) { arguments_.unshift(name); return this.callHookWith(parallelTaskCaller, name, ...arguments_); } callHookWith(caller, name, ...arguments_) { const event = this._before || this._after ? { name, args: arguments_, context: {} } : void 0; if (this._before) { callEachWith(this._before, event); } const result = caller( name in this._hooks ? [...this._hooks[name]] : [], arguments_, ); if (result instanceof Promise) { return result.finally(() => { if (this._after && event) { callEachWith(this._after, event); } }); } if (this._after && event) { callEachWith(this._after, event); } return result; } beforeEach(function_) { this._before = this._before || []; this._before.push(function_); return () => { if (this._before !== void 0) { const index = this._before.indexOf(function_); if (index !== -1) { this._before.splice(index, 1); } } }; } afterEach(function_) { this._after = this._after || []; this._after.push(function_); return () => { if (this._after !== void 0) { const index = this._after.indexOf(function_); if (index !== -1) { this._after.splice(index, 1); } } }; } }; function createHooks() { return new Hookable(); } // ../node_modules/.pnpm/perfect-debounce@1.0.0/node_modules/perfect-debounce/dist/index.mjs var DEBOUNCE_DEFAULTS = { trailing: true, }; function debounce(fn, wait = 25, options = {}) { options = { ...DEBOUNCE_DEFAULTS, ...options }; if (!Number.isFinite(wait)) { throw new TypeError('Expected `wait` to be a finite number'); } let leadingValue; let timeout; let resolveList = []; let currentPromise; let trailingArgs; const applyFn = (_this, args) => { currentPromise = _applyPromised(fn, _this, args); currentPromise.finally(() => { currentPromise = null; if (options.trailing && trailingArgs && !timeout) { const promise = applyFn(_this, trailingArgs); trailingArgs = null; return promise; } }); return currentPromise; }; return function (...args) { if (currentPromise) { if (options.trailing) { trailingArgs = args; } return currentPromise; } return new Promise((resolve) => { const shouldCallNow = !timeout && options.leading; clearTimeout(timeout); timeout = setTimeout(() => { timeout = null; const promise = options.leading ? leadingValue : applyFn(this, args); for (const _resolve of resolveList) { _resolve(promise); } resolveList = []; }, wait); if (shouldCallNow) { leadingValue = applyFn(this, args); resolve(leadingValue); } else { resolveList.push(resolve); } }); }; } async function _applyPromised(fn, _this, args) { return await fn.apply(_this, args); } // ../node_modules/.pnpm/@vue+devtools-kit@7.2.1_vue@3.4.27_typescript@5.4.5_/node_modules/@vue/devtools-kit/dist/index.js var __create2 = Object.create; var __defProp2 = Object.defineProperty; var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; var __getOwnPropNames2 = Object.getOwnPropertyNames; var __getProtoOf2 = Object.getPrototypeOf; var __hasOwnProp2 = Object.prototype.hasOwnProperty; var __esm2 = (fn, res) => function __init() { return fn && (res = (0, fn[__getOwnPropNames2(fn)[0]])((fn = 0))), res; }; var __commonJS2 = (cb, mod) => function __require() { return ( mod || (0, cb[__getOwnPropNames2(cb)[0]])( (mod = { exports: {} }).exports, mod, ), mod.exports ); }; var __copyProps2 = (to, from, except, desc) => { if ((from && typeof from === 'object') || typeof from === 'function') { for (let key of __getOwnPropNames2(from)) if (!__hasOwnProp2.call(to, key) && key !== except) __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable, }); } return to; }; var __toESM2 = (mod, isNodeMode, target10) => ( (target10 = mod != null ? __create2(__getProtoOf2(mod)) : {}), __copyProps2( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp2(target10, 'default', { value: mod, enumerable: true }) : target10, mod, ) ); var init_esm_shims2 = __esm2({ '../../node_modules/.pnpm/tsup@8.0.2_@microsoft+api-extractor@7.43.0_@types+node@20.12.12__postcss@8.4.38_typescript@5.4.5/node_modules/tsup/assets/esm_shims.js'() { 'use strict'; }, }); var require_speakingurl = __commonJS2({ '../../node_modules/.pnpm/speakingurl@14.0.1/node_modules/speakingurl/lib/speakingurl.js'( exports, module, ) { 'use strict'; init_esm_shims2(); (function (root) { 'use strict'; var charMap = { // latin À: 'A', Á: 'A', Â: 'A', Ã: 'A', Ä: 'Ae', Å: 'A', Æ: 'AE', Ç: 'C', È: 'E', É: 'E', Ê: 'E', Ë: 'E', Ì: 'I', Í: 'I', Î: 'I', Ï: 'I', Ð: 'D', Ñ: 'N', Ò: 'O', Ó: 'O', Ô: 'O', Õ: 'O', Ö: 'Oe', Ő: 'O', Ø: 'O', Ù: 'U', Ú: 'U', Û: 'U', Ü: 'Ue', Ű: 'U', Ý: 'Y', Þ: 'TH', ß: 'ss', à: 'a', á: 'a', â: 'a', ã: 'a', ä: 'ae', å: 'a', æ: 'ae', ç: 'c', è: 'e', é: 'e', ê: 'e', ë: 'e', ì: 'i', í: 'i', î: 'i', ï: 'i', ð: 'd', ñ: 'n', ò: 'o', ó: 'o', ô: 'o', õ: 'o', ö: 'oe', ő: 'o', ø: 'o', ù: 'u', ú: 'u', û: 'u', ü: 'ue', ű: 'u', ý: 'y', þ: 'th', ÿ: 'y', ẞ: 'SS', // language specific // Arabic ا: 'a', أ: 'a', إ: 'i', آ: 'aa', ؤ: 'u', ئ: 'e', ء: 'a', ب: 'b', ت: 't', ث: 'th', ج: 'j', ح: 'h', خ: 'kh', د: 'd', ذ: 'th', ر: 'r', ز: 'z', س: 's', ش: 'sh', ص: 's', ض: 'dh', ط: 't', ظ: 'z', ع: 'a', غ: 'gh', ف: 'f', ق: 'q', ك: 'k', ل: 'l', م: 'm', ن: 'n', ه: 'h', و: 'w', ي: 'y', ى: 'a', ة: 'h', ﻻ: 'la', ﻷ: 'laa', ﻹ: 'lai', ﻵ: 'laa', // Persian additional characters than Arabic گ: 'g', چ: 'ch', پ: 'p', ژ: 'zh', ک: 'k', ی: 'y', // Arabic diactrics 'َ': 'a', 'ً': 'an', 'ِ': 'e', 'ٍ': 'en', 'ُ': 'u', 'ٌ': 'on', 'ْ': '', // Arabic numbers '٠': '0', '١': '1', '٢': '2', '٣': '3', '٤': '4', '٥': '5', '٦': '6', '٧': '7', '٨': '8', '٩': '9', // Persian numbers '۰': '0', '۱': '1', '۲': '2', '۳': '3', '۴': '4', '۵': '5', '۶': '6', '۷': '7', '۸': '8', '۹': '9', // Burmese consonants က: 'k', ခ: 'kh', ဂ: 'g', ဃ: 'ga', င: 'ng', စ: 's', ဆ: 'sa', ဇ: 'z', စျ: 'za', ည: 'ny', ဋ: 't', ဌ: 'ta', ဍ: 'd', ဎ: 'da', ဏ: 'na', တ: 't', ထ: 'ta', ဒ: 'd', ဓ: 'da', န: 'n', ပ: 'p', ဖ: 'pa', ဗ: 'b', ဘ: 'ba', မ: 'm', ယ: 'y', ရ: 'ya', လ: 'l', ဝ: 'w', သ: 'th', ဟ: 'h', ဠ: 'la', အ: 'a', // consonant character combos 'ြ': 'y', 'ျ': 'ya', 'ွ': 'w', 'ြွ': 'yw', 'ျွ': 'ywa', 'ှ': 'h', // independent vowels ဧ: 'e', '၏': '-e', ဣ: 'i', ဤ: '-i', ဉ: 'u', ဦ: '-u', ဩ: 'aw', သြော: 'aw', ဪ: 'aw', // numbers '၀': '0', '၁': '1', '၂': '2', '၃': '3', '၄': '4', '၅': '5', '၆': '6', '၇': '7', '၈': '8', '၉': '9', // virama and tone marks which are silent in transliteration '္': '', '့': '', 'း': '', // Czech č: 'c', ď: 'd', ě: 'e', ň: 'n', ř: 'r', š: 's', ť: 't', ů: 'u', ž: 'z', Č: 'C', Ď: 'D', Ě: 'E', Ň: 'N', Ř: 'R', Š: 'S', Ť: 'T', Ů: 'U', Ž: 'Z', // Dhivehi ހ: 'h', ށ: 'sh', ނ: 'n', ރ: 'r', ބ: 'b', ޅ: 'lh', ކ: 'k', އ: 'a', ވ: 'v', މ: 'm', ފ: 'f', ދ: 'dh', ތ: 'th', ލ: 'l', ގ: 'g', ޏ: 'gn', ސ: 's', ޑ: 'd', ޒ: 'z', ޓ: 't', ޔ: 'y', ޕ: 'p', ޖ: 'j', ޗ: 'ch', ޘ: 'tt', ޙ: 'hh', ޚ: 'kh', ޛ: 'th', ޜ: 'z', ޝ: 'sh', ޞ: 's', ޟ: 'd', ޠ: 't', ޡ: 'z', ޢ: 'a', ޣ: 'gh', ޤ: 'q', ޥ: 'w', 'ަ': 'a', 'ާ': 'aa', 'ި': 'i', 'ީ': 'ee', 'ު': 'u', 'ޫ': 'oo', 'ެ': 'e', 'ޭ': 'ey', 'ޮ': 'o', 'ޯ': 'oa', 'ް': '', // Georgian https://en.wikipedia.org/wiki/Romanization_of_Georgian // National system (2002) ა: 'a', ბ: 'b', გ: 'g', დ: 'd', ე: 'e', ვ: 'v', ზ: 'z', თ: 't', ი: 'i', კ: 'k', ლ: 'l', მ: 'm', ნ: 'n', ო: 'o', პ: 'p', ჟ: 'zh', რ: 'r', ს: 's', ტ: 't', უ: 'u', ფ: 'p', ქ: 'k', ღ: 'gh', ყ: 'q', შ: 'sh', ჩ: 'ch', ც: 'ts', ძ: 'dz', წ: 'ts', ჭ: 'ch', ხ: 'kh', ჯ: 'j', ჰ: 'h', // Greek α: 'a', β: 'v', γ: 'g', δ: 'd', ε: 'e', ζ: 'z', η: 'i', θ: 'th', ι: 'i', κ: 'k', λ: 'l', μ: 'm', ν: 'n', ξ: 'ks', ο: 'o', π: 'p', ρ: 'r', σ: 's', τ: 't', υ: 'y', φ: 'f', χ: 'x', ψ: 'ps', ω: 'o', ά: 'a', έ: 'e', ί: 'i', ό: 'o', ύ: 'y', ή: 'i', ώ: 'o', ς: 's', ϊ: 'i', ΰ: 'y', ϋ: 'y', ΐ: 'i', Α: 'A', Β: 'B', Γ: 'G', Δ: 'D', Ε: 'E', Ζ: 'Z', Η: 'I', Θ: 'TH', Ι: 'I', Κ: 'K', Λ: 'L', Μ: 'M', Ν: 'N', Ξ: 'KS', Ο: 'O', Π: 'P', Ρ: 'R', Σ: 'S', Τ: 'T', Υ: 'Y', Φ: 'F', Χ: 'X', Ψ: 'PS', Ω: 'O', Ά: 'A', Έ: 'E', Ί: 'I', Ό: 'O', Ύ: 'Y', Ή: 'I', Ώ: 'O', Ϊ: 'I', Ϋ: 'Y', // Latvian ā: 'a', // 'č': 'c', // duplicate ē: 'e', ģ: 'g', ī: 'i', ķ: 'k', ļ: 'l', ņ: 'n', // 'š': 's', // duplicate ū: 'u', // 'ž': 'z', // duplicate Ā: 'A', // 'Č': 'C', // duplicate Ē: 'E', Ģ: 'G', Ī: 'I', Ķ: 'k', Ļ: 'L', Ņ: 'N', // 'Š': 'S', // duplicate Ū: 'U', // 'Ž': 'Z', // duplicate // Macedonian Ќ: 'Kj', ќ: 'kj', Љ: 'Lj', љ: 'lj', Њ: 'Nj', њ: 'nj', Тс: 'Ts', тс: 'ts', // Polish ą: 'a', ć: 'c', ę: 'e', ł: 'l', ń: 'n', // 'ó': 'o', // duplicate ś: 's', ź: 'z', ż: 'z', Ą: 'A', Ć: 'C', Ę: 'E', Ł: 'L', Ń: 'N', Ś: 'S', Ź: 'Z', Ż: 'Z', // Ukranian Є: 'Ye', І: 'I', Ї: 'Yi', Ґ: 'G', є: 'ye', і: 'i', ї: 'yi', ґ: 'g', // Romanian ă: 'a', Ă: 'A', ș: 's', Ș: 'S', // 'ş': 's', // duplicate // 'Ş': 'S', // duplicate ț: 't', Ț: 'T', ţ: 't', Ţ: 'T', // Russian https://en.wikipedia.org/wiki/Romanization_of_Russian // ICAO а: 'a', б: 'b', в: 'v', г: 'g', д: 'd', е: 'e', ё: 'yo', ж: 'zh', з: 'z', и: 'i', й: 'i', к: 'k', л: 'l', м: 'm', н: 'n', о: 'o', п: 'p', р: 'r', с: 's', т: 't', у: 'u', ф: 'f', х: 'kh', ц: 'c', ч: 'ch', ш: 'sh', щ: 'sh', ъ: '', ы: 'y', ь: '', э: 'e', ю: 'yu', я: 'ya', А: 'A', Б: 'B', В: 'V', Г: 'G', Д: 'D', Е: 'E', Ё: 'Yo', Ж: 'Zh', З: 'Z', И: 'I', Й: 'I', К: 'K', Л: 'L', М: 'M', Н: 'N', О: 'O', П: 'P', Р: 'R', С: 'S', Т: 'T', У: 'U', Ф: 'F', Х: 'Kh', Ц: 'C', Ч: 'Ch', Ш: 'Sh', Щ: 'Sh', Ъ: '', Ы: 'Y', Ь: '', Э: 'E', Ю: 'Yu', Я: 'Ya', // Serbian ђ: 'dj', ј: 'j', // 'љ': 'lj', // duplicate // 'њ': 'nj', // duplicate ћ: 'c', џ: 'dz', Ђ: 'Dj', Ј: 'j', // 'Љ': 'Lj', // duplicate // 'Њ': 'Nj', // duplicate Ћ: 'C', Џ: 'Dz', // Slovak ľ: 'l', ĺ: 'l', ŕ: 'r', Ľ: 'L', Ĺ: 'L', Ŕ: 'R', // Turkish ş: 's', Ş: 'S', ı: 'i', İ: 'I', // 'ç': 'c', // duplicate // 'Ç': 'C', // duplicate // 'ü': 'u', // duplicate, see langCharMap // 'Ü': 'U', // duplicate, see langCharMap // 'ö': 'o', // duplicate, see langCharMap // 'Ö': 'O', // duplicate, see langCharMap ğ: 'g', Ğ: 'G', // Vietnamese ả: 'a', Ả: 'A', ẳ: 'a', Ẳ: 'A', ẩ: 'a', Ẩ: 'A', đ: 'd', Đ: 'D', ẹ: 'e', Ẹ: 'E', ẽ: 'e', Ẽ: 'E', ẻ: 'e', Ẻ: 'E', ế: 'e', Ế: 'E', ề: 'e', Ề: 'E', ệ: 'e', Ệ: 'E', ễ: 'e', Ễ: 'E', ể: 'e', Ể: 'E', ỏ: 'o', ọ: 'o', Ọ: 'o', ố: 'o', Ố: 'O', ồ: 'o', Ồ: 'O', ổ: 'o', Ổ: 'O', ộ: 'o', Ộ: 'O', ỗ: 'o', Ỗ: 'O', ơ: 'o', Ơ: 'O', ớ: 'o', Ớ: 'O', ờ: 'o', Ờ: 'O', ợ: 'o', Ợ: 'O', ỡ: 'o', Ỡ: 'O', Ở: 'o', ở: 'o', ị: 'i', Ị: 'I', ĩ: 'i', Ĩ: 'I', ỉ: 'i', Ỉ: 'i', ủ: 'u', Ủ: 'U', ụ: 'u', Ụ: 'U', ũ: 'u', Ũ: 'U', ư: 'u', Ư: 'U', ứ: 'u', Ứ: 'U', ừ: 'u', Ừ: 'U', ự: 'u', Ự: 'U', ữ: 'u', Ữ: 'U', ử: 'u', Ử: 'ư', ỷ: 'y', Ỷ: 'y', ỳ: 'y', Ỳ: 'Y', ỵ: 'y', Ỵ: 'Y', ỹ: 'y', Ỹ: 'Y', ạ: 'a', Ạ: 'A', ấ: 'a', Ấ: 'A', ầ: 'a', Ầ: 'A', ậ: 'a', Ậ: 'A', ẫ: 'a', Ẫ: 'A', // 'ă': 'a', // duplicate // 'Ă': 'A', // duplicate ắ: 'a', Ắ: 'A', ằ: 'a', Ằ: 'A', ặ: 'a', Ặ: 'A', ẵ: 'a', Ẵ: 'A', '⓪': '0', '①': '1', '②': '2', '③': '3', '④': '4', '⑤': '5', '⑥': '6', '⑦': '7', '⑧': '8', '⑨': '9', '⑩': '10', '⑪': '11', '⑫': '12', '⑬': '13', '⑭': '14', '⑮': '15', '⑯': '16', '⑰': '17', '⑱': '18', '⑲': '18', '⑳': '18', '⓵': '1', '⓶': '2', '⓷': '3', '⓸': '4', '⓹': '5', '⓺': '6', '⓻': '7', '⓼': '8', '⓽': '9', '⓾': '10', '⓿': '0', '⓫': '11', '⓬': '12', '⓭': '13', '⓮': '14', '⓯': '15', '⓰': '16', '⓱': '17', '⓲': '18', '⓳': '19', '⓴': '20', 'Ⓐ': 'A', 'Ⓑ': 'B', 'Ⓒ': 'C', 'Ⓓ': 'D', 'Ⓔ': 'E', 'Ⓕ': 'F', 'Ⓖ': 'G', 'Ⓗ': 'H', 'Ⓘ': 'I', 'Ⓙ': 'J', 'Ⓚ': 'K', 'Ⓛ': 'L', 'Ⓜ': 'M', 'Ⓝ': 'N', 'Ⓞ': 'O', 'Ⓟ': 'P', 'Ⓠ': 'Q', 'Ⓡ': 'R', 'Ⓢ': 'S', 'Ⓣ': 'T', 'Ⓤ': 'U', 'Ⓥ': 'V', 'Ⓦ': 'W', 'Ⓧ': 'X', 'Ⓨ': 'Y', 'Ⓩ': 'Z', 'ⓐ': 'a', 'ⓑ': 'b', 'ⓒ': 'c', 'ⓓ': 'd', 'ⓔ': 'e', 'ⓕ': 'f', 'ⓖ': 'g', 'ⓗ': 'h', 'ⓘ': 'i', 'ⓙ': 'j', 'ⓚ': 'k', 'ⓛ': 'l', 'ⓜ': 'm', 'ⓝ': 'n', 'ⓞ': 'o', 'ⓟ': 'p', 'ⓠ': 'q', 'ⓡ': 'r', 'ⓢ': 's', 'ⓣ': 't', 'ⓤ': 'u', 'ⓦ': 'v', 'ⓥ': 'w', 'ⓧ': 'x', 'ⓨ': 'y', 'ⓩ': 'z', // symbols '“': '"', '”': '"', '‘': "'", '’': "'", '∂': 'd', ƒ: 'f', '™': '(TM)', '©': '(C)', œ: 'oe', Œ: 'OE', '®': '(R)', '†': '+', '℠': '(SM)', '…': '...', '˚': 'o', º: 'o', ª: 'a', '•': '*', '၊': ',', '။': '.', // currency $: 'USD', '€': 'EUR', '₢': 'BRN', '₣': 'FRF', '£': 'GBP', '₤': 'ITL', '₦': 'NGN', '₧': 'ESP', '₩': 'KRW', '₪': 'ILS', '₫': 'VND', '₭': 'LAK', '₮': 'MNT', '₯': 'GRD', '₱': 'ARS', '₲': 'PYG', '₳': 'ARA', '₴': 'UAH', '₵': 'GHS', '¢': 'cent', '¥': 'CNY', 元: 'CNY', 円: 'YEN', '﷼': 'IRR', '₠': 'EWE', '฿': 'THB', '₨': 'INR', '₹': 'INR', '₰': 'PF', '₺': 'TRY', '؋': 'AFN', '₼': 'AZN', лв: 'BGN', '៛': 'KHR', '₡': 'CRC', '₸': 'KZT', ден: 'MKD', zł: 'PLN', '₽': 'RUB', '₾': 'GEL', }; var lookAheadCharArray = [ // burmese '်', // Dhivehi 'ް', ]; var diatricMap = { // Burmese // dependent vowels 'ာ': 'a', 'ါ': 'a', 'ေ': 'e', 'ဲ': 'e', 'ိ': 'i', 'ီ': 'i', 'ို': 'o', 'ု': 'u', 'ူ': 'u', 'ေါင်': 'aung', 'ော': 'aw', 'ော်': 'aw', 'ေါ': 'aw', 'ေါ်': 'aw', '်': '်', // this is special case but the character will be converted to latin in the code က်: 'et', 'ိုက်': 'aik', 'ောက်': 'auk', င်: 'in', 'ိုင်': 'aing', 'ောင်': 'aung', စ်: 'it', ည်: 'i', တ်: 'at', 'ိတ်': 'eik', 'ုတ်': 'ok', 'ွတ်': 'ut', 'ေတ်': 'it', ဒ်: 'd', 'ိုဒ်': 'ok', 'ုဒ်': 'ait', န်: 'an', 'ာန်': 'an', 'ိန်': 'ein', 'ုန်': 'on', 'ွန်': 'un', ပ်: 'at', 'ိပ်': 'eik', 'ုပ်': 'ok', 'ွပ်': 'ut', န်ုပ်: 'nub', မ်: 'an', 'ိမ်': 'ein', 'ုမ်': 'on', 'ွမ်': 'un', ယ်: 'e', 'ိုလ်': 'ol', ဉ်: 'in', 'ံ': 'an', 'ိံ': 'ein', 'ုံ': 'on', // Dhivehi 'ައް': 'ah', 'ަށް': 'ah', }; var langCharMap = { en: {}, // default language az: { // Azerbaijani ç: 'c', ə: 'e', ğ: 'g', ı: 'i', ö: 'o', ş: 's', ü: 'u', Ç: 'C', Ə: 'E', Ğ: 'G', İ: 'I', Ö: 'O', Ş: 'S', Ü: 'U', }, cs: { // Czech č: 'c', ď: 'd', ě: 'e', ň: 'n', ř: 'r', š: 's', ť: 't', ů: 'u', ž: 'z', Č: 'C', Ď: 'D', Ě: 'E', Ň: 'N', Ř: 'R', Š: 'S', Ť: 'T', Ů: 'U', Ž: 'Z', }, fi: { // Finnish // 'å': 'a', duplicate see charMap/latin // 'Å': 'A', duplicate see charMap/latin ä: 'a', // ok Ä: 'A', // ok ö: 'o', // ok Ö: 'O', // ok }, hu: { // Hungarian ä: 'a', // ok Ä: 'A', // ok // 'á': 'a', duplicate see charMap/latin // 'Á': 'A', duplicate see charMap/latin ö: 'o', // ok Ö: 'O', // ok // 'ő': 'o', duplicate see charMap/latin // 'Ő': 'O', duplicate see charMap/latin ü: 'u', Ü: 'U', ű: 'u', Ű: 'U', }, lt: { // Lithuanian ą: 'a', č: 'c', ę: 'e', ė: 'e', į: 'i', š: 's', ų: 'u', ū: 'u', ž: 'z', Ą: 'A', Č: 'C', Ę: 'E', Ė: 'E', Į: 'I', Š: 'S', Ų: 'U', Ū: 'U', }, lv: { // Latvian ā: 'a', č: 'c', ē: 'e', ģ: 'g', ī: 'i', ķ: 'k', ļ: 'l', ņ: 'n', š: 's', ū: 'u', ž: 'z', Ā: 'A', Č: 'C', Ē: 'E', Ģ: 'G', Ī: 'i', Ķ: 'k', Ļ: 'L', Ņ: 'N', Š: 'S', Ū: 'u', Ž: 'Z', }, pl: { // Polish ą: 'a', ć: 'c', ę: 'e', ł: 'l', ń: 'n', ó: 'o', ś: 's', ź: 'z', ż: 'z', Ą: 'A', Ć: 'C', Ę: 'e', Ł: 'L', Ń: 'N', Ó: 'O', Ś: 'S', Ź: 'Z', Ż: 'Z', }, sv: { // Swedish // 'å': 'a', duplicate see charMap/latin // 'Å': 'A', duplicate see charMap/latin ä: 'a', // ok Ä: 'A', // ok ö: 'o', // ok Ö: 'O', // ok }, sk: { // Slovak ä: 'a', Ä: 'A', }, sr: { // Serbian љ: 'lj', њ: 'nj', Љ: 'Lj', Њ: 'Nj', đ: 'dj', Đ: 'Dj', }, tr: { // Turkish Ü: 'U', Ö: 'O', ü: 'u', ö: 'o', }, }; var symbolMap = { ar: { '∆': 'delta', '∞': 'la-nihaya', '♥': 'hob', '&': 'wa', '|': 'aw', '<': 'aqal-men', '>': 'akbar-men', '∑': 'majmou', '¤': 'omla', }, az: {}, ca: { '∆': 'delta', '∞': 'infinit', '♥': 'amor', '&': 'i', '|': 'o', '<': 'menys que', '>': 'mes que', '∑': 'suma dels', '¤': 'moneda', }, cs: { '∆': 'delta', '∞': 'nekonecno', '♥': 'laska', '&': 'a', '|': 'nebo', '<': 'mensi nez', '>': 'vetsi nez', '∑': 'soucet', '¤': 'mena', }, de: { '∆': 'delta', '∞': 'unendlich', '♥': 'Liebe', '&': 'und', '|': 'oder', '<': 'kleiner als', '>': 'groesser als', '∑': 'Summe von', '¤': 'Waehrung', }, dv: { '∆': 'delta', '∞': 'kolunulaa', '♥': 'loabi', '&': 'aai', '|': 'noonee', '<': 'ah vure kuda', '>': 'ah vure bodu', '∑': 'jumula', '¤': 'faisaa', }, en: { '∆': 'delta', '∞': 'infinity', '♥': 'love', '&': 'and', '|': 'or', '<': 'less than', '>': 'greater than', '∑': 'sum', '¤': 'currency', }, es: { '∆': 'delta', '∞': 'infinito', '♥': 'amor', '&': 'y', '|': 'u', '<': 'menos que', '>': 'mas que', '∑': 'suma de los', '¤': 'moneda', }, fa: { '∆': 'delta', '∞': 'bi-nahayat', '♥': 'eshgh', '&': 'va', '|': 'ya', '<': 'kamtar-az', '>': 'bishtar-az', '∑': 'majmooe', '¤': 'vahed', }, fi: { '∆': 'delta', '∞': 'aarettomyys', '♥': 'rakkaus', '&': 'ja', '|': 'tai', '<': 'pienempi kuin', '>': 'suurempi kuin', '∑': 'summa', '¤': 'valuutta', }, fr: { '∆': 'delta', '∞': 'infiniment', '♥': 'Amour', '&': 'et', '|': 'ou', '<': 'moins que', '>': 'superieure a', '∑': 'somme des', '¤': 'monnaie', }, ge: { '∆': 'delta', '∞': 'usasruloba', '♥': 'siqvaruli', '&': 'da', '|': 'an', '<': 'naklebi', '>': 'meti', '∑': 'jami', '¤': 'valuta', }, gr: {}, hu: { '∆': 'delta', '∞': 'vegtelen', '♥': 'szerelem', '&': 'es', '|': 'vagy', '<': 'kisebb mint', '>': 'nagyobb mint', '∑': 'szumma', '¤': 'penznem', }, it: { '∆': 'delta', '∞': 'infinito', '♥': 'amore', '&': 'e', '|': 'o', '<': 'minore di', '>': 'maggiore di', '∑': 'somma', '¤': 'moneta', }, lt: { '∆': 'delta', '∞': 'begalybe', '♥': 'meile', '&': 'ir', '|': 'ar', '<': 'maziau nei', '>': 'daugiau nei', '∑': 'suma', '¤': 'valiuta', }, lv: { '∆': 'delta', '∞': 'bezgaliba', '♥': 'milestiba', '&': 'un', '|': 'vai', '<': 'mazak neka', '>': 'lielaks neka', '∑': 'summa', '¤': 'valuta', }, my: { '∆': 'kwahkhyaet', '∞': 'asaonasme', '♥': 'akhyait', '&': 'nhin', '|': 'tho', '<': 'ngethaw', '>': 'kyithaw', '∑': 'paungld', '¤': 'ngwekye', }, mk: {}, nl: { '∆': 'delta', '∞': 'oneindig', '♥': 'liefde', '&': 'en', '|': 'of', '<': 'kleiner dan', '>': 'groter dan', '∑': 'som', '¤': 'valuta', }, pl: { '∆': 'delta', '∞': 'nieskonczonosc', '♥': 'milosc', '&': 'i', '|': 'lub', '<': 'mniejsze niz', '>': 'wieksze niz', '∑': 'suma', '¤': 'waluta', }, pt: { '∆': 'delta', '∞': 'infinito', '♥': 'amor', '&': 'e', '|': 'ou', '<': 'menor que', '>': 'maior que', '∑': 'soma', '¤': 'moeda', }, ro: { '∆': 'delta', '∞': 'infinit', '♥': 'dragoste', '&': 'si', '|': 'sau', '<': 'mai mic ca', '>': 'mai mare ca', '∑': 'suma', '¤': 'valuta', }, ru: { '∆': 'delta', '∞': 'beskonechno', '♥': 'lubov', '&': 'i', '|': 'ili', '<': 'menshe', '>': 'bolshe', '∑': 'summa', '¤': 'valjuta', }, sk: { '∆': 'delta', '∞': 'nekonecno', '♥': 'laska', '&': 'a', '|': 'alebo', '<': 'menej ako', '>': 'viac ako', '∑': 'sucet', '¤': 'mena', }, sr: {}, tr: { '∆': 'delta', '∞': 'sonsuzluk', '♥': 'ask', '&': 've', '|': 'veya', '<': 'kucuktur', '>': 'buyuktur', '∑': 'toplam', '¤': 'para birimi', }, uk: { '∆': 'delta', '∞': 'bezkinechnist', '♥': 'lubov', '&': 'i', '|': 'abo', '<': 'menshe', '>': 'bilshe', '∑': 'suma', '¤': 'valjuta', }, vn: { '∆': 'delta', '∞': 'vo cuc', '♥': 'yeu', '&': 'va', '|': 'hoac', '<': 'nho hon', '>': 'lon hon', '∑': 'tong', '¤': 'tien te', }, }; var uricChars = [';', '?', ':', '@', '&', '=', '+', '$', ',', '/'].join( '', ); var uricNoSlashChars = [';', '?', ':', '@', '&', '=', '+', '$', ','].join( '', ); var markChars = ['.', '!', '~', '*', "'", '(', ')'].join(''); var getSlug = function getSlug2(input, opts) { var separator = '-'; var result = ''; var diatricString = ''; var convertSymbols = true; var customReplacements = {}; var maintainCase; var titleCase; var truncate; var uricFlag; var uricNoSlashFlag; var markFlag; var symbol; var langChar; var lucky; var i; var ch; var l; var lastCharWasSymbol; var lastCharWasDiatric; var allowedChars = ''; if (typeof input !== 'string') { return ''; } if (typeof opts === 'string') { separator = opts; } symbol = symbolMap.en; langChar = langCharMap.en; if (typeof opts === 'object') { maintainCase = opts.maintainCase || false; customReplacements = opts.custom && typeof opts.custom === 'object' ? opts.custom : customReplacements; truncate = (+opts.truncate > 1 && opts.truncate) || false; uricFlag = opts.uric || false; uricNoSlashFlag = opts.uricNoSlash || false; markFlag = opts.mark || false; convertSymbols = opts.symbols === false || opts.lang === false ? false : true; separator = opts.separator || separator; if (uricFlag) { allowedChars += uricChars; } if (uricNoSlashFlag) { allowedChars += uricNoSlashChars; } if (markFlag) { allowedChars += markChars; } symbol = opts.lang && symbolMap[opts.lang] && convertSymbols ? symbolMap[opts.lang] : convertSymbols ? symbolMap.en : {}; langChar = opts.lang && langCharMap[opts.lang] ? langCharMap[opts.lang] : opts.lang === false || opts.lang === true ? {} : langCharMap.en; if ( opts.titleCase && typeof opts.titleCase.length === 'number' && Array.prototype.toString.call(opts.titleCase) ) { opts.titleCase.forEach(function (v) { customReplacements[v + ''] = v + ''; }); titleCase = true; } else { titleCase = !!opts.titleCase; } if ( opts.custom && typeof opts.custom.length === 'number' && Array.prototype.toString.call(opts.custom) ) { opts.custom.forEach(function (v) { customReplacements[v + ''] = v + ''; }); } Object.keys(customReplacements).forEach(function (v) { var r; if (v.length > 1) { r = new RegExp('\\b' + escapeChars(v) + '\\b', 'gi'); } else { r = new RegExp(escapeChars(v), 'gi'); } input = input.replace(r, customReplacements[v]); }); for (ch in customReplacements) { allowedChars += ch; } } allowedChars += separator; allowedChars = escapeChars(allowedChars); input = input.replace(/(^\s+|\s+$)/g, ''); lastCharWasSymbol = false; lastCharWasDiatric = false; for (i = 0, l = input.length; i < l; i++) { ch = input[i]; if (isReplacedCustomChar(ch, customReplacements)) { lastCharWasSymbol = false; } else if (langChar[ch]) { ch = lastCharWasSymbol && langChar[ch].match(/[A-Za-z0-9]/) ? ' ' + langChar[ch] : langChar[ch]; lastCharWasSymbol = false; } else if (ch in charMap) { if (i + 1 < l && lookAheadCharArray.indexOf(input[i + 1]) >= 0) { diatricString += ch; ch = ''; } else if (lastCharWasDiatric === true) { ch = diatricMap[diatricString] + charMap[ch]; diatricString = ''; } else { ch = lastCharWasSymbol && charMap[ch].match(/[A-Za-z0-9]/) ? ' ' + charMap[ch] : charMap[ch]; } lastCharWasSymbol = false; lastCharWasDiatric = false; } else if (ch in diatricMap) { diatricString += ch; ch = ''; if (i === l - 1) { ch = diatricMap[diatricString]; } lastCharWasDiatric = true; } else if ( // process symbol chars symbol[ch] && !(uricFlag && uricChars.indexOf(ch) !== -1) && !(uricNoSlashFlag && uricNoSlashChars.indexOf(ch) !== -1) ) { ch = lastCharWasSymbol || result.substr(-1).match(/[A-Za-z0-9]/) ? separator + symbol[ch] : symbol[ch]; ch += input[i + 1] !== void 0 && input[i + 1].match(/[A-Za-z0-9]/) ? separator : ''; lastCharWasSymbol = true; } else { if (lastCharWasDiatric === true) { ch = diatricMap[diatricString] + ch; diatricString = ''; lastCharWasDiatric = false; } else if ( lastCharWasSymbol && (/[A-Za-z0-9]/.test(ch) || result.substr(-1).match(/A-Za-z0-9]/)) ) { ch = ' ' + ch; } lastCharWasSymbol = false; } result += ch.replace( new RegExp('[^\\w\\s' + allowedChars + '_-]', 'g'), separator, ); } if (titleCase) { result = result.replace(/(\w)(\S*)/g, function (_, i2, r) { var j = i2.toUpperCase() + (r !== null ? r : ''); return Object.keys(customReplacements).indexOf(j.toLowerCase()) < 0 ? j : j.toLowerCase(); }); } result = result .replace(/\s+/g, separator) .replace(new RegExp('\\' + separator + '+', 'g'), separator) .replace( new RegExp('(^\\' + separator + '+|\\' + separator + '+$)', 'g'), '', ); if (truncate && result.length > truncate) { lucky = result.charAt(truncate) === separator; result = result.slice(0, truncate); if (!lucky) { result = result.slice(0, result.lastIndexOf(separator)); } } if (!maintainCase && !titleCase) { result = result.toLowerCase(); } return result; }; var createSlug = function createSlug2(opts) { return function getSlugWithConfig(input) { return getSlug(input, opts); }; }; var escapeChars = function escapeChars2(input) { return input.replace(/[-\\^$*+?.()|[\]{}\/]/g, '\\$&'); }; var isReplacedCustomChar = function (ch, customReplacements) { for (var c in customReplacements) { if (customReplacements[c] === ch) { return true; } } }; if (typeof module !== 'undefined' && module.exports) { module.exports = getSlug; module.exports.createSlug = createSlug; } else if (typeof define !== 'undefined' && define.amd) { define([], function () { return getSlug; }); } else { try { if (root.getSlug || root.createSlug) { throw 'speakingurl: globals exists /(getSlug|createSlug)/'; } else { root.getSlug = getSlug; root.createSlug = createSlug; } } catch (e) {} } })(exports); }, }); var require_speakingurl2 = __commonJS2({ '../../node_modules/.pnpm/speakingurl@14.0.1/node_modules/speakingurl/index.js'( exports, module, ) { 'use strict'; init_esm_shims2(); module.exports = require_speakingurl(); }, }); init_esm_shims2(); init_esm_shims2(); init_esm_shims2(); init_esm_shims2(); init_esm_shims2(); init_esm_shims2(); init_esm_shims2(); init_esm_shims2(); init_esm_shims2(); init_esm_shims2(); var _a; var _b; var devtoolsHooks = (_b = (_a = target).__VUE_DEVTOOLS_HOOK) != null ? _b : (_a.__VUE_DEVTOOLS_HOOK = createHooks()); var on = { vueAppInit(fn) { devtoolsHooks.hook('app:init', fn); }, vueAppUnmount(fn) { devtoolsHooks.hook('app:unmount', fn); }, vueAppConnected(fn) { devtoolsHooks.hook('app:connected', fn); }, componentAdded(fn) { return devtoolsHooks.hook('component:added', fn); }, componentUpdated(fn) { return devtoolsHooks.hook('component:updated', fn); }, componentRemoved(fn) { return devtoolsHooks.hook('component:removed', fn); }, setupDevtoolsPlugin(fn) { devtoolsHooks.hook('devtools-plugin:setup', fn); }, }; var hook = { on, setupDevToolsPlugin(pluginDescriptor, setupFn) { return devtoolsHooks.callHook( 'devtools-plugin:setup', pluginDescriptor, setupFn, ); }, }; init_esm_shims2(); init_esm_shims2(); init_esm_shims2(); init_esm_shims2(); init_esm_shims2(); init_esm_shims2(); init_esm_shims2(); var import_speakingurl = __toESM2(require_speakingurl2(), 1); init_esm_shims2(); init_esm_shims2(); init_esm_shims2(); var _a2; var _b2; var apiHooks = (_b2 = (_a2 = target).__VUE_DEVTOOLS_API_HOOK) != null ? _b2 : (_a2.__VUE_DEVTOOLS_API_HOOK = createHooks()); function getRoutes(router) { const routesMap = /* @__PURE__ */ new Map(); return ((router == null ? void 0 : router.getRoutes()) || []).filter( (i) => !routesMap.has(i.path) && routesMap.set(i.path, 1), ); } function filterRoutes(routes) { return routes.map((item) => { let { path, name, children } = item; if (children == null ? void 0 : children.length) children = filterRoutes(children); return { path, name, children, }; }); } function filterCurrentRoute(route) { if (route) { const { fullPath, hash, href, path, name, matched, params, query } = route; return { fullPath, hash, href, path, name, params, query, matched: filterRoutes(matched), }; } return route; } function normalizeRouterInfo(appRecord, state) { function init() { var _a10; const router = (_a10 = appRecord.app) == null ? void 0 : _a10.config.globalProperties.$router; const currentRoute = filterCurrentRoute( router == null ? void 0 : router.currentRoute.value, ); const routes = filterRoutes(getRoutes(router)); const c = console.warn; console.warn = () => {}; target[ROUTER_INFO_KEY] = { currentRoute: currentRoute ? deepClone(currentRoute) : {}, routes: deepClone(routes), }; target[ROUTER_KEY] = router; console.warn = c; } init(); hook.on.componentUpdated( debounce(() => { var _a10; if ( ((_a10 = state.activeAppRecord) == null ? void 0 : _a10.app) !== appRecord.app ) return; init(); apiHooks.callHook('router-info:updated', target[ROUTER_INFO_KEY]); }, 200), ); } function setupDevToolsPlugin(pluginDescriptor, setupFn) { return hook.setupDevToolsPlugin(pluginDescriptor, setupFn); } init_esm_shims2(); init_esm_shims2(); init_esm_shims2(); init_esm_shims2(); init_esm_shims2(); init_esm_shims2(); init_esm_shims2(); init_esm_shims2(); var StateEditor = class { constructor() { this.refEditor = new RefStateEditor(); } set(object, path, value, cb) { const sections = Array.isArray(path) ? path : path.split('.'); const markRef = false; while (sections.length > 1) { const section = sections.shift(); if (object instanceof Map) object = object.get(section); if (object instanceof Set) object = Array.from(object.values())[section]; else object = object[section]; if (this.refEditor.isRef(object)) object = this.refEditor.get(object); } const field = sections[0]; const item = this.refEditor.get(object)[field]; if (cb) { cb(object, field, value); } else { if (this.refEditor.isRef(item)) this.refEditor.set(item, value); else if (markRef) object[field] = value; else object[field] = value; } } get(object, path) { const sections = Array.isArray(path) ? path : path.split('.'); for (let i = 0; i < sections.length; i++) { if (object instanceof Map) object = object.get(sections[i]); else object = object[sections[i]]; if (this.refEditor.isRef(object)) object = this.refEditor.get(object); if (!object) return void 0; } return object; } has(object, path, parent = false) { if (typeof object === 'undefined') return false; const sections = Array.isArray(path) ? path.slice() : path.split('.'); const size = !parent ? 1 : 2; while (object && sections.length > size) { const section = sections.shift(); object = object[section]; if (this.refEditor.isRef(object)) object = this.refEditor.get(object); } return ( object != null && Object.prototype.hasOwnProperty.call(object, sections[0]) ); } createDefaultSetCallback(state) { return (object, field, value) => { if (state.remove || state.newKey) { if (Array.isArray(object)) object.splice(field, 1); else if (toRaw(object) instanceof Map) object.delete(field); else if (toRaw(object) instanceof Set) object.delete(Array.from(object.values())[field]); else Reflect.deleteProperty(object, field); } if (!state.remove) { const target10 = object[state.newKey || field]; if (this.refEditor.isRef(target10)) this.refEditor.set(target10, value); else if (toRaw(object) instanceof Map) object.set(state.newKey || field, value); else if (toRaw(object) instanceof Set) object.add(value); else object[state.newKey || field] = value; } }; } }; var RefStateEditor = class { set(ref, value) { if (isRef(ref)) { ref.value = value; } else { if (ref instanceof Set && Array.isArray(value)) { ref.clear(); value.forEach((v) => ref.add(v)); return; } const currentKeys = Object.keys(value); if (ref instanceof Map) { const previousKeysSet2 = new Set(ref.keys()); currentKeys.forEach((key) => { ref.set(key, Reflect.get(value, key)); previousKeysSet2.delete(key); }); previousKeysSet2.forEach((key) => ref.delete(key)); return; } const previousKeysSet = new Set(Object.keys(ref)); currentKeys.forEach((key) => { Reflect.set(ref, key, Reflect.get(value, key)); previousKeysSet.delete(key); }); previousKeysSet.forEach((key) => Reflect.deleteProperty(ref, key)); } } get(ref) { return isRef(ref) ? ref.value : ref; } isRef(ref) { return isRef(ref) || isReactive(ref); } }; var stateEditor = new StateEditor(); init_esm_shims2(); init_esm_shims2(); init_esm_shims2(); var UNDEFINED = '__vue_devtool_undefined__'; var INFINITY = '__vue_devtool_infinity__'; var NEGATIVE_INFINITY = '__vue_devtool_negative_infinity__'; var NAN = '__vue_devtool_nan__'; init_esm_shims2(); init_esm_shims2(); var tokenMap = { [UNDEFINED]: 'undefined', [NAN]: 'NaN', [INFINITY]: 'Infinity', [NEGATIVE_INFINITY]: '-Infinity', }; var reversedTokenMap = Object.entries(tokenMap).reduce((acc, [key, value]) => { acc[value] = key; return acc; }, {}); init_esm_shims2(); init_esm_shims2(); init_esm_shims2(); init_esm_shims2(); init_esm_shims2(); init_esm_shims2(); init_esm_shims2(); var MAX_SERIALIZED_SIZE = 512 * 1024; init_esm_shims2(); init_esm_shims2(); init_esm_shims2(); init_esm_shims2(); function addCustomTab(tab) { if (devtoolsState.tabs.some((t) => t.name === tab.name)) return; devtoolsState.tabs.push(tab); } init_esm_shims2(); function addCustomCommand(action) { if (devtoolsState.commands.some((t) => t.id === action.id)) return; devtoolsState.commands.push(action); } function removeCustomCommand(actionId) { const index = devtoolsState.commands.findIndex((t) => t.id === actionId); if (index === -1) return; devtoolsState.commands.splice(index, 1); } init_esm_shims2(); var _a3; var _b3; (_b3 = (_a3 = target).__VUE_DEVTOOLS_COMPONENT_INSPECTOR_ENABLED__) != null ? _b3 : (_a3.__VUE_DEVTOOLS_COMPONENT_INSPECTOR_ENABLED__ = true); init_esm_shims2(); init_esm_shims2(); init_esm_shims2(); var STATE_KEY = '__VUE_DEVTOOLS_GLOBAL_STATE__'; function initStateFactory() { return { connected: false, clientConnected: false, appRecords: [], activeAppRecord: null, selectedComponentId: null, pluginBuffer: [], tabs: [], commands: [], vitePluginDetected: false, activeAppRecordId: null, highPerfModeEnabled: false, }; } var _a4; var _b4; (_b4 = (_a4 = target)[STATE_KEY]) != null ? _b4 : (_a4[STATE_KEY] = initStateFactory()); var callStateUpdatedHook = debounce((state, oldState) => { apiHooks.callHook('devtools:state-updated', state, oldState); }, 80); var callConnectedUpdatedHook = debounce((state, oldState) => { apiHooks.callHook('devtools:connected-updated', state, oldState); }, 80); var devtoolsState = new Proxy(target[STATE_KEY], { get(target10, property) { return target[STATE_KEY][property]; }, deleteProperty(target10, property) { delete target10[property]; return true; }, set(target10, property, value) { const oldState = { ...target[STATE_KEY] }; target10[property] = value; target[STATE_KEY][property] = value; callStateUpdatedHook(target[STATE_KEY], oldState); if ( ['connected', 'clientConnected'].includes(property.toString()) && oldState[property] !== value ) callConnectedUpdatedHook(target[STATE_KEY], oldState); return true; }, }); Object.defineProperty(devtoolsState.tabs, 'push', { configurable: true, value(...items) { const result = Array.prototype.push.apply(this, items); devtoolsState.tabs = this; apiHooks.callHook('custom-tabs:updated', this); return result; }, }); ['push', 'splice'].forEach((method) => { Object.defineProperty(devtoolsState.commands, method, { configurable: true, value(...args) { const result = Array.prototype[method].apply(this, args); devtoolsState.commands = this; apiHooks.callHook('custom-commands:updated', this); return result; }, }); }); init_esm_shims2(); init_esm_shims2(); var ROUTER_KEY = '__VUE_DEVTOOLS_ROUTER__'; var ROUTER_INFO_KEY = '__VUE_DEVTOOLS_ROUTER_INFO__'; var _a5; var _b5; (_b5 = (_a5 = target)[ROUTER_INFO_KEY]) != null ? _b5 : (_a5[ROUTER_INFO_KEY] = { currentRoute: null, routes: [], }); var _a6; var _b6; (_b6 = (_a6 = target)[ROUTER_KEY]) != null ? _b6 : (_a6[ROUTER_KEY] = null); var devtoolsRouterInfo = new Proxy(target[ROUTER_INFO_KEY], { get(target10, property) { return target[ROUTER_INFO_KEY][property]; }, }); init_esm_shims2(); var CONTEXT_KEY = '__VUE_DEVTOOLS_CONTEXT__'; function initContextFactory() { return { appRecord: null, api: null, inspector: [], timelineLayer: [], routerInfo: {}, router: null, activeInspectorTreeId: '', componentPluginHookBuffer: [], }; } var _a7; var _b7; (_b7 = (_a7 = target)[CONTEXT_KEY]) != null ? _b7 : (_a7[CONTEXT_KEY] = initContextFactory()); function resetDevToolsContext() { target[CONTEXT_KEY] = initContextFactory(); } var devtoolsContext = new Proxy(target[CONTEXT_KEY], { get(target10, property) { if (property === 'router') return target[ROUTER_KEY]; else if (property === 'clear') return resetDevToolsContext; return target[CONTEXT_KEY][property]; }, set(target10, property, value) { target[CONTEXT_KEY][property] = value; return true; }, }); var devtoolsAppRecords = new Proxy(devtoolsState.appRecords, { get(_, property) { if (property === 'value') return devtoolsState.appRecords; else if (property === 'active') return devtoolsState.activeAppRecord; else if (property === 'activeId') return devtoolsState.activeAppRecordId; }, set(target10, property, value) { var _a10; const oldState = { ...devtoolsState }; if (property === 'value') { devtoolsState.appRecords = value; } else if (property === 'active') { const _value = value; devtoolsState.activeAppRecord = _value; devtoolsContext.appRecord = _value; devtoolsContext.api = _value.api; devtoolsContext.inspector = (_a10 = _value.inspector) != null ? _a10 : []; normalizeRouterInfo(value, devtoolsState); devtoolsContext.routerInfo = devtoolsRouterInfo; } else if (property === 'activeId') { devtoolsState.activeAppRecordId = value; } callStateUpdatedHook(devtoolsState, oldState); if ( ['connected', 'clientConnected'].includes(property.toString()) && oldState[property] !== value ) callConnectedUpdatedHook(devtoolsState, oldState); return true; }, }); var _a8; var _b8; var appRecordInfo = (_b8 = (_a8 = target).__VUE_DEVTOOLS_NEXT_APP_RECORD_INFO__) != null ? _b8 : (_a8.__VUE_DEVTOOLS_NEXT_APP_RECORD_INFO__ = { id: 0, appIds: /* @__PURE__ */ new Set(), }); init_esm_shims2(); var _a9; var _b9; (_b9 = (_a9 = target).__VUE_DEVTOOLS_ENV__) != null ? _b9 : (_a9.__VUE_DEVTOOLS_ENV__ = { vitePluginDetected: false, }); init_esm_shims2(); function onDevToolsConnected(fn) { return new Promise((resolve) => { if (devtoolsState.connected) { fn(); resolve(); return; } apiHooks.hook('devtools:connected-updated', (state) => { if (state.connected) { fn(); resolve(); } }); }); } function onDevToolsClientConnected(fn) { return new Promise((resolve) => { if (devtoolsState.connected && devtoolsState.clientConnected) { fn(); resolve(); return; } apiHooks.hook('devtools:connected-updated', (state) => { if (state.connected && state.clientConnected) { fn(); resolve(); } }); }); } init_esm_shims2(); export { addCustomCommand, addCustomTab, onDevToolsClientConnected, onDevToolsConnected, removeCustomCommand, setupDevToolsPlugin, setupDevToolsPlugin as setupDevtoolsPlugin, }; //# sourceMappingURL=vitepress___@vue_devtools-api.js.map