@widget-js/core 24.1.1-beta.87 → 24.1.1-beta.88
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +75 -24
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +707 -684
- package/dist/index.d.ts +707 -684
- package/dist/index.js +75 -25
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_freeGlobal.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_root.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_Symbol.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_arrayMap.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isArray.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_getRawTag.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_objectToString.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseGetTag.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isObjectLike.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isSymbol.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseToString.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/toString.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseSlice.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_castSlice.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_hasUnicode.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_asciiToArray.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_unicodeToArray.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_stringToArray.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_createCaseFirst.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/upperFirst.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/capitalize.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_arrayReduce.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_basePropertyOf.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_deburrLetter.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/deburr.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_asciiWords.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_hasUnicodeWord.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_unicodeWords.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/words.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_createCompounder.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/camelCase.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/kebabCase.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/snakeCase.js","../src/model/AppNotification.ts","../src/model/AppTheme.ts","../src/model/DeployedPage.ts","../src/model/DeployMode.ts","../src/model/DeployedWidget.ts","../src/model/event/BroadcastEvent.ts","../src/model/event/WebSocketEvent.ts","../src/utils/ElectronUtils.ts","../src/utils/LanguageUtils.ts","../src/utils/WidgetUtils.ts","../src/utils/TimeUtils.ts","../src/utils/WidgetPackageUtils.ts","../src/model/Page.ts","../src/model/SocialInfo.ts","../src/model/Widget.ts","../src/model/WidgetData.ts","../src/model/WidgetTheme.ts","../src/model/WidgetPackage.ts","../src/model/WidgetParams.ts","../src/router/encoding.ts","../src/router/query.ts","../src/lang/LanguageCode.ts","../src/utils/normalizeUrl.ts","../src/grid/GridSystem.ts","../src/api/ApiConstants.ts","../src/api/BaseApi.ts","../src/api/Channel.ts","../src/api/AppApi.ts","../src/api/BroadcastApi.ts","../src/api/BrowserWindowApi.ts","../src/api/ClipboardApi.ts","../src/utils/AppProtocolUtils.ts","../src/api/DeployedWidgetApi.ts","../src/api/DeviceApi.ts","../src/api/DialogApi.ts","../src/api/ElectronApi.ts","../src/api/FileApi.ts","../src/api/HttpApi.ts","../src/api/interface/IAppApi.ts","../src/api/interface/IWidgetPackageApi.ts","../src/api/interface/IMouseApi.ts","../src/api/interface/ITrayApi.ts","../src/api/interface/IUserApi.ts","../src/api/interface/IAiApi.ts","../src/api/LogApi.ts","../src/api/MenuApi.ts","../src/api/MouseApi.ts","../src/api/NotificationApi.ts","../src/api/ProcessApi.ts","../src/api/interface/IShortcutApi.ts","../src/api/ShortcutApi.ts","../src/api/StorageApi.ts","../src/api/structures/Gravity.ts","../src/api/interface/ISystemApi.ts","../src/api/SystemApi.ts","../src/api/TrayApi.ts","../src/api/UserApi.ts","../src/api/WidgetApi.ts","../src/api/WidgetDataApi.ts","../src/api/WidgetPackageApi.ts"],"names":["exports","Symbol","isArray","camelCase","kebabCase","snakeCase","NotificationSize","merge","parse","find","HostedMode","DeployMode","WebSocketEventType","WidgetKeyword","import_kebabCase","import_camelCase","value","ThemeMode","Channel","BrowserWindowApiEvent","ClipboardApiEvent","AppApiEvent","AppApiConstants","WidgetPackageApiEvent","MouseApiEvent","TrayApiEvent","UserApiEvent","AiApiEvent","MenuApiEvent","NotificationApiEvent","ShortcutApiEvent","Gravity","SystemApiEvent","WidgetApiEvent","localforage"],"mappings":"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AA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAC1E,MAAA,EAAQ,GAAA;AAAA,MAAM,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAC1E,MAAA,EAAQ,GAAA;AAAA,MAAM,MAAA,EAAQ,GAAA;AAAA,MACtB,MAAA,EAAQ,GAAA;AAAA,MAAM,MAAA,EAAQ,GAAA;AAAA,MACtB,MAAA,EAAQ,GAAA;AAAA,MAAM,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAChD,MAAA,EAAQ,GAAA;AAAA,MAAM,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAChD,MAAA,EAAQ,GAAA;AAAA,MAAM,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAChD,MAAA,EAAQ,GAAA;AAAA,MAAM,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAChD,MAAA,EAAQ,GAAA;AAAA,MAAM,MAAA,EAAQ,GAAA;AAAA,MACtB,MAAA,EAAQ,GAAA;AAAA,MAAM,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAC1E,MAAA,EAAQ,GAAA;AAAA,MAAM,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAC1E,MAAA,EAAQ,GAAA;AAAA,MAAM,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;A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","file":"index.cjs","sourcesContent":["/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nmodule.exports = baseSlice;\n","var baseSlice = require('./_baseSlice');\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\nmodule.exports = castSlice;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\nmodule.exports = hasUnicode;\n","/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n return string.split('');\n}\n\nmodule.exports = asciiToArray;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n return string.match(reUnicode) || [];\n}\n\nmodule.exports = unicodeToArray;\n","var asciiToArray = require('./_asciiToArray'),\n hasUnicode = require('./_hasUnicode'),\n unicodeToArray = require('./_unicodeToArray');\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n}\n\nmodule.exports = stringToArray;\n","var castSlice = require('./_castSlice'),\n hasUnicode = require('./_hasUnicode'),\n stringToArray = require('./_stringToArray'),\n toString = require('./toString');\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n}\n\nmodule.exports = createCaseFirst;\n","var createCaseFirst = require('./_createCaseFirst');\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\nmodule.exports = upperFirst;\n","var toString = require('./toString'),\n upperFirst = require('./upperFirst');\n\n/**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\nfunction capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n}\n\nmodule.exports = capitalize;\n","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nmodule.exports = arrayReduce;\n","/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = basePropertyOf;\n","var basePropertyOf = require('./_basePropertyOf');\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n};\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\nmodule.exports = deburrLetter;\n","var deburrLetter = require('./_deburrLetter'),\n toString = require('./toString');\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;\n\n/** Used to compose unicode capture groups. */\nvar rsCombo = '[' + rsComboRange + ']';\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\nmodule.exports = deburr;\n","/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n return string.match(reAsciiWord) || [];\n}\n\nmodule.exports = asciiWords;\n","/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n}\n\nmodule.exports = hasUnicodeWord;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq;\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n].join('|'), 'g');\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n}\n\nmodule.exports = unicodeWords;\n","var asciiWords = require('./_asciiWords'),\n hasUnicodeWord = require('./_hasUnicodeWord'),\n toString = require('./toString'),\n unicodeWords = require('./_unicodeWords');\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n}\n\nmodule.exports = words;\n","var arrayReduce = require('./_arrayReduce'),\n deburr = require('./deburr'),\n words = require('./words');\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\";\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n}\n\nmodule.exports = createCompounder;\n","var capitalize = require('./capitalize'),\n createCompounder = require('./_createCompounder');\n\n/**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\nvar camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n});\n\nmodule.exports = camelCase;\n","var createCompounder = require('./_createCompounder');\n\n/**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\nvar kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n});\n\nmodule.exports = kebabCase;\n","var createCompounder = require('./_createCompounder');\n\n/**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\nvar snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n});\n\nmodule.exports = snakeCase;\n","export type NotificationType =\r\n | 'countdown'\r\n | 'advance-countdown'\r\n | 'error'\r\n | 'success'\r\n | 'warning'\r\n | 'info'\r\n | 'reminder'\r\n | 'url'\r\n | 'call'\r\n\r\nexport enum NotificationSize {\r\n SMALL = 'small',\r\n NORMAL = 'normal',\r\n LARGE = 'large',\r\n}\r\n\r\nexport interface CountdownNotificationOption extends InfoNotificationOption {\r\n targetTime?: string\r\n}\r\n\r\nexport interface InfoNotificationOption {\r\n message: string\r\n duration?: number\r\n /**\r\n * 图片名,目前只支持mingcute图标。\r\n * https://www.mingcute.com/\r\n */\r\n icon?: string\r\n color?: string\r\n size?: NotificationSize\r\n backgroundColor?: string\r\n}\r\n\r\nexport interface CallNotificationOption extends InfoNotificationOption {\r\n lyric?: string\r\n audio?: string\r\n avatar?: string\r\n}\r\n\r\nexport interface ReminderNotificationOption extends InfoNotificationOption {\r\n confirmButtonText?: string\r\n cancelButtonText?: string\r\n title?: string\r\n cancelBroadcast?: string\r\n confirmBroadcast?: string\r\n}\r\n\r\nexport interface NotificationOption extends InfoNotificationOption, ReminderNotificationOption, CountdownNotificationOption, CallNotificationOption {\r\n type?: NotificationType\r\n}\r\n\r\nexport class AppNotification {\r\n type: NotificationType = 'info'\r\n message: string\r\n title?: string\r\n targetTime?: string\r\n /**\r\n * 持续时间,单位毫秒\r\n */\r\n duration: number\r\n /**\r\n * IconPark图标\r\n * @example close-one\r\n * @see [IconPark](https://iconpark.oceanengine.com/official)\r\n */\r\n icon?: string\r\n color?: string\r\n backgroundColor?: string\r\n confirmButtonText?: string\r\n cancelButtonText?: string\r\n cancelBroadcast?: string\r\n confirmBroadcast?: string\r\n size: NotificationSize\r\n url?: string\r\n avatar?: string\r\n audio?: string\r\n lyric?: string\r\n createdAt: string\r\n\r\n constructor(option: NotificationOption) {\r\n this.createdAt = new Date().toISOString()\r\n this.type = option.type ?? 'info'\r\n this.title = option.title\r\n this.message = option.message\r\n this.targetTime = option.targetTime\r\n this.duration = option.duration ?? 5000\r\n this.icon = option.icon\r\n this.color = option.color ?? '#5D8AC8'\r\n this.confirmButtonText = option.confirmButtonText\r\n this.cancelButtonText = option.cancelButtonText\r\n this.cancelBroadcast = option.cancelBroadcast\r\n this.confirmBroadcast = option.confirmBroadcast\r\n this.size = option.size ?? NotificationSize.NORMAL\r\n this.audio = option.audio\r\n this.avatar = option.avatar\r\n this.lyric = option.lyric\r\n this.backgroundColor = option.backgroundColor ?? '#000000'\r\n }\r\n}\r\n\r\nexport class AppReminderNotification extends AppNotification {\r\n constructor(option: ReminderNotificationOption) {\r\n super(option)\r\n this.type = 'reminder'\r\n this.size = NotificationSize.LARGE\r\n }\r\n}\r\n","import type { Declaration, List, Raw, Rule } from 'css-tree'\r\nimport { find, parse } from 'css-tree'\r\nimport camelCase from 'lodash/camelCase'\r\nimport kebabCase from 'lodash/kebabCase'\r\nimport merge from 'lodash/merge'\r\n\r\nexport interface ThemeColors {\r\n background: string\r\n foreground: string\r\n\r\n card: string\r\n cardForeground: string\r\n\r\n popover: string\r\n popoverForeground: string\r\n\r\n primary: string\r\n primaryForeground: string\r\n\r\n secondary: string\r\n secondaryForeground: string\r\n\r\n muted: string\r\n mutedForeground: string\r\n\r\n accent: string\r\n accentForeground: string\r\n\r\n destructive: string\r\n destructiveForeground: string\r\n\r\n border: string\r\n input: string\r\n ring: string\r\n}\r\n\r\nexport interface ThemeRadius {\r\n sm: string\r\n md: string\r\n lg: string\r\n full: string\r\n}\r\n\r\nexport interface ThemeTypography {\r\n fontFamily: string\r\n fontSize: string\r\n}\r\n\r\nexport interface ThemeShadow {\r\n sm: string\r\n md: string\r\n lg: string\r\n}\r\n\r\nexport interface IAppTheme {\r\n useGlobalTheme?: boolean\r\n mode?: 'light' | 'dark'\r\n\r\n colors: ThemeColors\r\n radius: ThemeRadius\r\n typography: ThemeTypography\r\n shadow: ThemeShadow\r\n\r\n spacing?: string\r\n}\r\n\r\nexport type DeepPartial<T> = T extends object ? {\r\n [P in keyof T]?: DeepPartial<T[P]>;\r\n} : T\r\n\r\nexport const DefaultThemeDark: IAppTheme = {\r\n useGlobalTheme: true,\r\n mode: 'dark',\r\n colors: {\r\n background: 'hsl(0 0% 10%)',\r\n foreground: 'hsl(0 0% 98%)',\r\n\r\n card: 'hsl(0 0% 12%)',\r\n cardForeground: 'hsl(0 0% 98%)',\r\n\r\n popover: 'hsl(0 0% 12%)',\r\n popoverForeground: 'hsl(0 0% 98%)',\r\n\r\n primary: 'hsl(210 100% 56%)',\r\n primaryForeground: '#fff',\r\n\r\n secondary: 'hsl(0 0% 20%)',\r\n secondaryForeground: '#fff',\r\n\r\n muted: 'hsl(0 0% 30%)',\r\n mutedForeground: 'hsl(0 0% 70%)',\r\n\r\n accent: 'hsl(210 100% 60%)',\r\n accentForeground: '#fff',\r\n\r\n destructive: 'hsl(0 84% 60%)',\r\n destructiveForeground: '#fff',\r\n\r\n border: 'hsl(0 0% 30%)',\r\n input: 'hsl(0 0% 25%)',\r\n ring: 'hsl(210 100% 60%)',\r\n },\r\n radius: {\r\n sm: '6px',\r\n md: '10px',\r\n lg: '16px',\r\n full: '9999px',\r\n },\r\n typography: {\r\n fontFamily: 'system-ui, sans-serif',\r\n fontSize: '14px',\r\n },\r\n shadow: {\r\n sm: '0 1px 2px rgba(0,0,0,0.2)',\r\n md: '0 4px 6px rgba(0,0,0,0.3)',\r\n lg: '0 10px 20px rgba(0,0,0,0.4)',\r\n },\r\n spacing: '0.5rem',\r\n}\r\n\r\nexport const DefaultThemeLight: IAppTheme = {\r\n ...DefaultThemeDark,\r\n mode: 'light',\r\n colors: {\r\n background: '#ffffff',\r\n foreground: 'hsl(0 0% 10%)',\r\n\r\n card: '#ffffff',\r\n cardForeground: 'hsl(0 0% 10%)',\r\n\r\n popover: '#ffffff',\r\n popoverForeground: 'hsl(0 0% 10%)',\r\n\r\n primary: 'hsl(210 100% 56%)',\r\n primaryForeground: '#fff',\r\n\r\n secondary: 'hsl(0 0% 90%)',\r\n secondaryForeground: 'hsl(0 0% 10%)',\r\n\r\n muted: 'hsl(0 0% 95%)',\r\n mutedForeground: 'hsl(0 0% 40%)',\r\n\r\n accent: 'hsl(210 100% 90%)',\r\n accentForeground: 'hsl(210 100% 40%)',\r\n\r\n destructive: 'hsl(0 84% 60%)',\r\n destructiveForeground: '#fff',\r\n\r\n border: 'hsl(0 0% 90%)',\r\n input: 'hsl(0 0% 85%)',\r\n ring: 'hsl(210 100% 56%)',\r\n },\r\n shadow: {\r\n sm: '0 1px 2px rgba(0,0,0,0.05)',\r\n md: '0 4px 6px rgba(0,0,0,0.1)',\r\n lg: '0 10px 20px rgba(0,0,0,0.15)',\r\n },\r\n}\r\n\r\nexport const DefaultTheme = DefaultThemeDark\r\n\r\nexport class AppTheme implements IAppTheme {\r\n useGlobalTheme?: boolean\r\n mode?: 'light' | 'dark'\r\n colors!: ThemeColors\r\n radius!: ThemeRadius\r\n typography!: ThemeTypography\r\n shadow!: ThemeShadow\r\n spacing?: string\r\n\r\n constructor(options?: DeepPartial<IAppTheme> | string) {\r\n let parsedOptions: DeepPartial<IAppTheme> = {}\r\n\r\n if (typeof options === 'string') {\r\n try {\r\n parsedOptions = JSON.parse(options)\r\n }\r\n catch (e) {\r\n console.error('Failed to parse AppTheme options', e)\r\n }\r\n }\r\n else if (options) {\r\n parsedOptions = options\r\n }\r\n\r\n // 默认选用暗色主题作为 Base\r\n const baseTheme = parsedOptions.mode === 'light' ? DefaultThemeLight : DefaultThemeDark\r\n\r\n // 使用 lodash/merge 进行深度合并,避免 partial 对象覆盖掉同层级的其他默认属性\r\n merge(this, structuredClone(baseTheme), parsedOptions)\r\n\r\n if (this.useGlobalTheme === undefined) {\r\n this.useGlobalTheme = true\r\n }\r\n }\r\n\r\n static fromJSON(json: string) {\r\n return new AppTheme(json)\r\n }\r\n\r\n /**\r\n * 兼容 V1 版本的 CSS 变量\r\n */\r\n toLegacyCSSVariables(prefix = '--widget'): Record<string, string> {\r\n const result: Record<string, string> = {}\r\n\r\n if (this.colors) {\r\n if (this.colors.background) { result[`${prefix}-background-color`] = this.colors.background }\r\n if (this.colors.foreground) { result[`${prefix}-color`] = this.colors.foreground }\r\n if (this.colors.primary) { result[`${prefix}-primary-color`] = this.colors.primary }\r\n if (this.colors.border) {\r\n result[`${prefix}-border-color`] = this.colors.border\r\n result[`${prefix}-divider-color`] = this.colors.border\r\n result[`${prefix}-background-border-color`] = this.colors.border\r\n }\r\n if (this.colors.ring) {\r\n result[`${prefix}-shadow-color`] = this.colors.ring\r\n result[`${prefix}-background-box-shadow-color`] = this.colors.ring\r\n }\r\n }\r\n\r\n if (this.typography) {\r\n if (this.typography.fontSize) { result[`${prefix}-font-size`] = this.typography.fontSize }\r\n if (this.typography.fontFamily) { result[`${prefix}-font-family`] = this.typography.fontFamily }\r\n }\r\n\r\n if (this.radius) {\r\n if (this.radius.lg) { result[`${prefix}-border-radius`] = this.radius.lg }\r\n }\r\n\r\n if (this.spacing) {\r\n result[`${prefix}-padding`] = this.spacing\r\n }\r\n\r\n return result\r\n }\r\n\r\n /**\r\n * flatten tokens → CSS variables\r\n */\r\n toCSSVariables(prefix = '--widget'): Record<string, string> {\r\n const result: Record<string, string> = {}\r\n\r\n // 仅遍历 token 属性,忽略 meta 属性如 useGlobalTheme, mode 等\r\n const tokensToWalk = {\r\n colors: this.colors,\r\n radius: this.radius,\r\n typography: this.typography,\r\n shadow: this.shadow,\r\n spacing: this.spacing,\r\n }\r\n\r\n const walk = (obj: any, path: string[] = []) => {\r\n Object.entries(obj).forEach(([key, value]) => {\r\n if (value === undefined || value === null) { return }\r\n\r\n const newPath = [...path, key]\r\n if (typeof value === 'object') {\r\n walk(value, newPath)\r\n }\r\n else {\r\n const varName = `${prefix}-${newPath.map(kebabCase).join('-')}`\r\n result[varName] = String(value)\r\n }\r\n })\r\n }\r\n\r\n walk(tokensToWalk)\r\n\r\n // 兼容旧版本 WidgetTheme.ts 的变量输出\r\n Object.assign(result, this.toLegacyCSSVariables(prefix))\r\n\r\n return result\r\n }\r\n\r\n toCSS(selector = ':root') {\r\n const vars = this.toCSSVariables()\r\n const body = Object.entries(vars)\r\n .map(([k, v]) => ` ${k}: ${v};`)\r\n .join('\\n')\r\n\r\n return `${selector} {\\n${body}\\n}`\r\n }\r\n\r\n injectCSS(el: HTMLElement = document.documentElement) {\r\n const vars = this.toCSSVariables()\r\n Object.entries(vars).forEach(([k, v]) => {\r\n el.style.setProperty(k, v)\r\n })\r\n }\r\n\r\n removeCSS(el: HTMLElement = document.documentElement) {\r\n const vars = this.toCSSVariables()\r\n Object.keys(vars).forEach(k => el.style.removeProperty(k))\r\n }\r\n\r\n /**\r\n * 支持主题切换(light/dark)\r\n */\r\n setMode(mode: 'light' | 'dark') {\r\n if (this.mode === mode) { return }\r\n\r\n this.mode = mode\r\n // 切换模式时,覆盖对应的颜色和阴影变量\r\n const baseTheme = mode === 'light' ? DefaultThemeLight : DefaultThemeDark\r\n this.colors = structuredClone(baseTheme.colors)\r\n this.shadow = structuredClone(baseTheme.shadow)\r\n }\r\n\r\n copy(partial?: DeepPartial<IAppTheme>) {\r\n return new AppTheme(merge({}, structuredClone(this), partial))\r\n }\r\n\r\n public static fromCSS(css: string): AppTheme {\r\n const ast = parse(css)\r\n const rootRule = find(ast, (node, _item, _list) => {\r\n if (node.type == 'Rule') {\r\n const prelude = node.prelude\r\n if (prelude.type == 'SelectorList') {\r\n const isRoot = prelude.children.some((it) => {\r\n return it.type == 'Selector' && it.children.some(child => child.type == 'PseudoClassSelector' && child.name == 'root')\r\n })\r\n if (isRoot) {\r\n return true\r\n }\r\n }\r\n }\r\n return false\r\n }) as Rule | null\r\n\r\n if (rootRule == null) {\r\n return new AppTheme()\r\n }\r\n\r\n const widgetVariables = rootRule.block.children.filter(it => it.type == 'Declaration' && it.property.startsWith('--widget-')) as List<Declaration>\r\n const themeOptions: DeepPartial<IAppTheme> = {}\r\n\r\n for (const cssNode of widgetVariables) {\r\n // 移除前缀并获取层级,例如: '--widget-colors-primary-foreground' -> 'colors-primary-foreground'\r\n const propStr = cssNode.property.replace('--widget-', '')\r\n const firstDashIndex = propStr.indexOf('-')\r\n\r\n const value = (cssNode.value as Raw).value?.trim() || ''\r\n\r\n if (firstDashIndex !== -1) {\r\n // e.g. category = 'colors', property = 'primaryForeground'\r\n const category = propStr.substring(0, firstDashIndex) as keyof IAppTheme\r\n const property = camelCase(propStr.substring(firstDashIndex + 1))\r\n\r\n if (!themeOptions[category]) {\r\n (themeOptions as any)[category] = {}\r\n }\r\n (themeOptions as any)[category][property] = value\r\n }\r\n else {\r\n // e.g. '--widget-spacing'\r\n const category = camelCase(propStr) as keyof IAppTheme\r\n (themeOptions as any)[category] = value\r\n }\r\n }\r\n\r\n return new AppTheme(themeOptions)\r\n }\r\n}\r\n","interface IDeployedPage {\n id: string\n name: string\n packageName: string\n x: number\n y: number\n height: number\n width: number\n proxy?: string\n isIgnoreMouseEvents?: boolean\n}\n\nexport class DeployedPage implements IDeployedPage {\n name!: string\n packageName!: string\n x: number = 0\n y: number = 0\n height: number = 600\n width: number = 800\n proxy?: string\n id!: string\n isIgnoreMouseEvents?: boolean\n}\n","/**\r\n * @deprecated use DeployedMode instead\r\n */\r\nexport enum HostedMode {\r\n NORMAL = 0x000001,\r\n /**\r\n * 悬浮窗\r\n */\r\n OVERLAP = 0x000010,\r\n WALLPAPER = 0x000100,\r\n SCREEN = 0x001000,\r\n BACKGROUND = 0x010000,\r\n /**\r\n * 页面\r\n */\r\n PAGE = 0x100000,\r\n ALL = 0x111111,\r\n}\r\n\r\nexport enum DeployMode {\r\n /**\r\n * 桌面组件,默认\r\n */\r\n NORMAL = 0x000001,\r\n /**\r\n * 悬浮窗\r\n */\r\n OVERLAP = 0x000010,\r\n /**\r\n * 后台组件,没有界面,一般在后台执行定时任务\r\n */\r\n BACKGROUND = 0x010000,\r\n /**\r\n * System tray\r\n */\r\n TRAY = 0x000100,\r\n /**\r\n * 全部支持\r\n */\r\n ALL = 0x111111,\r\n}\r\n","import { DeployedPage } from './DeployedPage'\nimport { DeployMode } from './DeployMode'\n\nexport class DeployedWidget extends DeployedPage {\n shortcut?: string\n deployMode!: number\n\n isOverlap(): boolean {\n return (this.deployMode & DeployMode.OVERLAP) > 0\n }\n}\n","import type { AppApiEvent, WidgetApiEvent } from '../../api'\r\n\r\ninterface BroadcastEventOptions {\r\n event: WidgetApiEvent | AppApiEvent | string\r\n /**\r\n * 发送人,用于标记发送源,一般为组件名,如:com.example.widgets.countdown\r\n */\r\n sender?: string\r\n /**\r\n * 广播事件携带的数据,只支持部分数据类型。\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm\r\n */\r\n payload?: any\r\n}\r\n\r\nexport class BroadcastEvent {\r\n readonly event: string\r\n readonly sender?: string\r\n payload?: any\r\n\r\n constructor(options: BroadcastEventOptions) {\r\n this.event = options.event\r\n this.sender = options.sender\r\n this.payload = options.payload\r\n }\r\n}\r\n","export enum WebSocketEventType {\r\n RESISTER_PACKAGE = 'ws::cn.widgetjs.core.resister_package',\r\n}\r\n\r\nexport class WebSocketEvent {\r\n // 类型\r\n type: WebSocketEventType\r\n payload: any\r\n\r\n constructor(type: WebSocketEventType, payload: any) {\r\n this.type = type\r\n this.payload = payload\r\n }\r\n}\r\n","export class ElectronUtils {\r\n static hasElectronApi(): boolean {\r\n return this.getAPI() != null\r\n }\r\n\r\n /**\r\n * 获取ElectronAPI\r\n * windows api\r\n */\r\n static getAPI() {\r\n if (Reflect.has(window, 'electronAPI')) {\r\n // @ts-expect-error\r\n return window.electronAPI\r\n }\n else if (Reflect.has(window.parent, 'electronAPI')) {\r\n // @ts-expect-error\r\n return window.parent.electronAPI\r\n }\r\n return null\r\n }\r\n\r\n static async invokeMethod(channel: string, method: string, ...args: any[]): Promise<any> {\r\n return this.getAPI()?.invoke(channel, method, ...args)\r\n }\r\n\r\n static async invoke(channel: string, ...args: any[]): Promise<any> {\r\n return this.getAPI()?.invoke(channel, ...args)\r\n }\r\n}\r\n","import type { LanguageCode, LanguageTextMap } from '../lang/LanguageCode'\r\n\r\nexport class LanguageUtils {\r\n static findText(\r\n langMap: LanguageTextMap,\r\n localeCode: LanguageCode,\r\n ) {\r\n const locales = Object.keys(langMap).map(key => new Intl.Locale(key))\r\n const targetLocale = new Intl.Locale(localeCode)\r\n // search baseName first\r\n let find = locales.find(locale => locale.baseName == targetLocale.baseName)\r\n if (!find) {\r\n // locale without region\r\n find = locales.find(locale => locale.language == targetLocale.language)\r\n }\r\n return find\r\n }\r\n\r\n /**\r\n * Get text from `LanguageTextMap` by Unicode locale identifier.\r\n * `localeCode` > `localeCode` without region > browser default language > English > first language\r\n * @param langMap 对象\r\n * @param {LanguageCode} localeCode `zh-CN`、`en-US`、 `zh`、`en`\r\n * @param fallbackToBrowser\r\n */\r\n static getTextByLocate(langMap: LanguageTextMap, localeCode?: LanguageCode, fallbackToBrowser: boolean = true): string | undefined {\r\n let result: string | undefined\r\n if (localeCode) {\r\n if (localeCode in langMap) {\r\n return langMap[localeCode]\r\n }\r\n }\r\n // fallback to language code only\r\n if (localeCode) {\r\n const find = this.findText(langMap, localeCode)\r\n if (find) {\r\n return langMap[find.baseName as LanguageCode]\r\n }\r\n }\r\n // fallback to browser default language\r\n if (result == undefined && fallbackToBrowser) {\r\n if (typeof navigator != 'undefined' && navigator.languages) {\r\n const langCode = navigator.language as LanguageCode\r\n result = this.getTextByLocate(langMap, langCode, false)\r\n if (result != undefined) {\r\n return result\r\n }\r\n }\r\n }\r\n\r\n // fallback to english\r\n if (result == undefined) {\r\n const find = this.findText(langMap, 'en' as LanguageCode)\r\n if (find) {\r\n return langMap[find.baseName as LanguageCode]\r\n }\r\n }\r\n\r\n // fallback to first language\r\n if (result == undefined) {\r\n const langCode = Object.keys(langMap)\r\n if (langCode.length > 0) {\r\n return langMap[langCode[0] as LanguageCode]\r\n }\r\n }\r\n\r\n return undefined\r\n }\r\n}\r\n","import { DeployMode } from '../model/DeployMode'\r\n\r\nexport class WidgetUtils {\r\n /**\r\n * 是否支持悬浮窗\r\n */\r\n static isSupportOverlap(supportDeployMode: number): boolean {\r\n return (supportDeployMode & DeployMode.OVERLAP) > 0\r\n }\r\n\r\n static isSupportBackground(supportDeployMode: number): boolean {\r\n return (supportDeployMode & DeployMode.BACKGROUND) > 0\r\n }\r\n\r\n /**\r\n * 是否支持普通模式\r\n */\r\n static isSupportNormal(supportDeployMode: number) {\r\n return (supportDeployMode & DeployMode.NORMAL) > 0\r\n }\r\n\r\n static isConfigurable(configPagePath: string): boolean {\r\n return configPagePath != null && configPagePath != ''\r\n }\r\n\r\n static stringToDeployMode(deployMode: string): DeployMode {\r\n switch (deployMode.toUpperCase()) {\r\n case 'NORMAL':\r\n return DeployMode.NORMAL\r\n case 'OVERLAP':\r\n return DeployMode.OVERLAP\r\n case 'BACKGROUND':\r\n return DeployMode.BACKGROUND\r\n default:{\r\n const number = Number.parseInt(deployMode)\r\n if (Number.isNaN(number)) {\r\n return DeployMode.NORMAL\r\n }\r\n else {\r\n switch (number) {\r\n case DeployMode.NORMAL:\r\n case DeployMode.OVERLAP:\r\n case DeployMode.BACKGROUND:\r\n return number\r\n default:\r\n return DeployMode.NORMAL\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","export function delay(ms: number) {\r\n return new Promise(resolve => setTimeout(resolve, ms))\r\n}\r\n","import type { RemotePackageUrlInfo } from '../model/WidgetPackage'\r\n\r\nexport class WidgetPackageUtils {\r\n static getRemotePackageJsonUrl(remoteInfo: RemotePackageUrlInfo): string | undefined {\r\n const remoteEntry = this.getRemoteEntryUrl(remoteInfo)\r\n if (!remoteEntry) {\r\n return undefined\r\n }\r\n const arr: string[] = []\r\n arr.push(remoteEntry)\r\n arr.push('/widget.json')\r\n return arr.join('')\r\n }\r\n\r\n static getRemoteEntryUrl(remoteInfo: RemotePackageUrlInfo): string | undefined {\r\n if (!remoteInfo.hostname) {\r\n return undefined\r\n }\r\n const arr: string[] = []\r\n arr.push('https://')\r\n arr.push(remoteInfo.hostname)\r\n if (remoteInfo.base) {\r\n arr.push(remoteInfo.base)\r\n }\r\n return arr.join('')\r\n }\r\n}\r\n","import type { LanguageCode, LanguageTextMap } from '../lang/LanguageCode'\r\nimport { LanguageUtils } from '../utils'\r\nimport type { WidgetPermission } from '../permission/permission'\r\nimport type { WidgetKeyword } from './Widget'\r\n\r\nexport interface MetaInfo {\r\n [key: string]: string | number | boolean\r\n}\r\n\r\nexport interface IWindowSize {\r\n width: number\r\n height: number\r\n maxWidth?: number\r\n maxHeight?: number\r\n minWidth?: number\r\n minHeight?: number\r\n}\r\n\r\nexport interface IPageOptions extends IWindowSize {\r\n name: string\r\n /**\r\n * 当showInSearch为true时,此项必填\r\n */\r\n title: LanguageTextMap\r\n /**\r\n * 当showInSearch为true时,此项必填\r\n */\r\n description?: LanguageTextMap\r\n /**\r\n * 当showInSearch为true时,此项必填\r\n */\r\n keywords?: WidgetKeyword[]\r\n lang: LanguageCode\r\n packageName?: string\r\n icon?: string\r\n /**\r\n * 当showInSearch为true时,此项必填\r\n */\r\n previewImage?: string\r\n /**\r\n * 是否在搜索中显示\r\n */\r\n showInSearch?: boolean\r\n /**\r\n * 悬浮窗模式 是否可移动\r\n * @deprecated\r\n */\r\n movable?: boolean\r\n /**\r\n * @deprecated\r\n */\r\n resizable?: boolean\r\n /**\r\n * @deprecated\r\n */\r\n backgroundThrottling?: boolean\r\n security?: boolean\r\n /**\r\n * @deprecated\r\n */\r\n webviewTag?: boolean\r\n path: string\r\n /**\r\n * 是否只能添加一次\r\n */\r\n singleton?: boolean\r\n permissions?: WidgetPermission[]\r\n meta?: MetaInfo\r\n broadcastChannels?: string[]\r\n}\r\n\r\nexport interface IPage {\r\n // 窗口名称,名称与包名类似,e.g. com.example.countdown\r\n readonly name: string\r\n\r\n /**\r\n * 窗口标题,显示在界面上的,\r\n * https://zh.m.wikipedia.org/zh-hans/ISO_639-1\r\n */\r\n readonly title: LanguageTextMap\r\n readonly permissions: WidgetPermission[]\r\n readonly webviewTag: boolean\r\n /**\r\n * 窗口介绍\r\n */\r\n readonly description: LanguageTextMap\r\n readonly keywords: WidgetKeyword[]\r\n /**\r\n * 组件默认语言\r\n */\r\n readonly lang: LanguageCode\r\n readonly width: number\r\n packageName?: string | null\r\n readonly height: number\r\n readonly maxWidth: number\r\n readonly maxHeight: number\r\n readonly minWidth: number\r\n readonly minHeight: number\r\n readonly movable: boolean\r\n readonly singleton: boolean\r\n readonly resizable: boolean\r\n readonly path: string\r\n readonly meta: { [key: string]: string | number | boolean }\r\n readonly backgroundThrottling: boolean\r\n /**\r\n * 预览图片,可以是GIF\r\n */\r\n readonly previewImage?: string\r\n}\r\n\r\nexport class Page implements IPage {\r\n /**\r\n * 页面名称,名称必须以包名开头,如果以.开头,会自动加上包名<br>\r\n * 假设包名为`example.com`,以下两种写法等价\r\n * @example example.com.countdown\r\n * @example .countdown\r\n */\r\n public name: string\r\n\r\n /**\r\n * 窗口标题,显示在界面上的,\r\n * @see https://zh.m.wikipedia.org/zh-hans/ISO_639-1\r\n */\r\n public readonly title: LanguageTextMap\r\n /**\r\n * 窗口介绍\r\n */\r\n public readonly description: LanguageTextMap\r\n public readonly keywords: WidgetKeyword[]\r\n public readonly security: boolean\r\n public readonly permissions: WidgetPermission[]\r\n /**\r\n * 组件默认语言\r\n */\r\n public readonly lang: LanguageCode\r\n public readonly width: number\r\n public packageName?: string | null\r\n public readonly height: number\r\n public readonly maxWidth: number\r\n /**\r\n * @deprecated\r\n */\r\n public readonly webviewTag: boolean\r\n public readonly maxHeight: number\r\n public readonly minWidth: number\r\n public readonly minHeight: number\r\n public readonly movable: boolean\r\n public readonly singleton: boolean\r\n public readonly resizable: boolean\r\n public readonly path: string\r\n public readonly icon?: string\r\n public readonly meta: MetaInfo\r\n public readonly backgroundThrottling: boolean\r\n /**\r\n * 预览图片,可以是GIF\r\n */\r\n public readonly previewImage?: string\r\n\r\n constructor(options: IPageOptions) {\r\n this.name = options.name\r\n this.title = options.title\r\n this.description = options.description ?? {}\r\n this.keywords = options.keywords ?? []\r\n this.lang = options.lang\r\n this.width = options.width\r\n this.height = options.height\r\n this.icon = options.icon\r\n this.movable = options.movable ?? true\r\n this.resizable = options.resizable ?? true\r\n this.maxWidth = options.maxWidth ?? options.width\r\n this.maxHeight = options.maxHeight ?? options.height\r\n this.minWidth = options.minWidth ?? options.width\r\n this.minHeight = options.minHeight ?? options.height\r\n this.backgroundThrottling = options.backgroundThrottling == undefined ? true : options.backgroundThrottling\r\n this.packageName = options.packageName\r\n this.singleton = options.singleton ?? false\r\n this.previewImage = options.previewImage\r\n this.path = options.path\r\n this.meta = options.meta ?? {}\r\n this.security = options.security ?? false\r\n this.webviewTag = options.webviewTag ?? false\r\n this.permissions = options.permissions ?? []\r\n }\r\n\r\n /**\r\n * 获取组件标题\r\n * @param lang 语言环境,不传则获取默认语言\r\n */\r\n getTitle(lang?: LanguageCode): string | undefined {\r\n return LanguageUtils.getTextByLocate(this.title, lang)\r\n }\r\n\r\n /**\r\n * 获取组件描述\r\n * @param lang 语言环境,不传则获取默认标题\r\n */\r\n getDescription(lang?: LanguageCode): string | undefined {\r\n if (this.description == undefined) {\r\n return undefined\r\n }\r\n return LanguageUtils.getTextByLocate(this.description, lang)\r\n }\r\n\r\n static parseJSON(json: string): Page {\r\n const object = JSON.parse(json)\r\n return this.parseObject(object)\r\n }\r\n\r\n static parseObject(obj: any): Page {\r\n const widget = new Page({\r\n path: '',\r\n description: {},\r\n height: 0,\r\n keywords: [],\r\n lang: 'zh-CN',\r\n name: '',\r\n previewImage: '',\r\n title: {},\r\n width: 0,\r\n })\r\n Object.assign(widget, obj)\r\n return widget\r\n }\r\n\r\n isResizable(): boolean {\r\n return (\r\n this.resizable\r\n || !(\r\n this.minWidth == this.width\r\n && this.maxWidth == this.width\r\n && this.minHeight == this.height\r\n && this.maxHeight == this.height\r\n )\r\n )\r\n }\r\n}\r\n","export type SocialType =\r\n | 'qq'\r\n | 'wechat'\r\n | 'qq-group'\r\n | 'discord'\r\n | 'telegram'\r\n | 'tiktok'\r\n | 'douyin'\r\n | 'youtube'\r\n | 'instagram'\r\n | 'twitter'\r\n | 'facebook'\r\n | 'kuaishou'\r\n | 'bilibili'\r\n | 'github'\r\n | 'email'\r\n | 'gitee'\r\n | 'homepage'\r\n\r\nexport class SocialInfo {\r\n content: string\r\n name: SocialType\r\n\r\n constructor(name: SocialType, content: string) {\r\n this.name = name\r\n this.content = content\r\n }\r\n}\r\n\r\nexport interface SocialLink {\r\n name: SocialType\r\n link: string\r\n}\r\n","import type { LanguageTextMap } from '../lang/LanguageCode'\r\nimport type { BrowserWindowOptions } from '../api'\r\nimport { DeployMode } from './DeployMode'\r\nimport type { IPageOptions, IWindowSize } from './Page'\r\nimport { Page } from './Page'\r\nimport type { SocialLink } from './SocialInfo'\r\nimport type { Category } from './msic/Category'\r\n\r\nexport interface IWidgetOptions extends IWindowSize, IPageOptions {\r\n supportDeployMode?: DeployMode\r\n configPagePath?: string\r\n /**\r\n * 如果为true,组件将不会添加到组件包中\r\n */\r\n disabled?: boolean\r\n previewImage: string\r\n /**\r\n * whether the widget data can be synchronized\r\n */\r\n synchronizable?: boolean\r\n categories?: Category[]\r\n /**\r\n * 组件包所需的App版本\r\n */\r\n requiredAppVersion?: string\r\n description: LanguageTextMap\r\n keywords: WidgetKeyword[]\r\n /**\r\n * @deprecated\r\n */\r\n routes?: WidgetRoute[]\r\n /**\r\n * 一般用于填写教程链接\r\n */\r\n socialLinks?: SocialLink[]\r\n browserWindowOptions?: Pick<BrowserWindowOptions, 'backgroundThrottling'>\r\n trayOptions?: TrayWidgetOptions\r\n}\r\n\r\nexport interface IBackgroundWidgetOptions extends Omit<IWidgetOptions, 'width' | 'height'> {\r\n width?: number\r\n height?: number\r\n browserWindowOptions?: BrowserWindowOptions\r\n}\r\n\r\n/**\r\n * @deprecated\r\n */\r\nexport interface WidgetRoute {\r\n url: string\r\n name: string\r\n}\r\n\r\nexport interface TrayWidgetOptions {\r\n closeOnBlur?: boolean\r\n hideOnBlur?: boolean\r\n}\r\n\r\nexport class Widget extends Page {\r\n public declare readonly previewImage: string\r\n public readonly categories?: Category[]\r\n public readonly supportDeployMode: number\r\n public readonly trayOptions?: TrayWidgetOptions\r\n /**\r\n * 组件包所需的App版本\r\n */\r\n public readonly requiredAppVersion?: string\r\n /**\r\n * 如果为true,组件将不会添加到组件包中\r\n */\r\n public readonly disabled?: boolean\r\n public readonly synchronizable?: boolean\r\n /**\r\n * 配置页面路径,没有则不能修改\r\n */\r\n public readonly configPagePath?: string\r\n /**\r\n * @deprecated\r\n */\r\n public readonly routes: WidgetRoute[]\r\n protected browserWindowOptions?: BrowserWindowOptions\r\n public readonly socialLinks?: SocialLink[]\r\n\r\n constructor(options: IWidgetOptions) {\r\n super(options)\r\n this.configPagePath = options.configPagePath\r\n this.categories = options.categories\r\n this.supportDeployMode = options.supportDeployMode ?? DeployMode.NORMAL | DeployMode.OVERLAP\r\n this.socialLinks = options.socialLinks\r\n this.disabled = options.disabled\r\n this.trayOptions = options.trayOptions\r\n this.synchronizable = options.synchronizable\r\n this.requiredAppVersion = options.requiredAppVersion\r\n this.routes = options.routes ?? []\r\n }\r\n\r\n static parseJSON(json: string): Widget {\r\n const object = JSON.parse(json)\r\n return this.parseObject(object)\r\n }\r\n\r\n static parseObject(obj: any): Widget {\r\n const widget = new Widget({\r\n path: '',\r\n description: {},\r\n height: 0,\r\n keywords: [],\r\n lang: 'zh-CN',\r\n name: '',\r\n previewImage: '',\r\n title: {},\r\n width: 0,\r\n })\r\n Object.assign(widget, obj)\r\n return widget\r\n }\r\n\r\n /**\r\n * 是否支持悬浮窗\r\n */\r\n isSupportOverlap(): boolean {\r\n return (this.supportDeployMode & DeployMode.OVERLAP) > 0\r\n }\r\n\r\n isSupportBackground(): boolean {\r\n return (this.supportDeployMode & DeployMode.BACKGROUND) > 0\r\n }\r\n\r\n isSupportTray(): boolean {\r\n return (this.supportDeployMode & DeployMode.TRAY) > 0\r\n }\r\n\r\n /**\r\n * 是否支持普通模式\r\n */\r\n isSupportNormal() {\r\n return (this.supportDeployMode & DeployMode.NORMAL) > 0\r\n }\r\n\r\n isConfigurable(): boolean {\r\n return this.configPagePath != null && this.configPagePath != ''\r\n }\r\n}\r\n\r\nexport class BackgroundWidget extends Widget {\r\n constructor(options: IBackgroundWidgetOptions) {\r\n options.supportDeployMode = DeployMode.BACKGROUND\r\n options.backgroundThrottling = false\r\n options.width = 1\r\n options.height = 1\r\n super(options as IWidgetOptions)\r\n this.browserWindowOptions = options.browserWindowOptions\r\n }\r\n}\r\n\r\nexport enum WidgetKeyword {\r\n RECOMMEND = 'recommend',\r\n TOOLS = 'tools',\r\n EFFICIENCY = 'efficiency',\r\n PICTURE = 'picture',\r\n LIFE = 'life',\r\n SHORTCUT = 'shortcut',\r\n COUNTDOWN = 'countdown',\r\n TIMER = 'timer',\r\n INFO = 'info',\r\n DASHBOARD = 'dashboard',\r\n}\r\n","import kebabCase from 'lodash/kebabCase'\r\nimport type { WidgetTheme, WidgetThemeKey } from './WidgetTheme'\r\nimport { DefaultWidgetTheme } from './WidgetTheme'\r\n\r\n/**\r\n * 组件配置数据,用于存储组件自定义页面所设置的数据\r\n * @deprecated\r\n */\r\nexport class WidgetData {\r\n /**\r\n * 组件id\r\n */\r\n id?: string\r\n /**\r\n * 组件名\r\n */\r\n name: string\r\n /**\r\n * 背景颜色\r\n * @deprecated\r\n */\r\n backgroundColor?: string\r\n /**\r\n * 文字颜色\r\n * @deprecated\r\n */\r\n color?: string\r\n /**\r\n * 字体大小\r\n * @deprecated\r\n */\r\n fontSize?: number\r\n /**\r\n * 字体\r\n * @deprecated\r\n */\r\n fontFamily?: string\r\n /**\r\n * 圆角半径\r\n * @deprecated\r\n */\r\n borderRadius?: number\r\n /**\r\n * 组件样式\r\n * @deprecated\r\n */\r\n theme: WidgetTheme\r\n\r\n constructor(name: string, id?: string) {\r\n this.id = id\r\n this.name = name\r\n this.theme = JSON.parse(JSON.stringify(DefaultWidgetTheme))\r\n }\r\n\r\n public parseJSON(json: any) {\r\n Object.assign(this, json)\r\n }\r\n\r\n /**\r\n * Gets the style properties from the widget's style object.\r\n * @returns A record representing CSS custom properties and their values.\r\n */\r\n public getThemeProperties(): Record<string, string> {\r\n const properties: Record<string, string> = {}\r\n if (this.theme) {\r\n const prefix = '--widget-'\r\n const keys = Object.keys(this.theme) as WidgetThemeKey[]\r\n keys\r\n .filter(key => this.theme![key] != undefined)\r\n .forEach((key) => {\r\n properties[`${prefix}${kebabCase(key)}`] = `${this.theme![key]!}`\r\n })\r\n }\r\n return properties\r\n }\r\n\r\n /**\r\n * Injects the style properties as css variable.\r\n * @remarks Only works in a browser environment.\r\n */\r\n public injectThemeProperties() {\r\n const properties = this.getThemeProperties()\r\n Object.keys(properties).forEach((key) => {\r\n document.body.style.setProperty(key, properties[key].toString())\r\n })\r\n }\r\n}\r\n","import type { Declaration, List, Raw, Rule } from 'css-tree'\r\nimport type * as CSS from 'csstype'\r\nimport { find, parse } from 'css-tree'\r\nimport camelCase from 'lodash/camelCase'\r\nimport kebabCase from 'lodash/kebabCase'\r\n\r\n/**\n * @deprecated 已迁移到 AppTheme\n */\nexport interface IWidgetTheme {\r\n /**\r\n * 是否使用全局主题,\r\n * 默认true\r\n */\r\n useGlobalTheme?: boolean\r\n borderRadius?: CSS.Properties['borderRadius']\r\n backgroundColor?: CSS.Properties['color']\r\n /**\r\n * 背景边框颜色\r\n */\r\n backgroundBorderColor?: CSS.Properties['color']\r\n backgroundBoxShadowColor?: CSS.Properties['color']\r\n fontSize?: CSS.Properties['fontSize']\r\n dividerColor?: CSS.Properties['color']\r\n /**\r\n * 主色调\r\n */\r\n primaryColor?: CSS.Properties['color']\r\n /**\r\n * 文字颜色\r\n */\r\n color?: CSS.Properties['color']\r\n fontFamily?: CSS.Properties['fontFamily']\r\n shadowColor?: CSS.Properties['color']\r\n padding?: CSS.Properties['padding']\r\n borderColor?: CSS.Properties['borderColor']\r\n}\r\n\r\nexport type WidgetThemeProperty = keyof IWidgetTheme\r\n\r\n/**\n * @deprecated 已迁移到 AppTheme\n */\nexport class WidgetTheme implements IWidgetTheme {\r\n borderRadius?: CSS.Properties['borderRadius']\r\n backgroundColor?: CSS.Properties['color']\r\n fontSize?: CSS.Properties['fontSize']\r\n dividerColor?: CSS.Properties['color']\r\n /**\r\n * 主色调\r\n */\r\n primaryColor?: CSS.Properties['color']\r\n backgroundBorderColor?: CSS.Properties['color']\r\n backgroundBoxShadowColor?: CSS.Properties['color']\r\n /**\r\n * 文字颜色\r\n */\r\n color?: CSS.Properties['color']\r\n fontFamily?: CSS.Properties['fontFamily']\r\n shadowColor?: CSS.Properties['color']\r\n padding?: CSS.Properties['padding']\r\n borderColor?: CSS.Properties['borderColor']\r\n useGlobalTheme?: boolean\r\n\r\n constructor(options?: IWidgetTheme | string) {\r\n Object.assign(this, options ?? DefaultWidgetTheme)\r\n if (this.useGlobalTheme == undefined) {\r\n this.useGlobalTheme = true\r\n }\r\n }\r\n\r\n static fromJSON(json: string) {\r\n return new WidgetTheme(JSON.parse(json))\r\n }\r\n\r\n /**\r\n * Injects the style properties as css variable.\r\n * @param selector default is 'body'\r\n */\r\n public toCSS(selector: string = ':root') {\r\n const variables = this.toCSSVariable()\r\n const cssVariables = Object.keys(variables).map((key) => {\r\n return `${key}: ${variables[key]};`\r\n }).join('\\n')\r\n return `${selector} {\\n${cssVariables}\\n}`\r\n }\r\n\r\n /**\r\n * Injects the style properties as css variable.\r\n * @param rootElement The rootElement to inject the css.\r\n * @remarks Only works in a browser environment.\r\n */\r\n public injectCSS(rootElement?: HTMLElement) {\r\n const element = rootElement ?? document.documentElement\r\n const cssVariables = this.toCSSVariable()\r\n Object.keys(cssVariables).forEach((key) => {\r\n element.style.setProperty(key, cssVariables[key].toString())\r\n })\r\n }\r\n\r\n public removeCSS(rootElement?: HTMLElement) {\r\n const element = rootElement ?? document.documentElement\r\n const cssVariables = this.toCSSVariable()\r\n Object.keys(cssVariables).forEach((key) => {\r\n element.style.removeProperty(key)\r\n })\r\n }\r\n\r\n public copy(options?: IWidgetTheme): WidgetTheme {\r\n return new WidgetTheme({ ...this, ...options })\r\n }\r\n\r\n /**\r\n * Gets the style properties from the widget's style object.\r\n * @returns A record representing CSS custom variable and their values.\r\n */\r\n public toCSSVariable(): Record<string, string> {\r\n const variables: Record<string, string> = {}\r\n const prefix = '--widget-'\r\n const keys = Object.keys(this) as WidgetThemeKey[]\r\n keys\r\n .filter(key => this[key] != undefined)\r\n .forEach((key) => {\r\n variables[`${prefix}${kebabCase(key)}`] = `${this[key]!}`\r\n })\r\n return variables\r\n }\r\n\r\n public toCSSProperties() {\r\n const properties: Record<string, string> = {}\r\n const keys = Object.keys(this) as WidgetThemeKey[]\r\n keys\r\n .filter(key => this[key] != undefined)\r\n .forEach((key) => {\r\n properties[`${kebabCase(key)}`] = `${this[key]!}`\r\n })\r\n return properties\r\n }\r\n\r\n public static fromCSS(css: string): WidgetTheme {\r\n const ast = parse(css)\r\n const rootRule = find(ast, (node, _item, _list) => {\r\n if (node.type == 'Rule') {\r\n const prelude = node.prelude\r\n if (prelude.type == 'SelectorList') {\r\n const isRoot = prelude.children.some((it) => {\r\n return it.type == 'Selector' && it.children.some(child => child.type == 'PseudoClassSelector' && child.name == 'root')\r\n })\r\n if (isRoot) {\r\n return true\r\n }\r\n }\r\n }\r\n return false\r\n }) as Rule | null\r\n if (rootRule == null) {\r\n return DefaultWidgetTheme.copy()\r\n }\r\n const widgetVariables = rootRule.block.children.filter(it => it.type == 'Declaration' && it.property.startsWith('--widget-')) as List<Declaration>\r\n const themeOptions: Record<string, any> = {}\r\n for (const cssNode of widgetVariables) {\r\n const prop = camelCase(cssNode.property.replace('--widget-', ''))\r\n themeOptions[prop] = (cssNode.value as Raw).value.trim()\r\n }\r\n return new WidgetTheme(themeOptions)\r\n }\r\n}\r\n\r\nexport type WidgetThemeKey = keyof WidgetTheme\r\n\r\n/**\r\n * Widget default theme, this object is immutable. Clone it before use.\r\n */\r\nconst DefaultWidgetTheme = new WidgetTheme({\r\n backgroundColor: 'rgba(0,0,0,0.5)',\r\n color: '#fff',\r\n fontSize: '14px',\r\n borderColor: 'rgba(255,255,255,0.4)',\r\n dividerColor: 'rgba(255,255,255,0.4)',\r\n primaryColor: 'rgb(0, 149, 255)',\r\n borderRadius: '22px',\r\n backgroundBorderColor: 'hsla(0,0%,100%,.06)',\r\n backgroundBoxShadowColor: 'hsla(0, 0%, 100%, 0.1)',\r\n},\r\n)\r\nObject.freeze(DefaultWidgetTheme)\r\n\r\nexport { DefaultWidgetTheme }\r\n","import type { LanguageCode, LanguageTextMap } from '../lang/LanguageCode'\r\nimport { LanguageUtils } from '../utils'\r\nimport type { WidgetPermission } from '../permission/permission'\r\nimport { Widget } from './Widget'\r\nimport type { Page } from './Page'\r\nimport type { SocialLink } from './SocialInfo'\r\n\r\nexport interface LocalPackageUrlInfo {\r\n /**\r\n * 入口文件,默认为index.html,也可以是/\r\n * @example remote package: https://rtugeek.gitee.io/hotspot/index.html\r\n * @example local package: index.html\r\n * @deprecated use entryFile instead\r\n */\r\n entry?: string\r\n /**\r\n * 需以 / 开头\r\n * @example /index.html\r\n */\r\n entryFile?: string\r\n /**\r\n * 是否使用hash路由\r\n */\r\n hash?: boolean\r\n}\r\n\r\nexport interface RemotePackageUrlInfo extends LocalPackageUrlInfo {\r\n /**\r\n * 部署到服务器的base path,只在远程组件包中生效,需以/开始\r\n * @example /hotspot\r\n */\r\n base?: string\r\n /**\r\n * 域名地址,不带协议\r\n * @example widgetjs.cn\r\n */\r\n hostname: string\r\n}\r\n\r\nexport interface WidgetPackageOptions extends LocalPackageUrlInfo {\r\n name: string\r\n version?: string\r\n author: string\r\n homepage?: string\r\n title: LanguageTextMap\r\n permissions?: WidgetPermission[]\r\n description: LanguageTextMap\r\n zipUrl?: string\r\n /**\r\n * 远程组件包入口文件\r\n * @deprecated\r\n */\r\n remoteEntry?: string\r\n /**\r\n * @deprecated\r\n */\r\n remotePackage?: string\r\n remote?: RemotePackageUrlInfo\r\n icon?: string\r\n lang?: LanguageCode\r\n widgets?: Widget[]\r\n /**\r\n * 是否处于开发模式\r\n */\r\n development?: boolean\r\n devOptions?: DevOptions\r\n requiredAppVersion?: string\r\n /**\r\n * social links, generally used for tutorial links or source code\r\n */\r\n socialLinks?: SocialLink[]\r\n}\r\n\r\nexport class WidgetPackage implements Omit<RemotePackageUrlInfo, 'hostname'> {\r\n /**\r\n * 组件包名,一般为域名倒写,e.g. com.example\r\n */\r\n readonly name!: string\r\n /**\r\n * 组件包版本,可以为空,默认采用package.json里的版本\r\n * e.g. 1.0.2\r\n */\r\n version?: string\r\n /**\r\n * 组件包所需的App版本\r\n */\r\n requiredAppVersion?: string\r\n /**\r\n * 组件作者署名\r\n */\r\n readonly author!: string\r\n development?: boolean\r\n /**\r\n * 组件首页\r\n */\r\n readonly homepage?: string\r\n /**\r\n * 组件描述\r\n */\r\n readonly title!: { [key: LanguageCode | string]: string }\r\n /**\r\n * 组件描述\r\n */\r\n readonly description!: { [key: LanguageCode | string]: string }\r\n /**\r\n * 本地组件入口文件,通常为 index.html\r\n */\r\n entry!: string | 'index.html'\r\n /**\r\n * 远程组件包入口文件\r\n * @deprecated\r\n */\r\n remoteEntry?: string\r\n /**\r\n * 组件包json文件路径\r\n * @deprecated\r\n * @example https://rtugeek.gitee.io/hotspot/widget.json\r\n */\r\n readonly remotePackage?: string\r\n readonly local?: LocalPackageUrlInfo\r\n readonly remote?: RemotePackageUrlInfo\r\n /**\r\n * zip package url, used for downloading the package\r\n */\r\n zipUrl?: string\r\n /**\r\n * 组件包图标\r\n */\r\n readonly icon?: string\r\n /**\r\n * Hash路由模式,默认为true\r\n */\r\n readonly hash: boolean = true\r\n /**\r\n * 可能是网络地址,或者本地路径(解压后的文件夹路径),\r\n * 网络地址:https://www.bilibili.com\r\n * 本地地址:file:///C:/Users/neo/Desktop\r\n * 在测试时。地址通常为: http://127.0.0.1:8080\r\n */\r\n url!: string\r\n readonly widgets: Widget[] = []\r\n readonly pages: Page[] = []\r\n devOptions?: DevOptions\r\n\r\n constructor(options: WidgetPackageOptions) {\r\n this.name = options.name\r\n this.development = options.development\r\n this.version = options.version\r\n this.author = options.author\r\n this.homepage = options.homepage\r\n this.title = options.title\r\n this.description = options.description\r\n this.entry = options.entry ?? 'index.html'\r\n this.remoteEntry = options.remoteEntry\r\n this.requiredAppVersion = options.requiredAppVersion\r\n this.remotePackage = options.remotePackage\r\n this.hash = options.hash ?? false\r\n this.url = ''\r\n this.icon = options.icon\r\n this.devOptions = options.devOptions\r\n this.zipUrl = options.zipUrl\r\n this.remote = options.remote\r\n if (options.widgets) {\r\n for (const widget of options.widgets) {\r\n this.widgets.push(widget)\r\n }\r\n }\r\n }\r\n\r\n static parseJSON(json: string): WidgetPackage {\r\n const object = JSON.parse(json)\r\n return this.parseObject(object)\r\n }\r\n\r\n static parseObject(obj: any): WidgetPackage {\r\n const widgetPackage = new WidgetPackage({\r\n author: '',\r\n description: {\r\n 'zh-CN': '',\r\n },\r\n entry: '',\r\n hash: false,\r\n homepage: '',\r\n name: '',\r\n title: {\r\n 'zh-CN': '',\r\n },\r\n version: '',\r\n })\r\n Object.assign(widgetPackage, obj)\r\n const widgets: Widget[] = []\r\n if (widgetPackage.widgets) {\r\n for (const jsonWidget of widgetPackage.widgets) {\r\n const widget = new Widget({\r\n previewImage: '',\r\n path: '',\r\n description: { 'zh-CN': '' },\r\n height: 0,\r\n keywords: [],\r\n lang: 'zh-CN',\r\n name: '',\r\n title: { 'zh-CN': '' },\r\n width: 0,\r\n })\r\n Object.assign(widget, jsonWidget)\r\n widgets.push(widget)\r\n }\r\n }\r\n widgetPackage.widgets.splice(0, widgetPackage.widgets.length)\r\n widgetPackage.widgets.push(...widgets)\r\n return widgetPackage\r\n }\r\n\r\n /**\r\n * 获取组件包标题\r\n * @param lang 语言环境,不传则获取默认语言\r\n */\r\n getTitle(lang?: LanguageCode): string | undefined {\r\n return LanguageUtils.getTextByLocate(this.title, lang)\r\n }\r\n\r\n /**\r\n * 获取组件包描述\r\n * @param lang 语言环境,不传则获取默认标题\r\n */\r\n getDescription(lang?: LanguageCode): string | undefined {\r\n return LanguageUtils.getTextByLocate(this.description, lang)\r\n }\r\n}\r\n\r\nexport interface DevOptions {\r\n folder?: string\r\n route?: boolean\r\n devUrl?: string\r\n remoteEntry?: string\r\n}\r\n","import type { DeployMode } from './DeployMode'\r\n/**\r\n * 组件参数,如宽,高,id,语言等环境参数\r\n */\r\nimport snakeCase from 'lodash/snakeCase'\r\nimport { parseQuery } from '../router/query'\r\n\r\nexport class WidgetParams {\r\n static readonly PARAM_PREFIX = 'w_'\r\n static readonly PARAM_ID = 'id'\r\n static readonly PARAM_LANG = 'lang'\r\n static readonly PARAM_THEME = 'theme'\r\n static readonly PARAM_MODE = 'mode'\r\n static readonly PARAM_NAME = 'name'\r\n static readonly PARAM_TITLE = 'title'\r\n static readonly PARAM_PREVIEW = 'preview'\r\n static readonly PARAMS = [\r\n WidgetParams.PARAM_ID,\r\n WidgetParams.PARAM_LANG,\r\n WidgetParams.PARAM_THEME,\r\n WidgetParams.PARAM_MODE,\r\n WidgetParams.PARAM_NAME,\r\n WidgetParams.PARAM_TITLE,\r\n WidgetParams.PARAM_PREVIEW,\r\n ]\r\n\r\n // 组件id\r\n id?: string\r\n // 网格宽度,1就代表宽度占用1格\r\n width?: number\r\n // 宽度,单位px\r\n widthPx?: number\r\n // 宽度,单位px\r\n heightPx?: number\r\n // 网格高度,2就代表高度占用2格\r\n height?: number\r\n x?: number\r\n y?: number\r\n // 是否是预览模式,添加组件时,预览状态\r\n preview?: boolean\r\n // 语言环境:zh,en,jp...\r\n lang?: string\r\n // 主题:浅色,深色\r\n theme?: ThemeMode\r\n //\r\n mode?: DeployMode\r\n // 系统设置的组件圆角半径\r\n radius?: number\r\n // 组件名\r\n name?: string\r\n title?: string\r\n\r\n /**\r\n * 将组件参数转为url参数\r\n * @param object\r\n * @return URLSearchParams w_w=2&w_h=2&w_id=21&w_width=156&w_height=156\r\n */\r\n toUrlParams(): URLSearchParams {\r\n const urlParams = new URLSearchParams()\r\n const ownPropertyNames = Object.getOwnPropertyNames(this)\r\n for (const ownPropertyName of ownPropertyNames) {\r\n type ObjectKey = keyof typeof this\r\n const key = ownPropertyName as ObjectKey\r\n const value = this[key]\r\n if (value) {\r\n urlParams.append(WidgetParams.PARAM_PREFIX + snakeCase(ownPropertyName), value.toString())\r\n }\r\n }\r\n return urlParams\r\n }\r\n\r\n getPersistKey(): string {\r\n return `${this.name}-${this.id}`\r\n }\r\n\r\n /**\r\n * 从当前地址解析组件参数:\r\n * http://localhost:8080/#/widget/config/labor_progress?w_w=2&w_h=2&w_width=156&w_height=156\r\n * =>\r\n * {width:2,height:2,id:21,width_px:156,height_px:156}\r\n */\r\n static fromCurrentLocation(): WidgetParams {\r\n const href = window.location.href\r\n const strings = href.split('?')\r\n if (strings.length > 1) {\r\n const queryString = strings[1]\r\n return this.fromObject(parseQuery(queryString))\r\n }\r\n return new WidgetParams()\r\n }\r\n\r\n static fromLocation(url: string): WidgetParams {\r\n const strings = url.split('?')\r\n if (strings.length > 1) {\r\n const queryString = strings[1]\r\n return this.fromObject(parseQuery(queryString))\r\n }\r\n return new WidgetParams()\r\n }\r\n\r\n private static setValue(widgetEnv: WidgetParams, key: string, value: string) {\r\n const keyWithoutPrefix = key.replace(this.PARAM_PREFIX, '')\r\n if (keyWithoutPrefix == WidgetParams.PARAM_ID) {\r\n widgetEnv.id = value\r\n }\r\n else if (keyWithoutPrefix == WidgetParams.PARAM_LANG) {\r\n widgetEnv.lang = value\r\n }\r\n else if (keyWithoutPrefix == WidgetParams.PARAM_THEME) {\r\n widgetEnv.theme = value as ThemeMode\r\n }\r\n else if (keyWithoutPrefix == WidgetParams.PARAM_MODE) {\r\n widgetEnv.mode = Number.parseInt(value) as DeployMode\r\n }\r\n else if (keyWithoutPrefix == WidgetParams.PARAM_NAME) {\r\n widgetEnv.name = value\r\n }\r\n else if (keyWithoutPrefix == WidgetParams.PARAM_TITLE) {\r\n widgetEnv.title = value\r\n }\r\n else if (keyWithoutPrefix == WidgetParams.PARAM_PREVIEW) {\r\n widgetEnv.preview = value === 'true'\r\n }\r\n }\r\n\r\n /**\r\n * 从对象键值对中初始化组件参数\r\n * {w_width:2,w_height:2,w_id:21,w_width_px:156,w_height_px:156}=>\r\n * {width:2,height:2,id:21,width_px:156,height_px:156}\r\n * @param object\r\n */\r\n static fromObject(object: any): WidgetParams {\r\n const widgetEnv = new WidgetParams()\r\n const ownPropertyNames = Object.getOwnPropertyNames(object)\r\n for (const ownPropertyName of ownPropertyNames) {\r\n type ObjectKey = keyof typeof this\r\n const key = ownPropertyName as ObjectKey\r\n const value = object[key]\r\n this.setValue(widgetEnv, key, value)\r\n }\r\n return widgetEnv\r\n }\r\n}\r\n\r\nexport enum ThemeMode {\r\n AUTO = 'auto',\r\n LIGHT = 'LIGHT',\r\n DARK = 'DARK',\r\n}\r\n","/**\r\n * Encoding Rules ␣ = Space Path: ␣ \" < > # ? { } Query: ␣ \" < > # & = Hash: ␣ \"\r\n * < > `\r\n *\r\n * On top of that, the RFC3986 (https://tools.ietf.org/html/rfc3986#section-2.2)\r\n * defines some extra characters to be encoded. Most browsers do not encode them\r\n * in encodeURI https://github.com/whatwg/url/issues/369, so it may be safer to\r\n * also encode `!'()*`. Leaving un-encoded only ASCII alphanumeric(`a-zA-Z0-9`)\r\n * plus `-._~`. This extra safety should be applied to query by patching the\r\n * string returned by encodeURIComponent encodeURI also encodes `[\\]^`. `\\`\r\n * should be encoded to avoid ambiguity. Browsers (IE, FF, C) transform a `\\`\r\n * into a `/` if directly typed in. The _backtick_ (`````) should also be\r\n * encoded everywhere because some browsers like FF encode it when directly\r\n * written while others don't. Safari and IE don't encode ``\"<>{}``` in hash.\r\n */\r\n// const EXTRA_RESERVED_RE = /[!'()*]/g\r\n// const encodeReservedReplacer = (c: string) => '%' + c.charCodeAt(0).toString(16)\r\n\r\nconst HASH_RE = /#/g // %23\r\nconst AMPERSAND_RE = /&/g // %26\r\nconst SLASH_RE = /\\//g // %2F\r\nconst EQUAL_RE = /=/g // %3D\r\nconst IM_RE = /\\?/g // %3F\r\nexport const PLUS_RE = /\\+/g // %2B\r\n/**\r\n * NOTE: It's not clear to me if we should encode the + symbol in queries, it\r\n * seems to be less flexible than not doing so and I can't find out the legacy\r\n * systems requiring this for regular requests like text/html. In the standard,\r\n * the encoding of the plus character is only mentioned for\r\n * application/x-www-form-urlencoded\r\n * (https://url.spec.whatwg.org/#urlencoded-parsing) and most browsers seems lo\r\n * leave the plus character as is in queries. To be more flexible, we allow the\r\n * plus character on the query, but it can also be manually encoded by the user.\r\n *\r\n * Resources:\r\n * - https://url.spec.whatwg.org/#urlencoded-parsing\r\n * - https://stackoverflow.com/questions/1634271/url-encoding-the-space-character-or-20\r\n */\r\n\r\nconst ENC_BRACKET_OPEN_RE = /%5B/g // [\r\nconst ENC_BRACKET_CLOSE_RE = /%5D/g // ]\r\nconst ENC_CARET_RE = /%5E/g // ^\r\nconst ENC_BACKTICK_RE = /%60/g // `\r\nconst ENC_CURLY_OPEN_RE = /%7B/g // {\r\nconst ENC_PIPE_RE = /%7C/g // |\r\nconst ENC_CURLY_CLOSE_RE = /%7D/g // }\r\nconst ENC_SPACE_RE = /%20/g // }\r\n\r\n/**\r\n * Encode characters that need to be encoded on the path, search and hash\r\n * sections of the URL.\r\n *\r\n * @internal\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nfunction commonEncode(text: string | number): string {\r\n return encodeURI(`${text}`)\r\n .replace(ENC_PIPE_RE, '|')\r\n .replace(ENC_BRACKET_OPEN_RE, '[')\r\n .replace(ENC_BRACKET_CLOSE_RE, ']')\r\n}\r\n\r\n/**\r\n * Encode characters that need to be encoded on the hash section of the URL.\r\n *\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nexport function encodeHash(text: string): string {\r\n return commonEncode(text)\r\n .replace(ENC_CURLY_OPEN_RE, '{')\r\n .replace(ENC_CURLY_CLOSE_RE, '}')\r\n .replace(ENC_CARET_RE, '^')\r\n}\r\n\r\n/**\r\n * Encode characters that need to be encoded query values on the query\r\n * section of the URL.\r\n *\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nexport function encodeQueryValue(text: string | number): string {\r\n return (\r\n commonEncode(text)\r\n // Encode the space as +, encode the + to differentiate it from the space\r\n .replace(PLUS_RE, '%2B')\r\n .replace(ENC_SPACE_RE, '+')\r\n .replace(HASH_RE, '%23')\r\n .replace(AMPERSAND_RE, '%26')\r\n .replace(ENC_BACKTICK_RE, '`')\r\n .replace(ENC_CURLY_OPEN_RE, '{')\r\n .replace(ENC_CURLY_CLOSE_RE, '}')\r\n .replace(ENC_CARET_RE, '^')\r\n )\r\n}\r\n\r\n/**\r\n * Like `encodeQueryValue` but also encodes the `=` character.\r\n *\r\n * @param text - string to encode\r\n */\r\nexport function encodeQueryKey(text: string | number): string {\r\n return encodeQueryValue(text).replace(EQUAL_RE, '%3D')\r\n}\r\n\r\n/**\r\n * Encode characters that need to be encoded on the path section of the URL.\r\n *\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nexport function encodePath(text: string | number): string {\r\n return commonEncode(text).replace(HASH_RE, '%23').replace(IM_RE, '%3F')\r\n}\r\n\r\n/**\r\n * Encode characters that need to be encoded on the path section of the URL as a\r\n * param. This function encodes everything {@link encodePath} does plus the\r\n * slash (`/`) character. If `text` is `null` or `undefined`, returns an empty\r\n * string instead.\r\n *\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nexport function encodeParam(text: string | number | null | undefined): string {\r\n return text == null ? '' : encodePath(text).replace(SLASH_RE, '%2F')\r\n}\r\n\r\n/**\r\n * Decode text using `decodeURIComponent`. Returns the original text if it\r\n * fails.\r\n *\r\n * @param text - string to decode\r\n * @returns decoded string\r\n */\r\nexport function decode(text: string | number): string {\r\n try {\r\n return decodeURIComponent(`${text}`)\r\n }\n catch (err) {\r\n // __DEV__ && warn(`Error decoding \"${text}\". Using original value`)\r\n }\r\n return `${text}`\r\n}\r\n","import { PLUS_RE, decode, encodeQueryKey, encodeQueryValue } from './encoding'\n\r\nconst isArray: (arg: ArrayLike<any> | any) => arg is ReadonlyArray<any>\r\n = Array.isArray\r\n/**\r\n * Possible values in normalized {@link LocationQuery}. `null` renders the query\r\n * param but without an `=`.\r\n *\r\n * @example\r\n * ```\r\n * ?isNull&isEmpty=&other=other\r\n * gives\r\n * `{ isNull: null, isEmpty: '', other: 'other' }`.\r\n * ```\r\n *\r\n * @internal\r\n */\r\nexport type LocationQueryValue = string | null\r\n/**\r\n * Possible values when defining a query.\r\n *\r\n * @internal\r\n */\r\nexport type LocationQueryValueRaw = LocationQueryValue | number | undefined\r\n/**\r\n * Normalized query object that appears in {@link RouteLocationNormalized}\r\n *\r\n * @public\r\n */\r\nexport type LocationQuery = Record<\r\n string,\r\n LocationQueryValue | LocationQueryValue[]\r\n >\r\n/**\r\n * Loose {@link LocationQuery} object that can be passed to functions like\r\n * {@link Router.push} and {@link Router.replace} or anywhere when creating a\r\n * {@link RouteLocationRaw}\r\n *\r\n * @public\r\n */\r\nexport type LocationQueryRaw = Record<\r\n string | number,\r\n LocationQueryValueRaw | LocationQueryValueRaw[]\r\n >\r\n\r\n/**\r\n * Transforms a queryString into a {@link LocationQuery} object. Accept both, a\r\n * version with the leading `?` and without Should work as URLSearchParams\r\n * @internal\r\n *\r\n * @param search - search string to parse\r\n * @returns a query object\r\n */\r\nexport function parseQuery(search: string): LocationQuery {\r\n const query: LocationQuery = {}\r\n // avoid creating an object with an empty key and empty value\r\n // because of split('&')\r\n if (search === '' || search === '?') { return query }\r\n const hasLeadingIM = search[0] === '?'\r\n const searchParams = (hasLeadingIM ? search.slice(1) : search).split('&')\r\n for (let i = 0; i < searchParams.length; ++i) {\r\n // pre decode the + into space\r\n const searchParam = searchParams[i].replace(PLUS_RE, ' ')\r\n // allow the = character\r\n const eqPos = searchParam.indexOf('=')\r\n const key = decode(eqPos < 0 ? searchParam : searchParam.slice(0, eqPos))\r\n const value = eqPos < 0 ? null : decode(searchParam.slice(eqPos + 1))\r\n\r\n if (key in query) {\r\n // an extra variable for ts types\r\n let currentValue = query[key]\r\n if (!isArray(currentValue)) {\r\n currentValue = query[key] = [currentValue]\r\n }\r\n // we force the modification\r\n ;(currentValue as LocationQueryValue[]).push(value)\r\n }\n else {\r\n query[key] = value\r\n }\r\n }\r\n return query\r\n}\r\n\r\n/**\r\n * Stringifies a {@link LocationQueryRaw} object. Like `URLSearchParams`, it\r\n * doesn't prepend a `?`\r\n *\r\n * @internal\r\n *\r\n * @param query - query object to stringify\r\n * @returns string version of the query without the leading `?`\r\n */\r\nexport function stringifyQuery(query: LocationQueryRaw): string {\r\n let search = ''\r\n for (let key in query) {\r\n const value = query[key]\r\n key = encodeQueryKey(key)\r\n if (value == null) {\r\n // only null adds the value\r\n if (value !== undefined) {\r\n search += (search.length ? '&' : '') + key\r\n }\r\n continue\r\n }\r\n // keep null values\r\n const values: LocationQueryValueRaw[] = isArray(value)\r\n ? value.map(v => v && encodeQueryValue(v))\r\n : [value && encodeQueryValue(value)]\r\n\r\n values.forEach((value) => {\r\n // skip undefined values in arrays as if they were not present\r\n // smaller code than using filter\r\n if (value !== undefined) {\r\n // only append & with non-empty search\r\n search += (search.length ? '&' : '') + key\r\n if (value != null) { search += `=${value}` }\r\n }\r\n })\r\n }\r\n\r\n return search\r\n}\r\n","export interface Language {\r\n baseName: string\r\n language: string\r\n region?: string\r\n nativeName: string\r\n}\r\n\r\ninterface ILanguageMap {\r\n 'ar-SA': Language\r\n 'bn-BD': Language\r\n 'en-US': Language\r\n 'de-DE': Language\r\n 'el-GR': Language\r\n 'es-ES': Language\r\n 'fi-FI': Language\r\n 'fil-PH': Language\r\n 'fr-FR': Language\r\n 'hi-IN': Language\r\n 'hu-HU': Language\r\n 'id-ID': Language\r\n 'it-IT': Language\r\n 'ja-JP': Language\r\n 'ko-KR': Language\r\n 'nl-NL': Language\r\n 'pl-PL': Language\r\n 'pt-BR': Language\r\n 'pt-PT': Language\r\n 'ro-RO': Language\r\n 'ru-RU': Language\r\n 'sv-SE': Language\r\n 'ta-IN': Language\r\n 'tr-TR': Language\r\n 'uk-UA': Language\r\n 'vi-VN': Language\r\n 'zh-CN': Language\r\n 'zh-TW': Language\r\n}\r\n\r\nexport class LanguageMap implements ILanguageMap {\r\n 'ar-SA': Language = { baseName: 'ar-SA', language: 'ar', nativeName: 'العربية' }\r\n 'bn-BD': Language = { baseName: 'bn-BD', language: 'bn', nativeName: 'বাংলা' }\r\n 'en-US': Language = { baseName: 'en-US', language: 'en', nativeName: 'English' }\r\n 'de-DE': Language = { baseName: 'de-DE', language: 'de', nativeName: 'Deutsch' }\r\n 'el-GR': Language = { baseName: 'el-GR', language: 'el', nativeName: 'Ελληνικά' }\r\n 'es-ES': Language = { baseName: 'es-ES', language: 'es', nativeName: 'Español', region: 'ES' }\r\n 'fi-FI': Language = { baseName: 'fi-FI', language: 'fi', nativeName: 'Suomalainen' }\r\n 'fil-PH': Language = { baseName: 'fil-PH', language: 'fil', nativeName: 'Filipino' }\r\n 'fr-FR': Language = { baseName: 'fr-FR', language: 'fr', nativeName: 'Français' }\r\n 'hi-IN': Language = { baseName: 'hi-IN', language: 'hi', nativeName: 'हिंदी' }\r\n 'hu-HU': Language = { baseName: 'hu-HU', language: 'hu', nativeName: 'Magyar' }\r\n 'id-ID': Language = { baseName: 'id-ID', language: 'id', nativeName: 'Bahasa Indonesia' }\r\n 'it-IT': Language = { baseName: 'it-IT', language: 'it', nativeName: 'Italiano' }\r\n 'ja-JP': Language = { baseName: 'ja-JP', language: 'ja', nativeName: '日本語' }\r\n 'ko-KR': Language = { baseName: 'ko-KR', language: 'ko', nativeName: '한국어' }\r\n 'nl-NL': Language = { baseName: 'nl-NL', language: 'nl', nativeName: 'Nederlands' }\r\n 'pl-PL': Language = { baseName: 'pl-PL', language: 'pl', nativeName: 'Polski' }\r\n 'pt-BR': Language = { baseName: 'pt-BR', language: 'pt', nativeName: 'Português (Brazil)', region: 'BR' }\r\n 'pt-PT': Language = { baseName: 'pt-PT', language: 'pt', nativeName: 'Português' }\r\n 'ro-RO': Language = { baseName: 'ro-RO', language: 'ro', nativeName: 'Română' }\r\n 'ru-RU': Language = { baseName: 'ru-RU', language: 'ru', nativeName: 'Русский' }\r\n 'sv-SE': Language = { baseName: 'sv-SE', language: 'sv', nativeName: 'Svenska' }\r\n 'ta-IN': Language = { baseName: 'ta-IN', language: 'ta', nativeName: 'தமிழ்' }\r\n 'tr-TR': Language = { baseName: 'tr-TR', language: 'tr', nativeName: 'Türkçe' }\r\n 'uk-UA': Language = { baseName: 'uk-UA', language: 'uk', nativeName: 'Українська' }\r\n 'vi-VN': Language = { baseName: 'vi-VN', language: 'vi', nativeName: 'Tiếng Việt' }\r\n 'zh-CN': Language = { baseName: 'zh-CN', language: 'zh', nativeName: '简体中文', region: 'CN' }\r\n 'zh-TW': Language = { baseName: 'zh-TW', language: 'zh', nativeName: '繁體中文', region: 'TW' }\r\n}\r\n\r\nexport type LanguageCode = keyof ILanguageMap\r\nexport type LanguageTextMap = {\r\n [key in LanguageCode]?: string;\r\n}\r\n","// source: https://github.com/sindresorhus/normalize-url\r\n// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs\r\nconst DATA_URL_DEFAULT_MIME_TYPE = 'text/plain'\r\nconst DATA_URL_DEFAULT_CHARSET = 'us-ascii'\r\nexport interface NormalizeOptions {\r\n /**\r\n @default 'http'\r\n */\r\n defaultProtocol?: string | 'http' | 'https'\r\n\r\n /**\r\n Prepends `defaultProtocol` to the URL if it's protocol-relative.\r\n\n @default true\r\n\n @example\r\n ```\r\n normalizeUrl('//sindresorhus.com');\r\n //=> 'http://sindresorhus.com'\r\n\n normalizeUrl('//sindresorhus.com', {normalizeProtocol: false});\r\n //=> '//sindresorhus.com'\r\n ```\r\n */\r\n readonly normalizeProtocol?: boolean\r\n\r\n /**\r\n Normalizes HTTPS URLs to HTTP.\r\n\n @default false\r\n\n @example\r\n ```\r\n normalizeUrl('https://sindresorhus.com');\r\n //=> 'https://sindresorhus.com'\r\n\n normalizeUrl('https://sindresorhus.com', {forceHttp: true});\r\n //=> 'http://sindresorhus.com'\r\n ```\r\n */\r\n readonly forceHttp?: boolean\r\n\r\n /**\r\n Normalizes HTTP URLs to HTTPS.\r\n\n This option cannot be used with the `forceHttp` option at the same time.\r\n\n @default false\r\n\n @example\r\n ```\r\n normalizeUrl('http://sindresorhus.com');\r\n //=> 'http://sindresorhus.com'\r\n\n normalizeUrl('http://sindresorhus.com', {forceHttps: true});\r\n //=> 'https://sindresorhus.com'\r\n ```\r\n */\r\n readonly forceHttps?: boolean\r\n\r\n /**\r\n Strip the [authentication](https://en.wikipedia.org/wiki/Basic_access_authentication) part of a URL.\r\n\n @default true\r\n\n @example\r\n ```\r\n normalizeUrl('https://user:password@sindresorhus.com');\r\n //=> 'https://sindresorhus.com'\r\n\n normalizeUrl('https://user:password@sindresorhus.com', {stripAuthentication: false});\r\n //=> 'https://user:password@sindresorhus.com'\r\n ```\r\n */\r\n readonly stripAuthentication?: boolean\r\n\r\n /**\r\n Removes hash from the URL.\r\n\n @default false\r\n\n @example\r\n ```\r\n normalizeUrl('sindresorhus.com/about.html#contact');\r\n //=> 'http://sindresorhus.com/about.html#contact'\r\n\n normalizeUrl('sindresorhus.com/about.html#contact', {stripHash: true});\r\n //=> 'http://sindresorhus.com/about.html'\r\n ```\r\n */\r\n readonly stripHash?: boolean\r\n\r\n /**\r\n Remove the protocol from the URL: `http://sindresorhus.com` → `sindresorhus.com`.\r\n\n It will only remove `https://` and `http://` protocols.\r\n\n @default false\r\n\n @example\r\n ```\r\n normalizeUrl('https://sindresorhus.com');\r\n //=> 'https://sindresorhus.com'\r\n\n normalizeUrl('sindresorhus.com', {stripProtocol: true});\r\n //=> 'sindresorhus.com'\r\n ```\r\n */\r\n readonly stripProtocol?: boolean\r\n\r\n /**\r\n Strip the [text fragment](https://web.dev/text-fragments/) part of the URL\r\n\n __Note:__ The text fragment will always be removed if the `stripHash` option is set to `true`, as the hash contains the text fragment.\r\n\n @default true\r\n\n @example\r\n ```\r\n normalizeUrl('http://sindresorhus.com/about.html#:~:text=hello');\r\n //=> 'http://sindresorhus.com/about.html#'\r\n\n normalizeUrl('http://sindresorhus.com/about.html#section:~:text=hello');\r\n //=> 'http://sindresorhus.com/about.html#section'\r\n\n normalizeUrl('http://sindresorhus.com/about.html#:~:text=hello', {stripTextFragment: false});\r\n //=> 'http://sindresorhus.com/about.html#:~:text=hello'\r\n\n normalizeUrl('http://sindresorhus.com/about.html#section:~:text=hello', {stripTextFragment: false});\r\n //=> 'http://sindresorhus.com/about.html#section:~:text=hello'\r\n ```\r\n */\r\n readonly stripTextFragment?: boolean\r\n\r\n /**\r\n Removes `www.` from the URL.\r\n\n @default true\r\n\n @example\r\n ```\r\n normalizeUrl('http://www.sindresorhus.com');\r\n //=> 'http://sindresorhus.com'\r\n\n normalizeUrl('http://www.sindresorhus.com', {stripWWW: false});\r\n //=> 'http://www.sindresorhus.com'\r\n ```\r\n */\r\n readonly stripWWW?: boolean\r\n\r\n /**\r\n Removes query parameters that matches any of the provided strings or regexes.\r\n\n @default [/^utm_\\w+/i]\r\n\n @example\r\n ```\r\n normalizeUrl('www.sindresorhus.com?foo=bar&ref=test_ref', {\r\n removeQueryParameters: ['ref']\r\n });\r\n //=> 'http://sindresorhus.com/?foo=bar'\r\n ```\r\n\n If a boolean is provided, `true` will remove all the query parameters.\r\n\n ```\r\n normalizeUrl('www.sindresorhus.com?foo=bar', {\r\n removeQueryParameters: true\r\n });\r\n //=> 'http://sindresorhus.com'\r\n ```\r\n\n `false` will not remove any query parameter.\r\n\n ```\r\n normalizeUrl('www.sindresorhus.com?foo=bar&utm_medium=test&ref=test_ref', {\r\n removeQueryParameters: false\r\n });\r\n //=> 'http://www.sindresorhus.com/?foo=bar&ref=test_ref&utm_medium=test'\r\n ```\r\n */\r\n readonly removeQueryParameters?: ReadonlyArray<RegExp | string> | boolean\r\n\r\n /**\r\n Keeps only query parameters that matches any of the provided strings or regexes.\r\n\n __Note__: It overrides the `removeQueryParameters` option.\r\n\n @default undefined\r\n\n @example\r\n ```\r\n normalizeUrl('https://sindresorhus.com?foo=bar&ref=unicorn', {\r\n keepQueryParameters: ['ref']\r\n });\r\n //=> 'https://sindresorhus.com/?ref=unicorn'\r\n ```\r\n */\r\n readonly keepQueryParameters?: ReadonlyArray<RegExp | string>\r\n\r\n /**\r\n Removes trailing slash.\r\n\n __Note__: Trailing slash is always removed if the URL doesn't have a pathname unless the `removeSingleSlash` option is set to `false`.\r\n\n @default true\r\n\n @example\r\n ```\r\n normalizeUrl('http://sindresorhus.com/redirect/');\r\n //=> 'http://sindresorhus.com/redirect'\r\n\n normalizeUrl('http://sindresorhus.com/redirect/', {removeTrailingSlash: false});\r\n //=> 'http://sindresorhus.com/redirect/'\r\n\n normalizeUrl('http://sindresorhus.com/', {removeTrailingSlash: false});\r\n //=> 'http://sindresorhus.com'\r\n ```\r\n */\r\n readonly removeTrailingSlash?: boolean\r\n\r\n /**\r\n Remove a sole `/` pathname in the output. This option is independent of `removeTrailingSlash`.\r\n\n @default true\r\n\n @example\r\n ```\r\n normalizeUrl('https://sindresorhus.com/');\r\n //=> 'https://sindresorhus.com'\r\n\n normalizeUrl('https://sindresorhus.com/', {removeSingleSlash: false});\r\n //=> 'https://sindresorhus.com/'\r\n ```\r\n */\r\n readonly removeSingleSlash?: boolean\r\n\r\n /**\r\n Removes the default directory index file from path that matches any of the provided strings or regexes.\r\n When `true`, the regex `/^index\\.[a-z]+$/` is used.\r\n\n @default false\r\n\n @example\r\n ```\r\n normalizeUrl('www.sindresorhus.com/foo/default.php', {\r\n removeDirectoryIndex: [/^default\\.[a-z]+$/]\r\n });\r\n //=> 'http://sindresorhus.com/foo'\r\n ```\r\n */\r\n removeDirectoryIndex?: boolean | ReadonlyArray<RegExp | string>\r\n\r\n /**\r\n Removes an explicit port number from the URL.\r\n\n Port 443 is always removed from HTTPS URLs and 80 is always removed from HTTP URLs regardless of this option.\r\n\n @default false\r\n\n @example\r\n ```\r\n normalizeUrl('sindresorhus.com:123', {\r\n removeExplicitPort: true\r\n });\r\n //=> 'http://sindresorhus.com'\r\n ```\r\n */\r\n readonly removeExplicitPort?: boolean\r\n\r\n /**\r\n Sorts the query parameters alphabetically by key.\r\n\n @default true\r\n\n @example\r\n ```\r\n normalizeUrl('www.sindresorhus.com?b=two&a=one&c=three', {\r\n sortQueryParameters: false\r\n });\r\n //=> 'http://sindresorhus.com/?b=two&a=one&c=three'\r\n ```\r\n */\r\n readonly sortQueryParameters?: boolean\r\n}\r\n\r\nconst testParameter = (name: string, filters: RegExp[]) => filters.some(filter => filter instanceof RegExp ? filter.test(name) : filter === name)\r\n\r\nconst supportedProtocols = new Set([\r\n 'https:',\r\n 'http:',\r\n 'file:',\r\n])\r\n\r\nfunction hasCustomProtocol(urlString: string) {\r\n try {\r\n const { protocol } = new URL(urlString)\r\n return protocol.endsWith(':') && !supportedProtocols.has(protocol)\r\n }\r\n catch {\r\n return false\r\n }\r\n}\r\n\r\nfunction normalizeDataURL(urlString: string, option: { stripHash: boolean }) {\r\n const match = /^data:(?<type>[^,]*?),(?<data>[^#]*?)(?:#(?<hash>.*))?$/.exec(urlString)\r\n\r\n if (!match) {\r\n throw new Error(`Invalid URL: ${urlString}`)\r\n }\r\n\r\n let { type, data, hash } = match.groups as any\r\n const mediaType = type.split(';') as string[]\r\n hash = option.stripHash ? '' : hash\r\n\r\n let isBase64 = false\r\n if (mediaType[mediaType.length - 1] === 'base64') {\r\n mediaType.pop()\r\n isBase64 = true\r\n }\r\n\r\n // Lowercase MIME type\r\n const mimeType = mediaType.shift()?.toLowerCase() ?? ''\r\n const attributes = mediaType\r\n .map((attribute) => {\r\n let [key, value = ''] = attribute.split('=').map(item => item.trim())\r\n\r\n // Lowercase `charset`\r\n if (key === 'charset') {\r\n value = value.toLowerCase()\r\n\r\n if (value === DATA_URL_DEFAULT_CHARSET) {\r\n return ''\r\n }\r\n }\r\n\r\n return `${key}${value ? `=${value}` : ''}`\r\n })\r\n .filter(Boolean)\r\n\r\n const normalizedMediaType = [\r\n ...attributes,\r\n ]\r\n\r\n if (isBase64) {\r\n normalizedMediaType.push('base64')\r\n }\r\n\r\n if (normalizedMediaType.length > 0 || (mimeType && mimeType !== DATA_URL_DEFAULT_MIME_TYPE)) {\r\n normalizedMediaType.unshift(mimeType)\r\n }\r\n\r\n return `data:${normalizedMediaType.join(';')},${isBase64 ? data.trim() : data}${hash ? `#${hash}` : ''}`\r\n}\r\n\r\nexport function normalizeUrl(urlString: string, options?: NormalizeOptions) {\r\n options = {\r\n defaultProtocol: 'http',\r\n normalizeProtocol: true,\r\n forceHttp: false,\r\n forceHttps: false,\r\n stripAuthentication: true,\r\n stripHash: false,\r\n stripTextFragment: true,\r\n stripWWW: true,\r\n removeQueryParameters: [/^utm_\\w+/i],\r\n removeTrailingSlash: true,\r\n removeSingleSlash: true,\r\n removeDirectoryIndex: false,\r\n removeExplicitPort: false,\r\n sortQueryParameters: true,\r\n ...options,\r\n }\r\n urlString = urlString.replace('\\\\\\\\', '//')\r\n\r\n // Legacy: Append `:` to the protocol if missing.\r\n if (typeof options.defaultProtocol === 'string' && !options.defaultProtocol.endsWith(':')) {\r\n options.defaultProtocol = `${options.defaultProtocol}:`\r\n }\r\n\r\n urlString = urlString.trim()\r\n\r\n // Data URL\r\n if (/^data:/i.test(urlString)) {\r\n return normalizeDataURL(urlString, { stripHash: options.stripHash ?? false })\r\n }\r\n\r\n if (hasCustomProtocol(urlString)) {\r\n return urlString\r\n }\r\n\r\n const hasRelativeProtocol = urlString.startsWith('//')\r\n const isRelativeUrl = !hasRelativeProtocol && /^\\.*\\//.test(urlString)\r\n\r\n // Prepend protocol\r\n if (!isRelativeUrl) {\r\n urlString = urlString.replace(/^(?!(?:\\w+:)?\\/\\/)|^\\/\\//, options.defaultProtocol!)\r\n }\r\n\r\n const urlObject = new URL(urlString)\r\n\r\n if (options.forceHttp && options.forceHttps) {\r\n throw new Error('The `forceHttp` and `forceHttps` options cannot be used together')\r\n }\r\n\r\n if (options.forceHttp && urlObject.protocol === 'https:') {\r\n urlObject.protocol = 'http:'\r\n }\r\n\r\n if (options.forceHttps && urlObject.protocol === 'http:') {\r\n urlObject.protocol = 'https:'\r\n }\r\n\r\n // Remove auth\r\n if (options.stripAuthentication) {\r\n urlObject.username = ''\r\n urlObject.password = ''\r\n }\r\n\r\n // Remove hash\r\n if (options.stripHash) {\r\n urlObject.hash = ''\r\n }\r\n else if (options.stripTextFragment) {\r\n urlObject.hash = urlObject.hash.replace(/#?:~:text.*?$/i, '')\r\n }\r\n\r\n // Remove duplicate slashes if not preceded by a protocol\r\n // NOTE: This could be implemented using a single negative lookbehind\r\n // regex, but we avoid that to maintain compatibility with older js engines\r\n // which do not have support for that feature.\r\n if (urlObject.pathname) {\r\n // TODO: Replace everything below with `urlObject.pathname = urlObject.pathname.replace(/(?<!\\b[a-z][a-z\\d+\\-.]{1,50}:)\\/{2,}/g, '/');` when Safari supports negative lookbehind.\r\n\r\n // Split the string by occurrences of this protocol regex, and perform\r\n // duplicate-slash replacement on the strings between those occurrences\r\n // (if any).\r\n const protocolRegex = /\\b[a-z][a-z\\d+\\-.]{1,50}:\\/\\//g\r\n\r\n let lastIndex = 0\r\n let result = ''\r\n for (; ;) {\r\n const match = protocolRegex.exec(urlObject.pathname)\r\n if (!match) {\r\n break\r\n }\r\n\r\n const protocol = match[0]\r\n const protocolAtIndex = match.index\r\n const intermediate = urlObject.pathname.slice(lastIndex, protocolAtIndex)\r\n\r\n result += intermediate.replace(/\\/{2,}/g, '/')\r\n result += protocol\r\n lastIndex = protocolAtIndex + protocol.length\r\n }\r\n\r\n const remnant = urlObject.pathname.slice(lastIndex, urlObject.pathname.length)\r\n result += remnant.replace(/\\/{2,}/g, '/')\r\n\r\n urlObject.pathname = result\r\n }\r\n\r\n // Decode URI octets\r\n if (urlObject.pathname) {\r\n try {\r\n urlObject.pathname = decodeURI(urlObject.pathname)\r\n }\r\n catch {\r\n }\r\n }\r\n\r\n // Remove directory index\r\n if (options.removeDirectoryIndex === true) {\r\n options.removeDirectoryIndex = [/^index\\.[a-z]+$/]\r\n }\r\n\r\n if (Array.isArray(options.removeDirectoryIndex) && options.removeDirectoryIndex.length > 0) {\r\n let pathComponents = urlObject.pathname.split('/')\r\n const lastComponent = pathComponents[pathComponents.length - 1]\r\n\r\n if (testParameter(lastComponent, options.removeDirectoryIndex)) {\r\n pathComponents = pathComponents.slice(0, -1)\r\n urlObject.pathname = `${pathComponents.slice(1).join('/')}/`\r\n }\r\n }\r\n\r\n if (urlObject.hostname) {\r\n // Remove trailing dot\r\n urlObject.hostname = urlObject.hostname.replace(/\\.$/, '')\r\n\r\n // Remove `www.`\r\n if (options.stripWWW && /^www\\.(?!www\\.)[a-z\\-\\d]{1,63}\\.[a-z.\\-\\d]{2,63}$/.test(urlObject.hostname)) {\r\n // Each label should be max 63 at length (min: 1).\r\n // Source: https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names\r\n // Each TLD should be up to 63 characters long (min: 2).\r\n // It is technically possible to have a single character TLD, but none currently exist.\r\n urlObject.hostname = urlObject.hostname.replace(/^www\\./, '')\r\n }\r\n }\r\n\r\n // Remove query unwanted parameters\r\n if (Array.isArray(options.removeQueryParameters)) {\r\n for (const key of [...urlObject.searchParams.keys()]) {\r\n if (testParameter(key, options.removeQueryParameters)) {\r\n urlObject.searchParams.delete(key)\r\n }\r\n }\r\n }\r\n\r\n if (!Array.isArray(options.keepQueryParameters) && options.removeQueryParameters === true) {\r\n urlObject.search = ''\r\n }\r\n\r\n // Keep wanted query parameters\r\n if (Array.isArray(options.keepQueryParameters) && options.keepQueryParameters.length > 0) {\r\n for (const key of [...urlObject.searchParams.keys()]) {\r\n if (!testParameter(key, options.keepQueryParameters)) {\r\n urlObject.searchParams.delete(key)\r\n }\r\n }\r\n }\r\n\r\n // Sort query parameters\r\n if (options.sortQueryParameters) {\r\n urlObject.searchParams.sort()\r\n\r\n // Calling `.sort()` encodes the search parameters, so we need to decode them again.\r\n try {\r\n urlObject.search = decodeURIComponent(urlObject.search)\r\n }\r\n catch {\r\n }\r\n }\r\n\r\n if (options.removeTrailingSlash) {\r\n urlObject.pathname = urlObject.pathname.replace(/\\/$/, '')\r\n }\r\n\r\n // Remove an explicit port number, excluding a default port number, if applicable\r\n if (options.removeExplicitPort && urlObject.port) {\r\n urlObject.port = ''\r\n }\r\n\r\n const oldUrlString = urlString\r\n\r\n // Take advantage of many of the Node `url` normalizations\r\n urlString = urlObject.toString()\r\n\r\n if (!options.removeSingleSlash && urlObject.pathname === '/' && !oldUrlString.endsWith('/') && urlObject.hash === '') {\r\n urlString = urlString.replace(/\\/$/, '')\r\n }\r\n\r\n // Remove ending `/` unless removeSingleSlash is false\r\n if ((options.removeTrailingSlash || urlObject.pathname === '/') && urlObject.hash === '' && options.removeSingleSlash) {\r\n urlString = urlString.replace(/\\/$/, '')\r\n }\r\n\r\n // Restore relative protocol, if applicable\r\n if (hasRelativeProtocol && !options.normalizeProtocol) {\r\n urlString = urlString.replace(/^http:\\/\\//, '//')\r\n }\r\n\r\n // Remove http/https\r\n if (options.stripProtocol) {\r\n urlString = urlString.replace(/^(?:https?:)?\\/\\//, '')\r\n }\r\n\r\n return urlString\r\n}\r\n","export interface IGridRect {\n top: number\n left: number\n width: number\n height: number\n}\n\nexport class GridRect implements IGridRect {\n top: number\n left: number\n width: number\n height: number\n\n constructor(left: number, top: number, width: number, height: number) {\n this.top = top\n this.left = left\n this.width = width\n this.height = height\n }\n\n get right(): number {\n return this.left + this.width\n }\n\n get bottom(): number {\n return this.top + this.height\n }\n}\n\nexport class GridSystem extends GridRect {\n cellSize: number\n horizontalCellCount: number\n verticalCellCount: number\n screenWidth: number\n screenHeight: number\n /**\n * 屏幕x坐标,用于解决多块屏幕坐标计算问题\n */\n screenLeft?: number\n /**\n * 屏幕y坐标,用于解决多块屏幕坐标计算问题\n */\n screenTop?: number\n canvasScreenTop: number\n canvasScreenLeft: number\n\n /**\n *\n * @param cellSize\n * @param padding 至少保留的边距\n * @param screenWidth\n * @param screenHeight\n * @param screenX\n * @param screenY\n */\n constructor(\n cellSize: number,\n padding: number,\n screenWidth: number,\n screenHeight: number,\n screenX?: number,\n screenY?: number,\n ) {\n const gridMaxWidth = screenWidth - padding * 2\n const gridMaxHeight = screenHeight - padding * 2\n const horizontalPadding = (gridMaxWidth % cellSize) / 2 + padding\n const verticalPadding = (gridMaxHeight % cellSize) / 2 + padding\n const horizontalCellCount = Math.floor(gridMaxWidth / cellSize)\n const verticalCellCount = Math.floor(gridMaxHeight / cellSize)\n super(horizontalPadding, verticalPadding, horizontalCellCount * cellSize, verticalCellCount * cellSize)\n this.canvasScreenLeft = horizontalPadding + (screenX ?? 0)\n this.canvasScreenTop = verticalPadding + (screenY ?? 0)\n this.cellSize = cellSize\n this.screenWidth = screenWidth\n this.screenHeight = screenHeight\n this.horizontalCellCount = horizontalCellCount\n this.verticalCellCount = verticalCellCount\n this.screenLeft = screenX\n this.screenTop = screenY\n }\n\n /**\n * 将坐标对齐到网格上\n * @param x\n * @param y\n * @param gridSystem\n */\n snapCanvasPosition(x: number, y: number): number[] {\n // 转为0坐标系\n const newX = this.getRangeValue(x - this.left, 0, this.right)\n const newY = this.getRangeValue(y - this.top, 0, this.bottom)\n return this.snapPosition(newX, newY)\n }\n\n private snapPosition(newX: number, newY: number) {\n const diffX = newX % this.cellSize\n if (diffX >= this.cellSize / 2) {\n newX = newX + this.cellSize - diffX\n }\n else {\n newX = newX - diffX\n }\n\n const diffY = newY % this.cellSize\n if (diffY >= this.cellSize / 2) {\n newY = newY + this.cellSize - diffY\n }\n else {\n newY = newY - diffY\n }\n return [newX + this.left, newY + this.top]\n }\n\n snapSize(width: number, height: number): number[] {\n let newWidth = Math.floor(width)\n let newHeight = Math.floor(height)\n const diffWidth = newWidth % this.cellSize\n const diffHeight = newHeight % this.cellSize\n if (diffWidth > this.cellSize / 2) {\n newWidth = width + this.cellSize - diffWidth\n }\n else {\n newWidth = width - diffWidth\n }\n\n if (diffHeight > this.cellSize / 2) {\n newHeight = height + this.cellSize - diffHeight\n }\n else {\n newHeight = height - diffHeight\n }\n\n return [newWidth, newHeight]\n }\n\n /**\n * 将矩形对齐到网格上\n * @param rect\n * @param minWidth\n * @param maxWidth\n * @param minHeight\n * @param maxHeight\n */\n snapCanvasRect(rect: GridRect, minWidth: number, maxWidth: number, minHeight: number, maxHeight: number): IGridRect {\n const [newX, newY] = this.snapCanvasPosition(rect.left, rect.top)\n return this.snapRect(rect, minWidth, maxWidth, minHeight, maxHeight, newX, newY)\n }\n\n private snapRect(\n rect: GridRect,\n minWidth: number,\n maxWidth: number,\n minHeight: number,\n maxHeight: number,\n newX: number,\n newY: number,\n ) {\n let [newWidth, newHeight] = this.snapSize(rect.width, rect.height)\n newWidth = this.getRangeValue(newWidth, minWidth, maxWidth)\n newHeight = this.getRangeValue(newHeight, minHeight, maxHeight)\n\n if (newX + newWidth > this.right) {\n newX = this.right - newWidth\n }\n if (newY + newHeight > this.bottom) {\n newY = this.bottom - newHeight\n }\n return new GridRect(newX, newY, newWidth, newHeight)\n }\n\n /**\n * 将矩形对齐到网格上,与snapRect的区别是,这个会加上屏幕x和y坐标,用于适配多个显示器\n * @param rect\n * @param minWidth\n * @param maxWidth\n * @param minHeight\n * @param maxHeight\n */\n snapWindow(rect: GridRect, minWidth: number, maxWidth: number, minHeight: number, maxHeight: number): IGridRect {\n rect.left = rect.left - (this.screenLeft ?? 0)\n rect.top = rect.top - (this.screenTop ?? 0)\n const result = this.snapCanvasRect(rect, minWidth, maxWidth, minHeight, maxHeight)\n return new GridRect(\n result.left + (this.screenLeft ?? 0),\n result.top + (this.screenTop ?? 0),\n result.width,\n result.height,\n )\n }\n\n /**\n * 限制值不超出屏幕\n * @param value\n * @param min\n * @param max\n * @private\n */\n private getRangeValue(value: number, min: number, max: number) {\n if (value < min) {\n return min\n }\n if (value > max) {\n return max\n }\n return value\n }\n\n getWidth() {\n return this.width\n }\n\n getHeight() {\n return this.height\n }\n}\n","export class ApiConstants {\r\n static readonly CONFIG_LAUNCH_AT_STARTUP = 'CONFIG_LAUNCH_AT_STARTUP'\r\n static readonly CONFIG_WIDGET_TITLE_COLOR = 'CONFIG_WIDGET_TITLE_COLOR'\r\n static readonly CONFIG_DEBUG_MODE = 'cn.widgetjs.config.debug'\r\n static readonly CONFIG_GRID_CELL_SIZE = 'cn.widgetjs.config.grid.size'\r\n static readonly SHORTCUT_PIN_DESKTOP_WIDGETS = 'cn.widgetjs.config.shortcut.pin_desktop_widgets'\r\n}\r\n\r\nexport class AppEvent {\r\n static readonly LANGUAGE_CHANGED = 'event::cn.widgetjs.core.app.language.changed'\r\n}\r\n\r\nexport class AppConfig {\r\n static readonly LANGUAGE = 'cn.widgetjs.config.app.language'\r\n static readonly LAUNCH_AT_STARTUP = 'CONFIG_LAUNCH_AT_STARTUP'\r\n}\r\n","import { ElectronUtils } from '../utils/ElectronUtils'\r\n\r\nexport abstract class BaseApi<T extends string> {\n abstract getChannel(): string\r\n\r\n protected async invokeMethod(method: T, ...args: any[]): Promise<any> {\r\n return await ElectronUtils.invokeMethod(this.getChannel(), method, ...args)\r\n }\r\n\r\n protected async invoke(...args: any[]): Promise<any> {\r\n return await ElectronUtils.invoke(this.getChannel(), ...args)\r\n }\r\n}\r\n","export enum Channel {\r\n NOTIFICATION = 'channel::cn.widgetjs.core.notification',\r\n BROWSER_WINDOW = 'channel::cn.widgetjs.core.browser_window',\r\n BROADCAST = 'channel::cn.widgetjs.core.broadcast',\r\n WIDGET = 'channel::cn.widgetjs.core.widget',\r\n WIDGET_PACKAGE = 'channel::cn.widgetjs.core.widget.package',\r\n DEPLOYED_WIDGET = 'channel::cn.widgetjs.core.deployed_widget',\r\n APP = 'channel::cn.widgetjs.core.app',\r\n SYSTEM = 'channel::cn.widgetjs.core.system',\r\n DIALOG = 'channel::cn.widgetjs.core.dialog',\r\n HTTP = 'channel::cn.widgetjs.core.http',\r\n CLIPBOARD = 'channel::cn.widgetjs.core.clipboard',\r\n FILE = 'channel::cn.widgetjs.core.file',\r\n SCREEN = 'channel::cn.widgetjs.core.screen',\r\n MENU = 'channel::cn.widgetjs.core.menu',\r\n SHORTCUT = 'channel::cn.widgetjs.core.shortcut',\r\n LOG = 'channel::cn.widgetjs.core.log',\r\n\r\n DEVICE = 'channel::cn.widgetjs.core.device',\r\n MOUSE = 'channel::cn.widgetjs.core.mouse',\r\n KEYBOARD = 'channel::cn.widgetjs.core.keyboard',\r\n /**\r\n * @deprecated\r\n */\r\n STORE = 'channel::cn.widgetjs.core.store',\r\n STORAGE = 'channel::cn.widgetjs.core.storage',\r\n\r\n PROCESS = 'channel::cn.widgetjs.core.process',\r\n USER = 'channel::cn.widgetjs.core.user',\r\n TRAY = 'channel::cn.widgetjs.core.tray',\r\n AI = 'channel::cn.widgetjs.core.ai',\r\n}\r\n","import type { LanguageCode } from '../lang/LanguageCode'\r\nimport type { AppApiConstants, AppApiMethods, AppRoutes, IAppApi } from './interface'\r\nimport type { AppRuntimeInfo, BrowserWindowOptions } from './structures'\r\nimport { ElectronUtils } from '../utils'\r\nimport { BaseApi } from './BaseApi'\r\n\r\nimport { Channel } from './Channel'\r\n\r\nclass AppApiImpl extends BaseApi<AppApiMethods> implements IAppApi {\r\n showAppWindow(route: string | AppRoutes, options?: BrowserWindowOptions): Promise<void> {\r\n return this.invokeMethod('showAppWindow', route, options)\r\n }\r\n\r\n openWidgetPackageManagerWindow(): Promise<void> {\r\n return this.invokeMethod('openWidgetPackageManagerWindow')\r\n }\r\n\r\n getRuntimeInfo(): Promise<AppRuntimeInfo> {\r\n return this.invokeMethod('getRuntimeInfo')\r\n }\r\n\r\n setProxy(config?: Electron.Config): Promise<void> {\r\n return this.invokeMethod('setProxy', config)\r\n }\r\n\r\n getProxy(): Promise<Electron.Config> {\r\n return this.invokeMethod('getProxy')\r\n }\r\n\r\n isWindowsStore(): Promise<boolean> {\r\n return this.invokeMethod('isWindowsStore')\r\n }\r\n\r\n getAppPath(): Promise<string> {\r\n return this.invokeMethod('getAppPath')\r\n }\r\n\r\n async getIconFile(): Promise<string> {\r\n return this.invokeMethod('getIconFile')\r\n }\r\n\r\n getChannel(): string {\r\n return Channel.APP\r\n }\r\n\r\n async setConfig<T extends string | number | boolean>(key: AppApiConstants | string, value: T): Promise<T> {\r\n return await this.invokeMethod('setConfig', key, value)\r\n }\r\n\r\n async getConfig<T extends string | number | boolean>(key: string | AppApiConstants, defaultValue: T): Promise<T> {\r\n const value = await this.invokeMethod('getConfig', key)\r\n if (value === null || value === undefined) {\r\n return defaultValue\r\n }\r\n if (typeof defaultValue == 'boolean') {\r\n return (value === 'true') as T\r\n }\r\n\r\n if (typeof defaultValue == 'number') {\r\n return Number(value) as T\r\n }\r\n return value\r\n }\r\n\r\n async openAddWidgetWindow() {\r\n return this.invokeMethod('openAddWidgetWindow')\r\n }\r\n\r\n async getVersion(type?: 'app' | 'electron' | 'chrome' | 'node' | 'v8'): Promise<string> {\r\n return this.invokeMethod('getVersion', type)\r\n }\r\n\r\n async getPreloadPath(): Promise<string> {\r\n return this.invokeMethod('getPreloadPath')\r\n }\r\n\r\n async openSettingWindow() {\r\n return this.invokeMethod('openSettingWindow')\r\n }\r\n\r\n getThemeCSS(): Promise<string> {\r\n return this.invokeMethod('getThemeCSS')\r\n }\r\n\r\n setThemeCSS(css: string): Promise<void> {\r\n return this.invokeMethod('setThemeCSS', css)\r\n }\r\n\r\n getDevMode(): Promise<boolean> {\r\n return this.invokeMethod('getDevMode')\r\n }\r\n\r\n setDevMode(enable: boolean): Promise<void> {\r\n return this.invokeMethod('setDevMode', enable)\r\n }\r\n\r\n getLanguageCode(): Promise<string> {\r\n if (ElectronUtils.hasElectronApi()) {\r\n return this.invokeMethod('getLanguageCode')\r\n }\r\n return Promise.resolve(navigator.language)\r\n }\r\n\r\n async setLanguageCode(code: LanguageCode): Promise<void> {\r\n await this.invokeMethod('setLanguageCode', code)\r\n }\r\n\r\n getGridCellSize(): Promise<number> {\r\n return this.invokeMethod('getGridCellSize')\r\n }\r\n\r\n setGridCellSize(size: number): Promise<void> {\r\n return this.invokeMethod('setGridCellSize', size)\r\n }\r\n\r\n exit(): Promise<void> {\r\n return this.invokeMethod('exit')\r\n }\r\n\r\n openCheckUpdateWindow(): Promise<void> {\r\n return this.invokeMethod(`openCheckUpdateWindow`)\r\n }\r\n\r\n openWidgetManagerWindow(): Promise<void> {\r\n return this.invokeMethod(`openWidgetManagerWindow`)\r\n }\r\n\r\n openRuntimeInfoWindow(): Promise<void> {\r\n return this.invokeMethod(`openRuntimeInfoWindow`)\r\n }\r\n}\r\n\r\nconst AppApi: IAppApi = new AppApiImpl()\r\n\r\nexport { AppApi }\r\n","import type { BroadcastEvent } from '../model/event/BroadcastEvent'\r\nimport { Channel } from './Channel'\r\nimport { BaseApi } from './BaseApi'\r\nimport type { WidgetApiEvent } from './WidgetApi'\r\nimport type { ShortcutApiEvent } from './ShortcutApi'\r\nimport type { ClipboardApiEvent } from './ClipboardApi'\r\nimport type { BrowserWindowApiEvent } from './BrowserWindowApi'\r\nimport type { IBroadcastApi } from './interface/IBroadcastApi'\r\nimport type { MouseApiEvent } from './interface'\r\n\r\ntype BroadcastEventType = string | WidgetApiEvent | BrowserWindowApiEvent | ShortcutApiEvent | ClipboardApiEvent | MouseApiEvent\r\n\r\ntype BroadcastApiMethods = keyof IBroadcastApi\r\n\r\nclass BroadcastApiImpl extends BaseApi<BroadcastApiMethods> implements IBroadcastApi {\r\n async send(event: BroadcastEvent) {\r\n await this.invokeMethod('send', event)\r\n }\r\n\r\n async register(...event: BroadcastEventType[]) {\r\n await this.invokeMethod('register', event)\r\n }\r\n\r\n async unregister(...event: BroadcastEventType[]) {\r\n await this.invokeMethod('unregister', event)\r\n }\r\n\r\n getChannel(): string {\r\n return Channel.BROADCAST\r\n }\r\n}\r\n\r\nconst BroadcastApi: IBroadcastApi = new BroadcastApiImpl()\r\n\r\nexport { BroadcastApi, BroadcastApiMethods, BroadcastEventType }\r\n","import { ElectronUtils } from '../utils'\r\nimport type { BrowserWindowOptions, Position, ProxyConfig, Rectangle } from './structures'\r\nimport { Channel } from './Channel'\r\nimport { BaseApi } from './BaseApi'\r\nimport type { IBrowserWindowApi } from './interface/IBrowserWindowApi'\r\n\r\ntype BrowserWindowApiMethods = keyof IBrowserWindowApi\r\ntype AlignPosition = 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right'\r\n\r\ninterface SetPositionOptions {\r\n x?: number\r\n y?: number\r\n /**\r\n * Only works on macOS\r\n */\r\n animation?: boolean\r\n}\r\n\r\nenum BrowserWindowApiEvent {\r\n BLUR = 'event::cn.widgetjs.core.browser-window.blur',\r\n MOVED = 'event::cn.widgetjs.core.browser-window.moved',\r\n FOCUS = 'event::cn.widgetjs.core.browser-window.focus',\r\n CLOSE = 'event::cn.widgetjs.core.browser-window.close',\r\n SNAP_TO_EDGE = 'event::cn.widgetjs.core.browser-window.snap_to_edge',\r\n RESIZED = 'event::cn.widgetjs.core.browser-window.resized',\r\n CANCEL_SNAP_TO_EDGE = 'event::cn.widgetjs.core.browser-window.cancel_snap_to_edge',\r\n}\r\n\r\ninterface SetupOptions {\r\n width: number\r\n height: number\r\n minWidth?: number\r\n minHeight?: number\r\n maxWidth?: number\r\n maxHeight?: number\r\n resizable?: boolean\r\n movable?: boolean\r\n center?: boolean\r\n alwaysOnTop?: boolean\r\n x?: number\r\n y?: number\r\n skipTaskbar?: boolean\r\n}\r\n\r\nclass BrowserWindowApiImpl extends BaseApi<BrowserWindowApiMethods> implements IBrowserWindowApi {\r\n getProxy(): Promise<ProxyConfig | undefined> {\r\n return this.invokeMethod('getProxy')\r\n }\r\n\r\n setBackgroundThrottling(enabled: boolean): Promise<void> {\r\n return this.invokeMethod('setBackgroundThrottling', enabled)\r\n }\r\n\r\n getBackgroundThrottling(): Promise<boolean> {\r\n return this.invokeMethod('getBackgroundThrottling')\r\n }\r\n\r\n isResizable(): Promise<boolean> {\r\n return this.invokeMethod('isResizable')\r\n }\r\n\r\n setHasShadow(hasShadow: boolean): Promise<void> {\r\n return this.invokeMethod('setHasShadow', hasShadow)\r\n }\r\n\r\n isDraggingWindow(): Promise<boolean> {\r\n return this.invokeMethod('isDraggingWindow')\r\n }\r\n\r\n setNoActivate(): Promise<void> {\r\n return this.invokeMethod('setNoActivate')\r\n }\r\n\r\n async isVisible(): Promise<boolean> {\r\n return await this.invokeMethod('isVisible')\r\n }\r\n\r\n getChannel(): string {\r\n return Channel.BROWSER_WINDOW\r\n }\r\n\r\n async setIgnoreMouseEvent(ignore: boolean) {\r\n await this.invokeMethod('setIgnoreMouseEvent', ignore)\r\n }\r\n\r\n async show() {\r\n await this.invokeMethod('show', true)\r\n }\r\n\r\n async showInactive() {\r\n await this.invokeMethod('showInactive', true)\r\n }\r\n\r\n async hide() {\r\n await this.invokeMethod('hide', false)\r\n }\r\n\r\n async center() {\r\n await this.invokeMethod('center', false)\r\n }\r\n\r\n async setAlwaysOnTop(alwaysOnTop: boolean) {\r\n await this.invokeMethod('setAlwaysOnTop', alwaysOnTop)\r\n }\r\n\r\n async isAlwaysOnTop(): Promise<boolean> {\r\n return await this.invokeMethod('isAlwaysOnTop')\r\n }\r\n\r\n async openUrl(url: string, option?: BrowserWindowOptions) {\r\n if (ElectronUtils.hasElectronApi()) {\r\n await this.invokeMethod('openUrl', url, option)\r\n }\r\n else {\r\n window.open(url, '_blank')\r\n }\r\n }\r\n\r\n async moveTop() {\r\n await this.invokeMethod('moveTop')\r\n }\r\n\r\n async openDevTools() {\r\n await this.invokeMethod('openDevTools')\r\n }\r\n\r\n async setPosition(options: SetPositionOptions) {\r\n await this.invokeMethod('setPosition', options)\r\n }\r\n\r\n async getPosition(): Promise<Position> {\r\n return await this.invokeMethod('getPosition')\r\n }\r\n\r\n async blur() {\r\n return await this.invokeMethod('blur')\r\n }\r\n\r\n async focus() {\r\n return await this.invokeMethod('focus')\r\n }\r\n\r\n /**\r\n * 设置窗口是否可以拉伸\r\n * @param resizable\r\n */\r\n async setResizable(resizable: boolean) {\r\n return await this.invokeMethod('setResizable', resizable)\r\n }\r\n\r\n async getBounds(): Promise<Rectangle> {\r\n return await this.invokeMethod('getBounds')\r\n }\r\n\r\n async setBounds(bounds: Partial<Rectangle>, animate?: boolean): Promise<void> {\r\n return await this.invokeMethod('setBounds', bounds, animate)\r\n }\r\n\r\n async alignToScreen(align: AlignPosition) {\r\n return await this.invokeMethod('alignToScreen', align)\r\n }\r\n\r\n async startDraggingWindow() {\r\n return await this.invokeMethod('startDraggingWindow')\r\n }\r\n\r\n async stopDraggingWindow() {\r\n return await this.invokeMethod('stopDraggingWindow')\r\n }\r\n\r\n /**\r\n * 通过url检测窗口是否存在\r\n * @param url\r\n */\r\n async existsByUrl(url: string): Promise<boolean> {\r\n return await this.invokeMethod('existsByUrl', url)\r\n }\r\n\r\n async getMaximumSize(): Promise<number[]> {\r\n return await this.invokeMethod('getMaximumSize')\r\n }\r\n\r\n async minimize(): Promise<void> {\r\n return await this.invokeMethod('minimize')\r\n }\r\n\r\n async maximize(): Promise<void> {\r\n return await this.invokeMethod('maximize')\r\n }\r\n\r\n async isMaximized(): Promise<boolean> {\r\n return await this.invokeMethod('isMaximized')\r\n }\r\n\r\n async isMinimized(): Promise<boolean> {\r\n return await this.invokeMethod('isMinimized')\r\n }\r\n\r\n async restore(): Promise<void> {\r\n return await this.invokeMethod('restore')\r\n }\r\n\r\n async unmaximize(): Promise<void> {\r\n return await this.invokeMethod('unmaximize')\r\n }\r\n\r\n async setZoomLevel(level: number): Promise<void> {\r\n return await this.invokeMethod('setZoomLevel', level)\r\n }\r\n\r\n async reload(): Promise<void> {\r\n return await this.invokeMethod('reload')\r\n }\r\n\r\n async setMovable(movable: boolean): Promise<void> {\r\n return await this.invokeMethod('setMovable', movable)\r\n }\r\n\r\n async setSize(width: number, height: number, animate?: boolean): Promise<void> {\r\n return this.invokeMethod('setSize', width, height, animate)\r\n }\r\n\r\n async isFocused(): Promise<boolean> {\r\n return this.invokeMethod('isFocused')\r\n }\r\n\r\n async setMaximumSize(width: number, height: number): Promise<void> {\r\n return this.invokeMethod('setMaximumSize', width, height)\r\n }\r\n\r\n async setMinimumSize(width: number, height: number): Promise<void> {\r\n return this.invokeMethod('setMinimumSize', width, height)\r\n }\r\n\r\n getMinimumSize(): Promise<number[]> {\r\n return this.invokeMethod('getMinimumSize')\r\n }\r\n\r\n close(): Promise<void> {\r\n return this.invokeMethod('close')\r\n }\r\n\r\n setZoomFactor(factor: number): Promise<void> {\r\n return this.invokeMethod('setZoomFactor', factor)\r\n }\r\n\r\n async setup(options: SetupOptions): Promise<void> {\r\n if (options.alwaysOnTop) {\r\n await this.setAlwaysOnTop(true)\r\n }\r\n await this.setResizable(!!options.resizable)\r\n await this.setMovable(!!options.movable)\r\n if (options.width && options.height) {\r\n await this.setSize(options.width, options.height)\r\n }\r\n if (options.minWidth && options.minHeight) {\r\n await this.setMinimumSize(options.minWidth, options.minHeight)\r\n }\r\n if (options.maxWidth && options.maxHeight) {\r\n await this.setMaximumSize(options.maxWidth, options.maxHeight)\r\n }\r\n if (options.center) {\r\n await this.center()\r\n }\r\n if (options.x != undefined || options.y != undefined) {\r\n await this.setPosition({ x: options.x, y: options.y })\r\n }\r\n if (options.skipTaskbar) {\r\n await this.setSkipTaskbar(true)\r\n }\r\n else if (options.skipTaskbar === false) {\r\n await this.setSkipTaskbar(false)\r\n }\r\n }\r\n\r\n async setProxy(config: Electron.Config): Promise<void> {\r\n return await this.invokeMethod('setProxy', config)\r\n }\r\n\r\n getSize(): Promise<number[]> {\r\n return this.invokeMethod('getSize')\r\n }\r\n\r\n setSkipTaskbar(skip: boolean): Promise<void> {\r\n return this.invokeMethod('setSkipTaskbar', skip)\r\n }\r\n}\r\n\r\nconst BrowserWindowApi = new BrowserWindowApiImpl()\r\nexport {\r\n BrowserWindowApi,\r\n BrowserWindowApiMethods,\r\n BrowserWindowOptions,\r\n SetPositionOptions,\r\n BrowserWindowApiEvent,\r\n AlignPosition,\r\n}\r\n","import { Channel } from './Channel'\r\nimport { BaseApi } from './BaseApi'\r\n\r\ninterface IClipboardApi {\r\n getSelectedText(): Promise<string | undefined>\r\n\r\n getText(): Promise<string | undefined>\r\n\r\n writeText(text: string): Promise<void>\r\n}\r\n\r\ntype ClipboardApiMethods = keyof IClipboardApi\r\n\r\nenum ClipboardApiEvent {\r\n CHANGED = 'clipboard-changed',\r\n}\r\n\r\nclass ClipboardApiImpl extends BaseApi<ClipboardApiMethods> implements IClipboardApi {\r\n writeText(text: string): Promise<void> {\r\n return this.invokeMethod('writeText', text)\r\n }\r\n\r\n async getSelectedText(): Promise<string | undefined> {\r\n return this.invokeMethod('getSelectedText')\r\n }\r\n\r\n async getText(): Promise<string | undefined> {\r\n return this.invokeMethod('getText')\r\n }\r\n\r\n getChannel(): string {\r\n return Channel.CLIPBOARD\r\n }\r\n}\r\n\r\nconst ClipboardApi: IClipboardApi = new ClipboardApiImpl()\r\n\r\nexport { ClipboardApi, ClipboardApiMethods, ClipboardApiEvent }\r\n","import type { AddWidgetOption } from '../api'\r\n\r\nexport class AppProtocolUtils {\r\n static getBaseURL(): URL {\r\n return new URL('widget://widgetjs.cn')\r\n }\r\n\r\n static getAddWidgetUrl(options: AddWidgetOption): string {\r\n const url = this.getBaseURL()\r\n url.pathname = '/widget/add'\r\n if (options.packageJsonUrl) {\r\n url.searchParams.set('packageJsonUrl', options.packageJsonUrl)\r\n }\r\n if (options.hostname) {\r\n url.searchParams.set('hostname', options.hostname)\r\n }\r\n if (options.widgetTitle) {\r\n url.searchParams.set('widgetTitle', options.widgetTitle)\r\n }\r\n url.searchParams.set('widgetName', options.widgetName)\r\n url.searchParams.set('deployMode', options.deployMode.toString())\r\n return url.toString()\r\n }\r\n}\r\n","import type { WidgetParams } from '../model/WidgetParams'\r\nimport type { DeployMode } from '../model/DeployMode'\r\nimport type { Widget } from '../model/Widget'\r\nimport type { DeployedWidget } from '../model/DeployedWidget'\r\nimport { ElectronUtils } from '../utils'\r\nimport { AppProtocolUtils } from '../utils/AppProtocolUtils'\r\nimport { BaseApi } from './BaseApi'\r\nimport { Channel } from './Channel'\r\nimport type { IDeployedWidgetApi } from './interface/IDeployedWidgetApi'\r\n\r\nexport interface AddWidgetOption {\r\n widgetName: string\r\n widgetTitle?: string\r\n deployMode: DeployMode\r\n packageJsonUrl?: string\r\n hostname?: string\r\n}\r\n\r\ntype DeployedWidgetApiMethods = keyof IDeployedWidgetApi\r\n\r\nclass DeployedWidgetApiImpl extends BaseApi<DeployedWidgetApiMethods> implements IDeployedWidgetApi {\r\n getChannel(): string {\r\n return Channel.DEPLOYED_WIDGET\r\n }\r\n\r\n /**\r\n * 移除组件\r\n * @param id\r\n */\r\n async removeDeployedWidget(id?: string) {\r\n return this.invokeMethod('removeDeployedWidget', id)\r\n }\r\n\r\n addWidget(options: AddWidgetOption): Promise<Widget[]> {\r\n if (ElectronUtils.hasElectronApi()) {\r\n return this.invokeMethod('addWidget', options)\r\n }\r\n else {\r\n window.location.href = AppProtocolUtils.getAddWidgetUrl(options)\r\n return Promise.resolve([])\r\n }\r\n }\r\n\r\n /**\r\n * 通过组件名移除已添加的组件\r\n * @param name 组件名\r\n */\r\n async removeDeployedWidgetByName(name: string): Promise<DeployedWidget[]> {\r\n return this.invokeMethod('removeDeployedWidgetByName', name)\r\n }\r\n\r\n /**\r\n * 获取已添加的组件\r\n * @param name 组件名,可以不传\r\n */\r\n async getDeployedWidgets(name?: string): Promise<DeployedWidget[]> {\r\n return this.invokeMethod('getDeployedWidgets', name)\r\n }\r\n\r\n async getDeployedWidget(id: string): Promise<DeployedWidget> {\r\n return this.invokeMethod('getDeployedWidget', id)\r\n }\r\n\r\n /**\r\n * Opens the dev tools for a widget with the specified ID.\r\n *\r\n * @param {string} widgetId - The ID of the widget to open the dev tools for.\r\n * @return {Promise} A Promise that resolves when the dev tools are opened.\r\n */\r\n async openDevTools(widgetId: string) {\r\n return this.invokeMethod('openDevTools', widgetId)\r\n }\r\n\r\n async openConfigPage(widgetId?: string, params?: WidgetParams) {\r\n return this.invokeMethod('openConfigPage', widgetId, params)\r\n }\r\n\r\n /**\r\n * 注册激活、呼出、置顶组件快捷键\r\n * @param widgetId 组件id\r\n * @param shortcut 如果传空或者不传,则会取消快捷键。更多快捷键配置,请查看Accelerator用法\r\n * https://www.electronjs.org/docs/latest/api/accelerator\r\n */\r\n async registerActiveShortcut(widgetId: string, shortcut?: string): Promise<boolean> {\r\n return this.invokeMethod('registerActiveShortcut', widgetId, shortcut)\r\n }\r\n\r\n async setProxy(widgetId: string, proxy: string): Promise<boolean> {\r\n return this.invokeMethod('setProxy', widgetId, proxy)\r\n }\r\n}\r\n\r\nconst DeployedWidgetApi = new DeployedWidgetApiImpl()\r\nexport { DeployedWidgetApi, DeployedWidgetApiMethods }\r\n","import type { Display } from '../model/electron'\r\nimport type { IDeviceApi } from './interface'\r\nimport type { Point } from './structures'\r\nimport { BaseApi } from './BaseApi'\r\nimport { Channel } from './Channel'\r\n\r\ntype DeviceApiMethods = keyof IDeviceApi\r\n\r\nclass DeviceApiImpl extends BaseApi<DeviceApiMethods> implements IDeviceApi {\r\n getDisplayNearestPoint(point: Point): Promise<Display> {\r\n return this.invokeMethod('getDisplayNearestPoint', point)\r\n }\r\n\r\n getAllDisplays(): Promise<Display[]> {\r\n return this.invokeMethod('getAllDisplays')\r\n }\r\n\r\n getPrimaryDisplay(): Promise<Display> {\r\n return this.invokeMethod('getPrimaryDisplay')\r\n }\r\n\r\n /**\r\n * 获取当前鼠标位置\r\n */\r\n async getCursorScreenPoint(): Promise<Point> {\r\n return this.invokeMethod('getCursorScreenPoint')\r\n }\r\n\r\n async sendCtrlV(): Promise<void> {\r\n return this.invokeMethod('sendCtrlV')\r\n }\r\n\r\n /**\r\n * 判断是否所有按键都已经释放\r\n */\r\n async isAllKeyReleased(): Promise<boolean> {\r\n return this.invokeMethod('isAllKeyReleased')\r\n }\r\n\r\n getChannel(): string {\r\n return Channel.DEVICE\r\n }\r\n\r\n isCapsLockOn(): Promise<boolean> {\r\n return this.invokeMethod('isCapsLockOn')\r\n }\r\n}\r\n\r\nconst DeviceApi: IDeviceApi = new DeviceApiImpl()\r\n\r\nexport { DeviceApi, DeviceApiMethods }\r\n","import { Channel } from './Channel'\r\nimport { BaseApi } from './BaseApi'\r\nimport type { DialogApiMethods, IDialogApi } from './interface'\r\n\r\nclass DialogApiImpl extends BaseApi<DialogApiMethods> implements IDialogApi {\r\n getChannel(): string {\r\n return Channel.DIALOG\r\n }\r\n\r\n pickFile(extensions: string[] | undefined): Promise<string | undefined> {\r\n return this.invokeMethod('pickFile', extensions)\r\n }\r\n\r\n pickFolder(): Promise<string | undefined> {\r\n return this.invokeMethod('pickFolder')\r\n }\r\n}\r\n\r\nconst DialogApi: IDialogApi = new DialogApiImpl()\r\nexport { DialogApi }\r\n","import { ElectronUtils } from '../utils/ElectronUtils'\r\n\r\nexport class ElectronApi {\r\n static async addIpcListener(key: string, f: Function) {\r\n await ElectronUtils.getAPI()?.addIpcListener(key, f)\r\n }\r\n\r\n static async removeIpcListener(key: string) {\r\n await ElectronUtils.getAPI()?.removeIpcListener(key)\r\n }\n}\r\n","import type { FileTypeResult } from 'file-type'\r\nimport type { Metadata } from '../types'\r\nimport type { ShortcutDetails } from '../model/electron'\r\nimport { Channel } from './Channel'\r\nimport { BaseApi } from './BaseApi'\r\nimport type { IFileApi } from './interface'\r\n\r\nexport interface SystemFile {\r\n isDirectory: boolean\r\n name: string\r\n absolutePath: string\r\n /**\r\n * MIME type\r\n */\r\n type: string\r\n size: number\r\n /**\r\n * Timestamp of the last modification time.\r\n */\r\n modifiedTime: number\r\n /**\r\n * Timestamp of the file creation time.\r\n */\r\n birthTime: number\r\n /**\r\n * Timestamp of the last status change time (e.g., changes in permissions, ownership, etc.).\r\n */\r\n changeTime: number\r\n /**\r\n * Timestamp of the last access time.\r\n */\r\n accessTime: number\r\n children?: SystemFile[]\r\n /**\r\n * File extension\r\n */\r\n extension?: string\r\n}\r\n\r\nexport interface ReadDirOptions {\r\n ignoreDir?: boolean\r\n /**\r\n * @deprecated\r\n */\r\n traverseDir?: boolean\r\n /**\r\n * Specifies the maximum depth of a read directory relative to the start directory.\r\n * A higher value may lead to performance issues, especially for large or deeply nested directories (like node_modules ^_^)\r\n * default is 1, max is 3\r\n */\r\n deep?: number\r\n /**\r\n * glob patterns to filter files\r\n * @see https://www.npmjs.com/package/fast-glob#pattern-syntax\r\n */\r\n pattern?: string | string[]\r\n /**\r\n * An array of glob patterns to exclude matches. This is an alternative way to use negative patterns.\r\n */\r\n ignore?: string[]\r\n /**\r\n * default is false\r\n */\r\n onlyDirectories?: boolean\r\n /**\r\n * default is false\r\n */\r\n onlyFiles?: boolean\r\n /**\r\n * Allow patterns to match entries that begin with a period (.)\r\n * @default false\r\n */\r\n dot?: boolean\r\n}\r\n\r\nexport interface DownloadUrlOptions {\r\n url: string\r\n savePath: string\r\n fileName: string\r\n /**\r\n * true - overwrite existing\r\n * false - ignore\r\n */\r\n overwrite?: boolean\r\n}\r\n\r\ntype FileApiMethods = keyof IFileApi\r\n\r\nclass FileApiImpl extends BaseApi<FileApiMethods> implements IFileApi {\r\n async readShortcutLink(shortcutPath: string): Promise<ShortcutDetails> {\r\n return this.invokeMethod('readShortcutLink', shortcutPath)\r\n }\r\n\r\n async extractIcon(path: string, size?: number): Promise<string> {\r\n return this.invokeMethod('extractIcon', path, size)\r\n }\r\n\r\n async delete(filePath: string): Promise<boolean> {\r\n return this.invokeMethod('delete', filePath)\r\n }\r\n\r\n async getPictureMetadata(filePath: string): Promise<Metadata> {\r\n return this.invokeMethod('getPictureMetadata', filePath)\r\n }\r\n\r\n async move(form: string, to: string): Promise<string> {\r\n return this.invokeMethod('move', form, to)\r\n }\r\n\r\n async isDirectory(filePath: string): Promise<boolean> {\r\n return this.invokeMethod('isDirectory', filePath)\r\n }\r\n\r\n getChannel(): string {\r\n return Channel.FILE\r\n }\r\n\r\n async readDirectory(path: string, options?: ReadDirOptions): Promise<SystemFile | undefined> {\r\n return this.invokeMethod('readDirectory', path, options)\r\n }\r\n\r\n async downloadUrl(options: DownloadUrlOptions): Promise<string> {\r\n return this.invokeMethod('downloadUrl', options)\r\n }\r\n\r\n async exists(filePath: string): Promise<boolean> {\r\n return this.invokeMethod('exists', filePath)\r\n }\r\n\r\n async readFile(filePath: string): Promise<string> {\r\n return this.invokeMethod('readFile', filePath)\r\n }\r\n\r\n async getDocumentFolder(filePath?: string): Promise<string> {\r\n return this.invokeMethod('getDocumentFolder', filePath)\r\n }\r\n\r\n async getMimeType(absoluteFilePath: string): Promise<FileTypeResult> {\r\n return this.invokeMethod('getMimeType', absoluteFilePath)\r\n }\r\n\r\n async getFileInfo(absoluteFilePath: string): Promise<SystemFile | undefined> {\r\n return this.invokeMethod('getFileInfo', absoluteFilePath)\r\n }\r\n\r\n async showItemInFolder(fullPath: string): Promise<void> {\r\n return this.invokeMethod('showItemInFolder', fullPath)\r\n }\r\n\r\n async openPath(path: string): Promise<void> {\r\n return this.invokeMethod('openPath', path)\r\n }\r\n\r\n async trashItem(path: string): Promise<void> {\r\n return this.invokeMethod('trashItem', path)\r\n }\r\n}\r\n\r\nconst FileApi: IFileApi = new FileApiImpl()\r\n\r\nexport { FileApi, FileApiMethods }\r\n","import { BaseApi } from './BaseApi'\r\nimport type { HttpApiMethods, IHttpApi } from './interface/IHttpApi'\r\nimport { Channel } from './Channel'\r\n\r\nclass HttpApiImpl extends BaseApi<HttpApiMethods> implements IHttpApi {\r\n getChannel(): string {\r\n return Channel.HTTP\r\n }\r\n\r\n get(url: string, params?: Record<string, any>): Promise<string> {\r\n return this.invokeMethod('get', url, params)\r\n }\r\n\r\n post(url: string, data?: Record<string, any>): Promise<string> {\r\n return this.invokeMethod('post', url, data)\r\n }\r\n}\r\nconst HttpApi: IHttpApi = new HttpApiImpl()\r\n\r\nexport { HttpApi, HttpApiMethods }\r\n","import type { LanguageCode } from '../../lang/LanguageCode'\r\nimport type { AppRuntimeInfo, BrowserWindowOptions, ProxyConfig } from '../structures'\r\n\r\nexport type AppRoutes = '/widget/search' | '/widget/package' | '/setting/common' | '/setting/theme' | '/setting/ai' | '/setting/proxy'\r\n | '/setting/info' | '/user/profile'\r\n/**\r\n * AppApi 接口定义了与应用程序相关的一系列方法。这些方法提供了应用程序配置管理、版本信息获取、路径获取以及应用内置窗口操作等功能。\r\n * @see [Electron API App](https://www.electronjs.org/docs/latest/api/app)\r\n */\r\nexport interface IAppApi {\r\n /**\r\n * 设置配置\r\n * @param key string\r\n * @param value string | number | boolean\r\n */\r\n setConfig: (key: string | AppApiConstants, value: string | number | boolean) => Promise<any>\r\n\r\n /**\r\n * 获取配置\r\n * @param key\r\n * @param defaultValue\r\n * @return Promise<string | number | boolean>\r\n */\r\n getConfig: <T extends string | number | boolean>(key: string | AppApiConstants, defaultValue: T) => Promise<T>\r\n\r\n /**\r\n * 获取版本信息\r\n * @param type string - 可选。指定要获取的版本类型。\r\n * <ol>\r\n * <li>`app`: Get app's version with Semantic Versioning format.\r\n * The version is different from Microsoft store's version.\r\n * For example, if the app's version is `24.1.1`, Microsoft store's version will be `24.1.1.0`</li>\r\n * <li>`electron`: 获取 Electron 框架的版本。</li>\r\n * <li>`chrome`: 获取 Electron 使用的 Chromium 版本。</li>\r\n * <li>`node`: 获取 Node.js 的版本。</li>\r\n * <li>`v8`: 获取 V8 引擎的版本。</li>\r\n * </ol>\r\n * @return Promise<string>\r\n */\r\n getVersion: (type?: 'app' | 'electron' | 'chrome' | 'node' | 'v8') => Promise<string>\r\n\r\n /**\r\n * Get App's runtime info (e.g. app name, os/electron/node version, etc.)\r\n */\r\n getRuntimeInfo: () => Promise<AppRuntimeInfo>\r\n\r\n /**\r\n * 获取Preload JS路径\r\n * @see [Using Preload Scripts](https://www.electronjs.org/docs/latest/tutorial/tutorial-preload)\r\n * @return Promise<string>\r\n */\r\n getPreloadPath: () => Promise<string>\r\n\r\n /**\r\n * 获取应用安装路径\r\n * @return Promise<string>\r\n */\r\n getAppPath: () => Promise<string>\r\n\r\n /**\r\n * Open the app's add/search widget window\r\n * @deprecated Use `showAppWindow('/widget/add', options)` instead, which is more flexible and supports custom routes.\r\n */\r\n openAddWidgetWindow: () => Promise<void>\r\n\r\n /**\r\n * Show a new window with specified route and options\r\n * support routes:\r\n * /user/profile\r\n * /auth/register\r\n *\r\n * @param route\r\n * @param options\r\n */\r\n showAppWindow: (route: string | AppRoutes, options?: BrowserWindowOptions) => Promise<void>\r\n\r\n /**\r\n * Open the app's setting window\r\n * @deprecated Use `showAppWindow('/setting/common', options)` instead, which is more flexible and supports custom routes.\r\n */\r\n openSettingWindow: () => Promise<void>\r\n\r\n /**\r\n * Open the app's update window\r\n * @deprecated Use `showAppWindow('/widget/info', options)` instead, which is more flexible and supports custom routes.\r\n */\r\n openCheckUpdateWindow: () => Promise<void>\r\n\r\n /**\r\n * open the app's widget manager window\r\n * @deprecated Use `showAppWindow('/widget/search', options)` instead, which is more flexible and supports custom routes.\r\n */\r\n openWidgetManagerWindow: () => Promise<void>\r\n\r\n /**\r\n * @deprecated Use `showAppWindow('/widget/package', options)` instead, which is more flexible and supports custom routes.\r\n */\r\n openWidgetPackageManagerWindow: () => Promise<void>\r\n\r\n /**\r\n * Open the app's runtime info window\r\n * @deprecated Use `showAppWindow('/setting/info', options)` instead, which is more flexible and supports custom routes.\r\n */\r\n openRuntimeInfoWindow: () => Promise<void>\r\n\r\n /**\r\n * Get the app's icon file path\r\n * @return Promise<string>\r\n */\r\n getIconFile: () => Promise<string>\r\n\r\n /**\r\n * Check if the app is running as Windows Store app (appx)\r\n * @return Promise<boolean>\r\n */\r\n isWindowsStore: () => Promise<boolean>\r\n\r\n /**\r\n * Get app's language, if user has not set, return `navigator.language`\r\n */\r\n getLanguageCode: () => Promise<string>\r\n /**\r\n * Set app's language\r\n * @param code\r\n */\r\n setLanguageCode: (code: LanguageCode) => Promise<void>\r\n /**\r\n * Set app's global proxy settings, set empty string to disable proxy\r\n * @param config\r\n * @example\r\n * ```typescript\r\n * AppApi.setProxy({\r\n * proxyRules:'socks5://127.0.0.1:7890'\r\n * })\r\n * ```\r\n */\r\n setProxy: (config: ProxyConfig) => Promise<void>\r\n getProxy: () => Promise<ProxyConfig>\r\n /**\r\n * Set app's global theme CSS\r\n * @param css\r\n */\r\n setThemeCSS: (css: string) => Promise<void>\r\n\r\n /**\r\n * Get the app's global theme CSS\r\n * @return Promise<string> If the theme CSS is not set, return empty string\r\n */\r\n getThemeCSS: () => Promise<string>\r\n /**\r\n * enable/disable developer mode\r\n */\r\n setDevMode: (enable: boolean) => Promise<void>\r\n /**\r\n * get developer mode is enabled\r\n */\r\n getDevMode: () => Promise<boolean>\r\n\r\n /**\r\n * Get the app's desktop grid system cell size\r\n */\r\n getGridCellSize: () => Promise<number>\r\n\r\n /**\r\n * Set the app's desktop grid system cell size\r\n * @param size\r\n */\r\n setGridCellSize: (size: number) => Promise<void>\r\n\r\n /**\r\n * exit application\r\n */\r\n exit: () => Promise<void>\r\n}\r\n\r\nexport type AppApiMethods = keyof IAppApi\r\n\r\n/**\r\n * AppApiEvent\r\n */\r\nexport enum AppApiEvent {\r\n /**\r\n * 应用设置变更时触发\r\n */\r\n CONFIG_CHANGED = 'event::cn.widgetjs.core.app.config.changed',\r\n /**\r\n * 桌面组件网格窗口移动时触发\r\n */\r\n MOVING_GRID_WINDOW = 'event::cn.widgetjs.core.app.moving.grid.window',\r\n /**\r\n * 桌面组件网格窗口停止移动时触发\r\n */\r\n STOP_MOVING_GRID_WINDOW = 'event::cn.widgetjs.core.app.moving.grid.window.stop',\r\n /**\r\n * 应用代理发生变化\r\n */\r\n PROXY_CHANGED = 'event::cn.widgetjs.core.app.proxy.changed',\r\n /**\r\n * 应用语言发生变化\r\n */\r\n LANGUAGE_CHANGED = 'event::cn.widgetjs.core.app.language.changed',\r\n}\r\n\r\n/**\r\n * AppApiConstants\r\n */\r\nexport enum AppApiConstants {\r\n /**\r\n * 桌面组件网格大小\r\n */\r\n CONFIG_GRID_CELL_SIZE = 'cn.widgetjs.config.grid.size',\r\n /**\r\n * 应用主题CSS设置\r\n */\r\n CONFIG_WIDGET_THEME_CSS = 'cn.widgetjs.config.widget.theme.css',\r\n /**\r\n * 应用全局代理设置\r\n */\r\n CONFIG_PROXY = 'cn.widgetjs.config.app.proxy',\r\n CONFIG_DEV_MODE = 'cn.widgetjs.config.app.dev.mode',\r\n /**\r\n * 应用语言设置\r\n */\r\n CONFIG_LANGUAGE = 'cn.widgetjs.config.app.language',\r\n}\r\n","import type { RemotePackageUrlInfo, WidgetPackage } from '../../model'\r\n\r\n/**\r\n * WidgetPackageApi 提供了组件包的升级、获取、安装等功能\r\n */\r\nexport interface IWidgetPackageApi {\r\n /**\r\n * 升级组件包\r\n * @param packageName 组件包名称\r\n * @param remoteUrlInfo\r\n */\r\n upgrade: (packageName: string, remoteUrlInfo: RemotePackageUrlInfo) => Promise<void>\r\n /**\r\n * 获取组件包的首页url信息\r\n * @param packageName\r\n */\r\n getIndexUrl: (packageName: string) => Promise<string | null>\r\n /**\r\n * 获取组件包入口url信息\r\n * @param packageName\r\n */\r\n getEntryUrl: (packageName: string) => Promise<string | null>\r\n /**\r\n * 通过包名获取组件包信息\r\n * @param name\r\n */\r\n getPackage: (name: string) => Promise<WidgetPackage | undefined>\r\n /**\r\n * 获取已经安装的组件包\r\n */\r\n getPackages: () => Promise<WidgetPackage[]>\r\n /**\r\n * Install a widget package, if the package is a string, it will be treated as a path or http url to install the widget.zip file.\r\n * @param widgetPackage\r\n */\r\n install: (widgetPackage: WidgetPackage | string) => Promise<void>\r\n\r\n /**\r\n * Uninstall a widget package by package name.\r\n * @param packageName\r\n * @param clearData Whether to clear the data of the widget package, default is false.\r\n */\r\n uninstall: (widgetPackage: WidgetPackage | string, clearData?: boolean) => Promise<void>\r\n}\r\n\r\nexport type WidgetPackageApiMethods = keyof IWidgetPackageApi\r\n\r\n/**\r\n * WidgetPackageApiEvent\r\n */\r\nexport enum WidgetPackageApiEvent {\r\n /**\r\n * 组件包升级事件\r\n */\r\n PACKAGE_UPGRADE = 'event::cn.widgetjs.core.widget.package.upgraded',\r\n /**\r\n * 组件包安装事件\r\n */\r\n PACKAGE_INSTALLED = 'event::cn.widgetjs.core.widget.package.installed',\r\n}\r\n","import type { Rectangle } from '../structures'\r\n\r\n/**\r\n * MouseApi\r\n */\r\nexport interface IMouseApi {\r\n\r\n /**\r\n * Create a mouse screen edge hotspot, usually used for edge-hiding windows.\r\n * @param rect\r\n */\r\n createHotspot: (rect: Rectangle) => Promise<void>\r\n /**\r\n * Remove the mouse screen edge hotspot.\r\n */\r\n removeHotspot: () => Promise<void>\r\n}\r\n\r\n/**\r\n * SystemApiEvent\r\n */\r\nexport enum MouseApiEvent {\r\n /**\r\n * Triggered when the mouse enters the hotspot area.\r\n */\r\n HOTSPOT_ACTIVE = 'event::cn.widgetjs.core.mouse.hotspot.active',\r\n}\r\n\r\nexport type MouseApiMethods = keyof IMouseApi\r\n","import type { WidgetMenuItem } from '../MenuApi'\r\nimport type { Point, Rectangle } from '../structures'\r\n\r\n/**\r\n * Options for creating or updating a system tray icon.\r\n *\r\n * - `image` must be a path relative to the public (static) directory served by the app.\r\n * - Leading slash is recommended (e.g. `/favicon.ico`).\r\n * - Prefer platform-appropriate formats (e.g. `.ico` on Windows, `.png` on macOS/Linux).\r\n */\r\nexport interface AddTrayOptions {\r\n /**\r\n * Image path (relative to public path) used as the tray icon.\r\n * @example /favicon.ico\r\n */\r\n image: string\r\n /**\r\n * Optional tooltip text shown when hovering the tray icon.\r\n * Keep it short — many platforms truncate long tooltips.\r\n */\r\n tooltip?: string\r\n}\r\n\r\nexport interface DisplayBalloonOptions {\r\n /**\r\n * Icon to use when `iconType` is `custom`.\r\n */\r\n icon?: any | string\r\n /**\r\n * Can be `none`, `info`, `warning`, `error` or `custom`. Default is `custom`.\r\n */\r\n iconType?: 'none' | 'info' | 'warning' | 'error' | 'custom'\r\n title: string\r\n content: string\r\n /**\r\n * The large version of the icon should be used. Default is `true`. Maps to\r\n * `NIIF_LARGE_ICON`.\r\n */\r\n largeIcon?: boolean\r\n /**\r\n * Do not play the associated sound. Default is `false`. Maps to `NIIF_NOSOUND`.\r\n */\r\n noSound?: boolean\r\n /**\r\n * Do not display the balloon notification if the current user is in \"quiet time\".\r\n * Default is `false`. Maps to `NIIF_RESPECT_QUIET_TIME`.\r\n */\r\n respectQuietTime?: boolean\r\n}\r\n\r\n/**\r\n * ITrayApi\r\n *\r\n * API for interacting with the native system tray / status bar icon.\r\n * All methods return a Promise and should be awaited in callers where timing matters.\r\n */\r\nexport interface ITrayApi {\r\n /**\r\n * Create or update the tray icon with given options.\r\n * Resolves once the native tray object is created/updated.\r\n * @param options AddTrayOptions - image and optional tooltip\r\n */\r\n setTray: (options: AddTrayOptions) => Promise<void>\r\n\r\n /**\r\n * Remove the tray icon and free native resources.\r\n * Resolves when the tray has been removed.\r\n */\r\n removeTray: () => Promise<void>\r\n\r\n /**\r\n * Displays a balloon notification.\r\n * @param options DisplayBalloonOptions\r\n */\r\n displayBalloon: (options: DisplayBalloonOptions) => Promise<void>\r\n\r\n /**\r\n * Removes a balloon notification.\r\n */\r\n removeBalloon: () => Promise<void>\r\n\r\n /**\r\n * Set the context menu for the tray icon.\r\n * Replaces any previously set menu.\r\n * @param menus Array of WidgetMenuItem describing the menu structure\r\n */\r\n setContextMenu: (menus: WidgetMenuItem[]) => Promise<void>\r\n\r\n /**\r\n * Close any open context menu for the tray (if supported by the platform).\r\n */\r\n closeContextMenu: () => Promise<void>\r\n\r\n /**\r\n * Programmatically pop up a context menu at the optional screen position.\r\n * On some platforms the position may be ignored.\r\n * @param menus menu items to show\r\n * @param position optional screen point where the menu should appear\r\n */\r\n popUpContextMenu: (menus: WidgetMenuItem[], position?: Point) => Promise<void>\r\n\r\n /**\r\n * Returns whether the underlying native tray object has been destroyed.\r\n * Useful to check before calling other tray methods.\r\n */\r\n isDestroyed: () => Promise<boolean>\r\n\r\n /**\r\n * Get the bounds of the tray icon on screen.\r\n * Returns a Rectangle when available, or `null` if the bounds cannot be determined\r\n * on the current platform or if the tray is not present.\r\n */\r\n getBounds: () => Promise<Rectangle | null>\r\n\r\n /**\r\n * Bring the application to the foreground or focus the window associated with the tray.\r\n * Exact behavior depends on platform and application window state.\r\n */\r\n focus: () => Promise<void>\r\n}\r\n\r\n/**\r\n * TrayApiEvent\r\n *\r\n * Events emitted from the tray icon. Channels are stable strings used for internal\r\n * event routing; subscribers should listen to these channels to react to user\r\n * interactions with the tray icon.\r\n */\r\nexport enum TrayApiEvent {\r\n /**\r\n * Emitted when the tray icon is clicked (usually left-button click).\r\n * Channel: 'channel::cn.widgetjs.core.tray.click'\r\n */\r\n CLICK = 'channel::cn.widgetjs.core.tray.click',\r\n\r\n /**\r\n * Emitted when the tray icon receives a right-button click.\r\n * Channel: 'channel::cn.widgetjs.core.tray.right-click'\r\n */\r\n RIGHT_CLICK = 'channel::cn.widgetjs.core.tray.right-click',\r\n\r\n /**\r\n * Emitted when the tray icon receives a middle-button click (if supported).\r\n * Channel: 'channel::cn.widgetjs.core.tray.middle-click'\r\n */\r\n MIDDLE_CLICK = 'channel::cn.widgetjs.core.tray.middle-click',\r\n\r\n /**\r\n * Emitted when the mouse pointer enters the tray icon area (hover start).\r\n * Channel: 'channel::cn.widgetjs.core.tray.mouse-enter'\r\n */\r\n MOUSE_ENTER = 'channel::cn.widgetjs.core.tray.mouse-enter',\r\n\r\n /**\r\n * Emitted when the mouse pointer leaves the tray icon area (hover end).\r\n * Channel: 'channel::cn.widgetjs.core.tray.mouse-leave'\r\n */\r\n MOUSE_LEAVE = 'channel::cn.widgetjs.core.tray.mouse-leave',\r\n}\r\n\r\nexport type TrayApiMethods = keyof ITrayApi\r\n","import type { AuthSession, AuthUser } from '@supabase/supabase-js'\r\n\r\nexport interface IUserApi {\r\n /**\r\n * Login with user info.\r\n * @param token\r\n */\r\n login: (session: AuthSession) => Promise<void>\r\n\r\n /**\r\n * Clear user auth token and user info.\r\n */\r\n logout: () => Promise<void>\r\n\r\n /**\r\n * Get current logged in user info. If no user is logged in, return null.\r\n */\r\n getUser: () => Promise<AuthUser | null>\r\n\r\n updateSession: (session: AuthSession) => Promise<void>\r\n\r\n getSession: () => Promise<AuthSession | null>\r\n\r\n updateUser: (user: AuthUser) => Promise<void>\r\n}\r\n\r\n/**\r\n * ShortcutApiEvent\r\n */\r\nexport enum UserApiEvent {\r\n /**\r\n * 快捷键触发事件\r\n */\r\n USER_UPDATED = `channel::cn.widgetjs.core.user.updated`,\r\n SIGNED_OUT = `channel::cn.widgetjs.core.user.signed.out`,\r\n SIGNED_IN = `channel::cn.widgetjs.core.user.signed.in`,\r\n TOKEN_REFRESHED = `channel::cn.widgetjs.core.user.token.refreshed`,\r\n}\r\n\r\nexport type UserApiMethods = keyof IUserApi\r\n","export interface AiConfig {\r\n id: string\r\n model: string\r\n apiKey: string\r\n apiBaseUrl: string\r\n}\r\n\r\nexport interface IAiApi {\r\n addConfig(config: AiConfig): Promise<AiConfig>\r\n deleteConfig(id: string): Promise<void>\r\n updateConfig(config: AiConfig): Promise<void>\r\n getConfigList(): Promise<AiConfig[]>\r\n setConfigList(configs: AiConfig[]): Promise<void>\r\n getConfig(id: string): Promise<AiConfig | undefined>\r\n}\r\n/**\r\n * AiApiEvent\r\n */\r\nexport enum AiApiEvent {\r\n /**\r\n * 配置更新事件\r\n */\r\n CONFIG_UPDATED = `channel::cn.widgetjs.core.ai.config.updated`,\r\n}\r\nexport type AiApiMethods = keyof IAiApi\r\n","import { Channel } from './Channel'\r\nimport { BaseApi } from './BaseApi'\r\nimport type { ILogApi, LogApiMethods } from './interface'\r\n\r\nclass LogApiImpl extends BaseApi<LogApiMethods> implements ILogApi {\r\n getChannel(): string {\r\n return Channel.LOG\r\n }\r\n\r\n info(...data: any[]) {\r\n // eslint-disable-next-line no-console\r\n console.log(...data)\r\n this.invokeMethod('info', ...data)\r\n }\r\n\r\n error(...data: any[]) {\r\n console.error(...data)\r\n this.invokeMethod('error', ...data)\r\n }\r\n\r\n warn(...data: any[]) {\r\n console.warn(...data)\r\n this.invokeMethod('warn', ...data)\r\n }\r\n\r\n log(...data: any[]) {\r\n // eslint-disable-next-line no-console\r\n console.log(...data)\r\n this.invokeMethod('log', ...data)\r\n }\r\n\r\n json(data: any): void {\r\n const json = JSON.stringify(data, null, 2)\r\n this.log(json)\r\n }\r\n}\r\n\r\nconst LogApi: ILogApi = new LogApiImpl()\r\nexport { LogApi }\r\n","import { BaseApi } from './BaseApi'\r\nimport { Channel } from './Channel'\r\nimport type { IMenuApi } from './interface/IMenuApi'\r\nimport { ShowMenuOption } from './interface/IMenuApi'\r\n\r\n/**\r\n * @see [MenuItem](https://www.electronjs.org/docs/api/menu-item)\r\n */\r\ninterface WidgetMenuItem {\r\n /**\r\n * Menu ID\r\n */\r\n id: string\r\n /**\r\n * Menu type\r\n */\r\n type?: 'normal' | 'separator' | 'submenu' | 'checkbox' | 'radio'\r\n /**\r\n * Label\r\n */\r\n label: string\r\n /**\r\n * Sublabel\r\n */\r\n sublabel?: string\r\n /**\r\n * Whether the item is enabled\r\n */\r\n enabled?: boolean\r\n /**\r\n * Whether the item is visible\r\n */\r\n visible?: boolean\r\n /**\r\n * Whether the item is checked\r\n */\r\n checked?: boolean\r\n /**\r\n * Submenu items\r\n */\r\n submenu?: Omit<WidgetMenuItem, 'submenu'>[]\r\n /**\r\n * Insert before specific menu items\r\n */\r\n before?: string[]\r\n /**\r\n * Insert after specific menu items\r\n */\r\n after?: string[]\r\n}\r\n\r\nenum MenuApiEvent {\r\n ITEM_CLICK = 'event::cn.widgetjs.core.menu.item.click',\r\n}\r\n\r\ntype MenuApiMethods = keyof IMenuApi\r\n\r\nclass MenuApiImpl extends BaseApi<MenuApiMethods> implements IMenuApi {\r\n getChannel(): string {\r\n return Channel.MENU\r\n }\r\n\r\n /**\r\n * Add items to the context menu\r\n * @param menuItems The menu items to add\r\n */\r\n addContextMenuItem(menuItems: WidgetMenuItem[]): Promise<void> {\r\n return this.invokeMethod('addContextMenuItem', menuItems)\r\n }\r\n\r\n /**\r\n * Add items to the application menu\r\n * @param menuItems The menu items to add\r\n */\r\n addMenuItem(menuItems: WidgetMenuItem[]): Promise<void> {\r\n return this.invokeMethod('addMenuItem', menuItems)\r\n }\r\n\r\n /**\r\n * Show a menu programmatically\r\n * @param options The options for showing the menu\r\n */\r\n showMenu(options: ShowMenuOption): Promise<void> {\r\n return this.invokeMethod('showMenu', options)\r\n }\r\n\r\n /**\r\n * Remove items from the application menu\r\n * @param menuItemIds The IDs of the menu items to remove\r\n */\r\n removeMenuItem(menuItemIds: string[]): Promise<void> {\r\n return this.invokeMethod('removeMenuItem', menuItemIds)\r\n }\r\n\r\n /**\r\n * Remove items from the context menu\r\n * @param menuItemIds The IDs of the menu items to remove\r\n */\r\n removeContextMenuItem(menuItemIds: string[]): Promise<void> {\r\n return this.invokeMethod('removeContextMenuItem', menuItemIds)\r\n }\r\n}\r\n\r\nconst MenuApi: IMenuApi = new MenuApiImpl()\r\nexport { MenuApiMethods, MenuApi, MenuApiEvent, WidgetMenuItem, ShowMenuOption }\r\n","import type { Rectangle } from '../model/electron'\r\nimport { Channel } from './Channel'\r\nimport { BaseApi } from './BaseApi'\r\nimport type { IMouseApi, MouseApiMethods } from './interface'\r\n\r\nclass MouseApiImpl extends BaseApi<MouseApiMethods> implements IMouseApi {\r\n getChannel(): string {\r\n return Channel.MOUSE\r\n }\r\n\r\n removeHotspot(): Promise<void> {\r\n return this.invokeMethod('removeHotspot')\r\n }\r\n\r\n createHotspot(rect: Rectangle): Promise<void> {\r\n return this.invokeMethod('createHotspot', rect)\r\n }\r\n}\r\n\r\nexport const MouseApi: IMouseApi = new MouseApiImpl()\r\n","import type { ReminderNotificationOption } from '../model/AppNotification'\r\nimport { AppNotification, AppReminderNotification } from '../model/AppNotification'\r\nimport { Channel } from './Channel'\r\nimport { BaseApi } from './BaseApi'\r\nimport type { INotificationApi } from './interface/INotificationApi'\r\n\r\ntype NotificationApiMethods = keyof INotificationApi\r\n\r\nenum NotificationApiEvent {\r\n CONFIRM = 'event::cn.widgetjs.core.notification.confirm',\r\n CANCEL = 'event::cn.widgetjs.core.notification.cancel',\r\n HIDE = 'event::cn.widgetjs.core.notification.hide',\r\n}\r\n\r\nclass NotificationApiImpl extends BaseApi<NotificationApiMethods> implements INotificationApi {\r\n // static async url(url: string, duration: number = -1) {\r\n // this.invoke(Channel.NOTIFICATION, new AppNotification({\r\n // url, message: \"\",\r\n // duration,\r\n // type: \"url\",\r\n // }));\r\n // }\r\n\r\n /**\r\n * 来电\r\n * @param avatar 头像地址\r\n * @param audio 音频地址\r\n * @param title 标题文件\r\n * @param message 初始消息\r\n * @param lyric 歌词字符串\r\n */\r\n async call(avatar: string, audio: string, title: string, message: string, lyric: string) {\r\n await this.invoke(new AppNotification({\r\n avatar,\r\n audio,\r\n message,\r\n title,\r\n duration: -1,\r\n lyric,\r\n type: 'call',\r\n }))\r\n }\r\n\r\n async send(notification: AppNotification) {\r\n return this.invokeMethod('send', notification)\r\n }\r\n\r\n async reminder(option: ReminderNotificationOption) {\r\n return await this.send(new AppReminderNotification(option))\r\n }\r\n\r\n async advanceCountdown(message: string, targetTime: string, title?: string) {\r\n return await this.send(new AppNotification({\r\n title,\r\n message,\r\n targetTime,\r\n type: 'advance-countdown',\r\n }))\r\n }\r\n\r\n async countdown(message: string, targetTime: string) {\r\n await this.send(new AppNotification({\r\n message,\r\n targetTime,\r\n backgroundColor: 'rgba(0,0,0,0.5)',\r\n duration: -1,\r\n type: 'countdown',\r\n }))\r\n }\r\n\r\n async success(message: string, duration: number = 5000) {\r\n await this.send(new AppNotification({\r\n message,\r\n type: 'success',\r\n icon: 'check-one',\r\n duration,\r\n }))\r\n }\r\n\r\n async error(message: string, duration: number = 5000) {\r\n await this.send(new AppNotification({\r\n message,\r\n type: 'error',\r\n icon: 'close-one',\r\n duration,\r\n }))\r\n }\r\n\r\n async warning(message: string, duration: number = 5000) {\r\n await this.send(new AppNotification({\r\n message,\r\n type: 'warning',\r\n icon: 'attention',\r\n duration,\r\n }))\r\n }\r\n\r\n async info(message: string, duration: number = 5000) {\r\n await this.send(new AppNotification({\r\n message,\r\n type: 'info',\r\n icon: 'info',\r\n duration,\r\n }))\r\n }\r\n\r\n /**\r\n * 隐藏通知\r\n */\r\n async hide() {\r\n await this.invokeMethod('hide')\r\n }\r\n\r\n getChannel(): string {\r\n return Channel.NOTIFICATION\r\n }\r\n}\r\n\r\nconst NotificationApi: NotificationApiImpl = new NotificationApiImpl()\r\nexport { NotificationApi, NotificationApiMethods, NotificationApiEvent }\r\n","import type { IProcessApi, ProcessApiMethods } from './interface/IProcessApi'\r\nimport { BaseApi } from './BaseApi'\r\nimport { Channel } from './Channel'\r\n\r\nclass ProcessApiImpl extends BaseApi<ProcessApiMethods> implements IProcessApi {\r\n getChannel(): string {\r\n return Channel.PROCESS\r\n }\r\n\r\n getBlinkMemoryInfo(): Promise<Electron.BlinkMemoryInfo> {\r\n return this.invokeMethod('getBlinkMemoryInfo')\r\n }\r\n\r\n getHeapStatistics(): Promise<Electron.HeapStatistics> {\r\n return this.invokeMethod('getHeapStatistics')\r\n }\r\n\r\n getProcessMemoryInfo(): Promise<Electron.ProcessMemoryInfo> {\r\n return this.invokeMethod('getProcessMemoryInfo')\r\n }\r\n\r\n getSystemVersion(): Promise<string> {\r\n return this.invokeMethod('getSystemVersion')\r\n }\r\n}\r\n\r\nconst ProcessApi: IProcessApi = new ProcessApiImpl()\r\n\r\nexport { ProcessApi }\r\n","/**\r\n * ShortcutApi 提供了注册快捷键的能力,当快捷键被触发时,会发送广播事件 {@link BroadcastEvent}\r\n */\r\nexport interface IShortcutApi {\r\n /**\r\n * 注册快捷键, 如果注册成功, 触发快捷键时,会发送广播事件 {@link BroadcastEvent}\r\n * @see [Electron Accelerator](https://www.electronjs.org/docs/latest/api/accelerator)\r\n * @param shortcut string\r\n * @return Promise<boolean> true 注册成功,false 注册失败\r\n * @example\r\n * ```typescript\r\n * //Meta 通常为windows键\r\n * ShortcutApi.register('Ctrl+Meta+Y')\r\n * ```\r\n */\r\n register: (shortcut: string) => Promise<boolean>\r\n\r\n /**\r\n * 注销快捷键\r\n * @param shortcut string\r\n * @example\r\n * ```typescript\r\n * //Meta 通常为windows键\r\n * ShortcutApi.unregister('Ctrl+Meta+Y')\r\n * ```\r\n */\r\n unregister: (shortcut: string) => void\r\n}\r\n\r\n/**\r\n * ShortcutApiEvent\r\n */\r\nexport enum ShortcutApiEvent {\r\n /**\r\n * 快捷键触发事件\r\n */\r\n TRIGGERED = 'channel::cn.widgetjs.core.shortcut.triggered',\r\n}\r\n","import type { IShortcutApi } from './interface/IShortcutApi'\r\nimport { BaseApi } from './BaseApi'\r\nimport { Channel } from './Channel'\r\nimport { ShortcutApiEvent } from './interface/IShortcutApi'\r\n\r\ntype ShortcutApiMethods = keyof IShortcutApi\r\n\r\nclass ShortcutApiImpl extends BaseApi<ShortcutApiMethods> implements IShortcutApi {\r\n getChannel(): string {\r\n return Channel.SHORTCUT\r\n }\r\n\r\n async register(shortcut: string): Promise<boolean> {\r\n return await this.invokeMethod('register', shortcut)\r\n }\r\n\r\n async unregister(shortcut: string) {\r\n return await this.invokeMethod('unregister', shortcut)\r\n }\r\n}\r\n\r\nconst ShortcutApi: IShortcutApi = new ShortcutApiImpl()\r\nexport { ShortcutApi, ShortcutApiEvent, ShortcutApiMethods }\r\n","import type { IStorageApi } from './interface/IStorageApi'\r\nimport { BaseApi } from './BaseApi'\r\nimport { Channel } from './Channel'\r\n\r\ntype BaseType = string | number | boolean\r\n\r\n/**\r\n * @deprecated\r\n */\r\ninterface IStoreApi extends IStorageApi {\r\n\r\n}\r\n\r\ntype StoreApiMethods = keyof IStorageApi\r\ntype StorageApiMethods = keyof IStorageApi\r\n\r\nclass StorageApiImpl extends BaseApi<StoreApiMethods> implements IStorageApi {\r\n getChannel(): string {\r\n return Channel.STORE\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n return this.invokeMethod('delete', key)\r\n }\r\n\r\n async get<T extends BaseType>(key: string, defaultValue?: T): Promise<T | null> {\r\n const result = await this.invokeMethod('get', key)\r\n if (result == null && defaultValue != undefined) {\r\n return defaultValue\r\n }\r\n return result\r\n }\r\n\r\n async getObject<T>(key: string, defaultValue?: T): Promise<T | undefined> {\r\n const result = await this.invokeMethod('get', key)\r\n if (result) {\r\n return JSON.parse(result)\r\n }\r\n if (defaultValue != undefined) {\r\n return defaultValue\r\n }\r\n return undefined\r\n }\r\n\r\n async set(key: string, value: BaseType | object): Promise<string> {\r\n if (typeof value == 'object') {\r\n return this.invokeMethod('set', key, JSON.stringify(value))\r\n }\r\n return this.invokeMethod('set', key, value)\r\n }\r\n\r\n decryptString(value: string): Promise<string> {\r\n return this.invokeMethod('decryptString', value)\r\n }\r\n\r\n decryptGet(key: string, defaultValue?: string): Promise<string | undefined> {\r\n return this.invokeMethod('decryptGet', key, defaultValue)\r\n }\r\n\r\n encryptSet(key: string, value: string): Promise<string> {\r\n return this.invokeMethod('encryptSet', key, value)\r\n }\r\n\r\n encryptString(value: string): Promise<string> {\r\n return this.invokeMethod('encryptString', value)\r\n }\r\n}\r\n\r\nconst StorageApi: IStorageApi = new StorageApiImpl()\r\n/**\r\n * @deprecated\r\n */\r\nconst StoreApi: IStoreApi = new StorageApiImpl()\r\nexport { StorageApi, StorageApiMethods, StoreApi, StoreApiMethods }\r\n","export enum Gravity {\r\n TOP = 'TOP', LEFT = 'LEFT', RIGHT = 'RIGHT', BOTTOM = 'BOTTOM',\r\n}\r\n","/**\r\n *\r\n * SystemApi provides functionality for retrieving system information or interacting with the system.\r\n */\r\nexport interface ISystemApi {\r\n /**\r\n * Get system wallpaper absolute path\r\n */\r\n getWallpaper: () => Promise<string>\r\n\r\n /**\r\n * Get system information based on the provided valuesObject. The valuesObject can contain specific keys to retrieve certain information.\r\n * @param valuesObject\r\n * @see https://systeminformation.io/general.html\r\n */\r\n getInfo: (valuesObject: any) => Promise<any>\r\n\r\n /**\r\n * Get system uptime in seconds\r\n * @return Promise<number>\r\n */\r\n getUptime: () => Promise<number>\r\n\r\n /**\r\n * Launches the full product details page (PDP) for a product at Microsoft Store.\r\n * @see https://learn.microsoft.com/en-us/windows/apps/develop/launch/launch-store-app\r\n * @param storeId\r\n */\r\n launchStoreDetailsPage: (storeId?: string) => Promise<void>\r\n\r\n /**\r\n * @see https://learn.microsoft.com/en-us/windows/apps/develop/launch/launch-settings-app\r\n * @param uri Use this URI scheme to launch the Windows Settings app to specific settings pages.\r\n * @example ms-settings:defaultapps\r\n * @example ms-settings:startupapps\r\n */\r\n launchWindowsSettings: (uri: string) => Promise<void>\r\n}\r\n\r\n/**\r\n * SystemApiEvent\r\n */\r\nexport enum SystemApiEvent {\r\n /**\r\n * Date changed event\r\n */\r\n DATE_CHANGED = 'event::cn.widgetjs.core.sys.date.changed',\r\n}\r\n","import type { ISystemApi } from './interface/ISystemApi'\nimport { BaseApi } from './BaseApi'\nimport { Channel } from './Channel'\nimport { SystemApiEvent } from './interface/ISystemApi'\n\ntype SystemApiMethods = keyof ISystemApi\nclass SystemApiImpl extends BaseApi<SystemApiMethods> implements ISystemApi {\n launchWindowsSettings(uri: string): Promise<void> {\n return this.invokeMethod('launchWindowsSettings', uri)\n }\n\n launchStoreDetailsPage(storeId?: string): Promise<void> {\n return this.invokeMethod('launchStoreDetailsPage', storeId ?? '9NPR50GQ7T53')\n }\n\n getChannel(): string {\n return Channel.SYSTEM\n }\n\n getWallpaper(): Promise<string> {\n return this.invokeMethod('getWallpaper')\n }\n\n getInfo(valuesObject: any): Promise<any> {\n return this.invokeMethod('getInfo', valuesObject)\n }\n\n getUptime(): Promise<number> {\n return this.invokeMethod('getUptime')\n }\n}\n\nconst SystemApi: ISystemApi = new SystemApiImpl()\n\nexport { SystemApi, SystemApiEvent, SystemApiMethods }\n","import type { AddTrayOptions, DisplayBalloonOptions, ITrayApi } from './interface/ITrayApi'\r\nimport type { WidgetMenuItem } from './MenuApi'\r\nimport type { Point, Rectangle } from './structures'\r\nimport { BaseApi } from './BaseApi'\r\nimport { Channel } from './Channel'\r\nimport { TrayApiEvent } from './interface/ITrayApi'\r\n\r\ntype TrayApiMethods = keyof ITrayApi\r\n\r\nclass TrayApiImpl extends BaseApi<TrayApiMethods> implements ITrayApi {\r\n getChannel(): string {\r\n return Channel.TRAY\r\n }\r\n\r\n setTray(options: AddTrayOptions): Promise<void> {\r\n return this.invokeMethod('setTray', options)\r\n }\r\n\r\n removeTray(): Promise<void> {\r\n return this.invokeMethod('removeTray')\r\n }\r\n\r\n displayBalloon(options: DisplayBalloonOptions): Promise<void> {\r\n return this.invokeMethod('displayBalloon', options)\r\n }\r\n\r\n removeBalloon(): Promise<void> {\r\n return this.invokeMethod('removeBalloon')\r\n }\r\n\r\n setContextMenu(menus: WidgetMenuItem[]): Promise<void> {\r\n return this.invokeMethod('setContextMenu', menus)\r\n }\r\n\r\n closeContextMenu(): Promise<void> {\r\n return this.invokeMethod('closeContextMenu')\r\n }\r\n\r\n popUpContextMenu(menus: WidgetMenuItem[], position?: Point): Promise<void> {\r\n return this.invokeMethod('popUpContextMenu', menus, position)\r\n }\r\n\r\n isDestroyed(): Promise<boolean> {\r\n return this.invokeMethod('isDestroyed')\r\n }\r\n\r\n getBounds(): Promise<Rectangle | null> {\r\n return this.invokeMethod('getBounds')\r\n }\r\n\r\n focus(): Promise<void> {\r\n return this.invokeMethod('focus')\r\n }\r\n}\r\n\r\nconst TrayApi: ITrayApi = new TrayApiImpl()\r\nexport { AddTrayOptions, DisplayBalloonOptions, TrayApi, TrayApiEvent }\r\n","import type { AuthSession, AuthUser } from '@supabase/supabase-js'\r\nimport type { IUserApi } from './interface'\r\nimport { BaseApi } from './BaseApi'\r\nimport { Channel } from './Channel'\r\n\r\nclass UserApiImpl extends BaseApi<keyof IUserApi> implements IUserApi {\r\n async getSession(): Promise<AuthSession | null> {\r\n return await this.invokeMethod('getSession')\r\n }\r\n\r\n async updateSession(session: AuthSession) {\r\n await this.invokeMethod('updateSession', session)\r\n }\r\n\r\n async updateUser(user: AuthUser) {\r\n await this.invokeMethod('updateUser', user)\r\n }\r\n\r\n async login(session: AuthSession) {\r\n await this.invokeMethod('login', session)\r\n }\r\n\r\n async logout() {\r\n await this.invokeMethod('logout')\r\n }\r\n\r\n async getUser(): Promise<AuthUser | null> {\r\n return await this.invokeMethod('getUser')\r\n }\r\n\r\n getChannel(): string {\r\n return Channel.USER\r\n }\r\n}\r\n\r\nconst UserApi: IUserApi = new UserApiImpl()\r\n\r\nexport { UserApi }\r\n","import type { WidgetSyncInfo } from '../model'\r\nimport type { DeployMode } from '../model/DeployMode'\r\nimport type { IWidgetApi } from './interface/IWidgetApi'\r\nimport { Widget } from '../model/Widget'\r\nimport { WidgetPackage } from '../model/WidgetPackage'\r\nimport { BaseApi } from './BaseApi'\r\nimport { Channel } from './Channel'\r\n\r\ntype WidgetApiMethods = keyof IWidgetApi\r\n\r\nenum WidgetApiEvent {\r\n DATA_CHANGED = 'event::cn.widgetjs.core.widget.data-changed',\r\n EDIT_DESKTOP_WIDGETS = 'event::cn.widgetjs.core.widget.desktop.edit',\r\n PACKAGE_UPGRADE = 'event::cn.widgetjs.core.widget.package.upgraded',\r\n PACKAGE_INSTALLED = 'event::cn.widgetjs.core.widget.package.installed',\r\n}\r\n\r\nclass WidgetApiImpl extends BaseApi<WidgetApiMethods> implements IWidgetApi {\r\n getSyncInfo(widgetName?: string): Promise<WidgetSyncInfo | null> {\r\n return this.invokeMethod('getSyncInfo', widgetName)\r\n }\r\n\r\n updateSyncInfo(): Promise<void> {\r\n return this.invokeMethod('updateSyncInfo')\r\n }\r\n\r\n reload(id?: string): Promise<void> {\r\n return this.invokeMethod('reload', id)\r\n }\r\n\r\n getChannel(): string {\r\n return Channel.WIDGET\r\n }\r\n\r\n async registerWidgets(widgets: Widget[]) {\r\n return this.invokeMethod('registerWidgets', JSON.stringify(widgets))\r\n }\r\n\r\n async registerWidgetPackage(widgetPackage: WidgetPackage) {\r\n return this.invokeMethod('registerWidgetPackage', JSON.stringify(widgetPackage))\r\n }\r\n\r\n async getWidgets(): Promise<Widget[]> {\r\n const data = await this.invokeMethod('getWidgets')\r\n const widgets: Widget[] = []\r\n if (data) {\r\n for (const item of data) {\r\n widgets.push(Widget.parseObject(item))\r\n }\r\n }\r\n return widgets\r\n }\r\n\r\n async openConfigPage(widgetId?: string) {\r\n return this.invokeMethod('openConfigPage', widgetId)\r\n }\r\n\r\n async openConfigPageByName(widgetName: string) {\r\n return this.invokeMethod('openConfigPageByName', widgetName)\r\n }\r\n\r\n /**\r\n * @deprecated\r\n */\r\n async getWidgetPackages(): Promise<WidgetPackage[]> {\r\n return await this.invokeMethod('getWidgetPackages')\r\n }\r\n\r\n /**\r\n *\r\n * @param name package name\r\n */\r\n async getWidget(name: string): Promise<Widget> {\r\n return Widget.parseObject(await this.invokeMethod('getWidget', name))\r\n }\r\n\r\n /**\r\n * @param name package name\r\n * @deprecated\r\n */\r\n async getWidgetPackage(name: string): Promise<WidgetPackage | undefined> {\r\n const result = await this.invokeMethod('getWidgetPackage', name)\r\n if (result) {\r\n return WidgetPackage.parseObject(result)\r\n }\r\n return undefined\r\n }\r\n\r\n async getWidgetPackageUrl(packageName: string): Promise<string | null> {\r\n const widgetPackage = await this.getWidgetPackage(packageName!)\r\n if (!widgetPackage) {\r\n return null\r\n }\r\n return widgetPackage.url\r\n }\r\n\r\n async upgradePackage(packageName: string): Promise<void> {\r\n return await this.invokeMethod('upgradePackage', packageName)\r\n }\r\n\r\n /**\r\n * 阻止拖动窗口,只能用于悬浮窗口 DeployMode.OVERLAP\r\n * @param draggable\r\n */\r\n setMouseDraggable(draggable: boolean): Promise<void> {\r\n return this.invokeMethod('setMouseDraggable', draggable)\r\n }\r\n\r\n isIgnoreMouseEvents(widgetId: string | undefined): Promise<boolean> {\r\n return this.invokeMethod('isIgnoreMouseEvents', widgetId)\r\n }\r\n\r\n setIgnoreMouseEvents(widgetId: string, ignore: boolean): Promise<void> {\r\n return this.invokeMethod('setIgnoreMouseEvents', widgetId, ignore)\r\n }\r\n\r\n restartWidgets(mode?: DeployMode): Promise<void> {\r\n return this.invokeMethod('restartWidgets', mode)\r\n }\r\n}\r\n\r\nconst WidgetApi = new WidgetApiImpl()\r\nexport { WidgetApi, WidgetApiEvent, WidgetApiMethods }\r\n","import type { WidgetData } from '../model/WidgetData'\r\nimport localforage from 'localforage'\r\nimport { BroadcastEvent } from '../model/event/BroadcastEvent'\r\nimport { BroadcastApi } from './BroadcastApi'\r\nimport { WidgetApiEvent } from './WidgetApi'\r\n\r\nexport interface SaveWidgetOption {\r\n sendBroadcast?: boolean\r\n id?: string\r\n storeName?: string\r\n}\r\n\r\n/**\r\n * 用户处理浏览器数据,只在浏览器环境下有用\r\n * @deprecated\r\n */\r\nexport interface IWidgetDataApi {\r\n findByName: (<T extends WidgetData>(\r\n name: string,\r\n type: {\r\n new (name: string, id?: string): T\r\n },\r\n ) => Promise<T | undefined>) & (<T extends WidgetData>(data: T) => Promise<T | undefined>)\r\n\r\n save: (data: WidgetData, options?: SaveWidgetOption) => Promise<string>\r\n\r\n /**\r\n * 获取组件 LocalForage 存储实例\r\n * @param widgetName 组件名\r\n * @param storeName 存储名\r\n * @see https://localforage.docschina.org/\r\n */\r\n getStore: (widgetName: string, storeName?: string) => LocalForage\r\n\r\n saveByName: <T extends WidgetData>(data: T, options?: SaveWidgetOption) => Promise<string>\r\n\r\n find: <T extends WidgetData>(\r\n name: string,\r\n id: string,\r\n type: {\r\n new (name: string, id?: string): T\r\n },\r\n ) => Promise<T | undefined>\r\n}\r\n\r\ntype WidgetDataApiMethods = keyof IWidgetDataApi\r\n\r\nclass WidgetDataApiImpl implements IWidgetDataApi {\r\n private stores = new Map<string, LocalForage>()\r\n\r\n /**\r\n * 保存组件数据\r\n * @param data\r\n * @param options\r\n */\r\n public async save(data: WidgetData, options: SaveWidgetOption = { sendBroadcast: true }) {\r\n const store = this.getStore(data.name, options.storeName)\r\n const json = JSON.stringify(data)\r\n const result = await store.setItem(this.getKey(data.name, data.id), json)\r\n if (options.sendBroadcast) {\r\n const broadcastEvent = new BroadcastEvent({\r\n event: WidgetApiEvent.DATA_CHANGED,\r\n payload: { name: data.name, json },\r\n })\r\n await BroadcastApi.send(broadcastEvent)\r\n }\r\n return result\r\n }\r\n\r\n public getStore(widgetName: string, storeName?: string): LocalForage {\r\n if (this.stores.has(widgetName)) {\r\n return this.stores.get(widgetName)!\r\n }\r\n const store = localforage.createInstance({ name: widgetName, storeName })\r\n this.stores.set(widgetName, store)\r\n return store\r\n }\r\n\r\n /**\r\n * 通过组件名保存组件信息,通常用于存储可以在同类组件中共用的数据\r\n * @param data\r\n * @param options\r\n */\r\n public async saveByName<T extends WidgetData>(data: T, options: SaveWidgetOption = { sendBroadcast: true }) {\r\n const store = this.getStore(data.name)\r\n const json = JSON.stringify(data)\r\n const result = await store.setItem(data.name, json)\r\n if (options?.sendBroadcast) {\r\n const broadcastEvent = new BroadcastEvent({\r\n event: WidgetApiEvent.DATA_CHANGED,\r\n payload: { name: data.name, json },\r\n })\r\n await BroadcastApi.send(broadcastEvent)\r\n }\r\n return result\r\n }\r\n\r\n public async findByName<T extends WidgetData>(...args: any[]): Promise<T | undefined> {\r\n let name = ''\r\n let dbStr: string | null = ''\r\n let data: T\r\n if (args.length === 2) {\r\n name = args[0]\r\n const Type = args[1]\r\n data = new Type(name)\r\n }\r\n else {\r\n data = args[0] as T\r\n name = data.name\r\n }\r\n const store = this.getStore(name)\r\n dbStr = await store.getItem<string>(name)\r\n if (dbStr) {\r\n data.parseJSON(JSON.parse(dbStr))\r\n return data\r\n }\r\n return undefined\r\n }\r\n\r\n public async find<T extends WidgetData>(\r\n name: string,\r\n id: string,\r\n Type: {\r\n new (name: string, id?: string): T\r\n },\r\n ): Promise<T | undefined> {\r\n const store = this.getStore(name)\r\n const result = await store.getItem<string>(this.getKey(name, id))\r\n if (result) {\r\n const widgetData = new Type(name, id)\r\n widgetData.parseJSON(JSON.parse(result))\r\n return widgetData\r\n }\r\n return undefined\r\n }\r\n\r\n private getKey(name: string, id?: string) {\r\n return `${name}@${id}`\r\n }\r\n}\r\n\r\nconst WidgetDataApi: IWidgetDataApi = new WidgetDataApiImpl()\r\nexport { WidgetDataApi, WidgetDataApiMethods }\r\n","import type { RemotePackageUrlInfo } from '../model/WidgetPackage'\r\nimport type { IWidgetPackageApi } from './interface'\r\nimport { WidgetPackage } from '../model/WidgetPackage'\r\nimport { BaseApi } from './BaseApi'\r\nimport { Channel } from './Channel'\r\nimport { WidgetPackageApiMethods } from './interface'\r\n\r\nclass WidgetPackageApiImpl extends BaseApi<WidgetPackageApiMethods> implements IWidgetPackageApi {\r\n getChannel(): string {\r\n return Channel.WIDGET_PACKAGE\r\n }\r\n\r\n async install(widgetPackage: WidgetPackage | string) {\r\n if (typeof widgetPackage == 'string') {\r\n return this.invokeMethod('install', widgetPackage)\r\n }\r\n return this.invokeMethod('install', JSON.stringify(widgetPackage))\r\n }\r\n\r\n async uninstall(widgetPackage: WidgetPackage | string, clearData?: boolean) {\r\n if (typeof widgetPackage == 'string') {\r\n return this.invokeMethod('uninstall', widgetPackage, clearData)\r\n }\r\n return this.invokeMethod('uninstall', widgetPackage.name, clearData)\r\n }\r\n\r\n upgrade(packageName: string, remoteUrlInfo: RemotePackageUrlInfo): Promise<void> {\r\n return this.invokeMethod('upgrade', packageName, remoteUrlInfo)\r\n }\r\n\r\n /**\r\n *\r\n * @param name package name\r\n */\r\n async getPackage(name: string): Promise<WidgetPackage | undefined> {\r\n const result = await this.invokeMethod('getPackage', name)\r\n if (result) {\r\n return WidgetPackage.parseObject(result)\r\n }\r\n return undefined\r\n }\r\n\r\n async getIndexUrl(packageName: string): Promise<string | null> {\r\n const widgetPackage = await this.getPackage(packageName!)\r\n if (!widgetPackage) {\r\n return null\r\n }\r\n return widgetPackage.url\r\n }\r\n\r\n async getEntryUrl(packageName: string) {\r\n const widgetPackage = await this.getPackage(packageName!)\r\n if (!widgetPackage) {\r\n return null\r\n }\r\n const arr: string[] = []\r\n arr.push(widgetPackage.url)\r\n if (widgetPackage.entry) {\r\n if (!widgetPackage.entry.startsWith('/')) {\r\n arr.push('/')\r\n }\r\n arr.push(widgetPackage.entry)\r\n }\r\n return arr.join('')\r\n }\r\n\r\n async getPackages(): Promise<WidgetPackage[]> {\r\n return await this.invokeMethod('getPackages')\r\n }\r\n}\r\n\r\nconst WidgetPackageApi = new WidgetPackageApiImpl()\r\nexport { WidgetPackageApi, WidgetPackageApiMethods }\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_freeGlobal.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_root.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_Symbol.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_arrayMap.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isArray.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_getRawTag.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_objectToString.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseGetTag.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isObjectLike.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isSymbol.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseToString.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/toString.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseSlice.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_castSlice.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_hasUnicode.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_asciiToArray.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_unicodeToArray.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_stringToArray.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_createCaseFirst.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/upperFirst.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/capitalize.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_arrayReduce.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_basePropertyOf.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_deburrLetter.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/deburr.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_asciiWords.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_hasUnicodeWord.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_unicodeWords.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/words.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_createCompounder.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/camelCase.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/kebabCase.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/snakeCase.js","../src/model/AppNotification.ts","../src/model/AppTheme.ts","../src/model/DeployedPage.ts","../src/model/DeployMode.ts","../src/model/DeployedWidget.ts","../src/model/event/BroadcastEvent.ts","../src/model/event/WebSocketEvent.ts","../src/utils/ElectronUtils.ts","../src/utils/LanguageUtils.ts","../src/utils/WidgetUtils.ts","../src/utils/TimeUtils.ts","../src/utils/WidgetPackageUtils.ts","../src/model/Page.ts","../src/model/SocialInfo.ts","../src/model/Widget.ts","../src/model/WidgetData.ts","../src/model/WidgetTheme.ts","../src/model/WidgetPackage.ts","../src/model/WidgetParams.ts","../src/router/encoding.ts","../src/router/query.ts","../src/lang/LanguageCode.ts","../src/utils/normalizeUrl.ts","../src/grid/GridSystem.ts","../src/api/ApiConstants.ts","../src/api/BaseApi.ts","../src/api/Channel.ts","../src/api/AppApi.ts","../src/api/BroadcastApi.ts","../src/api/BrowserWindowApi.ts","../src/api/ClipboardApi.ts","../src/utils/AppProtocolUtils.ts","../src/api/DeployedWidgetApi.ts","../src/api/DeviceApi.ts","../src/api/DialogApi.ts","../src/api/ElectronApi.ts","../src/api/FileApi.ts","../src/api/HttpApi.ts","../src/api/interface/IAiApi.ts","../src/api/interface/IAppApi.ts","../src/api/interface/IDeployedWidgetApi.ts","../src/api/interface/IMouseApi.ts","../src/api/interface/ITrayApi.ts","../src/api/interface/IUserApi.ts","../src/api/interface/IWidgetPackageApi.ts","../src/api/LogApi.ts","../src/api/MenuApi.ts","../src/api/MouseApi.ts","../src/api/NotificationApi.ts","../src/api/ProcessApi.ts","../src/api/interface/IShortcutApi.ts","../src/api/ShortcutApi.ts","../src/api/StorageApi.ts","../src/api/structures/Gravity.ts","../src/api/interface/ISystemApi.ts","../src/api/SystemApi.ts","../src/api/TrayApi.ts","../src/api/UserApi.ts","../src/api/WidgetApi.ts","../src/api/WidgetDataApi.ts","../src/api/WidgetPackageApi.ts"],"names":["exports","Symbol","isArray","camelCase","kebabCase","snakeCase","NotificationSize","merge","parse","find","HostedMode","DeployMode","WebSocketEventType","WidgetKeyword","import_kebabCase","import_camelCase","value","ThemeMode","Channel","BrowserWindowApiEvent","ClipboardApiEvent","AiApiEvent","AppApiEvent","AppApiConstants","DeployedWidgetApiEvent","MouseApiEvent","TrayApiEvent","UserApiEvent","WidgetPackageApiEvent","MenuApiEvent","NotificationApiEvent","ShortcutApiEvent","Gravity","SystemApiEvent","WidgetApiEvent","localforage"],"mappings":"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AA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAC1E,MAAA,EAAQ,GAAA;AAAA,MAAM,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAC1E,MAAA,EAAQ,GAAA;AAAA,MAAM,MAAA,EAAQ,GAAA;AAAA,MACtB,MAAA,EAAQ,GAAA;AAAA,MAAM,MAAA,EAAQ,GAAA;AAAA,MACtB,MAAA,EAAQ,GAAA;AAAA,MAAM,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAChD,MAAA,EAAQ,GAAA;AAAA,MAAM,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAChD,MAAA,EAAQ,GAAA;AAAA,MAAM,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAChD,MAAA,EAAQ,GAAA;AAAA,MAAM,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAChD,MAAA,EAAQ,GAAA;AAAA,MAAM,MAAA,EAAQ,GAAA;AAAA,MACtB,MAAA,EAAQ,GAAA;AAAA,MAAM,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAC1E,MAAA,EAAQ,GAAA;AAAA,MAAM,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;AAAA,MAC1E,MAAA,EAAQ,GAAA;AAAA,MAAM,MAAA,EAAQ,GAAA;AAAA,MAAK,MAAA,EAAQ,GAAA;A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","file":"index.cjs","sourcesContent":["/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nmodule.exports = baseSlice;\n","var baseSlice = require('./_baseSlice');\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\nmodule.exports = castSlice;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\nmodule.exports = hasUnicode;\n","/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n return string.split('');\n}\n\nmodule.exports = asciiToArray;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n return string.match(reUnicode) || [];\n}\n\nmodule.exports = unicodeToArray;\n","var asciiToArray = require('./_asciiToArray'),\n hasUnicode = require('./_hasUnicode'),\n unicodeToArray = require('./_unicodeToArray');\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n}\n\nmodule.exports = stringToArray;\n","var castSlice = require('./_castSlice'),\n hasUnicode = require('./_hasUnicode'),\n stringToArray = require('./_stringToArray'),\n toString = require('./toString');\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n}\n\nmodule.exports = createCaseFirst;\n","var createCaseFirst = require('./_createCaseFirst');\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\nmodule.exports = upperFirst;\n","var toString = require('./toString'),\n upperFirst = require('./upperFirst');\n\n/**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\nfunction capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n}\n\nmodule.exports = capitalize;\n","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nmodule.exports = arrayReduce;\n","/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = basePropertyOf;\n","var basePropertyOf = require('./_basePropertyOf');\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n};\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\nmodule.exports = deburrLetter;\n","var deburrLetter = require('./_deburrLetter'),\n toString = require('./toString');\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;\n\n/** Used to compose unicode capture groups. */\nvar rsCombo = '[' + rsComboRange + ']';\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\nmodule.exports = deburr;\n","/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n return string.match(reAsciiWord) || [];\n}\n\nmodule.exports = asciiWords;\n","/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n}\n\nmodule.exports = hasUnicodeWord;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq;\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n].join('|'), 'g');\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n}\n\nmodule.exports = unicodeWords;\n","var asciiWords = require('./_asciiWords'),\n hasUnicodeWord = require('./_hasUnicodeWord'),\n toString = require('./toString'),\n unicodeWords = require('./_unicodeWords');\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n}\n\nmodule.exports = words;\n","var arrayReduce = require('./_arrayReduce'),\n deburr = require('./deburr'),\n words = require('./words');\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\";\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n}\n\nmodule.exports = createCompounder;\n","var capitalize = require('./capitalize'),\n createCompounder = require('./_createCompounder');\n\n/**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\nvar camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n});\n\nmodule.exports = camelCase;\n","var createCompounder = require('./_createCompounder');\n\n/**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\nvar kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n});\n\nmodule.exports = kebabCase;\n","var createCompounder = require('./_createCompounder');\n\n/**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\nvar snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n});\n\nmodule.exports = snakeCase;\n","export type NotificationType =\r\n | 'countdown'\r\n | 'advance-countdown'\r\n | 'error'\r\n | 'success'\r\n | 'warning'\r\n | 'info'\r\n | 'reminder'\r\n | 'url'\r\n | 'call'\r\n\r\nexport enum NotificationSize {\r\n SMALL = 'small',\r\n NORMAL = 'normal',\r\n LARGE = 'large',\r\n}\r\n\r\nexport interface CountdownNotificationOption extends InfoNotificationOption {\r\n targetTime?: string\r\n}\r\n\r\nexport interface InfoNotificationOption {\r\n message: string\r\n duration?: number\r\n /**\r\n * 图片名,目前只支持mingcute图标。\r\n * https://www.mingcute.com/\r\n */\r\n icon?: string\r\n color?: string\r\n size?: NotificationSize\r\n backgroundColor?: string\r\n}\r\n\r\nexport interface CallNotificationOption extends InfoNotificationOption {\r\n lyric?: string\r\n audio?: string\r\n avatar?: string\r\n}\r\n\r\nexport interface ReminderNotificationOption extends InfoNotificationOption {\r\n confirmButtonText?: string\r\n cancelButtonText?: string\r\n title?: string\r\n cancelBroadcast?: string\r\n confirmBroadcast?: string\r\n}\r\n\r\nexport interface NotificationOption extends InfoNotificationOption, ReminderNotificationOption, CountdownNotificationOption, CallNotificationOption {\r\n type?: NotificationType\r\n}\r\n\r\nexport class AppNotification {\r\n type: NotificationType = 'info'\r\n message: string\r\n title?: string\r\n targetTime?: string\r\n /**\r\n * 持续时间,单位毫秒\r\n */\r\n duration: number\r\n /**\r\n * IconPark图标\r\n * @example close-one\r\n * @see [IconPark](https://iconpark.oceanengine.com/official)\r\n */\r\n icon?: string\r\n color?: string\r\n backgroundColor?: string\r\n confirmButtonText?: string\r\n cancelButtonText?: string\r\n cancelBroadcast?: string\r\n confirmBroadcast?: string\r\n size: NotificationSize\r\n url?: string\r\n avatar?: string\r\n audio?: string\r\n lyric?: string\r\n createdAt: string\r\n\r\n constructor(option: NotificationOption) {\r\n this.createdAt = new Date().toISOString()\r\n this.type = option.type ?? 'info'\r\n this.title = option.title\r\n this.message = option.message\r\n this.targetTime = option.targetTime\r\n this.duration = option.duration ?? 5000\r\n this.icon = option.icon\r\n this.color = option.color ?? '#5D8AC8'\r\n this.confirmButtonText = option.confirmButtonText\r\n this.cancelButtonText = option.cancelButtonText\r\n this.cancelBroadcast = option.cancelBroadcast\r\n this.confirmBroadcast = option.confirmBroadcast\r\n this.size = option.size ?? NotificationSize.NORMAL\r\n this.audio = option.audio\r\n this.avatar = option.avatar\r\n this.lyric = option.lyric\r\n this.backgroundColor = option.backgroundColor ?? '#000000'\r\n }\r\n}\r\n\r\nexport class AppReminderNotification extends AppNotification {\r\n constructor(option: ReminderNotificationOption) {\r\n super(option)\r\n this.type = 'reminder'\r\n this.size = NotificationSize.LARGE\r\n }\r\n}\r\n","import type { Declaration, List, Raw, Rule } from 'css-tree'\r\nimport { find, parse } from 'css-tree'\r\nimport camelCase from 'lodash/camelCase'\r\nimport kebabCase from 'lodash/kebabCase'\r\nimport merge from 'lodash/merge'\r\n\r\nexport interface ThemeColors {\r\n background: string\r\n foreground: string\r\n\r\n card: string\r\n cardForeground: string\r\n\r\n popover: string\r\n popoverForeground: string\r\n\r\n primary: string\r\n primaryForeground: string\r\n\r\n secondary: string\r\n secondaryForeground: string\r\n\r\n muted: string\r\n mutedForeground: string\r\n\r\n accent: string\r\n accentForeground: string\r\n\r\n destructive: string\r\n destructiveForeground: string\r\n\r\n border: string\r\n input: string\r\n ring: string\r\n shadow: string\r\n innerShadow: string\r\n}\r\n\r\nexport interface ThemeRadius {\r\n sm: string\r\n md: string\r\n lg: string\r\n full: string\r\n}\r\n\r\nexport interface ThemeTypography {\r\n fontFamily: string\r\n fontSize: string\r\n}\r\n\r\nexport interface ThemeShadow {\r\n sm: ThemeBoxShadow\r\n md: ThemeBoxShadow\r\n lg: ThemeBoxShadow\r\n}\r\n\r\nexport interface ThemeBoxShadow {\r\n offsetX: string\r\n offsetY: string\r\n blur: string\r\n}\r\n\r\nexport interface IAppTheme {\r\n useGlobalTheme?: boolean\r\n mode?: 'light' | 'dark'\r\n\r\n colors: ThemeColors\r\n radius: ThemeRadius\r\n typography: ThemeTypography\r\n shadow: ThemeShadow\r\n\r\n spacing?: string\r\n}\r\n\r\nexport type DeepPartial<T> = T extends object ? {\r\n [P in keyof T]?: DeepPartial<T[P]>;\r\n} : T\r\n\r\nexport const DefaultThemeDark: IAppTheme = {\r\n useGlobalTheme: true,\r\n mode: 'dark',\r\n colors: {\r\n background: 'hsl(0 0% 10%)',\r\n foreground: 'hsl(0 0% 98%)',\r\n\r\n card: 'hsl(0 0% 12%)',\r\n cardForeground: 'hsl(0 0% 98%)',\r\n\r\n popover: 'hsl(0 0% 12%)',\r\n popoverForeground: 'hsl(0 0% 98%)',\r\n\r\n primary: 'hsl(210 100% 56%)',\r\n primaryForeground: '#fff',\r\n\r\n secondary: 'hsl(0 0% 20%)',\r\n secondaryForeground: '#fff',\r\n\r\n muted: 'hsl(0 0% 30%)',\r\n mutedForeground: 'hsl(0 0% 70%)',\r\n\r\n accent: 'hsl(210 100% 60%)',\r\n accentForeground: '#fff',\r\n\r\n destructive: 'hsl(0 84% 60%)',\r\n destructiveForeground: '#fff',\r\n\r\n border: 'hsl(0 0% 30%)',\r\n input: 'hsl(0 0% 25%)',\r\n ring: 'hsl(210 100% 60%)',\r\n shadow: '0 0% 0%',\r\n innerShadow: '0 0% 0%',\r\n },\r\n radius: {\r\n sm: '6px',\r\n md: '10px',\r\n lg: '16px',\r\n full: '9999px',\r\n },\r\n typography: {\r\n fontFamily: 'system-ui, sans-serif',\r\n fontSize: '14px',\r\n },\r\n shadow: {\r\n sm: { offsetX: '0', offsetY: '1px', blur: '2px' },\r\n md: { offsetX: '0', offsetY: '4px', blur: '6px' },\r\n lg: { offsetX: '0', offsetY: '10px', blur: '20px' },\r\n },\r\n spacing: '0.5rem',\r\n}\r\n\r\nexport const DefaultThemeLight: IAppTheme = {\r\n ...DefaultThemeDark,\r\n mode: 'light',\r\n colors: {\r\n background: '#ffffff',\r\n foreground: 'hsl(0 0% 10%)',\r\n\r\n card: '#ffffff',\r\n cardForeground: 'hsl(0 0% 10%)',\r\n\r\n popover: '#ffffff',\r\n popoverForeground: 'hsl(0 0% 10%)',\r\n\r\n primary: 'hsl(210 100% 56%)',\r\n primaryForeground: '#fff',\r\n\r\n secondary: 'hsl(0 0% 90%)',\r\n secondaryForeground: 'hsl(0 0% 10%)',\r\n\r\n muted: 'hsl(0 0% 95%)',\r\n mutedForeground: 'hsl(0 0% 40%)',\r\n\r\n accent: 'hsl(210 100% 90%)',\r\n accentForeground: 'hsl(210 100% 40%)',\r\n\r\n destructive: 'hsl(0 84% 60%)',\r\n destructiveForeground: '#fff',\r\n\r\n border: 'hsl(0 0% 90%)',\r\n input: 'hsl(0 0% 85%)',\r\n ring: 'hsl(210 100% 56%)',\r\n shadow: '0 0% 0%',\r\n innerShadow: '0 0% 0%',\r\n },\r\n shadow: {\r\n sm: { offsetX: '0', offsetY: '1px', blur: '2px' },\r\n md: { offsetX: '0', offsetY: '4px', blur: '6px' },\r\n lg: { offsetX: '0', offsetY: '10px', blur: '20px' },\r\n },\r\n}\r\n\r\nexport const DefaultTheme = DefaultThemeDark\r\n\r\nexport class AppTheme implements IAppTheme {\r\n useGlobalTheme?: boolean\r\n mode?: 'light' | 'dark'\r\n colors!: ThemeColors\r\n radius!: ThemeRadius\r\n typography!: ThemeTypography\r\n shadow!: ThemeShadow\r\n spacing?: string\r\n\r\n constructor(options?: DeepPartial<IAppTheme> | string) {\r\n let parsedOptions: DeepPartial<IAppTheme> = {}\r\n\r\n if (typeof options === 'string') {\r\n try {\r\n parsedOptions = JSON.parse(options)\r\n }\r\n catch (e) {\r\n console.error('Failed to parse AppTheme options', e)\r\n }\r\n }\r\n else if (options) {\r\n parsedOptions = options\r\n }\r\n\r\n // 默认选用暗色主题作为 Base\r\n const baseTheme = parsedOptions.mode === 'light' ? DefaultThemeLight : DefaultThemeDark\r\n\r\n // 使用 lodash/merge 进行深度合并,避免 partial 对象覆盖掉同层级的其他默认属性\r\n merge(this, structuredClone(baseTheme), parsedOptions)\r\n\r\n if (this.useGlobalTheme === undefined) {\r\n this.useGlobalTheme = true\r\n }\r\n }\r\n\r\n static fromJSON(json: string) {\r\n return new AppTheme(json)\r\n }\r\n\r\n /**\r\n * 兼容 V1 版本的 CSS 变量\r\n */\r\n toLegacyCSSVariables(prefix = '--widget'): Record<string, string> {\r\n const result: Record<string, string> = {}\r\n\r\n if (this.colors) {\r\n if (this.colors.background) { result[`${prefix}-background-color`] = this.colors.background }\r\n if (this.colors.foreground) { result[`${prefix}-color`] = this.colors.foreground }\r\n if (this.colors.primary) { result[`${prefix}-primary-color`] = this.colors.primary }\r\n if (this.colors.border) {\r\n result[`${prefix}-border-color`] = this.colors.border\r\n result[`${prefix}-divider-color`] = this.colors.border\r\n result[`${prefix}-background-border-color`] = this.colors.border\r\n }\r\n if (this.colors.shadow) {\r\n result[`${prefix}-shadow-color`] = this.colors.shadow\r\n }\r\n if (this.colors.innerShadow) {\r\n result[`${prefix}-background-box-shadow-color`] = this.colors.innerShadow\r\n }\r\n }\r\n\r\n if (this.typography) {\r\n if (this.typography.fontSize) { result[`${prefix}-font-size`] = this.typography.fontSize }\r\n if (this.typography.fontFamily) { result[`${prefix}-font-family`] = this.typography.fontFamily }\r\n }\r\n\r\n if (this.radius) {\r\n if (this.radius.lg) { result[`${prefix}-border-radius`] = this.radius.lg }\r\n }\r\n\r\n if (this.spacing) {\r\n result[`${prefix}-padding`] = this.spacing\r\n }\r\n\r\n return result\r\n }\r\n\r\n /**\r\n * flatten tokens → CSS variables\r\n */\r\n toCSSVariables(prefix = '--widget'): Record<string, string> {\r\n const result: Record<string, string> = {}\r\n\r\n // 仅遍历 token 属性,忽略 meta 属性如 useGlobalTheme, mode 等\r\n const tokensToWalk = {\r\n colors: this.colors,\r\n radius: this.radius,\r\n typography: this.typography,\r\n shadow: this.shadow,\r\n spacing: this.spacing,\r\n }\r\n\r\n const walk = (obj: any, path: string[] = []) => {\r\n Object.entries(obj).forEach(([key, value]) => {\r\n if (value === undefined || value === null) { return }\r\n\r\n const newPath = [...path, key]\r\n if (typeof value === 'object') {\r\n if ('offsetX' in value && 'offsetY' in value && 'blur' in value) {\r\n const varName = `${prefix}-${newPath.map(kebabCase).join('-')}`\r\n result[varName] = `${value.offsetX} ${value.offsetY} ${value.blur} var(${prefix}-colors-shadow)`\r\n }\r\n walk(value, newPath)\r\n }\r\n else {\r\n const varName = `${prefix}-${newPath.map(kebabCase).join('-')}`\r\n result[varName] = String(value)\r\n }\r\n })\r\n }\r\n\r\n walk(tokensToWalk)\r\n\r\n // 兼容旧版本 WidgetTheme.ts 的变量输出\r\n Object.assign(result, this.toLegacyCSSVariables(prefix))\r\n\r\n return result\r\n }\r\n\r\n toCSS(selector = ':root') {\r\n const vars = this.toCSSVariables()\r\n const body = Object.entries(vars)\r\n .map(([k, v]) => ` ${k}: ${v};`)\r\n .join('\\n')\r\n\r\n return `${selector} {\\n${body}\\n}`\r\n }\r\n\r\n injectCSS(el: HTMLElement = document.documentElement) {\r\n const vars = this.toCSSVariables()\r\n Object.entries(vars).forEach(([k, v]) => {\r\n el.style.setProperty(k, v)\r\n })\r\n }\r\n\r\n removeCSS(el: HTMLElement = document.documentElement) {\r\n const vars = this.toCSSVariables()\r\n Object.keys(vars).forEach(k => el.style.removeProperty(k))\r\n }\r\n\r\n /**\r\n * 支持主题切换(light/dark)\r\n */\r\n setMode(mode: 'light' | 'dark') {\r\n if (this.mode === mode) { return }\r\n\r\n this.mode = mode\r\n // 切换模式时,覆盖对应的颜色和阴影变量\r\n const baseTheme = mode === 'light' ? DefaultThemeLight : DefaultThemeDark\r\n this.colors = structuredClone(baseTheme.colors)\r\n this.shadow = structuredClone(baseTheme.shadow)\r\n }\r\n\r\n copy(partial?: DeepPartial<IAppTheme>) {\r\n return new AppTheme(merge({}, structuredClone(this), partial))\r\n }\r\n\r\n public static fromCSS(css: string): AppTheme {\r\n const ast = parse(css)\r\n const rootRule = find(ast, (node, _item, _list) => {\r\n if (node.type == 'Rule') {\r\n const prelude = node.prelude\r\n if (prelude.type == 'SelectorList') {\r\n const isRoot = prelude.children.some((it) => {\r\n return it.type == 'Selector' && it.children.some(child => child.type == 'PseudoClassSelector' && child.name == 'root')\r\n })\r\n if (isRoot) {\r\n return true\r\n }\r\n }\r\n }\r\n return false\r\n }) as Rule | null\r\n\r\n if (rootRule == null) {\r\n return new AppTheme()\r\n }\r\n\r\n const widgetVariables = rootRule.block.children.filter(it => it.type == 'Declaration' && it.property.startsWith('--widget-')) as List<Declaration>\r\n const themeOptions: DeepPartial<IAppTheme> = {}\r\n\r\n for (const cssNode of widgetVariables) {\r\n // 移除前缀并获取层级,例如: '--widget-colors-primary-foreground' -> 'colors-primary-foreground'\r\n const propStr = cssNode.property.replace('--widget-', '')\r\n const firstDashIndex = propStr.indexOf('-')\r\n\r\n const value = (cssNode.value as Raw).value?.trim() || ''\r\n\r\n if (firstDashIndex !== -1) {\r\n // e.g. category = 'colors', property = 'primaryForeground'\r\n const category = propStr.substring(0, firstDashIndex) as keyof IAppTheme\r\n const restStr = propStr.substring(firstDashIndex + 1)\r\n\r\n if (!themeOptions[category]) {\r\n (themeOptions as any)[category] = {}\r\n }\r\n\r\n if (category === 'shadow') {\r\n const dashIndex = restStr.indexOf('-')\r\n if (dashIndex === -1) {\r\n const shadowSize = restStr\r\n if (!(themeOptions.shadow as any)[shadowSize]) {\r\n (themeOptions.shadow as any)[shadowSize] = {}\r\n }\r\n const match = value.match(/^(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(.+)$/)\r\n if (match) {\r\n const obj = (themeOptions.shadow as any)[shadowSize]\r\n if (!obj.offsetX) { obj.offsetX = match[1] }\r\n if (!obj.offsetY) { obj.offsetY = match[2] }\r\n if (!obj.blur) { obj.blur = match[3] }\r\n }\r\n }\r\n else {\r\n const shadowSize = restStr.substring(0, dashIndex)\r\n const shadowProp = camelCase(restStr.substring(dashIndex + 1))\r\n if (!(themeOptions.shadow as any)[shadowSize]) {\r\n (themeOptions.shadow as any)[shadowSize] = {}\r\n }\r\n (themeOptions.shadow as any)[shadowSize][shadowProp] = value\r\n }\r\n }\r\n else {\r\n const propName = camelCase(restStr);\r\n (themeOptions as any)[category][propName] = value\r\n }\r\n }\r\n else {\r\n // e.g. '--widget-spacing'\r\n const category = camelCase(propStr) as keyof IAppTheme\r\n (themeOptions as any)[category] = value\r\n }\r\n }\r\n\r\n return new AppTheme(themeOptions)\r\n }\r\n}\r\n","interface IDeployedPage {\n id: string\n name: string\n packageName: string\n x: number\n y: number\n height: number\n width: number\n proxy?: string\n isIgnoreMouseEvents?: boolean\n}\n\nexport class DeployedPage implements IDeployedPage {\n name!: string\n packageName!: string\n x: number = 0\n y: number = 0\n height: number = 600\n width: number = 800\n proxy?: string\n id!: string\n isIgnoreMouseEvents?: boolean\n}\n","/**\r\n * @deprecated use DeployedMode instead\r\n */\r\nexport enum HostedMode {\r\n NORMAL = 0x000001,\r\n /**\r\n * 悬浮窗\r\n */\r\n OVERLAP = 0x000010,\r\n WALLPAPER = 0x000100,\r\n SCREEN = 0x001000,\r\n BACKGROUND = 0x010000,\r\n /**\r\n * 页面\r\n */\r\n PAGE = 0x100000,\r\n ALL = 0x111111,\r\n}\r\n\r\nexport enum DeployMode {\r\n /**\r\n * 桌面组件,默认\r\n */\r\n NORMAL = 0x000001,\r\n /**\r\n * 悬浮窗\r\n */\r\n OVERLAP = 0x000010,\r\n /**\r\n * 后台组件,没有界面,一般在后台执行定时任务\r\n */\r\n BACKGROUND = 0x010000,\r\n /**\r\n * System tray\r\n */\r\n TRAY = 0x000100,\r\n /**\r\n * 全部支持\r\n */\r\n ALL = 0x111111,\r\n}\r\n","import { DeployedPage } from './DeployedPage'\nimport { DeployMode } from './DeployMode'\n\nexport class DeployedWidget extends DeployedPage {\n shortcut?: string\n deployMode!: number\n\n isOverlap(): boolean {\n return (this.deployMode & DeployMode.OVERLAP) > 0\n }\n}\n","import type { AppApiEvent, WidgetApiEvent } from '../../api'\r\n\r\ninterface BroadcastEventOptions {\r\n event: WidgetApiEvent | AppApiEvent | string\r\n /**\r\n * 发送人,用于标记发送源,一般为组件名,如:com.example.widgets.countdown\r\n */\r\n sender?: string\r\n /**\r\n * 广播事件携带的数据,只支持部分数据类型。\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm\r\n */\r\n payload?: any\r\n}\r\n\r\nexport class BroadcastEvent {\r\n readonly event: string\r\n readonly sender?: string\r\n payload?: any\r\n\r\n constructor(options: BroadcastEventOptions) {\r\n this.event = options.event\r\n this.sender = options.sender\r\n this.payload = options.payload\r\n }\r\n}\r\n","export enum WebSocketEventType {\r\n RESISTER_PACKAGE = 'ws::cn.widgetjs.core.resister_package',\r\n}\r\n\r\nexport class WebSocketEvent {\r\n // 类型\r\n type: WebSocketEventType\r\n payload: any\r\n\r\n constructor(type: WebSocketEventType, payload: any) {\r\n this.type = type\r\n this.payload = payload\r\n }\r\n}\r\n","export class ElectronUtils {\r\n static hasElectronApi(): boolean {\r\n return this.getAPI() != null\r\n }\r\n\r\n /**\r\n * 获取ElectronAPI\r\n * windows api\r\n */\r\n static getAPI() {\r\n if (Reflect.has(window, 'electronAPI')) {\r\n // @ts-expect-error\r\n return window.electronAPI\r\n }\n else if (Reflect.has(window.parent, 'electronAPI')) {\r\n // @ts-expect-error\r\n return window.parent.electronAPI\r\n }\r\n return null\r\n }\r\n\r\n static async invokeMethod(channel: string, method: string, ...args: any[]): Promise<any> {\r\n return this.getAPI()?.invoke(channel, method, ...args)\r\n }\r\n\r\n static async invoke(channel: string, ...args: any[]): Promise<any> {\r\n return this.getAPI()?.invoke(channel, ...args)\r\n }\r\n}\r\n","import type { LanguageCode, LanguageTextMap } from '../lang/LanguageCode'\r\n\r\nexport class LanguageUtils {\r\n static findText(\r\n langMap: LanguageTextMap,\r\n localeCode: LanguageCode,\r\n ) {\r\n const locales = Object.keys(langMap).map(key => new Intl.Locale(key))\r\n const targetLocale = new Intl.Locale(localeCode)\r\n // search baseName first\r\n let find = locales.find(locale => locale.baseName == targetLocale.baseName)\r\n if (!find) {\r\n // locale without region\r\n find = locales.find(locale => locale.language == targetLocale.language)\r\n }\r\n return find\r\n }\r\n\r\n /**\r\n * Get text from `LanguageTextMap` by Unicode locale identifier.\r\n * `localeCode` > `localeCode` without region > browser default language > English > first language\r\n * @param langMap 对象\r\n * @param {LanguageCode} localeCode `zh-CN`、`en-US`、 `zh`、`en`\r\n * @param fallbackToBrowser\r\n */\r\n static getTextByLocate(langMap: LanguageTextMap, localeCode?: LanguageCode, fallbackToBrowser: boolean = true): string | undefined {\r\n let result: string | undefined\r\n if (localeCode) {\r\n if (localeCode in langMap) {\r\n return langMap[localeCode]\r\n }\r\n }\r\n // fallback to language code only\r\n if (localeCode) {\r\n const find = this.findText(langMap, localeCode)\r\n if (find) {\r\n return langMap[find.baseName as LanguageCode]\r\n }\r\n }\r\n // fallback to browser default language\r\n if (result == undefined && fallbackToBrowser) {\r\n if (typeof navigator != 'undefined' && navigator.languages) {\r\n const langCode = navigator.language as LanguageCode\r\n result = this.getTextByLocate(langMap, langCode, false)\r\n if (result != undefined) {\r\n return result\r\n }\r\n }\r\n }\r\n\r\n // fallback to english\r\n if (result == undefined) {\r\n const find = this.findText(langMap, 'en' as LanguageCode)\r\n if (find) {\r\n return langMap[find.baseName as LanguageCode]\r\n }\r\n }\r\n\r\n // fallback to first language\r\n if (result == undefined) {\r\n const langCode = Object.keys(langMap)\r\n if (langCode.length > 0) {\r\n return langMap[langCode[0] as LanguageCode]\r\n }\r\n }\r\n\r\n return undefined\r\n }\r\n}\r\n","import { DeployMode } from '../model/DeployMode'\r\n\r\nexport class WidgetUtils {\r\n /**\r\n * 是否支持悬浮窗\r\n */\r\n static isSupportOverlap(supportDeployMode: number): boolean {\r\n return (supportDeployMode & DeployMode.OVERLAP) > 0\r\n }\r\n\r\n static isSupportBackground(supportDeployMode: number): boolean {\r\n return (supportDeployMode & DeployMode.BACKGROUND) > 0\r\n }\r\n\r\n /**\r\n * 是否支持普通模式\r\n */\r\n static isSupportNormal(supportDeployMode: number) {\r\n return (supportDeployMode & DeployMode.NORMAL) > 0\r\n }\r\n\r\n static isConfigurable(configPagePath: string): boolean {\r\n return configPagePath != null && configPagePath != ''\r\n }\r\n\r\n static stringToDeployMode(deployMode: string): DeployMode {\r\n switch (deployMode.toUpperCase()) {\r\n case 'NORMAL':\r\n return DeployMode.NORMAL\r\n case 'OVERLAP':\r\n return DeployMode.OVERLAP\r\n case 'BACKGROUND':\r\n return DeployMode.BACKGROUND\r\n default:{\r\n const number = Number.parseInt(deployMode)\r\n if (Number.isNaN(number)) {\r\n return DeployMode.NORMAL\r\n }\r\n else {\r\n switch (number) {\r\n case DeployMode.NORMAL:\r\n case DeployMode.OVERLAP:\r\n case DeployMode.BACKGROUND:\r\n return number\r\n default:\r\n return DeployMode.NORMAL\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","export function delay(ms: number) {\r\n return new Promise(resolve => setTimeout(resolve, ms))\r\n}\r\n","import type { RemotePackageUrlInfo } from '../model/WidgetPackage'\r\n\r\nexport class WidgetPackageUtils {\r\n static getRemotePackageJsonUrl(remoteInfo: RemotePackageUrlInfo): string | undefined {\r\n const remoteEntry = this.getRemoteEntryUrl(remoteInfo)\r\n if (!remoteEntry) {\r\n return undefined\r\n }\r\n const arr: string[] = []\r\n arr.push(remoteEntry)\r\n arr.push('/widget.json')\r\n return arr.join('')\r\n }\r\n\r\n static getRemoteEntryUrl(remoteInfo: RemotePackageUrlInfo): string | undefined {\r\n if (!remoteInfo.hostname) {\r\n return undefined\r\n }\r\n const arr: string[] = []\r\n arr.push('https://')\r\n arr.push(remoteInfo.hostname)\r\n if (remoteInfo.base) {\r\n arr.push(remoteInfo.base)\r\n }\r\n return arr.join('')\r\n }\r\n}\r\n","import type { LanguageCode, LanguageTextMap } from '../lang/LanguageCode'\r\nimport { LanguageUtils } from '../utils'\r\nimport type { WidgetPermission } from '../permission/permission'\r\nimport type { WidgetKeyword } from './Widget'\r\n\r\nexport interface MetaInfo {\r\n [key: string]: string | number | boolean\r\n}\r\n\r\nexport interface IWindowSize {\r\n width: number\r\n height: number\r\n maxWidth?: number\r\n maxHeight?: number\r\n minWidth?: number\r\n minHeight?: number\r\n}\r\n\r\nexport interface IPageOptions extends IWindowSize {\r\n name: string\r\n /**\r\n * 当showInSearch为true时,此项必填\r\n */\r\n title: LanguageTextMap\r\n /**\r\n * 当showInSearch为true时,此项必填\r\n */\r\n description?: LanguageTextMap\r\n /**\r\n * 当showInSearch为true时,此项必填\r\n */\r\n keywords?: WidgetKeyword[]\r\n lang: LanguageCode\r\n packageName?: string\r\n icon?: string\r\n /**\r\n * 当showInSearch为true时,此项必填\r\n */\r\n previewImage?: string\r\n /**\r\n * 是否在搜索中显示\r\n */\r\n showInSearch?: boolean\r\n /**\r\n * 悬浮窗模式 是否可移动\r\n * @deprecated\r\n */\r\n movable?: boolean\r\n /**\r\n * @deprecated\r\n */\r\n resizable?: boolean\r\n /**\r\n * @deprecated\r\n */\r\n backgroundThrottling?: boolean\r\n security?: boolean\r\n /**\r\n * @deprecated\r\n */\r\n webviewTag?: boolean\r\n path: string\r\n /**\r\n * 是否只能添加一次\r\n */\r\n singleton?: boolean\r\n permissions?: WidgetPermission[]\r\n meta?: MetaInfo\r\n broadcastChannels?: string[]\r\n}\r\n\r\nexport interface IPage {\r\n // 窗口名称,名称与包名类似,e.g. com.example.countdown\r\n readonly name: string\r\n\r\n /**\r\n * 窗口标题,显示在界面上的,\r\n * https://zh.m.wikipedia.org/zh-hans/ISO_639-1\r\n */\r\n readonly title: LanguageTextMap\r\n readonly permissions: WidgetPermission[]\r\n readonly webviewTag: boolean\r\n /**\r\n * 窗口介绍\r\n */\r\n readonly description: LanguageTextMap\r\n readonly keywords: WidgetKeyword[]\r\n /**\r\n * 组件默认语言\r\n */\r\n readonly lang: LanguageCode\r\n readonly width: number\r\n packageName?: string | null\r\n readonly height: number\r\n readonly maxWidth: number\r\n readonly maxHeight: number\r\n readonly minWidth: number\r\n readonly minHeight: number\r\n readonly movable: boolean\r\n readonly singleton: boolean\r\n readonly resizable: boolean\r\n readonly path: string\r\n readonly meta: { [key: string]: string | number | boolean }\r\n readonly backgroundThrottling: boolean\r\n /**\r\n * 预览图片,可以是GIF\r\n */\r\n readonly previewImage?: string\r\n}\r\n\r\nexport class Page implements IPage {\r\n /**\r\n * 页面名称,名称必须以包名开头,如果以.开头,会自动加上包名<br>\r\n * 假设包名为`example.com`,以下两种写法等价\r\n * @example example.com.countdown\r\n * @example .countdown\r\n */\r\n public name: string\r\n\r\n /**\r\n * 窗口标题,显示在界面上的,\r\n * @see https://zh.m.wikipedia.org/zh-hans/ISO_639-1\r\n */\r\n public readonly title: LanguageTextMap\r\n /**\r\n * 窗口介绍\r\n */\r\n public readonly description: LanguageTextMap\r\n public readonly keywords: WidgetKeyword[]\r\n public readonly security: boolean\r\n public readonly permissions: WidgetPermission[]\r\n /**\r\n * 组件默认语言\r\n */\r\n public readonly lang: LanguageCode\r\n public readonly width: number\r\n public packageName?: string | null\r\n public readonly height: number\r\n public readonly maxWidth: number\r\n /**\r\n * @deprecated\r\n */\r\n public readonly webviewTag: boolean\r\n public readonly maxHeight: number\r\n public readonly minWidth: number\r\n public readonly minHeight: number\r\n public readonly movable: boolean\r\n public readonly singleton: boolean\r\n public readonly resizable: boolean\r\n public readonly path: string\r\n public readonly icon?: string\r\n public readonly meta: MetaInfo\r\n public readonly backgroundThrottling: boolean\r\n /**\r\n * 预览图片,可以是GIF\r\n */\r\n public readonly previewImage?: string\r\n\r\n constructor(options: IPageOptions) {\r\n this.name = options.name\r\n this.title = options.title\r\n this.description = options.description ?? {}\r\n this.keywords = options.keywords ?? []\r\n this.lang = options.lang\r\n this.width = options.width\r\n this.height = options.height\r\n this.icon = options.icon\r\n this.movable = options.movable ?? true\r\n this.resizable = options.resizable ?? true\r\n this.maxWidth = options.maxWidth ?? options.width\r\n this.maxHeight = options.maxHeight ?? options.height\r\n this.minWidth = options.minWidth ?? options.width\r\n this.minHeight = options.minHeight ?? options.height\r\n this.backgroundThrottling = options.backgroundThrottling == undefined ? true : options.backgroundThrottling\r\n this.packageName = options.packageName\r\n this.singleton = options.singleton ?? false\r\n this.previewImage = options.previewImage\r\n this.path = options.path\r\n this.meta = options.meta ?? {}\r\n this.security = options.security ?? false\r\n this.webviewTag = options.webviewTag ?? false\r\n this.permissions = options.permissions ?? []\r\n }\r\n\r\n /**\r\n * 获取组件标题\r\n * @param lang 语言环境,不传则获取默认语言\r\n */\r\n getTitle(lang?: LanguageCode): string | undefined {\r\n return LanguageUtils.getTextByLocate(this.title, lang)\r\n }\r\n\r\n /**\r\n * 获取组件描述\r\n * @param lang 语言环境,不传则获取默认标题\r\n */\r\n getDescription(lang?: LanguageCode): string | undefined {\r\n if (this.description == undefined) {\r\n return undefined\r\n }\r\n return LanguageUtils.getTextByLocate(this.description, lang)\r\n }\r\n\r\n static parseJSON(json: string): Page {\r\n const object = JSON.parse(json)\r\n return this.parseObject(object)\r\n }\r\n\r\n static parseObject(obj: any): Page {\r\n const widget = new Page({\r\n path: '',\r\n description: {},\r\n height: 0,\r\n keywords: [],\r\n lang: 'zh-CN',\r\n name: '',\r\n previewImage: '',\r\n title: {},\r\n width: 0,\r\n })\r\n Object.assign(widget, obj)\r\n return widget\r\n }\r\n\r\n isResizable(): boolean {\r\n return (\r\n this.resizable\r\n || !(\r\n this.minWidth == this.width\r\n && this.maxWidth == this.width\r\n && this.minHeight == this.height\r\n && this.maxHeight == this.height\r\n )\r\n )\r\n }\r\n}\r\n","export type SocialType =\r\n | 'qq'\r\n | 'wechat'\r\n | 'qq-group'\r\n | 'discord'\r\n | 'telegram'\r\n | 'tiktok'\r\n | 'douyin'\r\n | 'youtube'\r\n | 'instagram'\r\n | 'twitter'\r\n | 'facebook'\r\n | 'kuaishou'\r\n | 'bilibili'\r\n | 'github'\r\n | 'email'\r\n | 'gitee'\r\n | 'homepage'\r\n\r\nexport class SocialInfo {\r\n content: string\r\n name: SocialType\r\n\r\n constructor(name: SocialType, content: string) {\r\n this.name = name\r\n this.content = content\r\n }\r\n}\r\n\r\nexport interface SocialLink {\r\n name: SocialType\r\n link: string\r\n}\r\n","import type { LanguageTextMap } from '../lang/LanguageCode'\r\nimport type { BrowserWindowOptions } from '../api'\r\nimport { DeployMode } from './DeployMode'\r\nimport type { IPageOptions, IWindowSize } from './Page'\r\nimport { Page } from './Page'\r\nimport type { SocialLink } from './SocialInfo'\r\nimport type { Category } from './msic/Category'\r\n\r\nexport interface IWidgetOptions extends IWindowSize, IPageOptions {\r\n supportDeployMode?: DeployMode\r\n configPagePath?: string\r\n /**\r\n * 如果为true,组件将不会添加到组件包中\r\n */\r\n disabled?: boolean\r\n previewImage: string\r\n /**\r\n * whether the widget data can be synchronized\r\n */\r\n synchronizable?: boolean\r\n categories?: Category[]\r\n /**\r\n * 组件包所需的App版本\r\n */\r\n requiredAppVersion?: string\r\n description: LanguageTextMap\r\n keywords: WidgetKeyword[]\r\n /**\r\n * @deprecated\r\n */\r\n routes?: WidgetRoute[]\r\n /**\r\n * 一般用于填写教程链接\r\n */\r\n socialLinks?: SocialLink[]\r\n browserWindowOptions?: Pick<BrowserWindowOptions, 'backgroundThrottling'>\r\n trayOptions?: TrayWidgetOptions\r\n}\r\n\r\nexport interface IBackgroundWidgetOptions extends Omit<IWidgetOptions, 'width' | 'height'> {\r\n width?: number\r\n height?: number\r\n browserWindowOptions?: BrowserWindowOptions\r\n}\r\n\r\n/**\r\n * @deprecated\r\n */\r\nexport interface WidgetRoute {\r\n url: string\r\n name: string\r\n}\r\n\r\nexport interface TrayWidgetOptions {\r\n closeOnBlur?: boolean\r\n hideOnBlur?: boolean\r\n}\r\n\r\nexport class Widget extends Page {\r\n public declare readonly previewImage: string\r\n public readonly categories?: Category[]\r\n public readonly supportDeployMode: number\r\n public readonly trayOptions?: TrayWidgetOptions\r\n /**\r\n * 组件包所需的App版本\r\n */\r\n public readonly requiredAppVersion?: string\r\n /**\r\n * 如果为true,组件将不会添加到组件包中\r\n */\r\n public readonly disabled?: boolean\r\n public readonly synchronizable?: boolean\r\n /**\r\n * 配置页面路径,没有则不能修改\r\n */\r\n public readonly configPagePath?: string\r\n /**\r\n * @deprecated\r\n */\r\n public readonly routes: WidgetRoute[]\r\n protected browserWindowOptions?: BrowserWindowOptions\r\n public readonly socialLinks?: SocialLink[]\r\n\r\n constructor(options: IWidgetOptions) {\r\n super(options)\r\n this.configPagePath = options.configPagePath\r\n this.categories = options.categories\r\n this.supportDeployMode = options.supportDeployMode ?? DeployMode.NORMAL | DeployMode.OVERLAP\r\n this.socialLinks = options.socialLinks\r\n this.disabled = options.disabled\r\n this.trayOptions = options.trayOptions\r\n this.synchronizable = options.synchronizable\r\n this.requiredAppVersion = options.requiredAppVersion\r\n this.routes = options.routes ?? []\r\n }\r\n\r\n static parseJSON(json: string): Widget {\r\n const object = JSON.parse(json)\r\n return this.parseObject(object)\r\n }\r\n\r\n static parseObject(obj: any): Widget {\r\n const widget = new Widget({\r\n path: '',\r\n description: {},\r\n height: 0,\r\n keywords: [],\r\n lang: 'zh-CN',\r\n name: '',\r\n previewImage: '',\r\n title: {},\r\n width: 0,\r\n })\r\n Object.assign(widget, obj)\r\n return widget\r\n }\r\n\r\n /**\r\n * 是否支持悬浮窗\r\n */\r\n isSupportOverlap(): boolean {\r\n return (this.supportDeployMode & DeployMode.OVERLAP) > 0\r\n }\r\n\r\n isSupportBackground(): boolean {\r\n return (this.supportDeployMode & DeployMode.BACKGROUND) > 0\r\n }\r\n\r\n isSupportTray(): boolean {\r\n return (this.supportDeployMode & DeployMode.TRAY) > 0\r\n }\r\n\r\n /**\r\n * 是否支持普通模式\r\n */\r\n isSupportNormal() {\r\n return (this.supportDeployMode & DeployMode.NORMAL) > 0\r\n }\r\n\r\n isConfigurable(): boolean {\r\n return this.configPagePath != null && this.configPagePath != ''\r\n }\r\n}\r\n\r\nexport class BackgroundWidget extends Widget {\r\n constructor(options: IBackgroundWidgetOptions) {\r\n options.supportDeployMode = DeployMode.BACKGROUND\r\n options.backgroundThrottling = false\r\n options.width = 1\r\n options.height = 1\r\n super(options as IWidgetOptions)\r\n this.browserWindowOptions = options.browserWindowOptions\r\n }\r\n}\r\n\r\nexport enum WidgetKeyword {\r\n RECOMMEND = 'recommend',\r\n TOOLS = 'tools',\r\n EFFICIENCY = 'efficiency',\r\n PICTURE = 'picture',\r\n LIFE = 'life',\r\n SHORTCUT = 'shortcut',\r\n COUNTDOWN = 'countdown',\r\n TIMER = 'timer',\r\n INFO = 'info',\r\n DASHBOARD = 'dashboard',\r\n}\r\n","import kebabCase from 'lodash/kebabCase'\r\nimport type { WidgetTheme, WidgetThemeKey } from './WidgetTheme'\r\nimport { DefaultWidgetTheme } from './WidgetTheme'\r\n\r\n/**\r\n * 组件配置数据,用于存储组件自定义页面所设置的数据\r\n * @deprecated\r\n */\r\nexport class WidgetData {\r\n /**\r\n * 组件id\r\n */\r\n id?: string\r\n /**\r\n * 组件名\r\n */\r\n name: string\r\n /**\r\n * 背景颜色\r\n * @deprecated\r\n */\r\n backgroundColor?: string\r\n /**\r\n * 文字颜色\r\n * @deprecated\r\n */\r\n color?: string\r\n /**\r\n * 字体大小\r\n * @deprecated\r\n */\r\n fontSize?: number\r\n /**\r\n * 字体\r\n * @deprecated\r\n */\r\n fontFamily?: string\r\n /**\r\n * 圆角半径\r\n * @deprecated\r\n */\r\n borderRadius?: number\r\n /**\r\n * 组件样式\r\n * @deprecated\r\n */\r\n theme: WidgetTheme\r\n\r\n constructor(name: string, id?: string) {\r\n this.id = id\r\n this.name = name\r\n this.theme = JSON.parse(JSON.stringify(DefaultWidgetTheme))\r\n }\r\n\r\n public parseJSON(json: any) {\r\n Object.assign(this, json)\r\n }\r\n\r\n /**\r\n * Gets the style properties from the widget's style object.\r\n * @returns A record representing CSS custom properties and their values.\r\n */\r\n public getThemeProperties(): Record<string, string> {\r\n const properties: Record<string, string> = {}\r\n if (this.theme) {\r\n const prefix = '--widget-'\r\n const keys = Object.keys(this.theme) as WidgetThemeKey[]\r\n keys\r\n .filter(key => this.theme![key] != undefined)\r\n .forEach((key) => {\r\n properties[`${prefix}${kebabCase(key)}`] = `${this.theme![key]!}`\r\n })\r\n }\r\n return properties\r\n }\r\n\r\n /**\r\n * Injects the style properties as css variable.\r\n * @remarks Only works in a browser environment.\r\n */\r\n public injectThemeProperties() {\r\n const properties = this.getThemeProperties()\r\n Object.keys(properties).forEach((key) => {\r\n document.body.style.setProperty(key, properties[key].toString())\r\n })\r\n }\r\n}\r\n","import type { Declaration, List, Raw, Rule } from 'css-tree'\r\nimport type * as CSS from 'csstype'\r\nimport { find, parse } from 'css-tree'\r\nimport camelCase from 'lodash/camelCase'\r\nimport kebabCase from 'lodash/kebabCase'\r\n\r\n/**\n * @deprecated 已迁移到 AppTheme\n */\nexport interface IWidgetTheme {\r\n /**\r\n * 是否使用全局主题,\r\n * 默认true\r\n */\r\n useGlobalTheme?: boolean\r\n borderRadius?: CSS.Properties['borderRadius']\r\n backgroundColor?: CSS.Properties['color']\r\n /**\r\n * 背景边框颜色\r\n */\r\n backgroundBorderColor?: CSS.Properties['color']\r\n backgroundBoxShadowColor?: CSS.Properties['color']\r\n fontSize?: CSS.Properties['fontSize']\r\n dividerColor?: CSS.Properties['color']\r\n /**\r\n * 主色调\r\n */\r\n primaryColor?: CSS.Properties['color']\r\n /**\r\n * 文字颜色\r\n */\r\n color?: CSS.Properties['color']\r\n fontFamily?: CSS.Properties['fontFamily']\r\n shadowColor?: CSS.Properties['color']\r\n padding?: CSS.Properties['padding']\r\n borderColor?: CSS.Properties['borderColor']\r\n}\r\n\r\nexport type WidgetThemeProperty = keyof IWidgetTheme\r\n\r\n/**\n * @deprecated 已迁移到 AppTheme\n */\nexport class WidgetTheme implements IWidgetTheme {\r\n borderRadius?: CSS.Properties['borderRadius']\r\n backgroundColor?: CSS.Properties['color']\r\n fontSize?: CSS.Properties['fontSize']\r\n dividerColor?: CSS.Properties['color']\r\n /**\r\n * 主色调\r\n */\r\n primaryColor?: CSS.Properties['color']\r\n backgroundBorderColor?: CSS.Properties['color']\r\n backgroundBoxShadowColor?: CSS.Properties['color']\r\n /**\r\n * 文字颜色\r\n */\r\n color?: CSS.Properties['color']\r\n fontFamily?: CSS.Properties['fontFamily']\r\n shadowColor?: CSS.Properties['color']\r\n padding?: CSS.Properties['padding']\r\n borderColor?: CSS.Properties['borderColor']\r\n useGlobalTheme?: boolean\r\n\r\n constructor(options?: IWidgetTheme | string) {\r\n Object.assign(this, options ?? DefaultWidgetTheme)\r\n if (this.useGlobalTheme == undefined) {\r\n this.useGlobalTheme = true\r\n }\r\n }\r\n\r\n static fromJSON(json: string) {\r\n return new WidgetTheme(JSON.parse(json))\r\n }\r\n\r\n /**\r\n * Injects the style properties as css variable.\r\n * @param selector default is 'body'\r\n */\r\n public toCSS(selector: string = ':root') {\r\n const variables = this.toCSSVariable()\r\n const cssVariables = Object.keys(variables).map((key) => {\r\n return `${key}: ${variables[key]};`\r\n }).join('\\n')\r\n return `${selector} {\\n${cssVariables}\\n}`\r\n }\r\n\r\n /**\r\n * Injects the style properties as css variable.\r\n * @param rootElement The rootElement to inject the css.\r\n * @remarks Only works in a browser environment.\r\n */\r\n public injectCSS(rootElement?: HTMLElement) {\r\n const element = rootElement ?? document.documentElement\r\n const cssVariables = this.toCSSVariable()\r\n Object.keys(cssVariables).forEach((key) => {\r\n element.style.setProperty(key, cssVariables[key].toString())\r\n })\r\n }\r\n\r\n public removeCSS(rootElement?: HTMLElement) {\r\n const element = rootElement ?? document.documentElement\r\n const cssVariables = this.toCSSVariable()\r\n Object.keys(cssVariables).forEach((key) => {\r\n element.style.removeProperty(key)\r\n })\r\n }\r\n\r\n public copy(options?: IWidgetTheme): WidgetTheme {\r\n return new WidgetTheme({ ...this, ...options })\r\n }\r\n\r\n /**\r\n * Gets the style properties from the widget's style object.\r\n * @returns A record representing CSS custom variable and their values.\r\n */\r\n public toCSSVariable(): Record<string, string> {\r\n const variables: Record<string, string> = {}\r\n const prefix = '--widget-'\r\n const keys = Object.keys(this) as WidgetThemeKey[]\r\n keys\r\n .filter(key => this[key] != undefined)\r\n .forEach((key) => {\r\n variables[`${prefix}${kebabCase(key)}`] = `${this[key]!}`\r\n })\r\n return variables\r\n }\r\n\r\n public toCSSProperties() {\r\n const properties: Record<string, string> = {}\r\n const keys = Object.keys(this) as WidgetThemeKey[]\r\n keys\r\n .filter(key => this[key] != undefined)\r\n .forEach((key) => {\r\n properties[`${kebabCase(key)}`] = `${this[key]!}`\r\n })\r\n return properties\r\n }\r\n\r\n public static fromCSS(css: string): WidgetTheme {\r\n const ast = parse(css)\r\n const rootRule = find(ast, (node, _item, _list) => {\r\n if (node.type == 'Rule') {\r\n const prelude = node.prelude\r\n if (prelude.type == 'SelectorList') {\r\n const isRoot = prelude.children.some((it) => {\r\n return it.type == 'Selector' && it.children.some(child => child.type == 'PseudoClassSelector' && child.name == 'root')\r\n })\r\n if (isRoot) {\r\n return true\r\n }\r\n }\r\n }\r\n return false\r\n }) as Rule | null\r\n if (rootRule == null) {\r\n return DefaultWidgetTheme.copy()\r\n }\r\n const widgetVariables = rootRule.block.children.filter(it => it.type == 'Declaration' && it.property.startsWith('--widget-')) as List<Declaration>\r\n const themeOptions: Record<string, any> = {}\r\n for (const cssNode of widgetVariables) {\r\n const prop = camelCase(cssNode.property.replace('--widget-', ''))\r\n themeOptions[prop] = (cssNode.value as Raw).value.trim()\r\n }\r\n return new WidgetTheme(themeOptions)\r\n }\r\n}\r\n\r\nexport type WidgetThemeKey = keyof WidgetTheme\r\n\r\n/**\r\n * Widget default theme, this object is immutable. Clone it before use.\r\n */\r\nconst DefaultWidgetTheme = new WidgetTheme({\r\n backgroundColor: 'rgba(0,0,0,0.5)',\r\n color: '#fff',\r\n fontSize: '14px',\r\n borderColor: 'rgba(255,255,255,0.4)',\r\n dividerColor: 'rgba(255,255,255,0.4)',\r\n primaryColor: 'rgb(0, 149, 255)',\r\n borderRadius: '22px',\r\n backgroundBorderColor: 'hsla(0,0%,100%,.06)',\r\n backgroundBoxShadowColor: 'hsla(0, 0%, 100%, 0.1)',\r\n},\r\n)\r\nObject.freeze(DefaultWidgetTheme)\r\n\r\nexport { DefaultWidgetTheme }\r\n","import type { LanguageCode, LanguageTextMap } from '../lang/LanguageCode'\r\nimport { LanguageUtils } from '../utils'\r\nimport type { WidgetPermission } from '../permission/permission'\r\nimport { Widget } from './Widget'\r\nimport type { Page } from './Page'\r\nimport type { SocialLink } from './SocialInfo'\r\n\r\nexport interface LocalPackageUrlInfo {\r\n /**\r\n * 入口文件,默认为index.html,也可以是/\r\n * @example remote package: https://rtugeek.gitee.io/hotspot/index.html\r\n * @example local package: index.html\r\n * @deprecated use entryFile instead\r\n */\r\n entry?: string\r\n /**\r\n * 需以 / 开头\r\n * @example /index.html\r\n */\r\n entryFile?: string\r\n /**\r\n * 是否使用hash路由\r\n */\r\n hash?: boolean\r\n}\r\n\r\nexport interface RemotePackageUrlInfo extends LocalPackageUrlInfo {\r\n /**\r\n * 部署到服务器的base path,只在远程组件包中生效,需以/开始\r\n * @example /hotspot\r\n */\r\n base?: string\r\n /**\r\n * 域名地址,不带协议\r\n * @example widgetjs.cn\r\n */\r\n hostname: string\r\n}\r\n\r\nexport interface WidgetPackageOptions extends LocalPackageUrlInfo {\r\n name: string\r\n version?: string\r\n author: string\r\n homepage?: string\r\n title: LanguageTextMap\r\n permissions?: WidgetPermission[]\r\n description: LanguageTextMap\r\n zipUrl?: string\r\n /**\r\n * 远程组件包入口文件\r\n * @deprecated\r\n */\r\n remoteEntry?: string\r\n /**\r\n * @deprecated\r\n */\r\n remotePackage?: string\r\n remote?: RemotePackageUrlInfo\r\n icon?: string\r\n lang?: LanguageCode\r\n widgets?: Widget[]\r\n /**\r\n * 是否处于开发模式\r\n */\r\n development?: boolean\r\n devOptions?: DevOptions\r\n requiredAppVersion?: string\r\n /**\r\n * social links, generally used for tutorial links or source code\r\n */\r\n socialLinks?: SocialLink[]\r\n}\r\n\r\nexport class WidgetPackage implements Omit<RemotePackageUrlInfo, 'hostname'> {\r\n /**\r\n * 组件包名,一般为域名倒写,e.g. com.example\r\n */\r\n readonly name!: string\r\n /**\r\n * 组件包版本,可以为空,默认采用package.json里的版本\r\n * e.g. 1.0.2\r\n */\r\n version?: string\r\n /**\r\n * 组件包所需的App版本\r\n */\r\n requiredAppVersion?: string\r\n /**\r\n * 组件作者署名\r\n */\r\n readonly author!: string\r\n development?: boolean\r\n /**\r\n * 组件首页\r\n */\r\n readonly homepage?: string\r\n /**\r\n * 组件描述\r\n */\r\n readonly title!: { [key: LanguageCode | string]: string }\r\n /**\r\n * 组件描述\r\n */\r\n readonly description!: { [key: LanguageCode | string]: string }\r\n /**\r\n * 本地组件入口文件,通常为 index.html\r\n */\r\n entry!: string | 'index.html'\r\n /**\r\n * 远程组件包入口文件\r\n * @deprecated\r\n */\r\n remoteEntry?: string\r\n /**\r\n * 组件包json文件路径\r\n * @deprecated\r\n * @example https://rtugeek.gitee.io/hotspot/widget.json\r\n */\r\n readonly remotePackage?: string\r\n readonly local?: LocalPackageUrlInfo\r\n readonly remote?: RemotePackageUrlInfo\r\n /**\r\n * zip package url, used for downloading the package\r\n */\r\n zipUrl?: string\r\n /**\r\n * 组件包图标\r\n */\r\n readonly icon?: string\r\n /**\r\n * Hash路由模式,默认为true\r\n */\r\n readonly hash: boolean = true\r\n /**\r\n * 可能是网络地址,或者本地路径(解压后的文件夹路径),\r\n * 网络地址:https://www.bilibili.com\r\n * 本地地址:file:///C:/Users/neo/Desktop\r\n * 在测试时。地址通常为: http://127.0.0.1:8080\r\n */\r\n url!: string\r\n readonly widgets: Widget[] = []\r\n readonly pages: Page[] = []\r\n devOptions?: DevOptions\r\n\r\n constructor(options: WidgetPackageOptions) {\r\n this.name = options.name\r\n this.development = options.development\r\n this.version = options.version\r\n this.author = options.author\r\n this.homepage = options.homepage\r\n this.title = options.title\r\n this.description = options.description\r\n this.entry = options.entry ?? 'index.html'\r\n this.remoteEntry = options.remoteEntry\r\n this.requiredAppVersion = options.requiredAppVersion\r\n this.remotePackage = options.remotePackage\r\n this.hash = options.hash ?? false\r\n this.url = ''\r\n this.icon = options.icon\r\n this.devOptions = options.devOptions\r\n this.zipUrl = options.zipUrl\r\n this.remote = options.remote\r\n if (options.widgets) {\r\n for (const widget of options.widgets) {\r\n this.widgets.push(widget)\r\n }\r\n }\r\n }\r\n\r\n static parseJSON(json: string): WidgetPackage {\r\n const object = JSON.parse(json)\r\n return this.parseObject(object)\r\n }\r\n\r\n static parseObject(obj: any): WidgetPackage {\r\n const widgetPackage = new WidgetPackage({\r\n author: '',\r\n description: {\r\n 'zh-CN': '',\r\n },\r\n entry: '',\r\n hash: false,\r\n homepage: '',\r\n name: '',\r\n title: {\r\n 'zh-CN': '',\r\n },\r\n version: '',\r\n })\r\n Object.assign(widgetPackage, obj)\r\n const widgets: Widget[] = []\r\n if (widgetPackage.widgets) {\r\n for (const jsonWidget of widgetPackage.widgets) {\r\n const widget = new Widget({\r\n previewImage: '',\r\n path: '',\r\n description: { 'zh-CN': '' },\r\n height: 0,\r\n keywords: [],\r\n lang: 'zh-CN',\r\n name: '',\r\n title: { 'zh-CN': '' },\r\n width: 0,\r\n })\r\n Object.assign(widget, jsonWidget)\r\n widgets.push(widget)\r\n }\r\n }\r\n widgetPackage.widgets.splice(0, widgetPackage.widgets.length)\r\n widgetPackage.widgets.push(...widgets)\r\n return widgetPackage\r\n }\r\n\r\n /**\r\n * 获取组件包标题\r\n * @param lang 语言环境,不传则获取默认语言\r\n */\r\n getTitle(lang?: LanguageCode): string | undefined {\r\n return LanguageUtils.getTextByLocate(this.title, lang)\r\n }\r\n\r\n /**\r\n * 获取组件包描述\r\n * @param lang 语言环境,不传则获取默认标题\r\n */\r\n getDescription(lang?: LanguageCode): string | undefined {\r\n return LanguageUtils.getTextByLocate(this.description, lang)\r\n }\r\n}\r\n\r\nexport interface DevOptions {\r\n folder?: string\r\n route?: boolean\r\n devUrl?: string\r\n remoteEntry?: string\r\n}\r\n","import type { DeployMode } from './DeployMode'\r\n/**\r\n * 组件参数,如宽,高,id,语言等环境参数\r\n */\r\nimport snakeCase from 'lodash/snakeCase'\r\nimport { parseQuery } from '../router/query'\r\n\r\nexport class WidgetParams {\r\n static readonly PARAM_PREFIX = 'w_'\r\n static readonly PARAM_ID = 'id'\r\n static readonly PARAM_LANG = 'lang'\r\n static readonly PARAM_THEME = 'theme'\r\n static readonly PARAM_MODE = 'mode'\r\n static readonly PARAM_NAME = 'name'\r\n static readonly PARAM_TITLE = 'title'\r\n static readonly PARAM_PREVIEW = 'preview'\r\n static readonly PARAMS = [\r\n WidgetParams.PARAM_ID,\r\n WidgetParams.PARAM_LANG,\r\n WidgetParams.PARAM_THEME,\r\n WidgetParams.PARAM_MODE,\r\n WidgetParams.PARAM_NAME,\r\n WidgetParams.PARAM_TITLE,\r\n WidgetParams.PARAM_PREVIEW,\r\n ]\r\n\r\n // 组件id\r\n id?: string\r\n // 网格宽度,1就代表宽度占用1格\r\n width?: number\r\n // 宽度,单位px\r\n widthPx?: number\r\n // 宽度,单位px\r\n heightPx?: number\r\n // 网格高度,2就代表高度占用2格\r\n height?: number\r\n x?: number\r\n y?: number\r\n // 是否是预览模式,添加组件时,预览状态\r\n preview?: boolean\r\n // 语言环境:zh,en,jp...\r\n lang?: string\r\n // 主题:浅色,深色\r\n theme?: ThemeMode\r\n //\r\n mode?: DeployMode\r\n // 系统设置的组件圆角半径\r\n radius?: number\r\n // 组件名\r\n name?: string\r\n title?: string\r\n\r\n /**\r\n * 将组件参数转为url参数\r\n * @param object\r\n * @return URLSearchParams w_w=2&w_h=2&w_id=21&w_width=156&w_height=156\r\n */\r\n toUrlParams(): URLSearchParams {\r\n const urlParams = new URLSearchParams()\r\n const ownPropertyNames = Object.getOwnPropertyNames(this)\r\n for (const ownPropertyName of ownPropertyNames) {\r\n type ObjectKey = keyof typeof this\r\n const key = ownPropertyName as ObjectKey\r\n const value = this[key]\r\n if (value) {\r\n urlParams.append(WidgetParams.PARAM_PREFIX + snakeCase(ownPropertyName), value.toString())\r\n }\r\n }\r\n return urlParams\r\n }\r\n\r\n getPersistKey(): string {\r\n return `${this.name}-${this.id}`\r\n }\r\n\r\n /**\r\n * 从当前地址解析组件参数:\r\n * http://localhost:8080/#/widget/config/labor_progress?w_w=2&w_h=2&w_width=156&w_height=156\r\n * =>\r\n * {width:2,height:2,id:21,width_px:156,height_px:156}\r\n */\r\n static fromCurrentLocation(): WidgetParams {\r\n const href = window.location.href\r\n const strings = href.split('?')\r\n if (strings.length > 1) {\r\n const queryString = strings[1]\r\n return this.fromObject(parseQuery(queryString))\r\n }\r\n return new WidgetParams()\r\n }\r\n\r\n static fromLocation(url: string): WidgetParams {\r\n const strings = url.split('?')\r\n if (strings.length > 1) {\r\n const queryString = strings[1]\r\n return this.fromObject(parseQuery(queryString))\r\n }\r\n return new WidgetParams()\r\n }\r\n\r\n private static setValue(widgetEnv: WidgetParams, key: string, value: string) {\r\n const keyWithoutPrefix = key.replace(this.PARAM_PREFIX, '')\r\n if (keyWithoutPrefix == WidgetParams.PARAM_ID) {\r\n widgetEnv.id = value\r\n }\r\n else if (keyWithoutPrefix == WidgetParams.PARAM_LANG) {\r\n widgetEnv.lang = value\r\n }\r\n else if (keyWithoutPrefix == WidgetParams.PARAM_THEME) {\r\n widgetEnv.theme = value as ThemeMode\r\n }\r\n else if (keyWithoutPrefix == WidgetParams.PARAM_MODE) {\r\n widgetEnv.mode = Number.parseInt(value) as DeployMode\r\n }\r\n else if (keyWithoutPrefix == WidgetParams.PARAM_NAME) {\r\n widgetEnv.name = value\r\n }\r\n else if (keyWithoutPrefix == WidgetParams.PARAM_TITLE) {\r\n widgetEnv.title = value\r\n }\r\n else if (keyWithoutPrefix == WidgetParams.PARAM_PREVIEW) {\r\n widgetEnv.preview = value === 'true'\r\n }\r\n }\r\n\r\n /**\r\n * 从对象键值对中初始化组件参数\r\n * {w_width:2,w_height:2,w_id:21,w_width_px:156,w_height_px:156}=>\r\n * {width:2,height:2,id:21,width_px:156,height_px:156}\r\n * @param object\r\n */\r\n static fromObject(object: any): WidgetParams {\r\n const widgetEnv = new WidgetParams()\r\n const ownPropertyNames = Object.getOwnPropertyNames(object)\r\n for (const ownPropertyName of ownPropertyNames) {\r\n type ObjectKey = keyof typeof this\r\n const key = ownPropertyName as ObjectKey\r\n const value = object[key]\r\n this.setValue(widgetEnv, key, value)\r\n }\r\n return widgetEnv\r\n }\r\n}\r\n\r\nexport enum ThemeMode {\r\n AUTO = 'auto',\r\n LIGHT = 'LIGHT',\r\n DARK = 'DARK',\r\n}\r\n","/**\r\n * Encoding Rules ␣ = Space Path: ␣ \" < > # ? { } Query: ␣ \" < > # & = Hash: ␣ \"\r\n * < > `\r\n *\r\n * On top of that, the RFC3986 (https://tools.ietf.org/html/rfc3986#section-2.2)\r\n * defines some extra characters to be encoded. Most browsers do not encode them\r\n * in encodeURI https://github.com/whatwg/url/issues/369, so it may be safer to\r\n * also encode `!'()*`. Leaving un-encoded only ASCII alphanumeric(`a-zA-Z0-9`)\r\n * plus `-._~`. This extra safety should be applied to query by patching the\r\n * string returned by encodeURIComponent encodeURI also encodes `[\\]^`. `\\`\r\n * should be encoded to avoid ambiguity. Browsers (IE, FF, C) transform a `\\`\r\n * into a `/` if directly typed in. The _backtick_ (`````) should also be\r\n * encoded everywhere because some browsers like FF encode it when directly\r\n * written while others don't. Safari and IE don't encode ``\"<>{}``` in hash.\r\n */\r\n// const EXTRA_RESERVED_RE = /[!'()*]/g\r\n// const encodeReservedReplacer = (c: string) => '%' + c.charCodeAt(0).toString(16)\r\n\r\nconst HASH_RE = /#/g // %23\r\nconst AMPERSAND_RE = /&/g // %26\r\nconst SLASH_RE = /\\//g // %2F\r\nconst EQUAL_RE = /=/g // %3D\r\nconst IM_RE = /\\?/g // %3F\r\nexport const PLUS_RE = /\\+/g // %2B\r\n/**\r\n * NOTE: It's not clear to me if we should encode the + symbol in queries, it\r\n * seems to be less flexible than not doing so and I can't find out the legacy\r\n * systems requiring this for regular requests like text/html. In the standard,\r\n * the encoding of the plus character is only mentioned for\r\n * application/x-www-form-urlencoded\r\n * (https://url.spec.whatwg.org/#urlencoded-parsing) and most browsers seems lo\r\n * leave the plus character as is in queries. To be more flexible, we allow the\r\n * plus character on the query, but it can also be manually encoded by the user.\r\n *\r\n * Resources:\r\n * - https://url.spec.whatwg.org/#urlencoded-parsing\r\n * - https://stackoverflow.com/questions/1634271/url-encoding-the-space-character-or-20\r\n */\r\n\r\nconst ENC_BRACKET_OPEN_RE = /%5B/g // [\r\nconst ENC_BRACKET_CLOSE_RE = /%5D/g // ]\r\nconst ENC_CARET_RE = /%5E/g // ^\r\nconst ENC_BACKTICK_RE = /%60/g // `\r\nconst ENC_CURLY_OPEN_RE = /%7B/g // {\r\nconst ENC_PIPE_RE = /%7C/g // |\r\nconst ENC_CURLY_CLOSE_RE = /%7D/g // }\r\nconst ENC_SPACE_RE = /%20/g // }\r\n\r\n/**\r\n * Encode characters that need to be encoded on the path, search and hash\r\n * sections of the URL.\r\n *\r\n * @internal\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nfunction commonEncode(text: string | number): string {\r\n return encodeURI(`${text}`)\r\n .replace(ENC_PIPE_RE, '|')\r\n .replace(ENC_BRACKET_OPEN_RE, '[')\r\n .replace(ENC_BRACKET_CLOSE_RE, ']')\r\n}\r\n\r\n/**\r\n * Encode characters that need to be encoded on the hash section of the URL.\r\n *\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nexport function encodeHash(text: string): string {\r\n return commonEncode(text)\r\n .replace(ENC_CURLY_OPEN_RE, '{')\r\n .replace(ENC_CURLY_CLOSE_RE, '}')\r\n .replace(ENC_CARET_RE, '^')\r\n}\r\n\r\n/**\r\n * Encode characters that need to be encoded query values on the query\r\n * section of the URL.\r\n *\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nexport function encodeQueryValue(text: string | number): string {\r\n return (\r\n commonEncode(text)\r\n // Encode the space as +, encode the + to differentiate it from the space\r\n .replace(PLUS_RE, '%2B')\r\n .replace(ENC_SPACE_RE, '+')\r\n .replace(HASH_RE, '%23')\r\n .replace(AMPERSAND_RE, '%26')\r\n .replace(ENC_BACKTICK_RE, '`')\r\n .replace(ENC_CURLY_OPEN_RE, '{')\r\n .replace(ENC_CURLY_CLOSE_RE, '}')\r\n .replace(ENC_CARET_RE, '^')\r\n )\r\n}\r\n\r\n/**\r\n * Like `encodeQueryValue` but also encodes the `=` character.\r\n *\r\n * @param text - string to encode\r\n */\r\nexport function encodeQueryKey(text: string | number): string {\r\n return encodeQueryValue(text).replace(EQUAL_RE, '%3D')\r\n}\r\n\r\n/**\r\n * Encode characters that need to be encoded on the path section of the URL.\r\n *\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nexport function encodePath(text: string | number): string {\r\n return commonEncode(text).replace(HASH_RE, '%23').replace(IM_RE, '%3F')\r\n}\r\n\r\n/**\r\n * Encode characters that need to be encoded on the path section of the URL as a\r\n * param. This function encodes everything {@link encodePath} does plus the\r\n * slash (`/`) character. If `text` is `null` or `undefined`, returns an empty\r\n * string instead.\r\n *\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nexport function encodeParam(text: string | number | null | undefined): string {\r\n return text == null ? '' : encodePath(text).replace(SLASH_RE, '%2F')\r\n}\r\n\r\n/**\r\n * Decode text using `decodeURIComponent`. Returns the original text if it\r\n * fails.\r\n *\r\n * @param text - string to decode\r\n * @returns decoded string\r\n */\r\nexport function decode(text: string | number): string {\r\n try {\r\n return decodeURIComponent(`${text}`)\r\n }\n catch (err) {\r\n // __DEV__ && warn(`Error decoding \"${text}\". Using original value`)\r\n }\r\n return `${text}`\r\n}\r\n","import { PLUS_RE, decode, encodeQueryKey, encodeQueryValue } from './encoding'\n\r\nconst isArray: (arg: ArrayLike<any> | any) => arg is ReadonlyArray<any>\r\n = Array.isArray\r\n/**\r\n * Possible values in normalized {@link LocationQuery}. `null` renders the query\r\n * param but without an `=`.\r\n *\r\n * @example\r\n * ```\r\n * ?isNull&isEmpty=&other=other\r\n * gives\r\n * `{ isNull: null, isEmpty: '', other: 'other' }`.\r\n * ```\r\n *\r\n * @internal\r\n */\r\nexport type LocationQueryValue = string | null\r\n/**\r\n * Possible values when defining a query.\r\n *\r\n * @internal\r\n */\r\nexport type LocationQueryValueRaw = LocationQueryValue | number | undefined\r\n/**\r\n * Normalized query object that appears in {@link RouteLocationNormalized}\r\n *\r\n * @public\r\n */\r\nexport type LocationQuery = Record<\r\n string,\r\n LocationQueryValue | LocationQueryValue[]\r\n >\r\n/**\r\n * Loose {@link LocationQuery} object that can be passed to functions like\r\n * {@link Router.push} and {@link Router.replace} or anywhere when creating a\r\n * {@link RouteLocationRaw}\r\n *\r\n * @public\r\n */\r\nexport type LocationQueryRaw = Record<\r\n string | number,\r\n LocationQueryValueRaw | LocationQueryValueRaw[]\r\n >\r\n\r\n/**\r\n * Transforms a queryString into a {@link LocationQuery} object. Accept both, a\r\n * version with the leading `?` and without Should work as URLSearchParams\r\n * @internal\r\n *\r\n * @param search - search string to parse\r\n * @returns a query object\r\n */\r\nexport function parseQuery(search: string): LocationQuery {\r\n const query: LocationQuery = {}\r\n // avoid creating an object with an empty key and empty value\r\n // because of split('&')\r\n if (search === '' || search === '?') { return query }\r\n const hasLeadingIM = search[0] === '?'\r\n const searchParams = (hasLeadingIM ? search.slice(1) : search).split('&')\r\n for (let i = 0; i < searchParams.length; ++i) {\r\n // pre decode the + into space\r\n const searchParam = searchParams[i].replace(PLUS_RE, ' ')\r\n // allow the = character\r\n const eqPos = searchParam.indexOf('=')\r\n const key = decode(eqPos < 0 ? searchParam : searchParam.slice(0, eqPos))\r\n const value = eqPos < 0 ? null : decode(searchParam.slice(eqPos + 1))\r\n\r\n if (key in query) {\r\n // an extra variable for ts types\r\n let currentValue = query[key]\r\n if (!isArray(currentValue)) {\r\n currentValue = query[key] = [currentValue]\r\n }\r\n // we force the modification\r\n ;(currentValue as LocationQueryValue[]).push(value)\r\n }\n else {\r\n query[key] = value\r\n }\r\n }\r\n return query\r\n}\r\n\r\n/**\r\n * Stringifies a {@link LocationQueryRaw} object. Like `URLSearchParams`, it\r\n * doesn't prepend a `?`\r\n *\r\n * @internal\r\n *\r\n * @param query - query object to stringify\r\n * @returns string version of the query without the leading `?`\r\n */\r\nexport function stringifyQuery(query: LocationQueryRaw): string {\r\n let search = ''\r\n for (let key in query) {\r\n const value = query[key]\r\n key = encodeQueryKey(key)\r\n if (value == null) {\r\n // only null adds the value\r\n if (value !== undefined) {\r\n search += (search.length ? '&' : '') + key\r\n }\r\n continue\r\n }\r\n // keep null values\r\n const values: LocationQueryValueRaw[] = isArray(value)\r\n ? value.map(v => v && encodeQueryValue(v))\r\n : [value && encodeQueryValue(value)]\r\n\r\n values.forEach((value) => {\r\n // skip undefined values in arrays as if they were not present\r\n // smaller code than using filter\r\n if (value !== undefined) {\r\n // only append & with non-empty search\r\n search += (search.length ? '&' : '') + key\r\n if (value != null) { search += `=${value}` }\r\n }\r\n })\r\n }\r\n\r\n return search\r\n}\r\n","export interface Language {\r\n baseName: string\r\n language: string\r\n region?: string\r\n nativeName: string\r\n}\r\n\r\ninterface ILanguageMap {\r\n 'ar-SA': Language\r\n 'bn-BD': Language\r\n 'en-US': Language\r\n 'de-DE': Language\r\n 'el-GR': Language\r\n 'es-ES': Language\r\n 'fi-FI': Language\r\n 'fil-PH': Language\r\n 'fr-FR': Language\r\n 'hi-IN': Language\r\n 'hu-HU': Language\r\n 'id-ID': Language\r\n 'it-IT': Language\r\n 'ja-JP': Language\r\n 'ko-KR': Language\r\n 'nl-NL': Language\r\n 'pl-PL': Language\r\n 'pt-BR': Language\r\n 'pt-PT': Language\r\n 'ro-RO': Language\r\n 'ru-RU': Language\r\n 'sv-SE': Language\r\n 'ta-IN': Language\r\n 'tr-TR': Language\r\n 'uk-UA': Language\r\n 'vi-VN': Language\r\n 'zh-CN': Language\r\n 'zh-TW': Language\r\n}\r\n\r\nexport class LanguageMap implements ILanguageMap {\r\n 'ar-SA': Language = { baseName: 'ar-SA', language: 'ar', nativeName: 'العربية' }\r\n 'bn-BD': Language = { baseName: 'bn-BD', language: 'bn', nativeName: 'বাংলা' }\r\n 'en-US': Language = { baseName: 'en-US', language: 'en', nativeName: 'English' }\r\n 'de-DE': Language = { baseName: 'de-DE', language: 'de', nativeName: 'Deutsch' }\r\n 'el-GR': Language = { baseName: 'el-GR', language: 'el', nativeName: 'Ελληνικά' }\r\n 'es-ES': Language = { baseName: 'es-ES', language: 'es', nativeName: 'Español', region: 'ES' }\r\n 'fi-FI': Language = { baseName: 'fi-FI', language: 'fi', nativeName: 'Suomalainen' }\r\n 'fil-PH': Language = { baseName: 'fil-PH', language: 'fil', nativeName: 'Filipino' }\r\n 'fr-FR': Language = { baseName: 'fr-FR', language: 'fr', nativeName: 'Français' }\r\n 'hi-IN': Language = { baseName: 'hi-IN', language: 'hi', nativeName: 'हिंदी' }\r\n 'hu-HU': Language = { baseName: 'hu-HU', language: 'hu', nativeName: 'Magyar' }\r\n 'id-ID': Language = { baseName: 'id-ID', language: 'id', nativeName: 'Bahasa Indonesia' }\r\n 'it-IT': Language = { baseName: 'it-IT', language: 'it', nativeName: 'Italiano' }\r\n 'ja-JP': Language = { baseName: 'ja-JP', language: 'ja', nativeName: '日本語' }\r\n 'ko-KR': Language = { baseName: 'ko-KR', language: 'ko', nativeName: '한국어' }\r\n 'nl-NL': Language = { baseName: 'nl-NL', language: 'nl', nativeName: 'Nederlands' }\r\n 'pl-PL': Language = { baseName: 'pl-PL', language: 'pl', nativeName: 'Polski' }\r\n 'pt-BR': Language = { baseName: 'pt-BR', language: 'pt', nativeName: 'Português (Brazil)', region: 'BR' }\r\n 'pt-PT': Language = { baseName: 'pt-PT', language: 'pt', nativeName: 'Português' }\r\n 'ro-RO': Language = { baseName: 'ro-RO', language: 'ro', nativeName: 'Română' }\r\n 'ru-RU': Language = { baseName: 'ru-RU', language: 'ru', nativeName: 'Русский' }\r\n 'sv-SE': Language = { baseName: 'sv-SE', language: 'sv', nativeName: 'Svenska' }\r\n 'ta-IN': Language = { baseName: 'ta-IN', language: 'ta', nativeName: 'தமிழ்' }\r\n 'tr-TR': Language = { baseName: 'tr-TR', language: 'tr', nativeName: 'Türkçe' }\r\n 'uk-UA': Language = { baseName: 'uk-UA', language: 'uk', nativeName: 'Українська' }\r\n 'vi-VN': Language = { baseName: 'vi-VN', language: 'vi', nativeName: 'Tiếng Việt' }\r\n 'zh-CN': Language = { baseName: 'zh-CN', language: 'zh', nativeName: '简体中文', region: 'CN' }\r\n 'zh-TW': Language = { baseName: 'zh-TW', language: 'zh', nativeName: '繁體中文', region: 'TW' }\r\n}\r\n\r\nexport type LanguageCode = keyof ILanguageMap\r\nexport type LanguageTextMap = {\r\n [key in LanguageCode]?: string;\r\n}\r\n","// source: https://github.com/sindresorhus/normalize-url\r\n// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs\r\nconst DATA_URL_DEFAULT_MIME_TYPE = 'text/plain'\r\nconst DATA_URL_DEFAULT_CHARSET = 'us-ascii'\r\nexport interface NormalizeOptions {\r\n /**\r\n @default 'http'\r\n */\r\n defaultProtocol?: string | 'http' | 'https'\r\n\r\n /**\r\n Prepends `defaultProtocol` to the URL if it's protocol-relative.\r\n\n @default true\r\n\n @example\r\n ```\r\n normalizeUrl('//sindresorhus.com');\r\n //=> 'http://sindresorhus.com'\r\n\n normalizeUrl('//sindresorhus.com', {normalizeProtocol: false});\r\n //=> '//sindresorhus.com'\r\n ```\r\n */\r\n readonly normalizeProtocol?: boolean\r\n\r\n /**\r\n Normalizes HTTPS URLs to HTTP.\r\n\n @default false\r\n\n @example\r\n ```\r\n normalizeUrl('https://sindresorhus.com');\r\n //=> 'https://sindresorhus.com'\r\n\n normalizeUrl('https://sindresorhus.com', {forceHttp: true});\r\n //=> 'http://sindresorhus.com'\r\n ```\r\n */\r\n readonly forceHttp?: boolean\r\n\r\n /**\r\n Normalizes HTTP URLs to HTTPS.\r\n\n This option cannot be used with the `forceHttp` option at the same time.\r\n\n @default false\r\n\n @example\r\n ```\r\n normalizeUrl('http://sindresorhus.com');\r\n //=> 'http://sindresorhus.com'\r\n\n normalizeUrl('http://sindresorhus.com', {forceHttps: true});\r\n //=> 'https://sindresorhus.com'\r\n ```\r\n */\r\n readonly forceHttps?: boolean\r\n\r\n /**\r\n Strip the [authentication](https://en.wikipedia.org/wiki/Basic_access_authentication) part of a URL.\r\n\n @default true\r\n\n @example\r\n ```\r\n normalizeUrl('https://user:password@sindresorhus.com');\r\n //=> 'https://sindresorhus.com'\r\n\n normalizeUrl('https://user:password@sindresorhus.com', {stripAuthentication: false});\r\n //=> 'https://user:password@sindresorhus.com'\r\n ```\r\n */\r\n readonly stripAuthentication?: boolean\r\n\r\n /**\r\n Removes hash from the URL.\r\n\n @default false\r\n\n @example\r\n ```\r\n normalizeUrl('sindresorhus.com/about.html#contact');\r\n //=> 'http://sindresorhus.com/about.html#contact'\r\n\n normalizeUrl('sindresorhus.com/about.html#contact', {stripHash: true});\r\n //=> 'http://sindresorhus.com/about.html'\r\n ```\r\n */\r\n readonly stripHash?: boolean\r\n\r\n /**\r\n Remove the protocol from the URL: `http://sindresorhus.com` → `sindresorhus.com`.\r\n\n It will only remove `https://` and `http://` protocols.\r\n\n @default false\r\n\n @example\r\n ```\r\n normalizeUrl('https://sindresorhus.com');\r\n //=> 'https://sindresorhus.com'\r\n\n normalizeUrl('sindresorhus.com', {stripProtocol: true});\r\n //=> 'sindresorhus.com'\r\n ```\r\n */\r\n readonly stripProtocol?: boolean\r\n\r\n /**\r\n Strip the [text fragment](https://web.dev/text-fragments/) part of the URL\r\n\n __Note:__ The text fragment will always be removed if the `stripHash` option is set to `true`, as the hash contains the text fragment.\r\n\n @default true\r\n\n @example\r\n ```\r\n normalizeUrl('http://sindresorhus.com/about.html#:~:text=hello');\r\n //=> 'http://sindresorhus.com/about.html#'\r\n\n normalizeUrl('http://sindresorhus.com/about.html#section:~:text=hello');\r\n //=> 'http://sindresorhus.com/about.html#section'\r\n\n normalizeUrl('http://sindresorhus.com/about.html#:~:text=hello', {stripTextFragment: false});\r\n //=> 'http://sindresorhus.com/about.html#:~:text=hello'\r\n\n normalizeUrl('http://sindresorhus.com/about.html#section:~:text=hello', {stripTextFragment: false});\r\n //=> 'http://sindresorhus.com/about.html#section:~:text=hello'\r\n ```\r\n */\r\n readonly stripTextFragment?: boolean\r\n\r\n /**\r\n Removes `www.` from the URL.\r\n\n @default true\r\n\n @example\r\n ```\r\n normalizeUrl('http://www.sindresorhus.com');\r\n //=> 'http://sindresorhus.com'\r\n\n normalizeUrl('http://www.sindresorhus.com', {stripWWW: false});\r\n //=> 'http://www.sindresorhus.com'\r\n ```\r\n */\r\n readonly stripWWW?: boolean\r\n\r\n /**\r\n Removes query parameters that matches any of the provided strings or regexes.\r\n\n @default [/^utm_\\w+/i]\r\n\n @example\r\n ```\r\n normalizeUrl('www.sindresorhus.com?foo=bar&ref=test_ref', {\r\n removeQueryParameters: ['ref']\r\n });\r\n //=> 'http://sindresorhus.com/?foo=bar'\r\n ```\r\n\n If a boolean is provided, `true` will remove all the query parameters.\r\n\n ```\r\n normalizeUrl('www.sindresorhus.com?foo=bar', {\r\n removeQueryParameters: true\r\n });\r\n //=> 'http://sindresorhus.com'\r\n ```\r\n\n `false` will not remove any query parameter.\r\n\n ```\r\n normalizeUrl('www.sindresorhus.com?foo=bar&utm_medium=test&ref=test_ref', {\r\n removeQueryParameters: false\r\n });\r\n //=> 'http://www.sindresorhus.com/?foo=bar&ref=test_ref&utm_medium=test'\r\n ```\r\n */\r\n readonly removeQueryParameters?: ReadonlyArray<RegExp | string> | boolean\r\n\r\n /**\r\n Keeps only query parameters that matches any of the provided strings or regexes.\r\n\n __Note__: It overrides the `removeQueryParameters` option.\r\n\n @default undefined\r\n\n @example\r\n ```\r\n normalizeUrl('https://sindresorhus.com?foo=bar&ref=unicorn', {\r\n keepQueryParameters: ['ref']\r\n });\r\n //=> 'https://sindresorhus.com/?ref=unicorn'\r\n ```\r\n */\r\n readonly keepQueryParameters?: ReadonlyArray<RegExp | string>\r\n\r\n /**\r\n Removes trailing slash.\r\n\n __Note__: Trailing slash is always removed if the URL doesn't have a pathname unless the `removeSingleSlash` option is set to `false`.\r\n\n @default true\r\n\n @example\r\n ```\r\n normalizeUrl('http://sindresorhus.com/redirect/');\r\n //=> 'http://sindresorhus.com/redirect'\r\n\n normalizeUrl('http://sindresorhus.com/redirect/', {removeTrailingSlash: false});\r\n //=> 'http://sindresorhus.com/redirect/'\r\n\n normalizeUrl('http://sindresorhus.com/', {removeTrailingSlash: false});\r\n //=> 'http://sindresorhus.com'\r\n ```\r\n */\r\n readonly removeTrailingSlash?: boolean\r\n\r\n /**\r\n Remove a sole `/` pathname in the output. This option is independent of `removeTrailingSlash`.\r\n\n @default true\r\n\n @example\r\n ```\r\n normalizeUrl('https://sindresorhus.com/');\r\n //=> 'https://sindresorhus.com'\r\n\n normalizeUrl('https://sindresorhus.com/', {removeSingleSlash: false});\r\n //=> 'https://sindresorhus.com/'\r\n ```\r\n */\r\n readonly removeSingleSlash?: boolean\r\n\r\n /**\r\n Removes the default directory index file from path that matches any of the provided strings or regexes.\r\n When `true`, the regex `/^index\\.[a-z]+$/` is used.\r\n\n @default false\r\n\n @example\r\n ```\r\n normalizeUrl('www.sindresorhus.com/foo/default.php', {\r\n removeDirectoryIndex: [/^default\\.[a-z]+$/]\r\n });\r\n //=> 'http://sindresorhus.com/foo'\r\n ```\r\n */\r\n removeDirectoryIndex?: boolean | ReadonlyArray<RegExp | string>\r\n\r\n /**\r\n Removes an explicit port number from the URL.\r\n\n Port 443 is always removed from HTTPS URLs and 80 is always removed from HTTP URLs regardless of this option.\r\n\n @default false\r\n\n @example\r\n ```\r\n normalizeUrl('sindresorhus.com:123', {\r\n removeExplicitPort: true\r\n });\r\n //=> 'http://sindresorhus.com'\r\n ```\r\n */\r\n readonly removeExplicitPort?: boolean\r\n\r\n /**\r\n Sorts the query parameters alphabetically by key.\r\n\n @default true\r\n\n @example\r\n ```\r\n normalizeUrl('www.sindresorhus.com?b=two&a=one&c=three', {\r\n sortQueryParameters: false\r\n });\r\n //=> 'http://sindresorhus.com/?b=two&a=one&c=three'\r\n ```\r\n */\r\n readonly sortQueryParameters?: boolean\r\n}\r\n\r\nconst testParameter = (name: string, filters: RegExp[]) => filters.some(filter => filter instanceof RegExp ? filter.test(name) : filter === name)\r\n\r\nconst supportedProtocols = new Set([\r\n 'https:',\r\n 'http:',\r\n 'file:',\r\n])\r\n\r\nfunction hasCustomProtocol(urlString: string) {\r\n try {\r\n const { protocol } = new URL(urlString)\r\n return protocol.endsWith(':') && !supportedProtocols.has(protocol)\r\n }\r\n catch {\r\n return false\r\n }\r\n}\r\n\r\nfunction normalizeDataURL(urlString: string, option: { stripHash: boolean }) {\r\n const match = /^data:(?<type>[^,]*?),(?<data>[^#]*?)(?:#(?<hash>.*))?$/.exec(urlString)\r\n\r\n if (!match) {\r\n throw new Error(`Invalid URL: ${urlString}`)\r\n }\r\n\r\n let { type, data, hash } = match.groups as any\r\n const mediaType = type.split(';') as string[]\r\n hash = option.stripHash ? '' : hash\r\n\r\n let isBase64 = false\r\n if (mediaType[mediaType.length - 1] === 'base64') {\r\n mediaType.pop()\r\n isBase64 = true\r\n }\r\n\r\n // Lowercase MIME type\r\n const mimeType = mediaType.shift()?.toLowerCase() ?? ''\r\n const attributes = mediaType\r\n .map((attribute) => {\r\n let [key, value = ''] = attribute.split('=').map(item => item.trim())\r\n\r\n // Lowercase `charset`\r\n if (key === 'charset') {\r\n value = value.toLowerCase()\r\n\r\n if (value === DATA_URL_DEFAULT_CHARSET) {\r\n return ''\r\n }\r\n }\r\n\r\n return `${key}${value ? `=${value}` : ''}`\r\n })\r\n .filter(Boolean)\r\n\r\n const normalizedMediaType = [\r\n ...attributes,\r\n ]\r\n\r\n if (isBase64) {\r\n normalizedMediaType.push('base64')\r\n }\r\n\r\n if (normalizedMediaType.length > 0 || (mimeType && mimeType !== DATA_URL_DEFAULT_MIME_TYPE)) {\r\n normalizedMediaType.unshift(mimeType)\r\n }\r\n\r\n return `data:${normalizedMediaType.join(';')},${isBase64 ? data.trim() : data}${hash ? `#${hash}` : ''}`\r\n}\r\n\r\nexport function normalizeUrl(urlString: string, options?: NormalizeOptions) {\r\n options = {\r\n defaultProtocol: 'http',\r\n normalizeProtocol: true,\r\n forceHttp: false,\r\n forceHttps: false,\r\n stripAuthentication: true,\r\n stripHash: false,\r\n stripTextFragment: true,\r\n stripWWW: true,\r\n removeQueryParameters: [/^utm_\\w+/i],\r\n removeTrailingSlash: true,\r\n removeSingleSlash: true,\r\n removeDirectoryIndex: false,\r\n removeExplicitPort: false,\r\n sortQueryParameters: true,\r\n ...options,\r\n }\r\n urlString = urlString.replace('\\\\\\\\', '//')\r\n\r\n // Legacy: Append `:` to the protocol if missing.\r\n if (typeof options.defaultProtocol === 'string' && !options.defaultProtocol.endsWith(':')) {\r\n options.defaultProtocol = `${options.defaultProtocol}:`\r\n }\r\n\r\n urlString = urlString.trim()\r\n\r\n // Data URL\r\n if (/^data:/i.test(urlString)) {\r\n return normalizeDataURL(urlString, { stripHash: options.stripHash ?? false })\r\n }\r\n\r\n if (hasCustomProtocol(urlString)) {\r\n return urlString\r\n }\r\n\r\n const hasRelativeProtocol = urlString.startsWith('//')\r\n const isRelativeUrl = !hasRelativeProtocol && /^\\.*\\//.test(urlString)\r\n\r\n // Prepend protocol\r\n if (!isRelativeUrl) {\r\n urlString = urlString.replace(/^(?!(?:\\w+:)?\\/\\/)|^\\/\\//, options.defaultProtocol!)\r\n }\r\n\r\n const urlObject = new URL(urlString)\r\n\r\n if (options.forceHttp && options.forceHttps) {\r\n throw new Error('The `forceHttp` and `forceHttps` options cannot be used together')\r\n }\r\n\r\n if (options.forceHttp && urlObject.protocol === 'https:') {\r\n urlObject.protocol = 'http:'\r\n }\r\n\r\n if (options.forceHttps && urlObject.protocol === 'http:') {\r\n urlObject.protocol = 'https:'\r\n }\r\n\r\n // Remove auth\r\n if (options.stripAuthentication) {\r\n urlObject.username = ''\r\n urlObject.password = ''\r\n }\r\n\r\n // Remove hash\r\n if (options.stripHash) {\r\n urlObject.hash = ''\r\n }\r\n else if (options.stripTextFragment) {\r\n urlObject.hash = urlObject.hash.replace(/#?:~:text.*?$/i, '')\r\n }\r\n\r\n // Remove duplicate slashes if not preceded by a protocol\r\n // NOTE: This could be implemented using a single negative lookbehind\r\n // regex, but we avoid that to maintain compatibility with older js engines\r\n // which do not have support for that feature.\r\n if (urlObject.pathname) {\r\n // TODO: Replace everything below with `urlObject.pathname = urlObject.pathname.replace(/(?<!\\b[a-z][a-z\\d+\\-.]{1,50}:)\\/{2,}/g, '/');` when Safari supports negative lookbehind.\r\n\r\n // Split the string by occurrences of this protocol regex, and perform\r\n // duplicate-slash replacement on the strings between those occurrences\r\n // (if any).\r\n const protocolRegex = /\\b[a-z][a-z\\d+\\-.]{1,50}:\\/\\//g\r\n\r\n let lastIndex = 0\r\n let result = ''\r\n for (; ;) {\r\n const match = protocolRegex.exec(urlObject.pathname)\r\n if (!match) {\r\n break\r\n }\r\n\r\n const protocol = match[0]\r\n const protocolAtIndex = match.index\r\n const intermediate = urlObject.pathname.slice(lastIndex, protocolAtIndex)\r\n\r\n result += intermediate.replace(/\\/{2,}/g, '/')\r\n result += protocol\r\n lastIndex = protocolAtIndex + protocol.length\r\n }\r\n\r\n const remnant = urlObject.pathname.slice(lastIndex, urlObject.pathname.length)\r\n result += remnant.replace(/\\/{2,}/g, '/')\r\n\r\n urlObject.pathname = result\r\n }\r\n\r\n // Decode URI octets\r\n if (urlObject.pathname) {\r\n try {\r\n urlObject.pathname = decodeURI(urlObject.pathname)\r\n }\r\n catch {\r\n }\r\n }\r\n\r\n // Remove directory index\r\n if (options.removeDirectoryIndex === true) {\r\n options.removeDirectoryIndex = [/^index\\.[a-z]+$/]\r\n }\r\n\r\n if (Array.isArray(options.removeDirectoryIndex) && options.removeDirectoryIndex.length > 0) {\r\n let pathComponents = urlObject.pathname.split('/')\r\n const lastComponent = pathComponents[pathComponents.length - 1]\r\n\r\n if (testParameter(lastComponent, options.removeDirectoryIndex)) {\r\n pathComponents = pathComponents.slice(0, -1)\r\n urlObject.pathname = `${pathComponents.slice(1).join('/')}/`\r\n }\r\n }\r\n\r\n if (urlObject.hostname) {\r\n // Remove trailing dot\r\n urlObject.hostname = urlObject.hostname.replace(/\\.$/, '')\r\n\r\n // Remove `www.`\r\n if (options.stripWWW && /^www\\.(?!www\\.)[a-z\\-\\d]{1,63}\\.[a-z.\\-\\d]{2,63}$/.test(urlObject.hostname)) {\r\n // Each label should be max 63 at length (min: 1).\r\n // Source: https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names\r\n // Each TLD should be up to 63 characters long (min: 2).\r\n // It is technically possible to have a single character TLD, but none currently exist.\r\n urlObject.hostname = urlObject.hostname.replace(/^www\\./, '')\r\n }\r\n }\r\n\r\n // Remove query unwanted parameters\r\n if (Array.isArray(options.removeQueryParameters)) {\r\n for (const key of [...urlObject.searchParams.keys()]) {\r\n if (testParameter(key, options.removeQueryParameters)) {\r\n urlObject.searchParams.delete(key)\r\n }\r\n }\r\n }\r\n\r\n if (!Array.isArray(options.keepQueryParameters) && options.removeQueryParameters === true) {\r\n urlObject.search = ''\r\n }\r\n\r\n // Keep wanted query parameters\r\n if (Array.isArray(options.keepQueryParameters) && options.keepQueryParameters.length > 0) {\r\n for (const key of [...urlObject.searchParams.keys()]) {\r\n if (!testParameter(key, options.keepQueryParameters)) {\r\n urlObject.searchParams.delete(key)\r\n }\r\n }\r\n }\r\n\r\n // Sort query parameters\r\n if (options.sortQueryParameters) {\r\n urlObject.searchParams.sort()\r\n\r\n // Calling `.sort()` encodes the search parameters, so we need to decode them again.\r\n try {\r\n urlObject.search = decodeURIComponent(urlObject.search)\r\n }\r\n catch {\r\n }\r\n }\r\n\r\n if (options.removeTrailingSlash) {\r\n urlObject.pathname = urlObject.pathname.replace(/\\/$/, '')\r\n }\r\n\r\n // Remove an explicit port number, excluding a default port number, if applicable\r\n if (options.removeExplicitPort && urlObject.port) {\r\n urlObject.port = ''\r\n }\r\n\r\n const oldUrlString = urlString\r\n\r\n // Take advantage of many of the Node `url` normalizations\r\n urlString = urlObject.toString()\r\n\r\n if (!options.removeSingleSlash && urlObject.pathname === '/' && !oldUrlString.endsWith('/') && urlObject.hash === '') {\r\n urlString = urlString.replace(/\\/$/, '')\r\n }\r\n\r\n // Remove ending `/` unless removeSingleSlash is false\r\n if ((options.removeTrailingSlash || urlObject.pathname === '/') && urlObject.hash === '' && options.removeSingleSlash) {\r\n urlString = urlString.replace(/\\/$/, '')\r\n }\r\n\r\n // Restore relative protocol, if applicable\r\n if (hasRelativeProtocol && !options.normalizeProtocol) {\r\n urlString = urlString.replace(/^http:\\/\\//, '//')\r\n }\r\n\r\n // Remove http/https\r\n if (options.stripProtocol) {\r\n urlString = urlString.replace(/^(?:https?:)?\\/\\//, '')\r\n }\r\n\r\n return urlString\r\n}\r\n","export interface IGridRect {\n top: number\n left: number\n width: number\n height: number\n}\n\nexport class GridRect implements IGridRect {\n top: number\n left: number\n width: number\n height: number\n\n constructor(left: number, top: number, width: number, height: number) {\n this.top = top\n this.left = left\n this.width = width\n this.height = height\n }\n\n get right(): number {\n return this.left + this.width\n }\n\n get bottom(): number {\n return this.top + this.height\n }\n}\n\nexport class GridSystem extends GridRect {\n cellSize: number\n horizontalCellCount: number\n verticalCellCount: number\n screenWidth: number\n screenHeight: number\n /**\n * 屏幕x坐标,用于解决多块屏幕坐标计算问题\n */\n screenLeft?: number\n /**\n * 屏幕y坐标,用于解决多块屏幕坐标计算问题\n */\n screenTop?: number\n canvasScreenTop: number\n canvasScreenLeft: number\n\n /**\n *\n * @param cellSize\n * @param padding 至少保留的边距\n * @param screenWidth\n * @param screenHeight\n * @param screenX\n * @param screenY\n */\n constructor(\n cellSize: number,\n padding: number,\n screenWidth: number,\n screenHeight: number,\n screenX?: number,\n screenY?: number,\n ) {\n const gridMaxWidth = screenWidth - padding * 2\n const gridMaxHeight = screenHeight - padding * 2\n const horizontalPadding = (gridMaxWidth % cellSize) / 2 + padding\n const verticalPadding = (gridMaxHeight % cellSize) / 2 + padding\n const horizontalCellCount = Math.floor(gridMaxWidth / cellSize)\n const verticalCellCount = Math.floor(gridMaxHeight / cellSize)\n super(horizontalPadding, verticalPadding, horizontalCellCount * cellSize, verticalCellCount * cellSize)\n this.canvasScreenLeft = horizontalPadding + (screenX ?? 0)\n this.canvasScreenTop = verticalPadding + (screenY ?? 0)\n this.cellSize = cellSize\n this.screenWidth = screenWidth\n this.screenHeight = screenHeight\n this.horizontalCellCount = horizontalCellCount\n this.verticalCellCount = verticalCellCount\n this.screenLeft = screenX\n this.screenTop = screenY\n }\n\n /**\n * 将坐标对齐到网格上\n * @param x\n * @param y\n * @param gridSystem\n */\n snapCanvasPosition(x: number, y: number): number[] {\n // 转为0坐标系\n const newX = this.getRangeValue(x - this.left, 0, this.right)\n const newY = this.getRangeValue(y - this.top, 0, this.bottom)\n return this.snapPosition(newX, newY)\n }\n\n private snapPosition(newX: number, newY: number) {\n const diffX = newX % this.cellSize\n if (diffX >= this.cellSize / 2) {\n newX = newX + this.cellSize - diffX\n }\n else {\n newX = newX - diffX\n }\n\n const diffY = newY % this.cellSize\n if (diffY >= this.cellSize / 2) {\n newY = newY + this.cellSize - diffY\n }\n else {\n newY = newY - diffY\n }\n return [newX + this.left, newY + this.top]\n }\n\n snapSize(width: number, height: number): number[] {\n let newWidth = Math.floor(width)\n let newHeight = Math.floor(height)\n const diffWidth = newWidth % this.cellSize\n const diffHeight = newHeight % this.cellSize\n if (diffWidth > this.cellSize / 2) {\n newWidth = width + this.cellSize - diffWidth\n }\n else {\n newWidth = width - diffWidth\n }\n\n if (diffHeight > this.cellSize / 2) {\n newHeight = height + this.cellSize - diffHeight\n }\n else {\n newHeight = height - diffHeight\n }\n\n return [newWidth, newHeight]\n }\n\n /**\n * 将矩形对齐到网格上\n * @param rect\n * @param minWidth\n * @param maxWidth\n * @param minHeight\n * @param maxHeight\n */\n snapCanvasRect(rect: GridRect, minWidth: number, maxWidth: number, minHeight: number, maxHeight: number): IGridRect {\n const [newX, newY] = this.snapCanvasPosition(rect.left, rect.top)\n return this.snapRect(rect, minWidth, maxWidth, minHeight, maxHeight, newX, newY)\n }\n\n private snapRect(\n rect: GridRect,\n minWidth: number,\n maxWidth: number,\n minHeight: number,\n maxHeight: number,\n newX: number,\n newY: number,\n ) {\n let [newWidth, newHeight] = this.snapSize(rect.width, rect.height)\n newWidth = this.getRangeValue(newWidth, minWidth, maxWidth)\n newHeight = this.getRangeValue(newHeight, minHeight, maxHeight)\n\n if (newX + newWidth > this.right) {\n newX = this.right - newWidth\n }\n if (newY + newHeight > this.bottom) {\n newY = this.bottom - newHeight\n }\n return new GridRect(newX, newY, newWidth, newHeight)\n }\n\n /**\n * 将矩形对齐到网格上,与snapRect的区别是,这个会加上屏幕x和y坐标,用于适配多个显示器\n * @param rect\n * @param minWidth\n * @param maxWidth\n * @param minHeight\n * @param maxHeight\n */\n snapWindow(rect: GridRect, minWidth: number, maxWidth: number, minHeight: number, maxHeight: number): IGridRect {\n rect.left = rect.left - (this.screenLeft ?? 0)\n rect.top = rect.top - (this.screenTop ?? 0)\n const result = this.snapCanvasRect(rect, minWidth, maxWidth, minHeight, maxHeight)\n return new GridRect(\n result.left + (this.screenLeft ?? 0),\n result.top + (this.screenTop ?? 0),\n result.width,\n result.height,\n )\n }\n\n /**\n * 限制值不超出屏幕\n * @param value\n * @param min\n * @param max\n * @private\n */\n private getRangeValue(value: number, min: number, max: number) {\n if (value < min) {\n return min\n }\n if (value > max) {\n return max\n }\n return value\n }\n\n getWidth() {\n return this.width\n }\n\n getHeight() {\n return this.height\n }\n}\n","export class ApiConstants {\r\n static readonly CONFIG_LAUNCH_AT_STARTUP = 'CONFIG_LAUNCH_AT_STARTUP'\r\n static readonly CONFIG_WIDGET_TITLE_COLOR = 'CONFIG_WIDGET_TITLE_COLOR'\r\n static readonly CONFIG_DEBUG_MODE = 'cn.widgetjs.config.debug'\r\n static readonly CONFIG_GRID_CELL_SIZE = 'cn.widgetjs.config.grid.size'\r\n static readonly SHORTCUT_PIN_DESKTOP_WIDGETS = 'cn.widgetjs.config.shortcut.pin_desktop_widgets'\r\n}\r\n\r\nexport class AppEvent {\r\n static readonly LANGUAGE_CHANGED = 'event::cn.widgetjs.core.app.language.changed'\r\n}\r\n\r\nexport class AppConfig {\r\n static readonly LANGUAGE = 'cn.widgetjs.config.app.language'\r\n static readonly LAUNCH_AT_STARTUP = 'CONFIG_LAUNCH_AT_STARTUP'\r\n}\r\n","import { ElectronUtils } from '../utils/ElectronUtils'\r\n\r\nexport abstract class BaseApi<T extends string> {\n abstract getChannel(): string\r\n\r\n protected async invokeMethod(method: T, ...args: any[]): Promise<any> {\r\n return await ElectronUtils.invokeMethod(this.getChannel(), method, ...args)\r\n }\r\n\r\n protected async invoke(...args: any[]): Promise<any> {\r\n return await ElectronUtils.invoke(this.getChannel(), ...args)\r\n }\r\n}\r\n","export enum Channel {\r\n NOTIFICATION = 'channel::cn.widgetjs.core.notification',\r\n BROWSER_WINDOW = 'channel::cn.widgetjs.core.browser_window',\r\n BROADCAST = 'channel::cn.widgetjs.core.broadcast',\r\n WIDGET = 'channel::cn.widgetjs.core.widget',\r\n WIDGET_PACKAGE = 'channel::cn.widgetjs.core.widget.package',\r\n DEPLOYED_WIDGET = 'channel::cn.widgetjs.core.deployed_widget',\r\n APP = 'channel::cn.widgetjs.core.app',\r\n SYSTEM = 'channel::cn.widgetjs.core.system',\r\n DIALOG = 'channel::cn.widgetjs.core.dialog',\r\n HTTP = 'channel::cn.widgetjs.core.http',\r\n CLIPBOARD = 'channel::cn.widgetjs.core.clipboard',\r\n FILE = 'channel::cn.widgetjs.core.file',\r\n SCREEN = 'channel::cn.widgetjs.core.screen',\r\n MENU = 'channel::cn.widgetjs.core.menu',\r\n SHORTCUT = 'channel::cn.widgetjs.core.shortcut',\r\n LOG = 'channel::cn.widgetjs.core.log',\r\n\r\n DEVICE = 'channel::cn.widgetjs.core.device',\r\n MOUSE = 'channel::cn.widgetjs.core.mouse',\r\n KEYBOARD = 'channel::cn.widgetjs.core.keyboard',\r\n /**\r\n * @deprecated\r\n */\r\n STORE = 'channel::cn.widgetjs.core.store',\r\n STORAGE = 'channel::cn.widgetjs.core.storage',\r\n\r\n PROCESS = 'channel::cn.widgetjs.core.process',\r\n USER = 'channel::cn.widgetjs.core.user',\r\n TRAY = 'channel::cn.widgetjs.core.tray',\r\n AI = 'channel::cn.widgetjs.core.ai',\r\n}\r\n","import type { LanguageCode } from '../lang/LanguageCode'\r\nimport type { AppApiConstants, AppApiMethods, AppRoutes, IAppApi } from './interface'\r\nimport type { AppRuntimeInfo, BrowserWindowOptions } from './structures'\r\nimport { ElectronUtils } from '../utils'\r\nimport { BaseApi } from './BaseApi'\r\n\r\nimport { Channel } from './Channel'\r\n\r\nclass AppApiImpl extends BaseApi<AppApiMethods> implements IAppApi {\r\n showAppWindow(route: string | AppRoutes, options?: BrowserWindowOptions): Promise<void> {\r\n return this.invokeMethod('showAppWindow', route, options)\r\n }\r\n\r\n openWidgetPackageManagerWindow(): Promise<void> {\r\n return this.invokeMethod('openWidgetPackageManagerWindow')\r\n }\r\n\r\n getRuntimeInfo(): Promise<AppRuntimeInfo> {\r\n return this.invokeMethod('getRuntimeInfo')\r\n }\r\n\r\n setProxy(config?: Electron.Config): Promise<void> {\r\n return this.invokeMethod('setProxy', config)\r\n }\r\n\r\n getProxy(): Promise<Electron.Config> {\r\n return this.invokeMethod('getProxy')\r\n }\r\n\r\n isWindowsStore(): Promise<boolean> {\r\n return this.invokeMethod('isWindowsStore')\r\n }\r\n\r\n getAppPath(): Promise<string> {\r\n return this.invokeMethod('getAppPath')\r\n }\r\n\r\n async getIconFile(): Promise<string> {\r\n return this.invokeMethod('getIconFile')\r\n }\r\n\r\n getChannel(): string {\r\n return Channel.APP\r\n }\r\n\r\n async setConfig<T extends string | number | boolean>(key: AppApiConstants | string, value: T): Promise<T> {\r\n return await this.invokeMethod('setConfig', key, value)\r\n }\r\n\r\n async getConfig<T extends string | number | boolean>(key: string | AppApiConstants, defaultValue: T): Promise<T> {\r\n const value = await this.invokeMethod('getConfig', key)\r\n if (value === null || value === undefined) {\r\n return defaultValue\r\n }\r\n if (typeof defaultValue == 'boolean') {\r\n return (value === 'true') as T\r\n }\r\n\r\n if (typeof defaultValue == 'number') {\r\n return Number(value) as T\r\n }\r\n return value\r\n }\r\n\r\n async openAddWidgetWindow() {\r\n return this.invokeMethod('openAddWidgetWindow')\r\n }\r\n\r\n async getVersion(type?: 'app' | 'electron' | 'chrome' | 'node' | 'v8'): Promise<string> {\r\n return this.invokeMethod('getVersion', type)\r\n }\r\n\r\n async getPreloadPath(): Promise<string> {\r\n return this.invokeMethod('getPreloadPath')\r\n }\r\n\r\n async openSettingWindow() {\r\n return this.invokeMethod('openSettingWindow')\r\n }\r\n\r\n getThemeCSS(): Promise<string> {\r\n return this.invokeMethod('getThemeCSS')\r\n }\r\n\r\n setThemeCSS(css: string): Promise<void> {\r\n return this.invokeMethod('setThemeCSS', css)\r\n }\r\n\r\n getDevMode(): Promise<boolean> {\r\n return this.invokeMethod('getDevMode')\r\n }\r\n\r\n setDevMode(enable: boolean): Promise<void> {\r\n return this.invokeMethod('setDevMode', enable)\r\n }\r\n\r\n getLanguageCode(): Promise<string> {\r\n if (ElectronUtils.hasElectronApi()) {\r\n return this.invokeMethod('getLanguageCode')\r\n }\r\n return Promise.resolve(navigator.language)\r\n }\r\n\r\n async setLanguageCode(code: LanguageCode): Promise<void> {\r\n await this.invokeMethod('setLanguageCode', code)\r\n }\r\n\r\n getGridCellSize(): Promise<number> {\r\n return this.invokeMethod('getGridCellSize')\r\n }\r\n\r\n setGridCellSize(size: number): Promise<void> {\r\n return this.invokeMethod('setGridCellSize', size)\r\n }\r\n\r\n exit(): Promise<void> {\r\n return this.invokeMethod('exit')\r\n }\r\n\r\n openCheckUpdateWindow(): Promise<void> {\r\n return this.invokeMethod(`openCheckUpdateWindow`)\r\n }\r\n\r\n openWidgetManagerWindow(): Promise<void> {\r\n return this.invokeMethod(`openWidgetManagerWindow`)\r\n }\r\n\r\n openRuntimeInfoWindow(): Promise<void> {\r\n return this.invokeMethod(`openRuntimeInfoWindow`)\r\n }\r\n}\r\n\r\nconst AppApi: IAppApi = new AppApiImpl()\r\n\r\nexport { AppApi }\r\n","import type { BroadcastEvent } from '../model/event/BroadcastEvent'\r\nimport { Channel } from './Channel'\r\nimport { BaseApi } from './BaseApi'\r\nimport type { WidgetApiEvent } from './WidgetApi'\r\nimport type { ShortcutApiEvent } from './ShortcutApi'\r\nimport type { ClipboardApiEvent } from './ClipboardApi'\r\nimport type { BrowserWindowApiEvent } from './BrowserWindowApi'\r\nimport type { IBroadcastApi } from './interface/IBroadcastApi'\r\nimport type { MouseApiEvent } from './interface'\r\n\r\ntype BroadcastEventType = string | WidgetApiEvent | BrowserWindowApiEvent | ShortcutApiEvent | ClipboardApiEvent | MouseApiEvent\r\n\r\ntype BroadcastApiMethods = keyof IBroadcastApi\r\n\r\nclass BroadcastApiImpl extends BaseApi<BroadcastApiMethods> implements IBroadcastApi {\r\n async send(event: BroadcastEvent) {\r\n await this.invokeMethod('send', event)\r\n }\r\n\r\n async register(...event: BroadcastEventType[]) {\r\n await this.invokeMethod('register', event)\r\n }\r\n\r\n async unregister(...event: BroadcastEventType[]) {\r\n await this.invokeMethod('unregister', event)\r\n }\r\n\r\n getChannel(): string {\r\n return Channel.BROADCAST\r\n }\r\n}\r\n\r\nconst BroadcastApi: IBroadcastApi = new BroadcastApiImpl()\r\n\r\nexport { BroadcastApi, BroadcastApiMethods, BroadcastEventType }\r\n","import { ElectronUtils } from '../utils'\r\nimport type { BrowserWindowOptions, Position, ProxyConfig, Rectangle } from './structures'\r\nimport { Channel } from './Channel'\r\nimport { BaseApi } from './BaseApi'\r\nimport type { IBrowserWindowApi } from './interface/IBrowserWindowApi'\r\n\r\ntype BrowserWindowApiMethods = keyof IBrowserWindowApi\r\ntype AlignPosition = 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right'\r\n\r\ninterface SetPositionOptions {\r\n x?: number\r\n y?: number\r\n /**\r\n * Only works on macOS\r\n */\r\n animation?: boolean\r\n}\r\n\r\nenum BrowserWindowApiEvent {\r\n BLUR = 'event::cn.widgetjs.core.browser-window.blur',\r\n MOVED = 'event::cn.widgetjs.core.browser-window.moved',\r\n FOCUS = 'event::cn.widgetjs.core.browser-window.focus',\r\n CLOSE = 'event::cn.widgetjs.core.browser-window.close',\r\n SNAP_TO_EDGE = 'event::cn.widgetjs.core.browser-window.snap_to_edge',\r\n RESIZED = 'event::cn.widgetjs.core.browser-window.resized',\r\n CANCEL_SNAP_TO_EDGE = 'event::cn.widgetjs.core.browser-window.cancel_snap_to_edge',\r\n}\r\n\r\ninterface SetupOptions {\r\n width: number\r\n height: number\r\n minWidth?: number\r\n minHeight?: number\r\n maxWidth?: number\r\n maxHeight?: number\r\n resizable?: boolean\r\n movable?: boolean\r\n center?: boolean\r\n alwaysOnTop?: boolean\r\n x?: number\r\n y?: number\r\n skipTaskbar?: boolean\r\n}\r\n\r\nclass BrowserWindowApiImpl extends BaseApi<BrowserWindowApiMethods> implements IBrowserWindowApi {\r\n getProxy(): Promise<ProxyConfig | undefined> {\r\n return this.invokeMethod('getProxy')\r\n }\r\n\r\n setBackgroundThrottling(enabled: boolean): Promise<void> {\r\n return this.invokeMethod('setBackgroundThrottling', enabled)\r\n }\r\n\r\n getBackgroundThrottling(): Promise<boolean> {\r\n return this.invokeMethod('getBackgroundThrottling')\r\n }\r\n\r\n isResizable(): Promise<boolean> {\r\n return this.invokeMethod('isResizable')\r\n }\r\n\r\n setHasShadow(hasShadow: boolean): Promise<void> {\r\n return this.invokeMethod('setHasShadow', hasShadow)\r\n }\r\n\r\n isDraggingWindow(): Promise<boolean> {\r\n return this.invokeMethod('isDraggingWindow')\r\n }\r\n\r\n setNoActivate(): Promise<void> {\r\n return this.invokeMethod('setNoActivate')\r\n }\r\n\r\n async isVisible(): Promise<boolean> {\r\n return await this.invokeMethod('isVisible')\r\n }\r\n\r\n getChannel(): string {\r\n return Channel.BROWSER_WINDOW\r\n }\r\n\r\n async setIgnoreMouseEvent(ignore: boolean) {\r\n await this.invokeMethod('setIgnoreMouseEvent', ignore)\r\n }\r\n\r\n async show() {\r\n await this.invokeMethod('show', true)\r\n }\r\n\r\n async showInactive() {\r\n await this.invokeMethod('showInactive', true)\r\n }\r\n\r\n async hide() {\r\n await this.invokeMethod('hide', false)\r\n }\r\n\r\n async center() {\r\n await this.invokeMethod('center', false)\r\n }\r\n\r\n async setAlwaysOnTop(alwaysOnTop: boolean) {\r\n await this.invokeMethod('setAlwaysOnTop', alwaysOnTop)\r\n }\r\n\r\n async isAlwaysOnTop(): Promise<boolean> {\r\n return await this.invokeMethod('isAlwaysOnTop')\r\n }\r\n\r\n async openUrl(url: string, option?: BrowserWindowOptions) {\r\n if (ElectronUtils.hasElectronApi()) {\r\n await this.invokeMethod('openUrl', url, option)\r\n }\r\n else {\r\n window.open(url, '_blank')\r\n }\r\n }\r\n\r\n async moveTop() {\r\n await this.invokeMethod('moveTop')\r\n }\r\n\r\n async openDevTools() {\r\n await this.invokeMethod('openDevTools')\r\n }\r\n\r\n async setPosition(options: SetPositionOptions) {\r\n await this.invokeMethod('setPosition', options)\r\n }\r\n\r\n async getPosition(): Promise<Position> {\r\n return await this.invokeMethod('getPosition')\r\n }\r\n\r\n async blur() {\r\n return await this.invokeMethod('blur')\r\n }\r\n\r\n async focus() {\r\n return await this.invokeMethod('focus')\r\n }\r\n\r\n /**\r\n * 设置窗口是否可以拉伸\r\n * @param resizable\r\n */\r\n async setResizable(resizable: boolean) {\r\n return await this.invokeMethod('setResizable', resizable)\r\n }\r\n\r\n async getBounds(): Promise<Rectangle> {\r\n return await this.invokeMethod('getBounds')\r\n }\r\n\r\n async setBounds(bounds: Partial<Rectangle>, animate?: boolean): Promise<void> {\r\n return await this.invokeMethod('setBounds', bounds, animate)\r\n }\r\n\r\n async alignToScreen(align: AlignPosition) {\r\n return await this.invokeMethod('alignToScreen', align)\r\n }\r\n\r\n async startDraggingWindow() {\r\n return await this.invokeMethod('startDraggingWindow')\r\n }\r\n\r\n async stopDraggingWindow() {\r\n return await this.invokeMethod('stopDraggingWindow')\r\n }\r\n\r\n /**\r\n * 通过url检测窗口是否存在\r\n * @param url\r\n */\r\n async existsByUrl(url: string): Promise<boolean> {\r\n return await this.invokeMethod('existsByUrl', url)\r\n }\r\n\r\n async getMaximumSize(): Promise<number[]> {\r\n return await this.invokeMethod('getMaximumSize')\r\n }\r\n\r\n async minimize(): Promise<void> {\r\n return await this.invokeMethod('minimize')\r\n }\r\n\r\n async maximize(): Promise<void> {\r\n return await this.invokeMethod('maximize')\r\n }\r\n\r\n async isMaximized(): Promise<boolean> {\r\n return await this.invokeMethod('isMaximized')\r\n }\r\n\r\n async isMinimized(): Promise<boolean> {\r\n return await this.invokeMethod('isMinimized')\r\n }\r\n\r\n async restore(): Promise<void> {\r\n return await this.invokeMethod('restore')\r\n }\r\n\r\n async unmaximize(): Promise<void> {\r\n return await this.invokeMethod('unmaximize')\r\n }\r\n\r\n async setZoomLevel(level: number): Promise<void> {\r\n return await this.invokeMethod('setZoomLevel', level)\r\n }\r\n\r\n async reload(): Promise<void> {\r\n return await this.invokeMethod('reload')\r\n }\r\n\r\n async setMovable(movable: boolean): Promise<void> {\r\n return await this.invokeMethod('setMovable', movable)\r\n }\r\n\r\n async setSize(width: number, height: number, animate?: boolean): Promise<void> {\r\n return this.invokeMethod('setSize', width, height, animate)\r\n }\r\n\r\n async isFocused(): Promise<boolean> {\r\n return this.invokeMethod('isFocused')\r\n }\r\n\r\n async setMaximumSize(width: number, height: number): Promise<void> {\r\n return this.invokeMethod('setMaximumSize', width, height)\r\n }\r\n\r\n async setMinimumSize(width: number, height: number): Promise<void> {\r\n return this.invokeMethod('setMinimumSize', width, height)\r\n }\r\n\r\n getMinimumSize(): Promise<number[]> {\r\n return this.invokeMethod('getMinimumSize')\r\n }\r\n\r\n close(): Promise<void> {\r\n return this.invokeMethod('close')\r\n }\r\n\r\n setZoomFactor(factor: number): Promise<void> {\r\n return this.invokeMethod('setZoomFactor', factor)\r\n }\r\n\r\n async setup(options: SetupOptions): Promise<void> {\r\n if (options.alwaysOnTop) {\r\n await this.setAlwaysOnTop(true)\r\n }\r\n await this.setResizable(!!options.resizable)\r\n await this.setMovable(!!options.movable)\r\n if (options.width && options.height) {\r\n await this.setSize(options.width, options.height)\r\n }\r\n if (options.minWidth && options.minHeight) {\r\n await this.setMinimumSize(options.minWidth, options.minHeight)\r\n }\r\n if (options.maxWidth && options.maxHeight) {\r\n await this.setMaximumSize(options.maxWidth, options.maxHeight)\r\n }\r\n if (options.center) {\r\n await this.center()\r\n }\r\n if (options.x != undefined || options.y != undefined) {\r\n await this.setPosition({ x: options.x, y: options.y })\r\n }\r\n if (options.skipTaskbar) {\r\n await this.setSkipTaskbar(true)\r\n }\r\n else if (options.skipTaskbar === false) {\r\n await this.setSkipTaskbar(false)\r\n }\r\n }\r\n\r\n async setProxy(config: Electron.Config): Promise<void> {\r\n return await this.invokeMethod('setProxy', config)\r\n }\r\n\r\n getSize(): Promise<number[]> {\r\n return this.invokeMethod('getSize')\r\n }\r\n\r\n setSkipTaskbar(skip: boolean): Promise<void> {\r\n return this.invokeMethod('setSkipTaskbar', skip)\r\n }\r\n}\r\n\r\nconst BrowserWindowApi = new BrowserWindowApiImpl()\r\nexport {\r\n BrowserWindowApi,\r\n BrowserWindowApiMethods,\r\n BrowserWindowOptions,\r\n SetPositionOptions,\r\n BrowserWindowApiEvent,\r\n AlignPosition,\r\n}\r\n","import { Channel } from './Channel'\r\nimport { BaseApi } from './BaseApi'\r\n\r\ninterface IClipboardApi {\r\n getSelectedText(): Promise<string | undefined>\r\n\r\n getText(): Promise<string | undefined>\r\n\r\n writeText(text: string): Promise<void>\r\n}\r\n\r\ntype ClipboardApiMethods = keyof IClipboardApi\r\n\r\nenum ClipboardApiEvent {\r\n CHANGED = 'clipboard-changed',\r\n}\r\n\r\nclass ClipboardApiImpl extends BaseApi<ClipboardApiMethods> implements IClipboardApi {\r\n writeText(text: string): Promise<void> {\r\n return this.invokeMethod('writeText', text)\r\n }\r\n\r\n async getSelectedText(): Promise<string | undefined> {\r\n return this.invokeMethod('getSelectedText')\r\n }\r\n\r\n async getText(): Promise<string | undefined> {\r\n return this.invokeMethod('getText')\r\n }\r\n\r\n getChannel(): string {\r\n return Channel.CLIPBOARD\r\n }\r\n}\r\n\r\nconst ClipboardApi: IClipboardApi = new ClipboardApiImpl()\r\n\r\nexport { ClipboardApi, ClipboardApiMethods, ClipboardApiEvent }\r\n","import type { AddWidgetOption } from '../api'\r\n\r\nexport class AppProtocolUtils {\r\n static getBaseURL(): URL {\r\n return new URL('widget://widgetjs.cn')\r\n }\r\n\r\n static getAddWidgetUrl(options: AddWidgetOption): string {\r\n const url = this.getBaseURL()\r\n url.pathname = '/widget/add'\r\n if (options.packageJsonUrl) {\r\n url.searchParams.set('packageJsonUrl', options.packageJsonUrl)\r\n }\r\n if (options.hostname) {\r\n url.searchParams.set('hostname', options.hostname)\r\n }\r\n if (options.widgetTitle) {\r\n url.searchParams.set('widgetTitle', options.widgetTitle)\r\n }\r\n url.searchParams.set('widgetName', options.widgetName)\r\n url.searchParams.set('deployMode', options.deployMode.toString())\r\n return url.toString()\r\n }\r\n}\r\n","import type { DeployedWidget } from '../model/DeployedWidget'\r\nimport type { DeployMode } from '../model/DeployMode'\r\nimport type { Widget } from '../model/Widget'\r\nimport type { WidgetParams } from '../model/WidgetParams'\r\nimport type { IDeployedWidgetApi } from './interface/IDeployedWidgetApi'\r\nimport { ElectronUtils } from '../utils'\r\nimport { AppProtocolUtils } from '../utils/AppProtocolUtils'\r\nimport { BaseApi } from './BaseApi'\r\nimport { Channel } from './Channel'\r\n\r\nexport interface AddWidgetOption {\r\n widgetName: string\r\n widgetTitle?: string\r\n deployMode: DeployMode\r\n packageJsonUrl?: string\r\n hostname?: string\r\n}\r\n\r\ntype DeployedWidgetApiMethods = keyof IDeployedWidgetApi\r\n\r\nclass DeployedWidgetApiImpl extends BaseApi<DeployedWidgetApiMethods> implements IDeployedWidgetApi {\r\n getChannel(): string {\r\n return Channel.DEPLOYED_WIDGET\r\n }\r\n\r\n /**\r\n * 移除组件\r\n * @param id\r\n */\r\n async removeDeployedWidget(id?: string) {\r\n return this.invokeMethod('removeDeployedWidget', id)\r\n }\r\n\r\n addWidget(options: AddWidgetOption): Promise<Widget[]> {\r\n if (ElectronUtils.hasElectronApi()) {\r\n return this.invokeMethod('addWidget', options)\r\n }\r\n else {\r\n window.location.href = AppProtocolUtils.getAddWidgetUrl(options)\r\n return Promise.resolve([])\r\n }\r\n }\r\n\r\n createDesktopShortcut(widgetName: string): Promise<boolean> {\r\n return this.invokeMethod('createDesktopShortcut', widgetName)\r\n }\r\n\r\n /**\r\n * 通过组件名移除已添加的组件\r\n * @param name 组件名\r\n */\r\n async removeDeployedWidgetByName(name: string): Promise<DeployedWidget[]> {\r\n return this.invokeMethod('removeDeployedWidgetByName', name)\r\n }\r\n\r\n /**\r\n * 获取已添加的组件\r\n * @param name 组件名,可以不传\r\n */\r\n async getDeployedWidgets(name?: string): Promise<DeployedWidget[]> {\r\n return this.invokeMethod('getDeployedWidgets', name)\r\n }\r\n\r\n async getDeployedWidget(id: string): Promise<DeployedWidget> {\r\n return this.invokeMethod('getDeployedWidget', id)\r\n }\r\n\r\n /**\r\n * Opens the dev tools for a widget with the specified ID.\r\n *\r\n * @param {string} widgetId - The ID of the widget to open the dev tools for.\r\n * @return {Promise} A Promise that resolves when the dev tools are opened.\r\n */\r\n async openDevTools(widgetId: string) {\r\n return this.invokeMethod('openDevTools', widgetId)\r\n }\r\n\r\n async openConfigPage(widgetId?: string, params?: WidgetParams) {\r\n return this.invokeMethod('openConfigPage', widgetId, params)\r\n }\r\n\r\n /**\r\n * 注册激活、呼出、置顶组件快捷键\r\n * @param widgetId 组件id\r\n * @param shortcut 如果传空或者不传,则会取消快捷键。更多快捷键配置,请查看Accelerator用法\r\n * https://www.electronjs.org/docs/latest/api/accelerator\r\n */\r\n async registerActiveShortcut(widgetId: string, shortcut?: string): Promise<boolean> {\r\n return this.invokeMethod('registerActiveShortcut', widgetId, shortcut)\r\n }\r\n\r\n async setProxy(widgetId: string, proxy: string): Promise<boolean> {\r\n return this.invokeMethod('setProxy', widgetId, proxy)\r\n }\r\n}\r\n\r\nconst DeployedWidgetApi = new DeployedWidgetApiImpl()\r\nexport { DeployedWidgetApi, DeployedWidgetApiMethods }\r\n","import type { Display } from '../model/electron'\r\nimport type { IDeviceApi } from './interface'\r\nimport type { Point } from './structures'\r\nimport { BaseApi } from './BaseApi'\r\nimport { Channel } from './Channel'\r\n\r\ntype DeviceApiMethods = keyof IDeviceApi\r\n\r\nclass DeviceApiImpl extends BaseApi<DeviceApiMethods> implements IDeviceApi {\r\n getDisplayNearestPoint(point: Point): Promise<Display> {\r\n return this.invokeMethod('getDisplayNearestPoint', point)\r\n }\r\n\r\n getAllDisplays(): Promise<Display[]> {\r\n return this.invokeMethod('getAllDisplays')\r\n }\r\n\r\n getPrimaryDisplay(): Promise<Display> {\r\n return this.invokeMethod('getPrimaryDisplay')\r\n }\r\n\r\n /**\r\n * 获取当前鼠标位置\r\n */\r\n async getCursorScreenPoint(): Promise<Point> {\r\n return this.invokeMethod('getCursorScreenPoint')\r\n }\r\n\r\n async sendCtrlV(): Promise<void> {\r\n return this.invokeMethod('sendCtrlV')\r\n }\r\n\r\n /**\r\n * 判断是否所有按键都已经释放\r\n */\r\n async isAllKeyReleased(): Promise<boolean> {\r\n return this.invokeMethod('isAllKeyReleased')\r\n }\r\n\r\n getChannel(): string {\r\n return Channel.DEVICE\r\n }\r\n\r\n isCapsLockOn(): Promise<boolean> {\r\n return this.invokeMethod('isCapsLockOn')\r\n }\r\n}\r\n\r\nconst DeviceApi: IDeviceApi = new DeviceApiImpl()\r\n\r\nexport { DeviceApi, DeviceApiMethods }\r\n","import { Channel } from './Channel'\r\nimport { BaseApi } from './BaseApi'\r\nimport type { DialogApiMethods, IDialogApi } from './interface'\r\n\r\nclass DialogApiImpl extends BaseApi<DialogApiMethods> implements IDialogApi {\r\n getChannel(): string {\r\n return Channel.DIALOG\r\n }\r\n\r\n pickFile(extensions: string[] | undefined): Promise<string | undefined> {\r\n return this.invokeMethod('pickFile', extensions)\r\n }\r\n\r\n pickFolder(): Promise<string | undefined> {\r\n return this.invokeMethod('pickFolder')\r\n }\r\n}\r\n\r\nconst DialogApi: IDialogApi = new DialogApiImpl()\r\nexport { DialogApi }\r\n","import { ElectronUtils } from '../utils/ElectronUtils'\r\n\r\nexport class ElectronApi {\r\n static async addIpcListener(key: string, f: Function) {\r\n await ElectronUtils.getAPI()?.addIpcListener(key, f)\r\n }\r\n\r\n static async removeIpcListener(key: string) {\r\n await ElectronUtils.getAPI()?.removeIpcListener(key)\r\n }\n}\r\n","import type { FileTypeResult } from 'file-type'\r\nimport type { Metadata } from '../types'\r\nimport type { ShortcutDetails } from '../model/electron'\r\nimport { Channel } from './Channel'\r\nimport { BaseApi } from './BaseApi'\r\nimport type { IFileApi } from './interface'\r\n\r\nexport interface SystemFile {\r\n isDirectory: boolean\r\n name: string\r\n absolutePath: string\r\n /**\r\n * MIME type\r\n */\r\n type: string\r\n size: number\r\n /**\r\n * Timestamp of the last modification time.\r\n */\r\n modifiedTime: number\r\n /**\r\n * Timestamp of the file creation time.\r\n */\r\n birthTime: number\r\n /**\r\n * Timestamp of the last status change time (e.g., changes in permissions, ownership, etc.).\r\n */\r\n changeTime: number\r\n /**\r\n * Timestamp of the last access time.\r\n */\r\n accessTime: number\r\n children?: SystemFile[]\r\n /**\r\n * File extension\r\n */\r\n extension?: string\r\n}\r\n\r\nexport interface ReadDirOptions {\r\n ignoreDir?: boolean\r\n /**\r\n * @deprecated\r\n */\r\n traverseDir?: boolean\r\n /**\r\n * Specifies the maximum depth of a read directory relative to the start directory.\r\n * A higher value may lead to performance issues, especially for large or deeply nested directories (like node_modules ^_^)\r\n * default is 1, max is 3\r\n */\r\n deep?: number\r\n /**\r\n * glob patterns to filter files\r\n * @see https://www.npmjs.com/package/fast-glob#pattern-syntax\r\n */\r\n pattern?: string | string[]\r\n /**\r\n * An array of glob patterns to exclude matches. This is an alternative way to use negative patterns.\r\n */\r\n ignore?: string[]\r\n /**\r\n * default is false\r\n */\r\n onlyDirectories?: boolean\r\n /**\r\n * default is false\r\n */\r\n onlyFiles?: boolean\r\n /**\r\n * Allow patterns to match entries that begin with a period (.)\r\n * @default false\r\n */\r\n dot?: boolean\r\n}\r\n\r\nexport interface DownloadUrlOptions {\r\n url: string\r\n savePath: string\r\n fileName: string\r\n /**\r\n * true - overwrite existing\r\n * false - ignore\r\n */\r\n overwrite?: boolean\r\n}\r\n\r\ntype FileApiMethods = keyof IFileApi\r\n\r\nclass FileApiImpl extends BaseApi<FileApiMethods> implements IFileApi {\r\n async readShortcutLink(shortcutPath: string): Promise<ShortcutDetails> {\r\n return this.invokeMethod('readShortcutLink', shortcutPath)\r\n }\r\n\r\n async extractIcon(path: string, size?: number): Promise<string> {\r\n return this.invokeMethod('extractIcon', path, size)\r\n }\r\n\r\n async delete(filePath: string): Promise<boolean> {\r\n return this.invokeMethod('delete', filePath)\r\n }\r\n\r\n async getPictureMetadata(filePath: string): Promise<Metadata> {\r\n return this.invokeMethod('getPictureMetadata', filePath)\r\n }\r\n\r\n async move(form: string, to: string): Promise<string> {\r\n return this.invokeMethod('move', form, to)\r\n }\r\n\r\n async isDirectory(filePath: string): Promise<boolean> {\r\n return this.invokeMethod('isDirectory', filePath)\r\n }\r\n\r\n getChannel(): string {\r\n return Channel.FILE\r\n }\r\n\r\n async readDirectory(path: string, options?: ReadDirOptions): Promise<SystemFile | undefined> {\r\n return this.invokeMethod('readDirectory', path, options)\r\n }\r\n\r\n async downloadUrl(options: DownloadUrlOptions): Promise<string> {\r\n return this.invokeMethod('downloadUrl', options)\r\n }\r\n\r\n async exists(filePath: string): Promise<boolean> {\r\n return this.invokeMethod('exists', filePath)\r\n }\r\n\r\n async readFile(filePath: string): Promise<string> {\r\n return this.invokeMethod('readFile', filePath)\r\n }\r\n\r\n async getDocumentFolder(filePath?: string): Promise<string> {\r\n return this.invokeMethod('getDocumentFolder', filePath)\r\n }\r\n\r\n async getMimeType(absoluteFilePath: string): Promise<FileTypeResult> {\r\n return this.invokeMethod('getMimeType', absoluteFilePath)\r\n }\r\n\r\n async getFileInfo(absoluteFilePath: string): Promise<SystemFile | undefined> {\r\n return this.invokeMethod('getFileInfo', absoluteFilePath)\r\n }\r\n\r\n async showItemInFolder(fullPath: string): Promise<void> {\r\n return this.invokeMethod('showItemInFolder', fullPath)\r\n }\r\n\r\n async openPath(path: string): Promise<void> {\r\n return this.invokeMethod('openPath', path)\r\n }\r\n\r\n async trashItem(path: string): Promise<void> {\r\n return this.invokeMethod('trashItem', path)\r\n }\r\n}\r\n\r\nconst FileApi: IFileApi = new FileApiImpl()\r\n\r\nexport { FileApi, FileApiMethods }\r\n","import { BaseApi } from './BaseApi'\r\nimport type { HttpApiMethods, IHttpApi } from './interface/IHttpApi'\r\nimport { Channel } from './Channel'\r\n\r\nclass HttpApiImpl extends BaseApi<HttpApiMethods> implements IHttpApi {\r\n getChannel(): string {\r\n return Channel.HTTP\r\n }\r\n\r\n get(url: string, params?: Record<string, any>): Promise<string> {\r\n return this.invokeMethod('get', url, params)\r\n }\r\n\r\n post(url: string, data?: Record<string, any>): Promise<string> {\r\n return this.invokeMethod('post', url, data)\r\n }\r\n}\r\nconst HttpApi: IHttpApi = new HttpApiImpl()\r\n\r\nexport { HttpApi, HttpApiMethods }\r\n","export interface AiConfig {\r\n id: string\r\n model: string\r\n apiKey: string\r\n apiBaseUrl: string\r\n}\r\n\r\nexport interface IAiApi {\r\n addConfig: (config: AiConfig) => Promise<AiConfig>\r\n deleteConfig: (id: string) => Promise<void>\r\n updateConfig: (config: AiConfig) => Promise<void>\r\n getConfigList: () => Promise<AiConfig[]>\r\n setConfigList: (configs: AiConfig[]) => Promise<void>\r\n getConfig: (id: string) => Promise<AiConfig | undefined>\r\n}\r\n/**\r\n * AiApiEvent\r\n */\r\nexport enum AiApiEvent {\r\n /**\r\n * 配置更新事件\r\n */\r\n CONFIG_UPDATED = `channel::cn.widgetjs.core.ai.config.updated`,\r\n}\r\nexport type AiApiMethods = keyof IAiApi\r\n","import type { LanguageCode } from '../../lang/LanguageCode'\r\nimport type { AppRuntimeInfo, BrowserWindowOptions, ProxyConfig } from '../structures'\r\n\r\nexport type AppRoutes = '/widget/search' | '/widget/package' | '/setting/common' | '/setting/theme' | '/setting/ai' | '/setting/proxy'\r\n | '/setting/info' | '/user/profile'\r\n/**\r\n * AppApi 接口定义了与应用程序相关的一系列方法。这些方法提供了应用程序配置管理、版本信息获取、路径获取以及应用内置窗口操作等功能。\r\n * @see [Electron API App](https://www.electronjs.org/docs/latest/api/app)\r\n */\r\nexport interface IAppApi {\r\n /**\r\n * 设置配置\r\n * @param key string\r\n * @param value string | number | boolean\r\n */\r\n setConfig: (key: string | AppApiConstants, value: string | number | boolean) => Promise<any>\r\n\r\n /**\r\n * 获取配置\r\n * @param key\r\n * @param defaultValue\r\n * @return Promise<string | number | boolean>\r\n */\r\n getConfig: <T extends string | number | boolean>(key: string | AppApiConstants, defaultValue: T) => Promise<T>\r\n\r\n /**\r\n * 获取版本信息\r\n * @param type string - 可选。指定要获取的版本类型。\r\n * <ol>\r\n * <li>`app`: Get app's version with Semantic Versioning format.\r\n * The version is different from Microsoft store's version.\r\n * For example, if the app's version is `24.1.1`, Microsoft store's version will be `24.1.1.0`</li>\r\n * <li>`electron`: 获取 Electron 框架的版本。</li>\r\n * <li>`chrome`: 获取 Electron 使用的 Chromium 版本。</li>\r\n * <li>`node`: 获取 Node.js 的版本。</li>\r\n * <li>`v8`: 获取 V8 引擎的版本。</li>\r\n * </ol>\r\n * @return Promise<string>\r\n */\r\n getVersion: (type?: 'app' | 'electron' | 'chrome' | 'node' | 'v8') => Promise<string>\r\n\r\n /**\r\n * Get App's runtime info (e.g. app name, os/electron/node version, etc.)\r\n */\r\n getRuntimeInfo: () => Promise<AppRuntimeInfo>\r\n\r\n /**\r\n * 获取Preload JS路径\r\n * @see [Using Preload Scripts](https://www.electronjs.org/docs/latest/tutorial/tutorial-preload)\r\n * @return Promise<string>\r\n */\r\n getPreloadPath: () => Promise<string>\r\n\r\n /**\r\n * 获取应用安装路径\r\n * @return Promise<string>\r\n */\r\n getAppPath: () => Promise<string>\r\n\r\n /**\r\n * Open the app's add/search widget window\r\n * @deprecated Use `showAppWindow('/widget/add', options)` instead, which is more flexible and supports custom routes.\r\n */\r\n openAddWidgetWindow: () => Promise<void>\r\n\r\n /**\r\n * Show a new window with specified route and options\r\n * support routes:\r\n * /user/profile\r\n * /auth/register\r\n *\r\n * @param route\r\n * @param options\r\n */\r\n showAppWindow: (route: string | AppRoutes, options?: BrowserWindowOptions) => Promise<void>\r\n\r\n /**\r\n * Open the app's setting window\r\n * @deprecated Use `showAppWindow('/setting/common', options)` instead, which is more flexible and supports custom routes.\r\n */\r\n openSettingWindow: () => Promise<void>\r\n\r\n /**\r\n * Open the app's update window\r\n * @deprecated Use `showAppWindow('/widget/info', options)` instead, which is more flexible and supports custom routes.\r\n */\r\n openCheckUpdateWindow: () => Promise<void>\r\n\r\n /**\r\n * open the app's widget manager window\r\n * @deprecated Use `showAppWindow('/widget/search', options)` instead, which is more flexible and supports custom routes.\r\n */\r\n openWidgetManagerWindow: () => Promise<void>\r\n\r\n /**\r\n * @deprecated Use `showAppWindow('/widget/package', options)` instead, which is more flexible and supports custom routes.\r\n */\r\n openWidgetPackageManagerWindow: () => Promise<void>\r\n\r\n /**\r\n * Open the app's runtime info window\r\n * @deprecated Use `showAppWindow('/setting/info', options)` instead, which is more flexible and supports custom routes.\r\n */\r\n openRuntimeInfoWindow: () => Promise<void>\r\n\r\n /**\r\n * Get the app's icon file path\r\n * @return Promise<string>\r\n */\r\n getIconFile: () => Promise<string>\r\n\r\n /**\r\n * Check if the app is running as Windows Store app (appx)\r\n * @return Promise<boolean>\r\n */\r\n isWindowsStore: () => Promise<boolean>\r\n\r\n /**\r\n * Get app's language, if user has not set, return `navigator.language`\r\n */\r\n getLanguageCode: () => Promise<string>\r\n /**\r\n * Set app's language\r\n * @param code\r\n */\r\n setLanguageCode: (code: LanguageCode) => Promise<void>\r\n /**\r\n * Set app's global proxy settings, set empty string to disable proxy\r\n * @param config\r\n * @example\r\n * ```typescript\r\n * AppApi.setProxy({\r\n * proxyRules:'socks5://127.0.0.1:7890'\r\n * })\r\n * ```\r\n */\r\n setProxy: (config: ProxyConfig) => Promise<void>\r\n getProxy: () => Promise<ProxyConfig>\r\n /**\r\n * Set app's global theme CSS\r\n * @param css\r\n */\r\n setThemeCSS: (css: string) => Promise<void>\r\n\r\n /**\r\n * Get the app's global theme CSS\r\n * @return Promise<string> If the theme CSS is not set, return empty string\r\n */\r\n getThemeCSS: () => Promise<string>\r\n /**\r\n * enable/disable developer mode\r\n */\r\n setDevMode: (enable: boolean) => Promise<void>\r\n /**\r\n * get developer mode is enabled\r\n */\r\n getDevMode: () => Promise<boolean>\r\n\r\n /**\r\n * Get the app's desktop grid system cell size\r\n */\r\n getGridCellSize: () => Promise<number>\r\n\r\n /**\r\n * Set the app's desktop grid system cell size\r\n * @param size\r\n */\r\n setGridCellSize: (size: number) => Promise<void>\r\n\r\n /**\r\n * exit application\r\n */\r\n exit: () => Promise<void>\r\n}\r\n\r\nexport type AppApiMethods = keyof IAppApi\r\n\r\n/**\r\n * AppApiEvent\r\n */\r\nexport enum AppApiEvent {\r\n /**\r\n * 应用设置变更时触发\r\n */\r\n CONFIG_CHANGED = 'event::cn.widgetjs.core.app.config.changed',\r\n /**\r\n * 桌面组件网格窗口移动时触发\r\n */\r\n MOVING_GRID_WINDOW = 'event::cn.widgetjs.core.app.moving.grid.window',\r\n /**\r\n * 桌面组件网格窗口停止移动时触发\r\n */\r\n STOP_MOVING_GRID_WINDOW = 'event::cn.widgetjs.core.app.moving.grid.window.stop',\r\n /**\r\n * 应用代理发生变化\r\n */\r\n PROXY_CHANGED = 'event::cn.widgetjs.core.app.proxy.changed',\r\n /**\r\n * 应用语言发生变化\r\n */\r\n LANGUAGE_CHANGED = 'event::cn.widgetjs.core.app.language.changed',\r\n}\r\n\r\n/**\r\n * AppApiConstants\r\n */\r\nexport enum AppApiConstants {\r\n /**\r\n * 桌面组件网格大小\r\n */\r\n CONFIG_GRID_CELL_SIZE = 'cn.widgetjs.config.grid.size',\r\n /**\r\n * 应用主题CSS设置\r\n */\r\n CONFIG_WIDGET_THEME_CSS = 'cn.widgetjs.config.widget.theme.css',\r\n /**\r\n * 应用全局代理设置\r\n */\r\n CONFIG_PROXY = 'cn.widgetjs.config.app.proxy',\r\n CONFIG_DEV_MODE = 'cn.widgetjs.config.app.dev.mode',\r\n /**\r\n * 应用语言设置\r\n */\r\n CONFIG_LANGUAGE = 'cn.widgetjs.config.app.language',\r\n}\r\n","import type { DeployedWidget } from '../../model/DeployedWidget'\r\nimport type { Widget } from '../../model/Widget'\r\nimport type { WidgetParams } from '../../model/WidgetParams'\r\nimport type { AddWidgetOption } from '../DeployedWidgetApi'\r\n/**\r\n * DeployedWidgetApi provides methods for managing deployed widgets within the application.\r\n * It allows for the removal, retrieval, and configuration of deployed widgets,\r\n * as well as the ability to manipulate their settings and behavior.\r\n * @remarks\r\n */\r\nexport interface IDeployedWidgetApi {\r\n removeDeployedWidget: (id?: string) => Promise<void>\r\n\r\n removeDeployedWidgetByName: (name: string) => Promise<DeployedWidget[]>\r\n\r\n getDeployedWidgets: () => Promise<DeployedWidget[]>\r\n\r\n openDevTools: (id: string) => Promise<void>\r\n\r\n /**\r\n * @deprecated 使用WidgetApi.openConfigPage代替\r\n * @param id\r\n */\r\n openConfigPage: (id?: string, params?: WidgetParams) => Promise<void>\r\n\r\n registerActiveShortcut: (id: string, shortcut: string) => Promise<boolean>\r\n\r\n /**\r\n * Set proxy for the widget, this will reload the widget after setting the proxy.\r\n * @param id\r\n * @param proxy\r\n */\r\n setProxy: (id: string, proxy: string) => Promise<boolean>\r\n\r\n getDeployedWidget: (id: string) => Promise<DeployedWidget>\r\n /**\r\n * Adds a new widget with the specified options.\r\n * If in browser environment, it will open widget://widgetjs.cn/widget?packageUrl=xxx&name=xxx&package\r\n * @param options - The options for the widget to be added.\r\n * @returns A promise that resolves with an array of added widgets.\r\n */\r\n addWidget: (options: AddWidgetOption) => Promise<Widget[]>\r\n\r\n /**\r\n * 创建桌面快捷方式\r\n * @param widgetName 组件名\r\n * @returns 成功返回 true,否则返回 false\r\n */\r\n createDesktopShortcut: (widgetName: string) => Promise<boolean>\r\n}\r\n\r\n/**\r\n * AiApiEvent\r\n */\r\nexport enum DeployedWidgetApiEvent {\r\n /**\r\n * 第二实例启动事件\r\n */\r\n SECOND_INSTANCE = `channel::cn.widgetjs.core.deployed_widget.second_instance`,\r\n}\r\n","import type { Rectangle } from '../structures'\r\n\r\n/**\r\n * MouseApi\r\n */\r\nexport interface IMouseApi {\r\n\r\n /**\r\n * Create a mouse screen edge hotspot, usually used for edge-hiding windows.\r\n * @param rect\r\n */\r\n createHotspot: (rect: Rectangle) => Promise<void>\r\n /**\r\n * Remove the mouse screen edge hotspot.\r\n */\r\n removeHotspot: () => Promise<void>\r\n}\r\n\r\n/**\r\n * SystemApiEvent\r\n */\r\nexport enum MouseApiEvent {\r\n /**\r\n * Triggered when the mouse enters the hotspot area.\r\n */\r\n HOTSPOT_ACTIVE = 'event::cn.widgetjs.core.mouse.hotspot.active',\r\n}\r\n\r\nexport type MouseApiMethods = keyof IMouseApi\r\n","import type { WidgetMenuItem } from '../MenuApi'\r\nimport type { Point, Rectangle } from '../structures'\r\n\r\n/**\r\n * Options for creating or updating a system tray icon.\r\n *\r\n * - `image` must be a path relative to the public (static) directory served by the app.\r\n * - Leading slash is recommended (e.g. `/favicon.ico`).\r\n * - Prefer platform-appropriate formats (e.g. `.ico` on Windows, `.png` on macOS/Linux).\r\n */\r\nexport interface AddTrayOptions {\r\n /**\r\n * Image path (relative to public path) used as the tray icon.\r\n * @example /favicon.ico\r\n */\r\n image: string\r\n /**\r\n * Optional tooltip text shown when hovering the tray icon.\r\n * Keep it short — many platforms truncate long tooltips.\r\n */\r\n tooltip?: string\r\n}\r\n\r\nexport interface DisplayBalloonOptions {\r\n /**\r\n * Icon to use when `iconType` is `custom`.\r\n */\r\n icon?: any | string\r\n /**\r\n * Can be `none`, `info`, `warning`, `error` or `custom`. Default is `custom`.\r\n */\r\n iconType?: 'none' | 'info' | 'warning' | 'error' | 'custom'\r\n title: string\r\n content: string\r\n /**\r\n * The large version of the icon should be used. Default is `true`. Maps to\r\n * `NIIF_LARGE_ICON`.\r\n */\r\n largeIcon?: boolean\r\n /**\r\n * Do not play the associated sound. Default is `false`. Maps to `NIIF_NOSOUND`.\r\n */\r\n noSound?: boolean\r\n /**\r\n * Do not display the balloon notification if the current user is in \"quiet time\".\r\n * Default is `false`. Maps to `NIIF_RESPECT_QUIET_TIME`.\r\n */\r\n respectQuietTime?: boolean\r\n}\r\n\r\n/**\r\n * ITrayApi\r\n *\r\n * API for interacting with the native system tray / status bar icon.\r\n * All methods return a Promise and should be awaited in callers where timing matters.\r\n */\r\nexport interface ITrayApi {\r\n /**\r\n * Create or update the tray icon with given options.\r\n * Resolves once the native tray object is created/updated.\r\n * @param options AddTrayOptions - image and optional tooltip\r\n */\r\n setTray: (options: AddTrayOptions) => Promise<void>\r\n\r\n /**\r\n * Remove the tray icon and free native resources.\r\n * Resolves when the tray has been removed.\r\n */\r\n removeTray: () => Promise<void>\r\n\r\n /**\r\n * Displays a balloon notification.\r\n * @param options DisplayBalloonOptions\r\n */\r\n displayBalloon: (options: DisplayBalloonOptions) => Promise<void>\r\n\r\n /**\r\n * Removes a balloon notification.\r\n */\r\n removeBalloon: () => Promise<void>\r\n\r\n /**\r\n * Set the context menu for the tray icon.\r\n * Replaces any previously set menu.\r\n * @param menus Array of WidgetMenuItem describing the menu structure\r\n */\r\n setContextMenu: (menus: WidgetMenuItem[]) => Promise<void>\r\n\r\n /**\r\n * Close any open context menu for the tray (if supported by the platform).\r\n */\r\n closeContextMenu: () => Promise<void>\r\n\r\n /**\r\n * Programmatically pop up a context menu at the optional screen position.\r\n * On some platforms the position may be ignored.\r\n * @param menus menu items to show\r\n * @param position optional screen point where the menu should appear\r\n */\r\n popUpContextMenu: (menus: WidgetMenuItem[], position?: Point) => Promise<void>\r\n\r\n /**\r\n * Returns whether the underlying native tray object has been destroyed.\r\n * Useful to check before calling other tray methods.\r\n */\r\n isDestroyed: () => Promise<boolean>\r\n\r\n /**\r\n * Get the bounds of the tray icon on screen.\r\n * Returns a Rectangle when available, or `null` if the bounds cannot be determined\r\n * on the current platform or if the tray is not present.\r\n */\r\n getBounds: () => Promise<Rectangle | null>\r\n\r\n /**\r\n * Bring the application to the foreground or focus the window associated with the tray.\r\n * Exact behavior depends on platform and application window state.\r\n */\r\n focus: () => Promise<void>\r\n}\r\n\r\n/**\r\n * TrayApiEvent\r\n *\r\n * Events emitted from the tray icon. Channels are stable strings used for internal\r\n * event routing; subscribers should listen to these channels to react to user\r\n * interactions with the tray icon.\r\n */\r\nexport enum TrayApiEvent {\r\n /**\r\n * Emitted when the tray icon is clicked (usually left-button click).\r\n * Channel: 'channel::cn.widgetjs.core.tray.click'\r\n */\r\n CLICK = 'channel::cn.widgetjs.core.tray.click',\r\n\r\n /**\r\n * Emitted when the tray icon receives a right-button click.\r\n * Channel: 'channel::cn.widgetjs.core.tray.right-click'\r\n */\r\n RIGHT_CLICK = 'channel::cn.widgetjs.core.tray.right-click',\r\n\r\n /**\r\n * Emitted when the tray icon receives a middle-button click (if supported).\r\n * Channel: 'channel::cn.widgetjs.core.tray.middle-click'\r\n */\r\n MIDDLE_CLICK = 'channel::cn.widgetjs.core.tray.middle-click',\r\n\r\n /**\r\n * Emitted when the mouse pointer enters the tray icon area (hover start).\r\n * Channel: 'channel::cn.widgetjs.core.tray.mouse-enter'\r\n */\r\n MOUSE_ENTER = 'channel::cn.widgetjs.core.tray.mouse-enter',\r\n\r\n /**\r\n * Emitted when the mouse pointer leaves the tray icon area (hover end).\r\n * Channel: 'channel::cn.widgetjs.core.tray.mouse-leave'\r\n */\r\n MOUSE_LEAVE = 'channel::cn.widgetjs.core.tray.mouse-leave',\r\n}\r\n\r\nexport type TrayApiMethods = keyof ITrayApi\r\n","import type { AuthSession, AuthUser } from '@supabase/supabase-js'\r\n\r\nexport interface IUserApi {\r\n /**\r\n * Login with user info.\r\n * @param token\r\n */\r\n login: (session: AuthSession) => Promise<void>\r\n\r\n /**\r\n * Clear user auth token and user info.\r\n */\r\n logout: () => Promise<void>\r\n\r\n /**\r\n * Get current logged in user info. If no user is logged in, return null.\r\n */\r\n getUser: () => Promise<AuthUser | null>\r\n\r\n updateSession: (session: AuthSession) => Promise<void>\r\n\r\n getSession: () => Promise<AuthSession | null>\r\n\r\n updateUser: (user: AuthUser) => Promise<void>\r\n}\r\n\r\n/**\r\n * ShortcutApiEvent\r\n */\r\nexport enum UserApiEvent {\r\n /**\r\n * 快捷键触发事件\r\n */\r\n USER_UPDATED = `channel::cn.widgetjs.core.user.updated`,\r\n SIGNED_OUT = `channel::cn.widgetjs.core.user.signed.out`,\r\n SIGNED_IN = `channel::cn.widgetjs.core.user.signed.in`,\r\n TOKEN_REFRESHED = `channel::cn.widgetjs.core.user.token.refreshed`,\r\n}\r\n\r\nexport type UserApiMethods = keyof IUserApi\r\n","import type { RemotePackageUrlInfo, WidgetPackage } from '../../model'\r\n\r\n/**\r\n * WidgetPackageApi 提供了组件包的升级、获取、安装等功能\r\n */\r\nexport interface IWidgetPackageApi {\r\n /**\r\n * 升级组件包\r\n * @param packageName 组件包名称\r\n * @param remoteUrlInfo\r\n */\r\n upgrade: (packageName: string, remoteUrlInfo: RemotePackageUrlInfo) => Promise<void>\r\n /**\r\n * 获取组件包的首页url信息\r\n * @param packageName\r\n */\r\n getIndexUrl: (packageName: string) => Promise<string | null>\r\n /**\r\n * 获取组件包入口url信息\r\n * @param packageName\r\n */\r\n getEntryUrl: (packageName: string) => Promise<string | null>\r\n /**\r\n * 通过包名获取组件包信息\r\n * @param name\r\n */\r\n getPackage: (name: string) => Promise<WidgetPackage | undefined>\r\n /**\r\n * 获取已经安装的组件包\r\n */\r\n getPackages: () => Promise<WidgetPackage[]>\r\n /**\r\n * Install a widget package, if the package is a string, it will be treated as a path or http url to install the widget.zip file.\r\n * @param widgetPackage\r\n */\r\n install: (widgetPackage: WidgetPackage | string) => Promise<void>\r\n\r\n /**\r\n * Uninstall a widget package by package name.\r\n * @param packageName\r\n * @param clearData Whether to clear the data of the widget package, default is false.\r\n */\r\n uninstall: (widgetPackage: WidgetPackage | string, clearData?: boolean) => Promise<void>\r\n}\r\n\r\nexport type WidgetPackageApiMethods = keyof IWidgetPackageApi\r\n\r\n/**\r\n * WidgetPackageApiEvent\r\n */\r\nexport enum WidgetPackageApiEvent {\r\n /**\r\n * 组件包升级事件\r\n */\r\n PACKAGE_UPGRADE = 'event::cn.widgetjs.core.widget.package.upgraded',\r\n /**\r\n * 组件包安装事件\r\n */\r\n PACKAGE_INSTALLED = 'event::cn.widgetjs.core.widget.package.installed',\r\n}\r\n","import { Channel } from './Channel'\r\nimport { BaseApi } from './BaseApi'\r\nimport type { ILogApi, LogApiMethods } from './interface'\r\n\r\nclass LogApiImpl extends BaseApi<LogApiMethods> implements ILogApi {\r\n getChannel(): string {\r\n return Channel.LOG\r\n }\r\n\r\n info(...data: any[]) {\r\n // eslint-disable-next-line no-console\r\n console.log(...data)\r\n this.invokeMethod('info', ...data)\r\n }\r\n\r\n error(...data: any[]) {\r\n console.error(...data)\r\n this.invokeMethod('error', ...data)\r\n }\r\n\r\n warn(...data: any[]) {\r\n console.warn(...data)\r\n this.invokeMethod('warn', ...data)\r\n }\r\n\r\n log(...data: any[]) {\r\n // eslint-disable-next-line no-console\r\n console.log(...data)\r\n this.invokeMethod('log', ...data)\r\n }\r\n\r\n json(data: any): void {\r\n const json = JSON.stringify(data, null, 2)\r\n this.log(json)\r\n }\r\n}\r\n\r\nconst LogApi: ILogApi = new LogApiImpl()\r\nexport { LogApi }\r\n","import { BaseApi } from './BaseApi'\r\nimport { Channel } from './Channel'\r\nimport type { IMenuApi } from './interface/IMenuApi'\r\nimport { ShowMenuOption } from './interface/IMenuApi'\r\n\r\n/**\r\n * @see [MenuItem](https://www.electronjs.org/docs/api/menu-item)\r\n */\r\ninterface WidgetMenuItem {\r\n /**\r\n * Menu ID\r\n */\r\n id: string\r\n /**\r\n * Menu type\r\n */\r\n type?: 'normal' | 'separator' | 'submenu' | 'checkbox' | 'radio'\r\n /**\r\n * Label\r\n */\r\n label: string\r\n /**\r\n * Sublabel\r\n */\r\n sublabel?: string\r\n /**\r\n * Whether the item is enabled\r\n */\r\n enabled?: boolean\r\n /**\r\n * Whether the item is visible\r\n */\r\n visible?: boolean\r\n /**\r\n * Whether the item is checked\r\n */\r\n checked?: boolean\r\n /**\r\n * Submenu items\r\n */\r\n submenu?: Omit<WidgetMenuItem, 'submenu'>[]\r\n /**\r\n * Insert before specific menu items\r\n */\r\n before?: string[]\r\n /**\r\n * Insert after specific menu items\r\n */\r\n after?: string[]\r\n}\r\n\r\nenum MenuApiEvent {\r\n ITEM_CLICK = 'event::cn.widgetjs.core.menu.item.click',\r\n}\r\n\r\ntype MenuApiMethods = keyof IMenuApi\r\n\r\nclass MenuApiImpl extends BaseApi<MenuApiMethods> implements IMenuApi {\r\n getChannel(): string {\r\n return Channel.MENU\r\n }\r\n\r\n /**\r\n * Add items to the context menu\r\n * @param menuItems The menu items to add\r\n */\r\n addContextMenuItem(menuItems: WidgetMenuItem[]): Promise<void> {\r\n return this.invokeMethod('addContextMenuItem', menuItems)\r\n }\r\n\r\n /**\r\n * Add items to the application menu\r\n * @param menuItems The menu items to add\r\n */\r\n addMenuItem(menuItems: WidgetMenuItem[]): Promise<void> {\r\n return this.invokeMethod('addMenuItem', menuItems)\r\n }\r\n\r\n /**\r\n * Show a menu programmatically\r\n * @param options The options for showing the menu\r\n */\r\n showMenu(options: ShowMenuOption): Promise<void> {\r\n return this.invokeMethod('showMenu', options)\r\n }\r\n\r\n /**\r\n * Remove items from the application menu\r\n * @param menuItemIds The IDs of the menu items to remove\r\n */\r\n removeMenuItem(menuItemIds: string[]): Promise<void> {\r\n return this.invokeMethod('removeMenuItem', menuItemIds)\r\n }\r\n\r\n /**\r\n * Remove items from the context menu\r\n * @param menuItemIds The IDs of the menu items to remove\r\n */\r\n removeContextMenuItem(menuItemIds: string[]): Promise<void> {\r\n return this.invokeMethod('removeContextMenuItem', menuItemIds)\r\n }\r\n}\r\n\r\nconst MenuApi: IMenuApi = new MenuApiImpl()\r\nexport { MenuApiMethods, MenuApi, MenuApiEvent, WidgetMenuItem, ShowMenuOption }\r\n","import type { Rectangle } from '../model/electron'\r\nimport { Channel } from './Channel'\r\nimport { BaseApi } from './BaseApi'\r\nimport type { IMouseApi, MouseApiMethods } from './interface'\r\n\r\nclass MouseApiImpl extends BaseApi<MouseApiMethods> implements IMouseApi {\r\n getChannel(): string {\r\n return Channel.MOUSE\r\n }\r\n\r\n removeHotspot(): Promise<void> {\r\n return this.invokeMethod('removeHotspot')\r\n }\r\n\r\n createHotspot(rect: Rectangle): Promise<void> {\r\n return this.invokeMethod('createHotspot', rect)\r\n }\r\n}\r\n\r\nexport const MouseApi: IMouseApi = new MouseApiImpl()\r\n","import type { ReminderNotificationOption } from '../model/AppNotification'\r\nimport { AppNotification, AppReminderNotification } from '../model/AppNotification'\r\nimport { Channel } from './Channel'\r\nimport { BaseApi } from './BaseApi'\r\nimport type { INotificationApi } from './interface/INotificationApi'\r\n\r\ntype NotificationApiMethods = keyof INotificationApi\r\n\r\nenum NotificationApiEvent {\r\n CONFIRM = 'event::cn.widgetjs.core.notification.confirm',\r\n CANCEL = 'event::cn.widgetjs.core.notification.cancel',\r\n HIDE = 'event::cn.widgetjs.core.notification.hide',\r\n}\r\n\r\nclass NotificationApiImpl extends BaseApi<NotificationApiMethods> implements INotificationApi {\r\n // static async url(url: string, duration: number = -1) {\r\n // this.invoke(Channel.NOTIFICATION, new AppNotification({\r\n // url, message: \"\",\r\n // duration,\r\n // type: \"url\",\r\n // }));\r\n // }\r\n\r\n /**\r\n * 来电\r\n * @param avatar 头像地址\r\n * @param audio 音频地址\r\n * @param title 标题文件\r\n * @param message 初始消息\r\n * @param lyric 歌词字符串\r\n */\r\n async call(avatar: string, audio: string, title: string, message: string, lyric: string) {\r\n await this.invoke(new AppNotification({\r\n avatar,\r\n audio,\r\n message,\r\n title,\r\n duration: -1,\r\n lyric,\r\n type: 'call',\r\n }))\r\n }\r\n\r\n async send(notification: AppNotification) {\r\n return this.invokeMethod('send', notification)\r\n }\r\n\r\n async reminder(option: ReminderNotificationOption) {\r\n return await this.send(new AppReminderNotification(option))\r\n }\r\n\r\n async advanceCountdown(message: string, targetTime: string, title?: string) {\r\n return await this.send(new AppNotification({\r\n title,\r\n message,\r\n targetTime,\r\n type: 'advance-countdown',\r\n }))\r\n }\r\n\r\n async countdown(message: string, targetTime: string) {\r\n await this.send(new AppNotification({\r\n message,\r\n targetTime,\r\n backgroundColor: 'rgba(0,0,0,0.5)',\r\n duration: -1,\r\n type: 'countdown',\r\n }))\r\n }\r\n\r\n async success(message: string, duration: number = 5000) {\r\n await this.send(new AppNotification({\r\n message,\r\n type: 'success',\r\n icon: 'check-one',\r\n duration,\r\n }))\r\n }\r\n\r\n async error(message: string, duration: number = 5000) {\r\n await this.send(new AppNotification({\r\n message,\r\n type: 'error',\r\n icon: 'close-one',\r\n duration,\r\n }))\r\n }\r\n\r\n async warning(message: string, duration: number = 5000) {\r\n await this.send(new AppNotification({\r\n message,\r\n type: 'warning',\r\n icon: 'attention',\r\n duration,\r\n }))\r\n }\r\n\r\n async info(message: string, duration: number = 5000) {\r\n await this.send(new AppNotification({\r\n message,\r\n type: 'info',\r\n icon: 'info',\r\n duration,\r\n }))\r\n }\r\n\r\n /**\r\n * 隐藏通知\r\n */\r\n async hide() {\r\n await this.invokeMethod('hide')\r\n }\r\n\r\n getChannel(): string {\r\n return Channel.NOTIFICATION\r\n }\r\n}\r\n\r\nconst NotificationApi: NotificationApiImpl = new NotificationApiImpl()\r\nexport { NotificationApi, NotificationApiMethods, NotificationApiEvent }\r\n","import type { IProcessApi, ProcessApiMethods } from './interface/IProcessApi'\r\nimport { BaseApi } from './BaseApi'\r\nimport { Channel } from './Channel'\r\n\r\nclass ProcessApiImpl extends BaseApi<ProcessApiMethods> implements IProcessApi {\r\n getChannel(): string {\r\n return Channel.PROCESS\r\n }\r\n\r\n getBlinkMemoryInfo(): Promise<Electron.BlinkMemoryInfo> {\r\n return this.invokeMethod('getBlinkMemoryInfo')\r\n }\r\n\r\n getHeapStatistics(): Promise<Electron.HeapStatistics> {\r\n return this.invokeMethod('getHeapStatistics')\r\n }\r\n\r\n getProcessMemoryInfo(): Promise<Electron.ProcessMemoryInfo> {\r\n return this.invokeMethod('getProcessMemoryInfo')\r\n }\r\n\r\n getSystemVersion(): Promise<string> {\r\n return this.invokeMethod('getSystemVersion')\r\n }\r\n}\r\n\r\nconst ProcessApi: IProcessApi = new ProcessApiImpl()\r\n\r\nexport { ProcessApi }\r\n","/**\r\n * ShortcutApi 提供了注册快捷键的能力,当快捷键被触发时,会发送广播事件 {@link BroadcastEvent}\r\n */\r\nexport interface IShortcutApi {\r\n /**\r\n * 注册快捷键, 如果注册成功, 触发快捷键时,会发送广播事件 {@link BroadcastEvent}\r\n * @see [Electron Accelerator](https://www.electronjs.org/docs/latest/api/accelerator)\r\n * @param shortcut string\r\n * @return Promise<boolean> true 注册成功,false 注册失败\r\n * @example\r\n * ```typescript\r\n * //Meta 通常为windows键\r\n * ShortcutApi.register('Ctrl+Meta+Y')\r\n * ```\r\n */\r\n register: (shortcut: string) => Promise<boolean>\r\n\r\n /**\r\n * 注销快捷键\r\n * @param shortcut string\r\n * @example\r\n * ```typescript\r\n * //Meta 通常为windows键\r\n * ShortcutApi.unregister('Ctrl+Meta+Y')\r\n * ```\r\n */\r\n unregister: (shortcut: string) => void\r\n}\r\n\r\n/**\r\n * ShortcutApiEvent\r\n */\r\nexport enum ShortcutApiEvent {\r\n /**\r\n * 快捷键触发事件\r\n */\r\n TRIGGERED = 'channel::cn.widgetjs.core.shortcut.triggered',\r\n}\r\n","import type { IShortcutApi } from './interface/IShortcutApi'\r\nimport { BaseApi } from './BaseApi'\r\nimport { Channel } from './Channel'\r\nimport { ShortcutApiEvent } from './interface/IShortcutApi'\r\n\r\ntype ShortcutApiMethods = keyof IShortcutApi\r\n\r\nclass ShortcutApiImpl extends BaseApi<ShortcutApiMethods> implements IShortcutApi {\r\n getChannel(): string {\r\n return Channel.SHORTCUT\r\n }\r\n\r\n async register(shortcut: string): Promise<boolean> {\r\n return await this.invokeMethod('register', shortcut)\r\n }\r\n\r\n async unregister(shortcut: string) {\r\n return await this.invokeMethod('unregister', shortcut)\r\n }\r\n}\r\n\r\nconst ShortcutApi: IShortcutApi = new ShortcutApiImpl()\r\nexport { ShortcutApi, ShortcutApiEvent, ShortcutApiMethods }\r\n","import type { IStorageApi } from './interface/IStorageApi'\r\nimport { BaseApi } from './BaseApi'\r\nimport { Channel } from './Channel'\r\n\r\ntype BaseType = string | number | boolean\r\n\r\n/**\r\n * @deprecated\r\n */\r\ninterface IStoreApi extends IStorageApi {\r\n\r\n}\r\n\r\ntype StoreApiMethods = keyof IStorageApi\r\ntype StorageApiMethods = keyof IStorageApi\r\n\r\nclass StorageApiImpl extends BaseApi<StoreApiMethods> implements IStorageApi {\r\n getChannel(): string {\r\n return Channel.STORE\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n return this.invokeMethod('delete', key)\r\n }\r\n\r\n async get<T extends BaseType>(key: string, defaultValue?: T): Promise<T | null> {\r\n const result = await this.invokeMethod('get', key)\r\n if (result == null && defaultValue != undefined) {\r\n return defaultValue\r\n }\r\n return result\r\n }\r\n\r\n async getObject<T>(key: string, defaultValue?: T): Promise<T | undefined> {\r\n const result = await this.invokeMethod('get', key)\r\n if (result) {\r\n return JSON.parse(result)\r\n }\r\n if (defaultValue != undefined) {\r\n return defaultValue\r\n }\r\n return undefined\r\n }\r\n\r\n async set(key: string, value: BaseType | object): Promise<string> {\r\n if (typeof value == 'object') {\r\n return this.invokeMethod('set', key, JSON.stringify(value))\r\n }\r\n return this.invokeMethod('set', key, value)\r\n }\r\n\r\n decryptString(value: string): Promise<string> {\r\n return this.invokeMethod('decryptString', value)\r\n }\r\n\r\n decryptGet(key: string, defaultValue?: string): Promise<string | undefined> {\r\n return this.invokeMethod('decryptGet', key, defaultValue)\r\n }\r\n\r\n encryptSet(key: string, value: string): Promise<string> {\r\n return this.invokeMethod('encryptSet', key, value)\r\n }\r\n\r\n encryptString(value: string): Promise<string> {\r\n return this.invokeMethod('encryptString', value)\r\n }\r\n}\r\n\r\nconst StorageApi: IStorageApi = new StorageApiImpl()\r\n/**\r\n * @deprecated\r\n */\r\nconst StoreApi: IStoreApi = new StorageApiImpl()\r\nexport { StorageApi, StorageApiMethods, StoreApi, StoreApiMethods }\r\n","export enum Gravity {\r\n TOP = 'TOP', LEFT = 'LEFT', RIGHT = 'RIGHT', BOTTOM = 'BOTTOM',\r\n}\r\n","/**\r\n *\r\n * SystemApi provides functionality for retrieving system information or interacting with the system.\r\n */\r\nexport interface ISystemApi {\r\n /**\r\n * Get system wallpaper absolute path\r\n */\r\n getWallpaper: () => Promise<string>\r\n\r\n /**\r\n * Get system information based on the provided valuesObject. The valuesObject can contain specific keys to retrieve certain information.\r\n * @param valuesObject\r\n * @see https://systeminformation.io/general.html\r\n */\r\n getInfo: (valuesObject: any) => Promise<any>\r\n\r\n /**\r\n * Get system uptime in seconds\r\n * @return Promise<number>\r\n */\r\n getUptime: () => Promise<number>\r\n\r\n /**\r\n * Launches the full product details page (PDP) for a product at Microsoft Store.\r\n * @see https://learn.microsoft.com/en-us/windows/apps/develop/launch/launch-store-app\r\n * @param storeId\r\n */\r\n launchStoreDetailsPage: (storeId?: string) => Promise<void>\r\n\r\n /**\r\n * @see https://learn.microsoft.com/en-us/windows/apps/develop/launch/launch-settings-app\r\n * @param uri Use this URI scheme to launch the Windows Settings app to specific settings pages.\r\n * @example ms-settings:defaultapps\r\n * @example ms-settings:startupapps\r\n */\r\n launchWindowsSettings: (uri: string) => Promise<void>\r\n}\r\n\r\n/**\r\n * SystemApiEvent\r\n */\r\nexport enum SystemApiEvent {\r\n /**\r\n * Date changed event\r\n */\r\n DATE_CHANGED = 'event::cn.widgetjs.core.sys.date.changed',\r\n}\r\n","import type { ISystemApi } from './interface/ISystemApi'\r\nimport { BaseApi } from './BaseApi'\r\nimport { Channel } from './Channel'\r\nimport { SystemApiEvent } from './interface/ISystemApi'\r\n\r\ntype SystemApiMethods = keyof ISystemApi\r\nclass SystemApiImpl extends BaseApi<SystemApiMethods> implements ISystemApi {\r\n launchWindowsSettings(uri: string): Promise<void> {\r\n return this.invokeMethod('launchWindowsSettings', uri)\r\n }\r\n\r\n launchStoreDetailsPage(storeId?: string): Promise<void> {\r\n return this.invokeMethod('launchStoreDetailsPage', storeId ?? '9NPR50GQ7T53')\r\n }\r\n\r\n getChannel(): string {\r\n return Channel.SYSTEM\r\n }\r\n\r\n getWallpaper(): Promise<string> {\r\n return this.invokeMethod('getWallpaper')\r\n }\r\n\r\n getInfo(valuesObject: any): Promise<any> {\r\n return this.invokeMethod('getInfo', valuesObject)\r\n }\r\n\r\n getUptime(): Promise<number> {\r\n return this.invokeMethod('getUptime')\r\n }\r\n}\r\n\r\nconst SystemApi: ISystemApi = new SystemApiImpl()\r\n\r\nexport { SystemApi, SystemApiEvent, SystemApiMethods }\r\n","import type { AddTrayOptions, DisplayBalloonOptions, ITrayApi } from './interface/ITrayApi'\r\nimport type { WidgetMenuItem } from './MenuApi'\r\nimport type { Point, Rectangle } from './structures'\r\nimport { BaseApi } from './BaseApi'\r\nimport { Channel } from './Channel'\r\nimport { TrayApiEvent } from './interface/ITrayApi'\r\n\r\ntype TrayApiMethods = keyof ITrayApi\r\n\r\nclass TrayApiImpl extends BaseApi<TrayApiMethods> implements ITrayApi {\r\n getChannel(): string {\r\n return Channel.TRAY\r\n }\r\n\r\n setTray(options: AddTrayOptions): Promise<void> {\r\n return this.invokeMethod('setTray', options)\r\n }\r\n\r\n removeTray(): Promise<void> {\r\n return this.invokeMethod('removeTray')\r\n }\r\n\r\n displayBalloon(options: DisplayBalloonOptions): Promise<void> {\r\n return this.invokeMethod('displayBalloon', options)\r\n }\r\n\r\n removeBalloon(): Promise<void> {\r\n return this.invokeMethod('removeBalloon')\r\n }\r\n\r\n setContextMenu(menus: WidgetMenuItem[]): Promise<void> {\r\n return this.invokeMethod('setContextMenu', menus)\r\n }\r\n\r\n closeContextMenu(): Promise<void> {\r\n return this.invokeMethod('closeContextMenu')\r\n }\r\n\r\n popUpContextMenu(menus: WidgetMenuItem[], position?: Point): Promise<void> {\r\n return this.invokeMethod('popUpContextMenu', menus, position)\r\n }\r\n\r\n isDestroyed(): Promise<boolean> {\r\n return this.invokeMethod('isDestroyed')\r\n }\r\n\r\n getBounds(): Promise<Rectangle | null> {\r\n return this.invokeMethod('getBounds')\r\n }\r\n\r\n focus(): Promise<void> {\r\n return this.invokeMethod('focus')\r\n }\r\n}\r\n\r\nconst TrayApi: ITrayApi = new TrayApiImpl()\r\nexport { AddTrayOptions, DisplayBalloonOptions, TrayApi, TrayApiEvent }\r\n","import type { AuthSession, AuthUser } from '@supabase/supabase-js'\r\nimport type { IUserApi } from './interface'\r\nimport { BaseApi } from './BaseApi'\r\nimport { Channel } from './Channel'\r\n\r\nclass UserApiImpl extends BaseApi<keyof IUserApi> implements IUserApi {\r\n async getSession(): Promise<AuthSession | null> {\r\n return await this.invokeMethod('getSession')\r\n }\r\n\r\n async updateSession(session: AuthSession) {\r\n await this.invokeMethod('updateSession', session)\r\n }\r\n\r\n async updateUser(user: AuthUser) {\r\n await this.invokeMethod('updateUser', user)\r\n }\r\n\r\n async login(session: AuthSession) {\r\n await this.invokeMethod('login', session)\r\n }\r\n\r\n async logout() {\r\n await this.invokeMethod('logout')\r\n }\r\n\r\n async getUser(): Promise<AuthUser | null> {\r\n return await this.invokeMethod('getUser')\r\n }\r\n\r\n getChannel(): string {\r\n return Channel.USER\r\n }\r\n}\r\n\r\nconst UserApi: IUserApi = new UserApiImpl()\r\n\r\nexport { UserApi }\r\n","import type { WidgetSyncInfo } from '../model'\r\nimport type { DeployMode } from '../model/DeployMode'\r\nimport type { IWidgetApi } from './interface/IWidgetApi'\r\nimport { Widget } from '../model/Widget'\r\nimport { WidgetPackage } from '../model/WidgetPackage'\r\nimport { BaseApi } from './BaseApi'\r\nimport { Channel } from './Channel'\r\n\r\ntype WidgetApiMethods = keyof IWidgetApi\r\n\r\nenum WidgetApiEvent {\r\n DATA_CHANGED = 'event::cn.widgetjs.core.widget.data-changed',\r\n EDIT_DESKTOP_WIDGETS = 'event::cn.widgetjs.core.widget.desktop.edit',\r\n PACKAGE_UPGRADE = 'event::cn.widgetjs.core.widget.package.upgraded',\r\n PACKAGE_INSTALLED = 'event::cn.widgetjs.core.widget.package.installed',\r\n}\r\n\r\nclass WidgetApiImpl extends BaseApi<WidgetApiMethods> implements IWidgetApi {\r\n getSyncInfo(widgetName?: string): Promise<WidgetSyncInfo | null> {\r\n return this.invokeMethod('getSyncInfo', widgetName)\r\n }\r\n\r\n updateSyncInfo(): Promise<void> {\r\n return this.invokeMethod('updateSyncInfo')\r\n }\r\n\r\n reload(id?: string): Promise<void> {\r\n return this.invokeMethod('reload', id)\r\n }\r\n\r\n getChannel(): string {\r\n return Channel.WIDGET\r\n }\r\n\r\n async registerWidgets(widgets: Widget[]) {\r\n return this.invokeMethod('registerWidgets', JSON.stringify(widgets))\r\n }\r\n\r\n async registerWidgetPackage(widgetPackage: WidgetPackage) {\r\n return this.invokeMethod('registerWidgetPackage', JSON.stringify(widgetPackage))\r\n }\r\n\r\n async getWidgets(): Promise<Widget[]> {\r\n const data = await this.invokeMethod('getWidgets')\r\n const widgets: Widget[] = []\r\n if (data) {\r\n for (const item of data) {\r\n widgets.push(Widget.parseObject(item))\r\n }\r\n }\r\n return widgets\r\n }\r\n\r\n async openConfigPage(widgetId?: string) {\r\n return this.invokeMethod('openConfigPage', widgetId)\r\n }\r\n\r\n async openConfigPageByName(widgetName: string) {\r\n return this.invokeMethod('openConfigPageByName', widgetName)\r\n }\r\n\r\n /**\r\n * @deprecated\r\n */\r\n async getWidgetPackages(): Promise<WidgetPackage[]> {\r\n return await this.invokeMethod('getWidgetPackages')\r\n }\r\n\r\n /**\r\n *\r\n * @param name package name\r\n */\r\n async getWidget(name: string): Promise<Widget> {\r\n return Widget.parseObject(await this.invokeMethod('getWidget', name))\r\n }\r\n\r\n /**\r\n * @param name package name\r\n * @deprecated\r\n */\r\n async getWidgetPackage(name: string): Promise<WidgetPackage | undefined> {\r\n const result = await this.invokeMethod('getWidgetPackage', name)\r\n if (result) {\r\n return WidgetPackage.parseObject(result)\r\n }\r\n return undefined\r\n }\r\n\r\n async getWidgetPackageUrl(packageName: string): Promise<string | null> {\r\n const widgetPackage = await this.getWidgetPackage(packageName!)\r\n if (!widgetPackage) {\r\n return null\r\n }\r\n return widgetPackage.url\r\n }\r\n\r\n async upgradePackage(packageName: string): Promise<void> {\r\n return await this.invokeMethod('upgradePackage', packageName)\r\n }\r\n\r\n /**\r\n * 阻止拖动窗口,只能用于悬浮窗口 DeployMode.OVERLAP\r\n * @param draggable\r\n */\r\n setMouseDraggable(draggable: boolean): Promise<void> {\r\n return this.invokeMethod('setMouseDraggable', draggable)\r\n }\r\n\r\n isIgnoreMouseEvents(widgetId: string | undefined): Promise<boolean> {\r\n return this.invokeMethod('isIgnoreMouseEvents', widgetId)\r\n }\r\n\r\n setIgnoreMouseEvents(widgetId: string, ignore: boolean): Promise<void> {\r\n return this.invokeMethod('setIgnoreMouseEvents', widgetId, ignore)\r\n }\r\n\r\n restartWidgets(mode?: DeployMode): Promise<void> {\r\n return this.invokeMethod('restartWidgets', mode)\r\n }\r\n}\r\n\r\nconst WidgetApi = new WidgetApiImpl()\r\nexport { WidgetApi, WidgetApiEvent, WidgetApiMethods }\r\n","import type { WidgetData } from '../model/WidgetData'\r\nimport localforage from 'localforage'\r\nimport { BroadcastEvent } from '../model/event/BroadcastEvent'\r\nimport { BroadcastApi } from './BroadcastApi'\r\nimport { WidgetApiEvent } from './WidgetApi'\r\n\r\nexport interface SaveWidgetOption {\r\n sendBroadcast?: boolean\r\n id?: string\r\n storeName?: string\r\n}\r\n\r\n/**\r\n * 用户处理浏览器数据,只在浏览器环境下有用\r\n * @deprecated\r\n */\r\nexport interface IWidgetDataApi {\r\n findByName: (<T extends WidgetData>(\r\n name: string,\r\n type: {\r\n new (name: string, id?: string): T\r\n },\r\n ) => Promise<T | undefined>) & (<T extends WidgetData>(data: T) => Promise<T | undefined>)\r\n\r\n save: (data: WidgetData, options?: SaveWidgetOption) => Promise<string>\r\n\r\n /**\r\n * 获取组件 LocalForage 存储实例\r\n * @param widgetName 组件名\r\n * @param storeName 存储名\r\n * @see https://localforage.docschina.org/\r\n */\r\n getStore: (widgetName: string, storeName?: string) => LocalForage\r\n\r\n saveByName: <T extends WidgetData>(data: T, options?: SaveWidgetOption) => Promise<string>\r\n\r\n find: <T extends WidgetData>(\r\n name: string,\r\n id: string,\r\n type: {\r\n new (name: string, id?: string): T\r\n },\r\n ) => Promise<T | undefined>\r\n}\r\n\r\ntype WidgetDataApiMethods = keyof IWidgetDataApi\r\n\r\nclass WidgetDataApiImpl implements IWidgetDataApi {\r\n private stores = new Map<string, LocalForage>()\r\n\r\n /**\r\n * 保存组件数据\r\n * @param data\r\n * @param options\r\n */\r\n public async save(data: WidgetData, options: SaveWidgetOption = { sendBroadcast: true }) {\r\n const store = this.getStore(data.name, options.storeName)\r\n const json = JSON.stringify(data)\r\n const result = await store.setItem(this.getKey(data.name, data.id), json)\r\n if (options.sendBroadcast) {\r\n const broadcastEvent = new BroadcastEvent({\r\n event: WidgetApiEvent.DATA_CHANGED,\r\n payload: { name: data.name, json },\r\n })\r\n await BroadcastApi.send(broadcastEvent)\r\n }\r\n return result\r\n }\r\n\r\n public getStore(widgetName: string, storeName?: string): LocalForage {\r\n if (this.stores.has(widgetName)) {\r\n return this.stores.get(widgetName)!\r\n }\r\n const store = localforage.createInstance({ name: widgetName, storeName })\r\n this.stores.set(widgetName, store)\r\n return store\r\n }\r\n\r\n /**\r\n * 通过组件名保存组件信息,通常用于存储可以在同类组件中共用的数据\r\n * @param data\r\n * @param options\r\n */\r\n public async saveByName<T extends WidgetData>(data: T, options: SaveWidgetOption = { sendBroadcast: true }) {\r\n const store = this.getStore(data.name)\r\n const json = JSON.stringify(data)\r\n const result = await store.setItem(data.name, json)\r\n if (options?.sendBroadcast) {\r\n const broadcastEvent = new BroadcastEvent({\r\n event: WidgetApiEvent.DATA_CHANGED,\r\n payload: { name: data.name, json },\r\n })\r\n await BroadcastApi.send(broadcastEvent)\r\n }\r\n return result\r\n }\r\n\r\n public async findByName<T extends WidgetData>(...args: any[]): Promise<T | undefined> {\r\n let name = ''\r\n let dbStr: string | null = ''\r\n let data: T\r\n if (args.length === 2) {\r\n name = args[0]\r\n const Type = args[1]\r\n data = new Type(name)\r\n }\r\n else {\r\n data = args[0] as T\r\n name = data.name\r\n }\r\n const store = this.getStore(name)\r\n dbStr = await store.getItem<string>(name)\r\n if (dbStr) {\r\n data.parseJSON(JSON.parse(dbStr))\r\n return data\r\n }\r\n return undefined\r\n }\r\n\r\n public async find<T extends WidgetData>(\r\n name: string,\r\n id: string,\r\n Type: {\r\n new (name: string, id?: string): T\r\n },\r\n ): Promise<T | undefined> {\r\n const store = this.getStore(name)\r\n const result = await store.getItem<string>(this.getKey(name, id))\r\n if (result) {\r\n const widgetData = new Type(name, id)\r\n widgetData.parseJSON(JSON.parse(result))\r\n return widgetData\r\n }\r\n return undefined\r\n }\r\n\r\n private getKey(name: string, id?: string) {\r\n return `${name}@${id}`\r\n }\r\n}\r\n\r\nconst WidgetDataApi: IWidgetDataApi = new WidgetDataApiImpl()\r\nexport { WidgetDataApi, WidgetDataApiMethods }\r\n","import type { RemotePackageUrlInfo } from '../model/WidgetPackage'\r\nimport type { IWidgetPackageApi } from './interface'\r\nimport { WidgetPackage } from '../model/WidgetPackage'\r\nimport { BaseApi } from './BaseApi'\r\nimport { Channel } from './Channel'\r\nimport { WidgetPackageApiMethods } from './interface'\r\n\r\nclass WidgetPackageApiImpl extends BaseApi<WidgetPackageApiMethods> implements IWidgetPackageApi {\r\n getChannel(): string {\r\n return Channel.WIDGET_PACKAGE\r\n }\r\n\r\n async install(widgetPackage: WidgetPackage | string) {\r\n if (typeof widgetPackage == 'string') {\r\n return this.invokeMethod('install', widgetPackage)\r\n }\r\n return this.invokeMethod('install', JSON.stringify(widgetPackage))\r\n }\r\n\r\n async uninstall(widgetPackage: WidgetPackage | string, clearData?: boolean) {\r\n if (typeof widgetPackage == 'string') {\r\n return this.invokeMethod('uninstall', widgetPackage, clearData)\r\n }\r\n return this.invokeMethod('uninstall', widgetPackage.name, clearData)\r\n }\r\n\r\n upgrade(packageName: string, remoteUrlInfo: RemotePackageUrlInfo): Promise<void> {\r\n return this.invokeMethod('upgrade', packageName, remoteUrlInfo)\r\n }\r\n\r\n /**\r\n *\r\n * @param name package name\r\n */\r\n async getPackage(name: string): Promise<WidgetPackage | undefined> {\r\n const result = await this.invokeMethod('getPackage', name)\r\n if (result) {\r\n return WidgetPackage.parseObject(result)\r\n }\r\n return undefined\r\n }\r\n\r\n async getIndexUrl(packageName: string): Promise<string | null> {\r\n const widgetPackage = await this.getPackage(packageName!)\r\n if (!widgetPackage) {\r\n return null\r\n }\r\n return widgetPackage.url\r\n }\r\n\r\n async getEntryUrl(packageName: string) {\r\n const widgetPackage = await this.getPackage(packageName!)\r\n if (!widgetPackage) {\r\n return null\r\n }\r\n const arr: string[] = []\r\n arr.push(widgetPackage.url)\r\n if (widgetPackage.entry) {\r\n if (!widgetPackage.entry.startsWith('/')) {\r\n arr.push('/')\r\n }\r\n arr.push(widgetPackage.entry)\r\n }\r\n return arr.join('')\r\n }\r\n\r\n async getPackages(): Promise<WidgetPackage[]> {\r\n return await this.invokeMethod('getPackages')\r\n }\r\n}\r\n\r\nconst WidgetPackageApi = new WidgetPackageApiImpl()\r\nexport { WidgetPackageApi, WidgetPackageApiMethods }\r\n"]}
|