@widget-js/core 24.1.1-beta.76 → 24.1.1-beta.78

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../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/_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/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/kebabCase.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/camelCase.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/snakeCase.js","../src/model/DeployMode.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/Widget.ts","../src/model/event/BroadcastEvent.ts","../src/model/event/WebSocketEvent.ts","../src/model/WidgetData.ts","../src/model/WidgetTheme.ts","../src/model/WidgetParams.ts","../src/router/encoding.ts","../src/router/query.ts","../src/model/AppNotification.ts","../src/model/DeployedPage.ts","../src/model/SocialInfo.ts","../src/model/DeployedWidget.ts","../src/model/WidgetPackage.ts","../src/lang/LanguageCode.ts","../src/utils/normalizeUrl.ts","../src/grid/GridSystem.ts","../src/api/ElectronApi.ts","../src/api/WidgetDataApi.ts","../src/api/Channel.ts","../src/api/BaseApi.ts","../src/api/BroadcastApi.ts","../src/api/WidgetApi.ts","../src/api/BrowserWindowApi.ts","../src/api/NotificationApi.ts","../src/utils/AppProtocolUtils.ts","../src/api/DeployedWidgetApi.ts","../src/api/DeviceApi.ts","../src/api/ClipboardApi.ts","../src/api/ApiConstants.ts","../src/api/interface/IShortcutApi.ts","../src/api/ShortcutApi.ts","../src/api/ProcessApi.ts","../src/api/AppApi.ts","../src/api/DialogApi.ts","../src/api/StorageApi.ts","../src/api/LogApi.ts","../src/api/FileApi.ts","../src/api/structures/Gravity.ts","../src/api/interface/ISystemApi.ts","../src/api/SystemApi.ts","../src/api/interface/IAppApi.ts","../src/api/interface/IWidgetPackageApi.ts","../src/api/interface/IMouseApi.ts","../src/api/interface/ITrayApi.ts","../src/api/WidgetPackageApi.ts","../src/api/MenuApi.ts","../src/api/MouseApi.ts","../src/api/HttpApi.ts","../src/api/UserApi.ts"],"names":["Symbol","isArray","kebabCase","camelCase","snakeCase","HostedMode","DeployMode","find","WidgetKeyword","WebSocketEventType","import_kebabCase","value","ThemeMode","NotificationSize","Channel","WidgetApiEvent","BrowserWindowApiEvent","NotificationApiEvent","ClipboardApiEvent","ShortcutApiEvent","Gravity","SystemApiEvent","AppApiEvent","AppApiConstants","WidgetPackageApiEvent","MouseApiEvent","TrayApiEvent","MenuApiEvent"],"mappings":"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","sourcesContent":["/**\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","/** 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","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 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","/**\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","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 * [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","/**\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","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","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 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 /**\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.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 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","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 * as CSS from 'csstype'\r\nimport kebabCase from 'lodash/kebabCase'\r\nimport camelCase from 'lodash/camelCase'\r\nimport type { Declaration, List, Raw, Rule } from 'css-tree'\r\nimport { find, parse } from 'css-tree'\r\n\r\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\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","/**\r\n * 组件参数,如宽,高,id,语言等环境参数\r\n */\r\nimport snakeCase from 'lodash/snakeCase'\r\nimport { parseQuery } from '../router/query'\r\nimport type { DeployMode } from './DeployMode'\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 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","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","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 { DeployMode } from './DeployMode'\nimport { DeployedPage } from './DeployedPage'\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 { 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","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","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 localforage from 'localforage'\r\nimport { BroadcastEvent } from '../model/event/BroadcastEvent'\r\nimport type { WidgetData } from '../model/WidgetData'\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","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}\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","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 { Widget } from '../model/Widget'\r\nimport { WidgetPackage } from '../model/WidgetPackage'\r\nimport type { DeployMode } from '../model/DeployMode'\r\nimport { Channel } from './Channel'\r\nimport { BaseApi } from './BaseApi'\r\nimport type { IWidgetApi } from './interface/IWidgetApi'\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 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 { 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 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 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 { 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 { Channel } from './Channel'\r\nimport { BaseApi } from './BaseApi'\r\nimport type { Point } from './structures'\r\nimport type { IDeviceApi } from './interface'\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\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","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","/**\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 { BaseApi } from './BaseApi'\r\nimport { Channel } from './Channel'\r\nimport type { IShortcutApi } from './interface/IShortcutApi'\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, ShortcutApiMethods, ShortcutApiEvent }\r\n","import { Channel } from './Channel'\r\nimport { BaseApi } from './BaseApi'\r\nimport type { IProcessApi, ProcessApiMethods } from './interface/IProcessApi'\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","import type { LanguageCode } from '../lang/LanguageCode'\r\nimport { ElectronUtils } from '../utils'\r\nimport { Channel } from './Channel'\r\nimport { BaseApi } from './BaseApi'\r\nimport type { AppApiConstants, AppApiMethods, IAppApi } from './interface'\r\n\r\nimport type { AppRuntimeInfo, BrowserWindowOptions } from './structures'\r\n\r\nclass AppApiImpl extends BaseApi<AppApiMethods> implements IAppApi {\r\n showAppWindow(route: string, 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 { 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 { BaseApi } from './BaseApi'\r\nimport { Channel } from './Channel'\r\nimport type { IStorageApi } from './interface/IStorageApi'\r\n\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, StoreApi, StoreApiMethods, StorageApiMethods }\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 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","export enum Gravity {\r\n TOP = 'TOP', LEFT = 'LEFT', RIGHT = 'RIGHT', BOTTOM = 'BOTTOM',\r\n}\r\n","import type {\r\n Hardware,\r\n HardwareSensor,\r\n HardwareType,\r\n SensorType,\r\n} from '../../types'\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 hardware information, such as CPU, GPU, Memory, etc.\r\n * @param hardwareType\r\n * @return Hardware[]\r\n */\r\n getHardware: (hardwareType: HardwareType | HardwareType[]) => Promise<Hardware[]>\r\n /**\r\n * Get hardware sensor information, such as temperature, voltage, fan speed, etc.\r\n * @param hardwareType\r\n * @param sensorType\r\n * @return HardwareSensor[]\r\n */\r\n getHardwareSensor: (hardwareType: HardwareType | HardwareType[], sensorType: SensorType | SensorType[]) => Promise<HardwareSensor[]>\r\n /**\r\n * Check if the monitor process is started\r\n */\r\n isMonitorStarted: () => Promise<boolean>\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 { Hardware, HardwareSensor, HardwareType, SensorType } from '../types'\r\nimport type { ISystemApi } from './interface/ISystemApi'\r\nimport { SystemApiEvent } from './interface/ISystemApi'\r\nimport { BaseApi } from './BaseApi'\r\nimport { Channel } from './Channel'\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 getHardware(hardwareType: HardwareType | HardwareType[]): Promise<Hardware[]> {\r\n return this.invokeMethod('getHardware', hardwareType)\r\n }\r\n\r\n getHardwareSensor(hardwareType: HardwareType | HardwareType[], sensorType: SensorType | SensorType[]): Promise<HardwareSensor[]> {\r\n return this.invokeMethod('getHardwareSensor', hardwareType, sensorType)\r\n }\r\n\r\n isMonitorStarted(): Promise<boolean> {\r\n return this.invokeMethod('isMonitorStarted')\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 { SystemApiEvent, SystemApi, SystemApiMethods }\r\n","import type { AppRuntimeInfo, BrowserWindowOptions, ProxyConfig } from '../structures'\r\nimport type { LanguageCode } from '../../lang/LanguageCode'\r\n\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 */\r\n openAddWidgetWindow: () => Promise<void>\r\n\r\n /**\r\n * Show a new window with specified route and options\r\n * @param route\r\n * @param options\r\n */\r\n showAppWindow: (route: string, options: BrowserWindowOptions) => Promise<void>\r\n\r\n /**\r\n * Open the app's setting window\r\n */\r\n openSettingWindow: () => Promise<void>\r\n\r\n /**\r\n * Open the app's update window\r\n */\r\n openCheckUpdateWindow: () => Promise<void>\r\n\r\n /**\r\n * open the app's widget manager window\r\n */\r\n openWidgetManagerWindow: () => Promise<void>\r\n\r\n openWidgetPackageManagerWindow: () => Promise<void>\r\n\r\n /**\r\n * Open the app's runtime info window\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 */\r\n uninstall: (widgetPackage: WidgetPackage | string) => 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","export interface ITrayApi {\r\n}\r\n\r\n/**\r\n * ShortcutApiEvent\r\n */\r\nexport enum TrayApiEvent {\r\n /**\r\n * 快捷键触发事件\r\n */\r\n CLICK = 'channel::cn.widgetjs.core.tray.click',\r\n}\r\n","import type { RemotePackageUrlInfo } from '../model/WidgetPackage'\r\nimport { WidgetPackage } from '../model/WidgetPackage'\r\nimport { Channel } from './Channel'\r\nimport { BaseApi } from './BaseApi'\r\nimport type { IWidgetPackageApi } from './interface'\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) {\r\n if (typeof widgetPackage == 'string') {\r\n return this.invokeMethod('uninstall', widgetPackage)\r\n }\r\n return this.invokeMethod('uninstall', widgetPackage.name)\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","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 * 菜单ID\r\n */\r\n id: string\r\n /**\r\n * 菜单类型\r\n */\r\n type?: 'normal' | 'separator' | 'submenu' | 'checkbox' | 'radio'\r\n /**\r\n * 标签\r\n */\r\n label: string\r\n /**\r\n * 子标签\r\n */\r\n sublabel?: string\r\n /**\r\n * 是否可用\r\n */\r\n enabled?: boolean\r\n /**\r\n * 是否显示\r\n */\r\n visible?: boolean\r\n /**\r\n * 是否勾选\r\n */\r\n checked?: boolean\r\n /**\r\n * 子菜单\r\n */\r\n submenu?: Omit<WidgetMenuItem, 'submenu'>[]\r\n /**\r\n * 显示在哪个菜单前\r\n */\r\n before?: string[]\r\n /**\r\n * 显示在哪个菜单后\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 addContextMenuItem(menuItems: WidgetMenuItem[]): Promise<void> {\r\n return this.invokeMethod('addContextMenuItem', menuItems)\r\n }\r\n\r\n addMenuItem(menuItems: WidgetMenuItem[]): Promise<void> {\r\n return this.invokeMethod('addMenuItem', menuItems)\r\n }\r\n\r\n showMenu(options: ShowMenuOption): Promise<void> {\r\n return this.invokeMethod('showMenu', options)\r\n }\r\n\r\n removeMenuItem(menuItemIds: string[]): Promise<void> {\r\n return this.invokeMethod('removeMenuItem', menuItemIds)\r\n }\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 { 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 { AppUser } from '../model/AppUser'\r\nimport { Channel } from './Channel'\r\nimport { BaseApi } from './BaseApi'\r\nimport type { IUserApi } from './interface'\r\n\r\nclass UserApiImpl extends BaseApi<keyof IUserApi> implements IUserApi {\r\n async login(user: AppUser) {\r\n await this.invokeMethod('login', user)\r\n }\r\n\r\n async logout() {\r\n await this.invokeMethod('logout')\r\n }\r\n\r\n async getUserInfo(): Promise<AppUser | null> {\r\n return await this.invokeMethod('getUserInfo')\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"]}
1
+ {"version":3,"sources":["../../../../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/_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/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/kebabCase.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/camelCase.js","../../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/snakeCase.js","../src/model/DeployMode.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/Widget.ts","../src/model/event/BroadcastEvent.ts","../src/model/event/WebSocketEvent.ts","../src/model/WidgetData.ts","../src/model/WidgetTheme.ts","../src/model/WidgetParams.ts","../src/router/encoding.ts","../src/router/query.ts","../src/model/AppNotification.ts","../src/model/DeployedPage.ts","../src/model/SocialInfo.ts","../src/model/DeployedWidget.ts","../src/model/WidgetPackage.ts","../src/lang/LanguageCode.ts","../src/utils/normalizeUrl.ts","../src/grid/GridSystem.ts","../src/api/ElectronApi.ts","../src/api/Channel.ts","../src/api/BaseApi.ts","../src/api/BroadcastApi.ts","../src/api/WidgetApi.ts","../src/api/WidgetDataApi.ts","../src/api/BrowserWindowApi.ts","../src/api/NotificationApi.ts","../src/utils/AppProtocolUtils.ts","../src/api/DeployedWidgetApi.ts","../src/api/DeviceApi.ts","../src/api/ClipboardApi.ts","../src/api/ApiConstants.ts","../src/api/interface/IShortcutApi.ts","../src/api/ShortcutApi.ts","../src/api/ProcessApi.ts","../src/api/AppApi.ts","../src/api/DialogApi.ts","../src/api/StorageApi.ts","../src/api/LogApi.ts","../src/api/FileApi.ts","../src/api/structures/Gravity.ts","../src/api/interface/ISystemApi.ts","../src/api/SystemApi.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/WidgetPackageApi.ts","../src/api/MenuApi.ts","../src/api/MouseApi.ts","../src/api/HttpApi.ts","../src/api/UserApi.ts"],"names":["exports","Symbol","isArray","kebabCase","camelCase","snakeCase","HostedMode","DeployMode","find","WidgetKeyword","WebSocketEventType","import_kebabCase","parse","value","ThemeMode","NotificationSize","Channel","WidgetApiEvent","localforage","BrowserWindowApiEvent","NotificationApiEvent","ClipboardApiEvent","ShortcutApiEvent","Gravity","SystemApiEvent","AppApiEvent","AppApiConstants","WidgetPackageApiEvent","MouseApiEvent","TrayApiEvent","UserApiEvent","MenuApiEvent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAA,mBAAA,GAAA,UAAA,CAAA;AAAA,EAAA,gFAAA,CAAAA,SAAA,EAAA,MAAA,EAAA;AAYA,IAAA,SAAS,WAAA,CAAY,KAAA,EAAO,QAAA,EAAU,WAAA,EAAa,SAAA,EAAW;AAC5D,MAAA,IAAI,QAAQ,EAAA,EACR,MAAA,GAAS,KAAA,IAAS,IAAA,GAAO,IAAI,KAAA,CAAM,MAAA;AAEvC,MAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,QAAA,WAAA,GAAc,KAAA,CAAM,EAAE,KAAK,CAAA;AAAA,MAC7B;AACA,MAAA,OAAO,EAAE,QAAQ,MAAA,EAAQ;AACvB,QAAA,WAAA,GAAc,SAAS,WAAA,EAAa,KAAA,CAAM,KAAK,CAAA,EAAG,OAAO,KAAK,CAAA;AAAA,MAChE;AACA,MAAA,OAAO,WAAA;AAAA,IACT;AAEA,IAAA,MAAA,CAAO,OAAA,GAAU,WAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACzBjB,IAAA,sBAAA,GAAA,UAAA,CAAA;AAAA,EAAA,mFAAA,CAAAA,SAAA,EAAA,MAAA,EAAA;AAOA,IAAA,SAAS,eAAe,MAAA,EAAQ;AAC9B,MAAA,OAAO,SAAS,GAAA,EAAK;AACnB,QAAA,OAAO,MAAA,IAAU,IAAA,GAAO,MAAA,GAAY,MAAA,CAAO,GAAG,CAAA;AAAA,MAChD,CAAA;AAAA,IACF;AAEA,IAAA,MAAA,CAAO,OAAA,GAAU,cAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACbjB,IAAA,oBAAA,GAAA,UAAA,CAAA;AAAA,EAAA,iFAAA,CAAAA,SAAA,EAAA,MAAA,EAAA;AAAA,IAAA,IAAI,cAAA,GAAiB,sBAAA,EAAA;AAGrB,IAAA,IAAI,eAAA,GAAkB;AAAA;AAAA,MAEpB,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,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;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,G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","file":"index.cjs","sourcesContent":["/**\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","/** 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","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 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","/**\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","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 * [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","/**\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","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","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 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","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 * as CSS from 'csstype'\r\nimport kebabCase from 'lodash/kebabCase'\r\nimport camelCase from 'lodash/camelCase'\r\nimport type { Declaration, List, Raw, Rule } from 'css-tree'\r\nimport { find, parse } from 'css-tree'\r\n\r\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\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","/**\r\n * 组件参数,如宽,高,id,语言等环境参数\r\n */\r\nimport snakeCase from 'lodash/snakeCase'\r\nimport { parseQuery } from '../router/query'\r\nimport type { DeployMode } from './DeployMode'\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 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","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","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 { DeployMode } from './DeployMode'\nimport { DeployedPage } from './DeployedPage'\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 { 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","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","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","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}\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","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 { Widget } from '../model/Widget'\r\nimport { WidgetPackage } from '../model/WidgetPackage'\r\nimport type { DeployMode } from '../model/DeployMode'\r\nimport { Channel } from './Channel'\r\nimport { BaseApi } from './BaseApi'\r\nimport type { IWidgetApi } from './interface/IWidgetApi'\r\nimport { WidgetSyncInfo } from '../model'\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 localforage from 'localforage'\r\nimport { BroadcastEvent } from '../model/event/BroadcastEvent'\r\nimport type { WidgetData } from '../model/WidgetData'\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 { 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 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 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 { 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 { Channel } from './Channel'\r\nimport { BaseApi } from './BaseApi'\r\nimport type { Point } from './structures'\r\nimport type { IDeviceApi } from './interface'\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\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","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","/**\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 { BaseApi } from './BaseApi'\r\nimport { Channel } from './Channel'\r\nimport type { IShortcutApi } from './interface/IShortcutApi'\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, ShortcutApiMethods, ShortcutApiEvent }\r\n","import { Channel } from './Channel'\r\nimport { BaseApi } from './BaseApi'\r\nimport type { IProcessApi, ProcessApiMethods } from './interface/IProcessApi'\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","import type { LanguageCode } from '../lang/LanguageCode'\r\nimport { ElectronUtils } from '../utils'\r\nimport { Channel } from './Channel'\r\nimport { BaseApi } from './BaseApi'\r\nimport type { AppApiConstants, AppApiMethods, IAppApi } from './interface'\r\n\r\nimport type { AppRuntimeInfo, BrowserWindowOptions } from './structures'\r\n\r\nclass AppApiImpl extends BaseApi<AppApiMethods> implements IAppApi {\r\n showAppWindow(route: string, 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 { 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 { BaseApi } from './BaseApi'\r\nimport { Channel } from './Channel'\r\nimport type { IStorageApi } from './interface/IStorageApi'\r\n\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, StoreApi, StoreApiMethods, StorageApiMethods }\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 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","export enum Gravity {\r\n TOP = 'TOP', LEFT = 'LEFT', RIGHT = 'RIGHT', BOTTOM = 'BOTTOM',\r\n}\r\n","import type {\r\n Hardware,\r\n HardwareSensor,\r\n HardwareType,\r\n SensorType,\r\n} from '../../types'\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 hardware information, such as CPU, GPU, Memory, etc.\r\n * @param hardwareType\r\n * @return Hardware[]\r\n */\r\n getHardware: (hardwareType: HardwareType | HardwareType[]) => Promise<Hardware[]>\r\n /**\r\n * Get hardware sensor information, such as temperature, voltage, fan speed, etc.\r\n * @param hardwareType\r\n * @param sensorType\r\n * @return HardwareSensor[]\r\n */\r\n getHardwareSensor: (hardwareType: HardwareType | HardwareType[], sensorType: SensorType | SensorType[]) => Promise<HardwareSensor[]>\r\n /**\r\n * Check if the monitor process is started\r\n */\r\n isMonitorStarted: () => Promise<boolean>\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 { Hardware, HardwareSensor, HardwareType, SensorType } from '../types'\r\nimport type { ISystemApi } from './interface/ISystemApi'\r\nimport { SystemApiEvent } from './interface/ISystemApi'\r\nimport { BaseApi } from './BaseApi'\r\nimport { Channel } from './Channel'\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 getHardware(hardwareType: HardwareType | HardwareType[]): Promise<Hardware[]> {\r\n return this.invokeMethod('getHardware', hardwareType)\r\n }\r\n\r\n getHardwareSensor(hardwareType: HardwareType | HardwareType[], sensorType: SensorType | SensorType[]): Promise<HardwareSensor[]> {\r\n return this.invokeMethod('getHardwareSensor', hardwareType, sensorType)\r\n }\r\n\r\n isMonitorStarted(): Promise<boolean> {\r\n return this.invokeMethod('isMonitorStarted')\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 { SystemApiEvent, SystemApi, SystemApiMethods }\r\n","import type { AppRuntimeInfo, BrowserWindowOptions, ProxyConfig } from '../structures'\r\nimport type { LanguageCode } from '../../lang/LanguageCode'\r\n\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 */\r\n openAddWidgetWindow: () => Promise<void>\r\n\r\n /**\r\n * Show a new window with specified route and options\r\n * @param route\r\n * @param options\r\n */\r\n showAppWindow: (route: string, options: BrowserWindowOptions) => Promise<void>\r\n\r\n /**\r\n * Open the app's setting window\r\n */\r\n openSettingWindow: () => Promise<void>\r\n\r\n /**\r\n * Open the app's update window\r\n */\r\n openCheckUpdateWindow: () => Promise<void>\r\n\r\n /**\r\n * open the app's widget manager window\r\n */\r\n openWidgetManagerWindow: () => Promise<void>\r\n\r\n openWidgetPackageManagerWindow: () => Promise<void>\r\n\r\n /**\r\n * Open the app's runtime info window\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 */\r\n uninstall: (widgetPackage: WidgetPackage | string) => 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","export interface ITrayApi {\r\n}\r\n\r\n/**\r\n * ShortcutApiEvent\r\n */\r\nexport enum TrayApiEvent {\r\n /**\r\n * 快捷键触发事件\r\n */\r\n CLICK = 'channel::cn.widgetjs.core.tray.click',\r\n}\r\n","import { Channel } from '../Channel'\r\nimport 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/**\r\n * ShortcutApiEvent\r\n */\r\nexport enum UserApiEvent {\r\n /**\r\n * 快捷键触发事件\r\n */\r\n USER_UPDATED = `${Channel.USER}.updated`,\r\n SIGNED_OUT = `${Channel.USER}.signed.out`,\r\n SIGNED_IN = `${Channel.USER}.signed.in`,\r\n TOKEN_REFRESHED = `${Channel.USER}.token.refreshed`,\r\n}\r\n\r\n\r\nexport type UserApiMethods = keyof IUserApi\r\n","import type { RemotePackageUrlInfo } from '../model/WidgetPackage'\r\nimport { WidgetPackage } from '../model/WidgetPackage'\r\nimport { Channel } from './Channel'\r\nimport { BaseApi } from './BaseApi'\r\nimport type { IWidgetPackageApi } from './interface'\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) {\r\n if (typeof widgetPackage == 'string') {\r\n return this.invokeMethod('uninstall', widgetPackage)\r\n }\r\n return this.invokeMethod('uninstall', widgetPackage.name)\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","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 * 菜单ID\r\n */\r\n id: string\r\n /**\r\n * 菜单类型\r\n */\r\n type?: 'normal' | 'separator' | 'submenu' | 'checkbox' | 'radio'\r\n /**\r\n * 标签\r\n */\r\n label: string\r\n /**\r\n * 子标签\r\n */\r\n sublabel?: string\r\n /**\r\n * 是否可用\r\n */\r\n enabled?: boolean\r\n /**\r\n * 是否显示\r\n */\r\n visible?: boolean\r\n /**\r\n * 是否勾选\r\n */\r\n checked?: boolean\r\n /**\r\n * 子菜单\r\n */\r\n submenu?: Omit<WidgetMenuItem, 'submenu'>[]\r\n /**\r\n * 显示在哪个菜单前\r\n */\r\n before?: string[]\r\n /**\r\n * 显示在哪个菜单后\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 addContextMenuItem(menuItems: WidgetMenuItem[]): Promise<void> {\r\n return this.invokeMethod('addContextMenuItem', menuItems)\r\n }\r\n\r\n addMenuItem(menuItems: WidgetMenuItem[]): Promise<void> {\r\n return this.invokeMethod('addMenuItem', menuItems)\r\n }\r\n\r\n showMenu(options: ShowMenuOption): Promise<void> {\r\n return this.invokeMethod('showMenu', options)\r\n }\r\n\r\n removeMenuItem(menuItemIds: string[]): Promise<void> {\r\n return this.invokeMethod('removeMenuItem', menuItemIds)\r\n }\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 { 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 { Channel } from './Channel'\r\nimport { BaseApi } from './BaseApi'\r\nimport type { IUserApi } from './interface'\r\nimport type { AuthSession, AuthUser } from '@supabase/supabase-js'\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"]}