diff --git a/.gitignore b/.gitignore
index 7e4fe3f8..09319046 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,6 +19,7 @@ yarn-error.log
!.yarn/versions
# build
+main.js
build
# testing
diff --git a/main.js b/main.js
deleted file mode 100644
index d49aa93f..00000000
--- a/main.js
+++ /dev/null
@@ -1,16806 +0,0 @@
-var __create = Object.create;
-var __defProp = Object.defineProperty;
-var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
-var __getOwnPropNames = Object.getOwnPropertyNames;
-var __getProtoOf = Object.getPrototypeOf;
-var __hasOwnProp = Object.prototype.hasOwnProperty;
-var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __commonJS = (cb, mod) => function __require() {
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
-};
-var __export = (target, all) => {
- for (var name in all)
- __defProp(target, name, { get: all[name], enumerable: true });
-};
-var __copyProps = (to2, from2, except, desc) => {
- if (from2 && typeof from2 === "object" || typeof from2 === "function") {
- for (let key of __getOwnPropNames(from2))
- if (!__hasOwnProp.call(to2, key) && key !== except)
- __defProp(to2, key, { get: () => from2[key], enumerable: !(desc = __getOwnPropDesc(from2, key)) || desc.enumerable });
- }
- return to2;
-};
-var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
- // If the importer is in node compatibility mode or this is not an ESM
- // file that has been converted to a CommonJS file using a Babel-
- // compatible transform (i.e. "__esModule" has not been set), then set
- // "default" to the CommonJS "module.exports" for node compatibility.
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
- mod
-));
-var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
-var __publicField = (obj, key, value) => {
- __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
- return value;
-};
-
-// node_modules/pagerank.js/lib/index.js
-var require_lib = __commonJS({
- "node_modules/pagerank.js/lib/index.js"(exports, module2) {
- "use strict";
- function forOwn(object, callback2) {
- if (typeof object === "object" && typeof callback2 === "function") {
- for (var key in object) {
- if (object.hasOwnProperty(key) === true) {
- if (callback2(key, object[key]) === false) {
- break;
- }
- }
- }
- }
- }
- module2.exports = function() {
- var self = {
- count: 0,
- edges: {},
- nodes: {}
- };
- self.link = function(source, target, weight) {
- if (isFinite(weight) !== true || weight === null) {
- weight = 1;
- }
- weight = parseFloat(weight);
- if (self.nodes.hasOwnProperty(source) !== true) {
- self.count++;
- self.nodes[source] = {
- weight: 0,
- outbound: 0
- };
- }
- self.nodes[source].outbound += weight;
- if (self.nodes.hasOwnProperty(target) !== true) {
- self.count++;
- self.nodes[target] = {
- weight: 0,
- outbound: 0
- };
- }
- if (self.edges.hasOwnProperty(source) !== true) {
- self.edges[source] = {};
- }
- if (self.edges[source].hasOwnProperty(target) !== true) {
- self.edges[source][target] = 0;
- }
- self.edges[source][target] += weight;
- };
- self.rank = function(alpha2, epsilon, callback2) {
- var delta = 1, inverse = 1 / self.count;
- forOwn(self.edges, function(source) {
- if (self.nodes[source].outbound > 0) {
- forOwn(self.edges[source], function(target) {
- self.edges[source][target] /= self.nodes[source].outbound;
- });
- }
- });
- forOwn(self.nodes, function(key) {
- self.nodes[key].weight = inverse;
- });
- while (delta > epsilon) {
- var leak = 0, nodes = {};
- forOwn(self.nodes, function(key, value) {
- nodes[key] = value.weight;
- if (value.outbound === 0) {
- leak += value.weight;
- }
- self.nodes[key].weight = 0;
- });
- leak *= alpha2;
- forOwn(self.nodes, function(source) {
- forOwn(self.edges[source], function(target, weight) {
- self.nodes[target].weight += alpha2 * nodes[source] * weight;
- });
- self.nodes[source].weight += (1 - alpha2) * inverse + leak * inverse;
- });
- delta = 0;
- forOwn(self.nodes, function(key, value) {
- delta += Math.abs(value.weight - nodes[key]);
- });
- }
- forOwn(self.nodes, function(key) {
- return callback2(key, self.nodes[key].weight);
- });
- };
- self.reset = function() {
- self.count = 0;
- self.edges = {};
- self.nodes = {};
- };
- return self;
- }();
- }
-});
-
-// node_modules/vhtml/dist/vhtml.js
-var require_vhtml = __commonJS({
- "node_modules/vhtml/dist/vhtml.js"(exports, module2) {
- (function(global, factory) {
- typeof exports === "object" && typeof module2 !== "undefined" ? module2.exports = factory() : typeof define === "function" && define.amd ? define(factory) : global.vhtml = factory();
- })(exports, function() {
- "use strict";
- var emptyTags = ["area", "base", "br", "col", "command", "embed", "hr", "img", "input", "keygen", "link", "meta", "param", "source", "track", "wbr"];
- var esc = function esc2(str) {
- return String(str).replace(/[&<>"']/g, function(s) {
- return "&" + map3[s] + ";";
- });
- };
- var map3 = { "&": "amp", "<": "lt", ">": "gt", '"': "quot", "'": "apos" };
- var setInnerHTMLAttr = "dangerouslySetInnerHTML";
- var DOMAttributeNames = {
- className: "class",
- htmlFor: "for"
- };
- var sanitized = {};
- function h4(name, attrs) {
- var stack = [], s = "";
- attrs = attrs || {};
- for (var i = arguments.length; i-- > 2; ) {
- stack.push(arguments[i]);
- }
- if (typeof name === "function") {
- attrs.children = stack.reverse();
- return name(attrs);
- }
- if (name) {
- s += "<" + name;
- if (attrs)
- for (var _i in attrs) {
- if (attrs[_i] !== false && attrs[_i] != null && _i !== setInnerHTMLAttr) {
- s += " " + (DOMAttributeNames[_i] ? DOMAttributeNames[_i] : esc(_i)) + '="' + esc(attrs[_i]) + '"';
- }
- }
- s += ">";
- }
- if (emptyTags.indexOf(name) === -1) {
- if (attrs[setInnerHTMLAttr]) {
- s += attrs[setInnerHTMLAttr].__html;
- } else
- while (stack.length) {
- var child = stack.pop();
- if (child) {
- if (child.pop) {
- for (var _i2 = child.length; _i2--; ) {
- stack.push(child[_i2]);
- }
- } else {
- s += sanitized[child] === true ? child : esc(child);
- }
- }
- }
- s += name ? "" + name + ">" : "";
- }
- sanitized[s] = true;
- return s;
- }
- return h4;
- });
- }
-});
-
-// node_modules/heap/lib/heap.js
-var require_heap = __commonJS({
- "node_modules/heap/lib/heap.js"(exports, module2) {
- (function() {
- var Heap2, defaultCmp, floor, heapify, heappop, heappush, heappushpop, heapreplace, insort, min, nlargest, nsmallest, updateItem, _siftdown, _siftup;
- floor = Math.floor, min = Math.min;
- defaultCmp = function(x, y) {
- if (x < y) {
- return -1;
- }
- if (x > y) {
- return 1;
- }
- return 0;
- };
- insort = function(a, x, lo, hi, cmp) {
- var mid;
- if (lo == null) {
- lo = 0;
- }
- if (cmp == null) {
- cmp = defaultCmp;
- }
- if (lo < 0) {
- throw new Error("lo must be non-negative");
- }
- if (hi == null) {
- hi = a.length;
- }
- while (lo < hi) {
- mid = floor((lo + hi) / 2);
- if (cmp(x, a[mid]) < 0) {
- hi = mid;
- } else {
- lo = mid + 1;
- }
- }
- return [].splice.apply(a, [lo, lo - lo].concat(x)), x;
- };
- heappush = function(array, item, cmp) {
- if (cmp == null) {
- cmp = defaultCmp;
- }
- array.push(item);
- return _siftdown(array, 0, array.length - 1, cmp);
- };
- heappop = function(array, cmp) {
- var lastelt, returnitem;
- if (cmp == null) {
- cmp = defaultCmp;
- }
- lastelt = array.pop();
- if (array.length) {
- returnitem = array[0];
- array[0] = lastelt;
- _siftup(array, 0, cmp);
- } else {
- returnitem = lastelt;
- }
- return returnitem;
- };
- heapreplace = function(array, item, cmp) {
- var returnitem;
- if (cmp == null) {
- cmp = defaultCmp;
- }
- returnitem = array[0];
- array[0] = item;
- _siftup(array, 0, cmp);
- return returnitem;
- };
- heappushpop = function(array, item, cmp) {
- var _ref;
- if (cmp == null) {
- cmp = defaultCmp;
- }
- if (array.length && cmp(array[0], item) < 0) {
- _ref = [array[0], item], item = _ref[0], array[0] = _ref[1];
- _siftup(array, 0, cmp);
- }
- return item;
- };
- heapify = function(array, cmp) {
- var i, _i, _j, _len, _ref, _ref1, _results, _results1;
- if (cmp == null) {
- cmp = defaultCmp;
- }
- _ref1 = function() {
- _results1 = [];
- for (var _j2 = 0, _ref2 = floor(array.length / 2); 0 <= _ref2 ? _j2 < _ref2 : _j2 > _ref2; 0 <= _ref2 ? _j2++ : _j2--) {
- _results1.push(_j2);
- }
- return _results1;
- }.apply(this).reverse();
- _results = [];
- for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
- i = _ref1[_i];
- _results.push(_siftup(array, i, cmp));
- }
- return _results;
- };
- updateItem = function(array, item, cmp) {
- var pos;
- if (cmp == null) {
- cmp = defaultCmp;
- }
- pos = array.indexOf(item);
- if (pos === -1) {
- return;
- }
- _siftdown(array, 0, pos, cmp);
- return _siftup(array, pos, cmp);
- };
- nlargest = function(array, n, cmp) {
- var elem, result, _i, _len, _ref;
- if (cmp == null) {
- cmp = defaultCmp;
- }
- result = array.slice(0, n);
- if (!result.length) {
- return result;
- }
- heapify(result, cmp);
- _ref = array.slice(n);
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- elem = _ref[_i];
- heappushpop(result, elem, cmp);
- }
- return result.sort(cmp).reverse();
- };
- nsmallest = function(array, n, cmp) {
- var elem, i, los, result, _i, _j, _len, _ref, _ref1, _results;
- if (cmp == null) {
- cmp = defaultCmp;
- }
- if (n * 10 <= array.length) {
- result = array.slice(0, n).sort(cmp);
- if (!result.length) {
- return result;
- }
- los = result[result.length - 1];
- _ref = array.slice(n);
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- elem = _ref[_i];
- if (cmp(elem, los) < 0) {
- insort(result, elem, 0, null, cmp);
- result.pop();
- los = result[result.length - 1];
- }
- }
- return result;
- }
- heapify(array, cmp);
- _results = [];
- for (i = _j = 0, _ref1 = min(n, array.length); 0 <= _ref1 ? _j < _ref1 : _j > _ref1; i = 0 <= _ref1 ? ++_j : --_j) {
- _results.push(heappop(array, cmp));
- }
- return _results;
- };
- _siftdown = function(array, startpos, pos, cmp) {
- var newitem, parent, parentpos;
- if (cmp == null) {
- cmp = defaultCmp;
- }
- newitem = array[pos];
- while (pos > startpos) {
- parentpos = pos - 1 >> 1;
- parent = array[parentpos];
- if (cmp(newitem, parent) < 0) {
- array[pos] = parent;
- pos = parentpos;
- continue;
- }
- break;
- }
- return array[pos] = newitem;
- };
- _siftup = function(array, pos, cmp) {
- var childpos, endpos, newitem, rightpos, startpos;
- if (cmp == null) {
- cmp = defaultCmp;
- }
- endpos = array.length;
- startpos = pos;
- newitem = array[pos];
- childpos = 2 * pos + 1;
- while (childpos < endpos) {
- rightpos = childpos + 1;
- if (rightpos < endpos && !(cmp(array[childpos], array[rightpos]) < 0)) {
- childpos = rightpos;
- }
- array[pos] = array[childpos];
- pos = childpos;
- childpos = 2 * pos + 1;
- }
- array[pos] = newitem;
- return _siftdown(array, startpos, pos, cmp);
- };
- Heap2 = function() {
- Heap3.push = heappush;
- Heap3.pop = heappop;
- Heap3.replace = heapreplace;
- Heap3.pushpop = heappushpop;
- Heap3.heapify = heapify;
- Heap3.updateItem = updateItem;
- Heap3.nlargest = nlargest;
- Heap3.nsmallest = nsmallest;
- function Heap3(cmp) {
- this.cmp = cmp != null ? cmp : defaultCmp;
- this.nodes = [];
- }
- Heap3.prototype.push = function(x) {
- return heappush(this.nodes, x, this.cmp);
- };
- Heap3.prototype.pop = function() {
- return heappop(this.nodes, this.cmp);
- };
- Heap3.prototype.peek = function() {
- return this.nodes[0];
- };
- Heap3.prototype.contains = function(x) {
- return this.nodes.indexOf(x) !== -1;
- };
- Heap3.prototype.replace = function(x) {
- return heapreplace(this.nodes, x, this.cmp);
- };
- Heap3.prototype.pushpop = function(x) {
- return heappushpop(this.nodes, x, this.cmp);
- };
- Heap3.prototype.heapify = function() {
- return heapify(this.nodes, this.cmp);
- };
- Heap3.prototype.updateItem = function(x) {
- return updateItem(this.nodes, x, this.cmp);
- };
- Heap3.prototype.clear = function() {
- return this.nodes = [];
- };
- Heap3.prototype.empty = function() {
- return this.nodes.length === 0;
- };
- Heap3.prototype.size = function() {
- return this.nodes.length;
- };
- Heap3.prototype.clone = function() {
- var heap;
- heap = new Heap3();
- heap.nodes = this.nodes.slice(0);
- return heap;
- };
- Heap3.prototype.toArray = function() {
- return this.nodes.slice(0);
- };
- Heap3.prototype.insert = Heap3.prototype.push;
- Heap3.prototype.top = Heap3.prototype.peek;
- Heap3.prototype.front = Heap3.prototype.peek;
- Heap3.prototype.has = Heap3.prototype.contains;
- Heap3.prototype.copy = Heap3.prototype.clone;
- return Heap3;
- }();
- (function(root, factory) {
- if (typeof define === "function" && define.amd) {
- return define([], factory);
- } else if (typeof exports === "object") {
- return module2.exports = factory();
- } else {
- return root.Heap = factory();
- }
- })(this, function() {
- return Heap2;
- });
- }).call(exports);
- }
-});
-
-// node_modules/heap/index.js
-var require_heap2 = __commonJS({
- "node_modules/heap/index.js"(exports, module2) {
- module2.exports = require_heap();
- }
-});
-
-// src/main.ts
-var main_exports = {};
-__export(main_exports, {
- default: () => SRPlugin
-});
-module.exports = __toCommonJS(main_exports);
-var import_obsidian8 = require("obsidian");
-var graph = __toESM(require_lib());
-
-// src/settings.ts
-var import_obsidian2 = require("obsidian");
-
-// src/lang/helpers.ts
-var import_obsidian = require("obsidian");
-
-// src/lang/locale/af.ts
-var af_default = {};
-
-// src/lang/locale/ar.ts
-var ar_default = {
- // flashcard-modal.tsx
- DECKS: "\u0627\u0644\u0631\u064F\u0632\u0645\u064E\u0627\u062A",
- DUE_CARDS: "\u0628\u0637\u0627\u0642\u0627\u062A \u0645\u064F\u0633\u062A\u062D\u0642\u0629",
- NEW_CARDS: "\u0628\u0637\u0627\u0642\u0627\u062A \u062C\u062F\u064A\u062F\u0629",
- TOTAL_CARDS: "\u0625\u062C\u0645\u0627\u0644\u064A \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A",
- BACK: "\u0631\u062C\u0648\u0639",
- SKIP: "Skip",
- EDIT_CARD: "\u062A\u0639\u062F\u064A\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0629",
- RESET_CARD_PROGRESS: "\u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u062A\u0642\u062F\u0651\u064F\u0645\u0652 \u0627\u0644\u0628\u0637\u0627\u0642\u0629",
- HARD: "\u0635\u0639\u0628",
- GOOD: "\u062C\u064A\u062F",
- EASY: "\u0633\u0647\u0644",
- SHOW_ANSWER: "\u0623\u0638\u0647\u0650\u0631 \u0627\u0644\u0625\u062C\u0627\u0628\u0629",
- CARD_PROGRESS_RESET: ".\u062A\u0645\u0651\u064E\u062A \u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u062A\u0642\u062F\u0651\u064F\u0645 \u0627\u0644\u0628\u0637\u0627\u0642\u0629",
- SAVE: "\u062D\u0641\u0638",
- CANCEL: "\u0625\u0644\u063A\u0627\u0621",
- NO_INPUT: ".\u0644\u0645 \u064A\u062A\u0650\u0645 \u062A\u0642\u062F\u064A\u0645 \u0623\u064A \u0645\u064F\u062F\u062E\u0644\u0627\u062A",
- CURRENT_EASE_HELP_TEXT: ":\u0627\u0644\u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u062D\u0627\u0644\u064A\u0629",
- CURRENT_INTERVAL_HELP_TEXT: ":\u0627\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A \u0627\u0644\u062D\u0627\u0644\u064A",
- CARD_GENERATED_FROM: "${notePath} :\u062A\u0645 \u0625\u0646\u0634\u0627\u0624\u0647\u0627 \u0645\u0646",
- // main.ts
- OPEN_NOTE_FOR_REVIEW: "\u0627\u0641\u062A\u062D \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u0644\u0644\u0645\u0631\u0627\u062C\u0639\u0629",
- REVIEW_CARDS: "\u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A",
- REVIEW_EASY_FILE_MENU: "\u0645\u0631\u0627\u062C\u0639\u0629: \u0633\u0647\u0644",
- REVIEW_GOOD_FILE_MENU: "\u0645\u0631\u0627\u062C\u0639\u0629: \u062C\u064A\u062F",
- REVIEW_HARD_FILE_MENU: "\u0645\u0631\u0627\u062C\u0639\u0629: \u0635\u0639\u0628",
- REVIEW_NOTE_EASY_CMD: "\u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u0643\u0640 \u0633\u0647\u0644\u0629",
- REVIEW_NOTE_GOOD_CMD: "\u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u0643\u0640 \u062C\u064A\u062F\u0629",
- REVIEW_NOTE_HARD_CMD: "\u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u0643\u0640 \u0635\u0639\u0628\u0629",
- CRAM_ALL_CARDS: "\u062D\u062F\u062F \u0631\u064F\u0632\u0645\u064E\u0629 \u0644\u0644\u062D\u0634\u0631",
- REVIEW_ALL_CARDS: "\u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0645\u0646 \u062C\u0645\u064A\u0639 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0627\u062A",
- REVIEW_CARDS_IN_NOTE: "\u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0645\u0646 \u0647\u0630\u0647 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629",
- CRAM_CARDS_IN_NOTE: "\u0623\u062D\u0634\u0631 \u062C\u0645\u064A\u0639 \u0628\u0637\u0627\u0642\u0627\u062A \u0647\u0630\u0647 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629",
- VIEW_STATS: "\u0639\u0631\u0636 \u0627\u0644\u0625\u062D\u0635\u0627\u0626\u064A\u0627\u062A",
- STATUS_BAR: "\u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0645\u0633\u062A\u062D\u0642\u0629 ${dueFlashcardsCount},\u0645\u0644\u0627\u062D\u0638\u0627\u062A ${dueNotesCount}:\u0645\u0631\u0627\u062C\u0639\u0629",
- SYNC_TIME_TAKEN: "${t}ms \u0627\u0633\u062A\u063A\u0631\u0627\u0642 \u0627\u0644\u0645\u0632\u0627\u0645\u0646\u0629",
- NOTE_IN_IGNORED_FOLDER: ".\u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u064A\u062A\u0645 \u062D\u0641\u0638\u0647\u0627 \u0636\u0645\u0646 \u0627\u0644\u0645\u062C\u0644\u062F \u0627\u0644\u0630\u064A \u062A\u0645 \u062A\u062C\u0627\u0647\u0644\u0647 (\u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A)",
- PLEASE_TAG_NOTE: ".\u064A\u0631\u062C\u0649 \u0648\u0636\u0639 \u0648\u0633\u0645 \u0639\u0644\u0649 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u0628\u0634\u0643\u0644 \u0645\u0646\u0627\u0633\u0628 \u0644\u0644\u0645\u0631\u0627\u062C\u0639\u0629 (\u0641\u064A \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A)",
- RESPONSE_RECEIVED: ".\u0627\u0633\u062A\u064F\u0644\u0645\u062A \u0627\u0644\u0627\u0633\u062A\u062C\u0627\u0628\u0629",
- NO_DECK_EXISTS: "${deckName} \u0644\u0627 \u064A\u0648\u062C\u062F \u0631\u064F\u0632\u0645\u064E\u0629",
- ALL_CAUGHT_UP: "\u{1F606} \u0644\u0642\u062F \u062A\u0645 \u0627\u0644\u0642\u0628\u0636 \u0639\u0644\u064A\u0643\u0645 \u062C\u0645\u064A\u0639\u0627 \u0627\u0644\u0622\u0646",
- // scheduling.ts
- DAYS_STR_IVL: "\u064A\u0648\u0645/\u0623\u064A\u0627\u0645 ${interval}",
- MONTHS_STR_IVL: "\u0634\u0647\u0631/\u0623\u0634\u0647\u0631 ${interval}",
- YEARS_STR_IVL: "\u0633\u0646\u0629/\u0633\u0646\u0648\u0627\u062A ${interval}",
- DAYS_STR_IVL_MOBILE: "\u064A${interval}",
- MONTHS_STR_IVL_MOBILE: "\u0634${interval}",
- YEARS_STR_IVL_MOBILE: "\u0633${interval}",
- // settings.ts
- SETTINGS_HEADER: "Spaced Repetition Plugin - Settings",
- CHECK_WIKI: '.wiki \u0644\u0645\u0632\u064A\u062F \u0645\u0646 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062A \u060C \u062A\u062D\u0642\u0642 \u0645\u0646',
- FOLDERS_TO_IGNORE: "\u0645\u062C\u0644\u062F\u0627\u062A \u0644\u062A\u062C\u0627\u0647\u0644\u0647\u0627",
- FOLDERS_TO_IGNORE_DESC: "Templates Meta/Scripts : \u0623\u062F\u062E\u0644 \u0645\u0633\u0627\u0631\u0627\u062A \u0627\u0644\u0645\u062C\u0644\u062F \u0645\u0641\u0635\u0648\u0644\u0629 \u0628\u0648\u0627\u0633\u0637\u0629 \u0633\u0637\u0648\u0631 \u062C\u062F\u064A\u062F\u0629,\u0645\u062B\u0627\u0644",
- FLASHCARDS: "\u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A",
- FLASHCARD_EASY_LABEL: "\u0646\u0635 \u0627\u0644\u0632\u0631 \u0633\u0647\u0644",
- FLASHCARD_GOOD_LABEL: "\u0646\u0635 \u0627\u0644\u0632\u0631 \u062C\u064A\u062F",
- FLASHCARD_HARD_LABEL: "\u0646\u0635 \u0627\u0644\u0632\u0631 \u0635\u0639\u0628",
- FLASHCARD_EASY_DESC: '"\u062A\u062E\u0635\u064A\u0635 \u0627\u0644\u062A\u0633\u0645\u064A\u0629 \u0644\u0644\u0632\u0631 "\u0633\u0647\u0644',
- FLASHCARD_GOOD_DESC: '"\u062A\u062E\u0635\u064A\u0635 \u0627\u0644\u062A\u0633\u0645\u064A\u0629 \u0644\u0644\u0632\u0631 "\u062C\u064A\u062F',
- FLASHCARD_HARD_DESC: '"\u062A\u062E\u0635\u064A\u0635 \u0627\u0644\u062A\u0633\u0645\u064A\u0629 \u0644\u0644\u0632\u0631 "\u0635\u0639\u0628',
- FLASHCARD_TAGS: "\u0648\u064F\u0633\u0648\u0645 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A",
- FLASHCARD_TAGS_DESC: "#2\u0623\u062F\u062E\u0644 \u0627\u0644\u0648\u064F\u0633\u0648\u0645 \u0645\u0641\u0635\u0648\u0644\u0629 \u0628\u0645\u0633\u0627\u0641\u0627\u062A \u0623\u0648 \u0623\u0633\u0637\u0631 \u062C\u062F\u064A\u062F\u0629 \u060C \u0623\u064A \u0628\u0637\u0627\u0642\u0627\u062A# \u0631\u0632\u0645\u06293# \u0631\u0632\u0645\u0629",
- CONVERT_FOLDERS_TO_DECKS: "\u062A\u062D\u0648\u064A\u0644 \u0627\u0644\u0645\u062C\u0644\u062F\u0627\u062A \u0625\u0644\u0649 \u0645\u0644\u0641\u0627\u062A \u0623\u0635\u0644\u064A\u0629 \u0648 \u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0641\u0631\u0639\u064A\u0629\u061F",
- CONVERT_FOLDERS_TO_DECKS_DESC: ".\u0647\u0630\u0627 \u0647\u0648 \u0628\u062F\u064A\u0644 \u0644\u062E\u064A\u0627\u0631 \u0648\u0633\u0648\u0645 \u0627\u0644\u0628\u0637\u0627\u0642\u0629 \u0623\u0639\u0644\u0627\u0647",
- INLINE_SCHEDULING_COMMENTS: "\u062D\u0641\u0638 \u062A\u0639\u0644\u064A\u0642 \u0627\u0644\u062C\u062F\u0648\u0644\u0629 \u0639\u0644\u0649 \u0646\u0641\u0633 \u0627\u0644\u0633\u0637\u0631 \u0645\u062B\u0644 \u0627\u0644\u0633\u0637\u0631 \u0627\u0644\u0623\u062E\u064A\u0631 \u0644\u0644\u0628\u0637\u0627\u0642\u0629 \u061F",
- INLINE_SCHEDULING_COMMENTS_DESC: "\u0644\u0627 \u062A\u0643\u0633\u0631 \u062A\u0646\u0633\u064A\u0642 \u0627\u0644\u0642\u0627\u0626\u0645\u0629 HTML \u0633\u064A\u0624\u062F\u064A \u062A\u0634\u063A\u064A\u0644 \u0647\u0630\u0627 \u0625\u0644\u0649 \u062C\u0639\u0644 \u062A\u0639\u0644\u064A\u0642\u0627\u062A",
- BURY_SIBLINGS_TILL_NEXT_DAY: "\u0623\u062E\u0641\u064A \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0634\u0642\u064A\u0642\u0629 \u062D\u062A\u0649 \u0627\u0644\u064A\u0648\u0645 \u0627\u0644\u062A\u0627\u0644\u064A",
- BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "cloze deletions : \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0634\u0642\u064A\u0642\u0629 \u0647\u064A \u0628\u0637\u0627\u0642\u0627\u062A \u062A\u0645 \u0625\u0646\u0634\u0627\u0624\u0647\u0627 \u0645\u0646 \u0646\u0641\u0633 \u0646\u0635 \u0627\u0644\u0628\u0637\u0627\u0642\u0629 \u0643\u0640",
- SHOW_CARD_CONTEXT: "\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0633\u064A\u0627\u0642 \u0641\u064A \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A\u061F",
- SHOW_CARD_CONTEXT_DESC: "i.e. Title > Heading 1 > Subheading > ... > Subheading",
- CARD_MODAL_HEIGHT_PERCENT: "\u0646\u0633\u0628\u0629 \u0627\u0631\u062A\u0641\u0627\u0639 \u0627\u0644\u0628\u0637\u0627\u0642\u0629",
- CARD_MODAL_SIZE_PERCENT_DESC: "\u064A\u062C\u0628 \u0636\u0628\u0637\u0647\u0627 \u0639\u0644\u0649 100 \u066A \u0639\u0644\u0649 \u0627\u0644\u0647\u0627\u062A\u0641 \u0627\u0644\u0645\u062D\u0645\u0648\u0644 \u0623\u0648 \u0625\u0630\u0627 \u0643\u0627\u0646 \u0644\u062F\u064A\u0643 \u0635\u0648\u0631 \u0643\u0628\u064A\u0631\u0629 \u062C\u062F\u064B\u0627",
- RESET_DEFAULT: "\u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u0625\u0644\u0649 \u0627\u0644\u0627\u0641\u062A\u0631\u0627\u0636\u064A",
- CARD_MODAL_WIDTH_PERCENT: "\u0646\u0633\u0628\u0629 \u0639\u0631\u0636 \u0627\u0644\u0628\u0637\u0627\u0642\u0629",
- RANDOMIZE_CARD_ORDER: "\u062A\u0631\u062A\u064A\u0628 \u0628\u0637\u0627\u0642\u0629 \u0639\u0634\u0648\u0627\u0626\u064A \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0629\u061F",
- DISABLE_CLOZE_CARDS: "\u061Fcloze \u062A\u0639\u0637\u064A\u0644 \u0628\u0637\u0627\u0642\u0627\u062A",
- CONVERT_HIGHLIGHTS_TO_CLOZES: "Convert ==hightlights== to clozes?",
- CONVERT_BOLD_TEXT_TO_CLOZES: "Convert **bolded text** to clozes?",
- CONVERT_CURLY_BRACKETS_TO_CLOZES: "Convert {{curly brackets}} to clozes?",
- INLINE_CARDS_SEPARATOR: "\u0641\u0627\u0635\u0644 \u0645\u0646 \u0623\u062C\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0645\u0636\u0645\u0646\u0629",
- FIX_SEPARATORS_MANUALLY_WARNING: "\u0636\u0639 \u0641\u064A \u062D\u0633\u0627\u0628\u0643 \u0623\u0646\u0647 \u0628\u0639\u062F \u062A\u063A\u064A\u064A\u0631 \u0647\u0630\u0627 \u060C \u064A\u062C\u0628 \u0639\u0644\u064A\u0643 \u062A\u0639\u062F\u064A\u0644 \u0623\u064A \u0628\u0637\u0627\u0642\u0627\u062A \u0644\u062F\u064A\u0643 \u0628\u0627\u0644\u0641\u0639\u0644 \u064A\u062F\u0648\u064A\u064B\u0627",
- INLINE_REVERSED_CARDS_SEPARATOR: "\u0641\u0627\u0635\u0644 \u0645\u0646 \u0623\u062C\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0639\u0643\u0633\u064A\u0629 \u0627\u0644\u0645\u0636\u0645\u0646\u0629",
- MULTILINE_CARDS_SEPARATOR: "\u0641\u0627\u0635\u0644 \u0645\u0646 \u0623\u062C\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0645\u062A\u0639\u062F\u062F\u0629",
- MULTILINE_REVERSED_CARDS_SEPARATOR: "\u0641\u0627\u0635\u0644 \u0645\u0646 \u0623\u062C\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0639\u0643\u0633\u064A\u0629 \u0627\u0644\u0645\u062A\u0639\u062F\u062F\u0629",
- NOTES: "\u0645\u0644\u0627\u062D\u0638\u0627\u062A",
- REVIEW_PANE_ON_STARTUP: "\u062A\u0645\u0643\u064A\u0646 \u062C\u0632\u0621 \u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0627\u062A \u0639\u0646\u062F \u0628\u062F\u0621 \u0627\u0644\u062A\u0634\u063A\u064A\u0644",
- TAGS_TO_REVIEW: "\u0648\u0633\u0648\u0645 \u0644\u0644\u0645\u0631\u0627\u062C\u0639\u0629",
- TAGS_TO_REVIEW_DESC: "#\u0623\u062F\u062E\u0644 \u0627\u0644\u0648\u0633\u0648\u0645 \u0645\u0641\u0635\u0648\u0644\u0629 \u0628\u0645\u0633\u0627\u0641\u0627\u062A \u0623\u0648 \u062E\u0637\u0648\u0637 \u062C\u062F\u064A\u062F\u0629 \u060C \u0623\u064A : \u0645\u0631\u0627\u062C\u0639\u0629# \u0648\u0633\u06452# \u0648\u0633\u06453",
- OPEN_RANDOM_NOTE: "\u0627\u0641\u062A\u062D \u0645\u0644\u0627\u062D\u0638\u0629 \u0639\u0634\u0648\u0627\u0626\u064A\u0629 \u0644\u0644\u0645\u0631\u0627\u062C\u0639\u0629",
- OPEN_RANDOM_NOTE_DESC: "(Pagerank) \u0639\u0646\u062F \u062A\u0639\u0637\u064A\u0644 \u0647\u0630\u0627 \u0627\u0644\u062E\u064A\u0627\u0631 \u060C\u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0627\u062A \u0633\u064A\u062A\u0645 \u062A\u0631\u062A\u064A\u0628\u064F\u0647\u0627 \u062D\u0633\u0628 \u0627\u0644\u0623\u0647\u0645\u064A\u0629",
- AUTO_NEXT_NOTE: "\u0627\u0641\u062A\u062D \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u0627\u0644\u062A\u0627\u0644\u064A\u0629 \u062A\u0644\u0642\u0627\u0626\u064A\u064B\u0627 \u0628\u0639\u062F \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0629",
- DISABLE_FILE_MENU_REVIEW_OPTIONS: "\u062A\u0639\u0637\u064A\u0644 \u062E\u064A\u0627\u0631\u0627\u062A \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0629 \u0641\u064A \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0644\u0641\u0627\u062A \u060C \u0623\u064A \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0629:\u0627\u0644\u0633\u0647\u0644 \u0627\u0644\u0635\u0639\u0628 \u0627\u0644\u062C\u064A\u062F",
- DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\u0639\u0646\u062F \u062A\u063A\u064A\u064A\u0631 \u0647\u0630\u0627 \u0627\u0644\u062E\u064A\u0627\u0631 Obsidian \u0623\u0639\u062F \u062A\u0634\u063A\u064A\u0644 , command hotkeys. \u0628\u0639\u062F \u0627\u0644\u062A\u0639\u0637\u064A\u0644 \u060C \u064A\u0645\u0643\u0646\u0643 \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0629 \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645",
- MAX_N_DAYS_REVIEW_QUEUE: "\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0639\u062F\u062F \u0627\u0644\u0623\u064A\u0627\u0645 \u0627\u0644\u062A\u064A \u064A\u062C\u0628 \u0639\u0631\u0636\u0647\u0627 \u0639\u0644\u0649 \u0627\u0644\u0644\u0648\u062D\u0629 \u0627\u0644\u064A\u0645\u0646\u0649",
- MIN_ONE_DAY: "\u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0639\u062F\u062F \u0627\u0644\u0623\u064A\u0627\u0645 1 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644",
- VALID_NUMBER_WARNING: "\u064A\u0631\u062C\u0649 \u062A\u0642\u062F\u064A\u0645 \u0631\u0642\u0645 \u0635\u0627\u0644\u062D",
- UI_PREFERENCES: "\u062A\u0641\u0636\u064A\u0644\u0627\u062A \u0648\u0627\u062C\u0647\u0629 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645",
- INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0627\u0644\u0639\u0631\u0636 \u0627\u0644\u0634\u062C\u0631\u064A \u0644\u0644\u0631\u064F\u0632\u0645 \u0645\u0648\u0633\u0639 \u0628\u062D\u064A\u062B \u062A\u0637\u0647\u0631 \u0627\u0644\u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0641\u0631\u0639\u064A\u0629 \u0643\u0644\u0647\u0627",
- INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: " \u0639\u0637\u0644 \u0647\u0630\u0627 \u0627\u0644\u062E\u064A\u0627\u0631 \u0644\u0637\u064A \u0627\u0644\u0631\u064F\u0632\u0645 \u0627\u0644\u0645\u062A\u062F\u0627\u062E\u0644\u0629 \u0641\u064A \u0646\u0641\u0633 \u0627\u0644\u0628\u0637\u0627\u0642\u0629 , \u0645\u0641\u064A\u062F \u0625\u0630\u0627 \u0643\u0627\u0646 \u0644\u062F\u064A\u0643 \u0628\u0637\u0627\u0642\u0627\u062A \u062A\u0646\u062A\u0645\u064A \u0625\u0644\u0649 \u0627\u0644\u0639\u062F\u064A\u062F \u0645\u0646 \u0627\u0644\u0631\u064F\u0632\u0645 \u0641\u064A \u0646\u0641\u0633 \u0627\u0644\u0645\u0644\u0641",
- ALGORITHM: "\u062E\u0648\u0627\u0631\u0632\u0645\u064A\u0629",
- CHECK_ALGORITHM_WIKI: 'algorithm implementation :\u0644\u0645\u0632\u064A\u062F \u0645\u0646 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062A \u062A\u062D\u0642\u0642 \u0645\u0646',
- BASE_EASE: "\u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u0642\u0627\u0639\u062F\u0629",
- BASE_EASE_DESC: "\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u062F\u0646\u0649 = 130 \u060C \u0648\u064A\u0641\u0636\u0644 \u062D\u0648\u0627\u0644\u064A 250.",
- BASE_EASE_MIN_WARNING: "\u064A\u062C\u0628 \u0623\u0646 \u062A\u0643\u0648\u0646 \u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u0642\u0627\u0639\u062F\u0629 130 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644.",
- LAPSE_INTERVAL_CHANGE: "\u0627\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A \u064A\u062A\u063A\u064A\u0631 \u0639\u0646\u062F \u0645\u0631\u0627\u062C\u0639\u0629 \u0628\u0637\u0627\u0642\u0629/\u0645\u0644\u0627\u062D\u0638\u0629 \u0635\u0639\u0628\u0629",
- LAPSE_INTERVAL_CHANGE_DESC: "newInterval = oldInterval * intervalChange / 100.",
- EASY_BONUS: "\u0645\u0643\u0627\u0641\u0623\u0629 \u0633\u0647\u0644\u0629",
- EASY_BONUS_DESC: "\u062A\u062A\u064A\u062D \u0644\u0643 \u0627\u0644\u0645\u0643\u0627\u0641\u0623\u0629 \u0627\u0644\u0633\u0647\u0644\u0629 \u0636\u0628\u0637 \u0627\u0644\u0641\u0631\u0642 \u0641\u064A \u0627\u0644\u0641\u0648\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A\u0629 \u0628\u064A\u0646 \u0627\u0644\u0631\u062F \u0627\u0644\u062C\u064A\u062F \u0648\u0627\u0644\u0633\u0647\u0644 \u0639\u0644\u0649 \u0628\u0637\u0627\u0642\u0629/\u0645\u0644\u0627\u062D\u0638\u0629 (\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u062F\u0646\u0649 = 100 \u066A).",
- EASY_BONUS_MIN_WARNING: "\u064A\u062C\u0628 \u0623\u0646 \u062A\u0643\u0648\u0646 \u0627\u0644\u0645\u0643\u0627\u0641\u0623\u0629 \u0627\u0644\u0633\u0647\u0644\u0629 100 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644.",
- MAX_INTERVAL: "Maximum interval in days",
- MAX_INTERVAL_DESC: "\u064A\u062A\u064A\u062D \u0644\u0643 \u0648\u0636\u0639 \u062D\u062F \u0623\u0639\u0644\u0649 \u0644\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A (\u0627\u0641\u062A\u0631\u0627\u0636\u064A = 100 \u0639\u0627\u0645).",
- MAX_INTERVAL_MIN_WARNING: "\u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A \u0644\u0645\u062F\u0629 \u064A\u0648\u0645 \u0648\u0627\u062D\u062F \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644.",
- MAX_LINK_CONTRIB: "\u0623\u0642\u0635\u0649 \u0645\u0633\u0627\u0647\u0645\u0629 \u0627\u0631\u062A\u0628\u0627\u0637",
- MAX_LINK_CONTRIB_DESC: "\u0623\u0642\u0635\u0649 \u0645\u0633\u0627\u0647\u0645\u0629 \u0644\u0644\u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u0645\u0631\u062C\u062D\u0629 \u0644\u0644\u0645\u0644\u0627\u062D\u0638\u0627\u062A \u0627\u0644\u0645\u0631\u062A\u0628\u0637\u0629 \u0628\u0627\u0644\u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u0623\u0648\u0644\u064A\u0629.",
- LOGGING: "\u062A\u0633\u062C\u064A\u0644",
- DISPLAY_DEBUG_INFO: "\u0639\u0631\u0636 \u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0627\u0644\u062A\u0635\u062D\u064A\u062D \u0639\u0644\u0649 \u0648\u062D\u062F\u0629 \u062A\u062D\u0643\u0645 \u0627\u0644\u0645\u0637\u0648\u0631\u061F",
- // sidebar.ts
- NOTES_REVIEW_QUEUE: "\u0645\u0644\u0627\u062D\u0638\u0627\u062A \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0629",
- CLOSE: "\u0623\u063A\u0644\u0642",
- NEW: "\u062C\u062F\u064A\u062F",
- YESTERDAY: "\u0627\u0644\u0628\u0627\u0631\u062D\u0629",
- TODAY: "\u0627\u0644\u064A\u0648\u0645",
- TOMORROW: "\u0627\u0644\u063A\u062F",
- // stats-modal.tsx
- STATS_TITLE: "\u0625\u062D\u0635\u0627\u0626\u064A\u0627\u062A",
- MONTH: "\u0634\u0647\u0631",
- QUARTER: "\u0631\u0628\u0639 \u0627\u0644\u0633\u0646\u0629",
- YEAR: "\u0633\u0646\u0629",
- LIFETIME: "",
- FORECAST: "",
- FORECAST_DESC: "\u0639\u062F\u062F \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0645\u0633\u062A\u062D\u0642\u0629 \u0641\u064A \u0627\u0644\u0645\u0633\u062A\u0642\u0628\u0644",
- SCHEDULED: "\u0627\u0644\u0645\u0642\u0631\u0631",
- DAYS: "\u0623\u064A\u0627\u0645",
- NUMBER_OF_CARDS: "\u0639\u062F\u062F \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A",
- REVIEWS_PER_DAY: "\u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0627\u062A/\u0627\u0644\u064A\u0648\u0645 ${avg} :\u0645\u062A\u0648\u0633\u0637",
- INTERVALS: "\u0641\u0648\u0627\u0635\u0644 \u0632\u0645\u0646\u064A\u0629",
- INTERVALS_DESC: "\u0627\u0644\u062A\u0623\u062E\u064A\u0631 \u062D\u062A\u0649 \u064A\u062A\u0645 \u0639\u0631\u0636 \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0627\u062A \u0645\u0631\u0629 \u0623\u062E\u0631\u0649",
- COUNT: "\u0639\u062F\u062F",
- INTERVALS_SUMMARY: "${longest} : \u0623\u0637\u0648\u0644 \u0641\u0627\u0635\u0644 \u0632\u0645\u0646\u064A ,${avg} :\u0645\u062A\u0648\u0633\u0637 \u0627\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A",
- EASES: "\u0627\u0644\u0633\u0647\u0648\u0644\u0629",
- EASES_SUMMARY: "${avgEase} :\u0645\u062A\u0648\u0633\u0637 \u0627\u0644\u0633\u0647\u0648\u0644\u0629",
- CARD_TYPES: "\u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A",
- CARD_TYPES_DESC: "\u0648\u0647\u0630\u0627 \u064A\u0634\u0645\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0645\u062E\u0641\u064A\u0629 \u0643\u0630\u0644\u0643 \u060C \u0625\u0646 \u0648\u062C\u062F\u062A",
- CARD_TYPE_NEW: "\u062C\u062F\u064A\u062F\u0629",
- CARD_TYPE_YOUNG: "\u0635\u063A\u064A\u0631\u0629",
- CARD_TYPE_MATURE: "\u0646\u0627\u0636\u062C\u0629",
- CARD_TYPES_SUMMARY: " ${totalCardsCount} :\u0625\u062C\u0645\u0627\u0644\u064A \u0639\u062F\u062F \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A"
-};
-
-// src/lang/locale/cz.ts
-var cz_default = {
- // flashcard-modal.tsx
- DECKS: "Bal\xED\u010Dky",
- DUE_CARDS: "Karti\u010Dky po term\xEDnu",
- NEW_CARDS: "Nov\xE9 karti\u010Dky",
- TOTAL_CARDS: "Karti\u010Dek celkem",
- BACK: "Back",
- SKIP: "Skip",
- EDIT_CARD: "Edit Card",
- RESET_CARD_PROGRESS: "Vynulovat pokrok karti\u010Dky",
- HARD: "Te\u017Ek\xE9",
- GOOD: "Dobr\xE9",
- EASY: "Jednoduch\xE9",
- SHOW_ANSWER: "Uk\xE1zat odpov\u011B\u010F",
- CARD_PROGRESS_RESET: "Pokrok karti\u010Dky byl vynulov\xE1n.",
- SAVE: "Save",
- CANCEL: "Cancel",
- NO_INPUT: "No input provided.",
- CURRENT_EASE_HELP_TEXT: "Current Ease: ",
- CURRENT_INTERVAL_HELP_TEXT: "Current Interval: ",
- CARD_GENERATED_FROM: "Generated from: ${notePath}",
- // main.ts
- OPEN_NOTE_FOR_REVIEW: "Otev\u0159\xEDt pozn\xE1mku k revizi",
- REVIEW_CARDS: "Pozn\xE1mek k revizi",
- REVIEW_EASY_FILE_MENU: "Revize: Jednoduch\xE9",
- REVIEW_GOOD_FILE_MENU: "Revize: Dobr\xE9",
- REVIEW_HARD_FILE_MENU: "Revize: T\u011B\u017Ek\xE9",
- REVIEW_NOTE_EASY_CMD: "Ozna\u010Dit pozn\xE1mku jako jednoduchou",
- REVIEW_NOTE_GOOD_CMD: "Ozna\u010Dit pozn\xE1mku jako dobrou",
- REVIEW_NOTE_HARD_CMD: "Ozna\u010Dit pozn\xE1mku jako te\u017Ekou",
- REVIEW_ALL_CARDS: "Revidovat karti\u010Dky ve v\u0161ech pozn\xE1mk\xE1ch",
- CRAM_ALL_CARDS: "Select a deck to cram",
- REVIEW_CARDS_IN_NOTE: "Revidovat karti\u010Dky v t\xE9to pozn\xE1mce.",
- CRAM_CARDS_IN_NOTE: "Cram karti\u010Dky v t\xE9to pozn\xE1mce.",
- VIEW_STATS: "Uk\xE1zat statistiky",
- STATUS_BAR: "Revize: ${dueNotesCount} pozn\xE1mek, ${dueFlashcardsCount} karti\u010Dek po term\xEDnu",
- SYNC_TIME_TAKEN: "Synchronizace trvala ${t}ms",
- NOTE_IN_IGNORED_FOLDER: "Pozn\xE1mka je ulo\u017Eena v ignorovan\xE9 slo\u017Ece (zkontrolujte nastaven\xED).",
- PLEASE_TAG_NOTE: "Pros\xEDm ozna\u010Dne pozn\xE1mku odpov\xEDdaj\xEDc\xEDm tagem pro revizi (v nastaven\xED).",
- RESPONSE_RECEIVED: "Odpov\u011B\u010F p\u0159ijata.",
- NO_DECK_EXISTS: "Neexistuje \u017E\xE1dn\xFD bal\xED\u010Dek pro ${deckName}",
- ALL_CAUGHT_UP: "V\u0161e zrevidov\xE1no",
- // scheduling.ts
- DAYS_STR_IVL: "${interval} den/dn\xED",
- MONTHS_STR_IVL: "${interval} m\u011Bs\xEDc(\u016F)",
- YEARS_STR_IVL: "${interval} rok(\u016F)",
- DAYS_STR_IVL_MOBILE: "${interval}d",
- MONTHS_STR_IVL_MOBILE: "${interval}m",
- YEARS_STR_IVL_MOBILE: "${interval}r",
- // settings.ts
- SETTINGS_HEADER: "Spaced Repetition Plugin - Nastaven\xED",
- CHECK_WIKI: 'Pro v\xEDce informac\xED jd\u011Bte na wiki.',
- FOLDERS_TO_IGNORE: "Ignorovan\xE9 slo\u017Eky",
- FOLDERS_TO_IGNORE_DESC: "Zadejte cesty ke slo\u017Ek\xE1m odd\u011Blen\xE9 od\u0159\xE1dkov\xE1n\xEDm nap\u0159\xEDkad. \u0160ablony Meta/Scripts",
- FLASHCARDS: "Karti\u010Dky",
- FLASHCARD_EASY_LABEL: "Easy Button Text",
- FLASHCARD_GOOD_LABEL: "Good Button Text",
- FLASHCARD_HARD_LABEL: "Hard Button Text",
- FLASHCARD_EASY_DESC: 'Customize the label for the "Easy" Button',
- FLASHCARD_GOOD_DESC: 'Customize the label for the "Good" Button',
- FLASHCARD_HARD_DESC: 'Customize the label for the "Hard" Button',
- FLASHCARD_TAGS: "Tag pro karti\u010Dky",
- FLASHCARD_TAGS_DESC: "Zadete tagy ood\u011Blen\xE9 mezerou nebo od\u0159\xE1dkov\xE1n\xEDm nap\u0159\xEDklad. #karti\u010Dky #bal\xED\u010Dke2 #bal\xED\u010Dek3.",
- CONVERT_FOLDERS_TO_DECKS: "P\u0159ev\xE9st slo\u017Eky na bal\xED\u010Dky a podbal\xED\u010Dky?",
- CONVERT_FOLDERS_TO_DECKS_DESC: "Toto je alternativa k tag\u016Fm karti\u010Dek viz nastaven\xED v\xFD\u0161e.",
- INLINE_SCHEDULING_COMMENTS: "Ulo\u017Eit pl\xE1novac\xED koment\xE1\u0159 na stejn\xFD \u0159\xE1dek jako posledn\xED polo\u017Eka karti\u010Dky?",
- INLINE_SCHEDULING_COMMENTS_DESC: "Zapnut\xED t\xE9to volby zp\u016Fsob\xED, \u017Ee HTML koment\xE1\u0159e nebudou rozb\xEDjet form\xE1tov\xE1n\xED list\u016F.",
- BURY_SIBLINGS_TILL_NEXT_DAY: "Odlo\u017Eit p\u0159\xEDbuzn\xE9 karti\u010Dky na dal\u0161\xED den?",
- BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "P\u0159\xEDbuzn\xE9 karti\u010Dky jsou karti\u010Dky generovan\xE9 z textu stejn\xE9 pozn\xE1mky nap\u0159\xEDklad cloze smaz\xE1n\xED",
- SHOW_CARD_CONTEXT: "Uk\xE1zat kontext v karti\u010Dce?",
- SHOW_CARD_CONTEXT_DESC: "nap\u0159\xEDklad Titulek > Nadpis1 > Podnadpis > ... > Podnadpis",
- CARD_MODAL_HEIGHT_PERCENT: "V\xFD\u0161ka karti\u010Dek v procentech",
- CARD_MODAL_SIZE_PERCENT_DESC: "M\u011Blo by b\xFDt nastaveno na 100% na mobilu nebo kdy\u017E pou\u017E\xEDv\xE1te velk\xE9 obr\xE1zky",
- RESET_DEFAULT: "Resetovat v\xFDchoz\xED nastaven\xED",
- CARD_MODAL_WIDTH_PERCENT: "\u0160\xED\u0159ka karti\u010Dek v procentech",
- RANDOMIZE_CARD_ORDER: "N\xE1hodn\u011B zm\u011Bnit po\u0159ad\xED karti\u010Dek b\u011Bhem revize?",
- DISABLE_CLOZE_CARDS: "Vypnout cloze karti\u010Dky?",
- CONVERT_HIGHLIGHTS_TO_CLOZES: "P\u0159ev\xE9st ==zv\xFDrazn\u011Bn\xED== na clozes?",
- CONVERT_BOLD_TEXT_TO_CLOZES: "P\u0159ev\xE9st **tu\u010Dn\xFD text** na clozes?",
- CONVERT_CURLY_BRACKETS_TO_CLOZES: "P\u0159ev\xE9st {{slo\u017Een\xE9 z\xE1vorky}} na clozes?",
- INLINE_CARDS_SEPARATOR: "Odd\u011Blova\u010D pro inline karti\u010Dky",
- FIX_SEPARATORS_MANUALLY_WARNING: "Pozor. Jakmile toto zm\u011Bn\xEDte, budete muset ru\u010Dn\u011B upravit v\u0161echny existuj\xEDc\xED karti\u010Dky.",
- INLINE_REVERSED_CARDS_SEPARATOR: "Odd\u011Blova\u010D pro oto\u010Den\xE9 inline karti\u010Dky",
- MULTILINE_CARDS_SEPARATOR: "Odd\u011Blova\u010D pro v\xEDce\u0159\xE1dkov\xE9 karti\u010Dky",
- MULTILINE_REVERSED_CARDS_SEPARATOR: "Odd\u011Blova\u010D pro v\xEDce\u0159\xE1dkove oto\u010Den\xE9 karti\u010Dky",
- NOTES: "Pozn\xE1mky",
- REVIEW_PANE_ON_STARTUP: "Enable note review pane on startup",
- TAGS_TO_REVIEW: "Tag pro revizi",
- TAGS_TO_REVIEW_DESC: "Zadejte tagy odd\u011Blen\xE9 mezerami nebo od\u0159\xE1dkov\xE1n\xEDm nap\u0159\xEDklad #review #tag2 #tag3.",
- OPEN_RANDOM_NOTE: "Otev\u0159\xEDt n\xE1hodnou pozn\xE1mku pro revizi",
- OPEN_RANDOM_NOTE_DESC: "Pokud toto vypnete, pozn\xE1mky budou \u0159azeny dle d\u016Fle\u017Eitosti (PageRank).",
- AUTO_NEXT_NOTE: "Otev\u0159\xEDt automaticky dal\u0161\xED pozn\xE1mku po dokon\u010Den\xED revize",
- DISABLE_FILE_MENU_REVIEW_OPTIONS: "Vypnout volby revize v menu souboru nap\u0159\xEDklad 'Revize: Jednoduch\xE9'",
- DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "Po vypnut\xED m\u016F\u017Eete pou\u017E\xEDvat kl\xE1vesov\xE9 zkratky. Restartujte Obsidian po zm\u011Bn\u011B nastaven\xED.",
- MAX_N_DAYS_REVIEW_QUEUE: "Maxim\xE1ln\xED po\u010Det dn\xED zobrazen\xFDch v prav\xE9m panelu",
- MIN_ONE_DAY: "Po\u010Det dn\xED mus\xED b\xFDt minim\xE1ln\u011B 1.",
- VALID_NUMBER_WARNING: "Pros\xEDm zadejte validn\xED \u010D\xEDslo.",
- UI_PREFERENCES: "P\u0159edvolby u\u017Eivatelsk\xE9ho rozhran\xED",
- INITIALLY_EXPAND_SUBDECKS_IN_TREE: "Stromy bal\xED\u010Dky by m\u011Bly b\xFDt zpo\u010D\xE1tku zobrazeny jako rozbalen\xE9",
- INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Vypn\u011Bte toto, chcete-li sbalit vno\u0159en\xE9 bal\xED\u010Dky na stejn\xE9 kart\u011B. To je u\u017Eite\u010Dn\xE9, pokud m\xE1te karti\u010Dky, kter\xE9 pat\u0159\xED k mnoha bal\xED\u010Dk\u016Fm ve stejn\xE9m souboru.",
- ALGORITHM: "Algoritmus",
- CHECK_ALGORITHM_WIKI: 'Pro v\xEDce informac\xED jd\u011Bte na popis algoritmu.',
- BASE_EASE: "Z\xE1kladn\xED slo\u017Eitost",
- BASE_EASE_DESC: "minimum = 130, nejl\xE9pe p\u0159ibli\u017En\u011B 250.",
- BASE_EASE_MIN_WARNING: "Z\xE1kladn\xED slo\u017Eitost mus\xED b\xFDt minim\xE1ln\u011B 130.",
- LAPSE_INTERVAL_CHANGE: "Zm\u011Bna intervalu pokud karti\u010Dku/pozn\xE1mku ozna\u010D\xEDte jako slo\u017Eitou",
- LAPSE_INTERVAL_CHANGE_DESC: "nov\xFD_inteval = star\xFD_interval * zm\u011Bna_intevalu / 100.",
- EASY_BONUS: "Bonus pro jednoduch\xE9",
- EASY_BONUS_DESC: "Tento bonus umo\u017E\u0148uje nastavit rozd\xEDl intervalu mezi jednoduch\xFDmi a dobr\xFDmi karti\u010Dkami/pozn\xE1mkami (minimum = 100%).",
- EASY_BONUS_MIN_WARNING: "Bonus pro jednoduchost mus\xED b\xFDt minim\xE1ln\u011B 100.",
- MAX_INTERVAL: "Maximum interval in days",
- MAX_INTERVAL_DESC: "Umo\u017E\u0148uje nastavit horn\xED limit pro interval (defaultn\u011B = 100 let).",
- MAX_INTERVAL_MIN_WARNING: "Maxim\xE1ln\xED interval mus\xED b\xFDt alespo\u0148 1 den.",
- MAX_LINK_CONTRIB: "Maxim\xE1ln\xED p\u0159\xEDsp\u011Bv\u011Bk prolinkov\xE1n\xED",
- MAX_LINK_CONTRIB_DESC: "Maxim\xE1ln\xED p\u0159\xEDsp\u011Bvek v\xE1\u017Een\xE9 slo\u017Eitosti prolinkovan\xFDch pozn\xE1mek pou\u017Eit\xFD pro ur\u010Den\xED po\u010D\xE1te\u010Dn\xED slo\u017Eitosti.",
- LOGGING: "Zaznamen\xE1v\xE1m",
- DISPLAY_DEBUG_INFO: "Zobrazit informace pro lad\u011Bn\xED na v\xFDvoj\xE1\u0159sk\xE9 konzoli?",
- // sidebar.ts
- NOTES_REVIEW_QUEUE: "Fronta pozn\xE1mek k revizi",
- CLOSE: "Uzav\u0159en\xE9",
- NEW: "Nov\xE9",
- YESTERDAY: "V\u010Dera",
- TODAY: "Dnes",
- TOMORROW: "Z\xEDtra",
- // stats-modal.tsx
- STATS_TITLE: "Statistiky",
- MONTH: "M\u011Bs\xEDc",
- QUARTER: "\u010Ctvrtlet\xED",
- YEAR: "Rok",
- LIFETIME: "Celkov\u011B",
- FORECAST: "P\u0159edpov\u011B\u010F",
- FORECAST_DESC: "Celkov\xFD po\u010Det karti\u010Dek, kter\xFDm vypr\u0161\xED term\xEDn",
- SCHEDULED: "Napl\xE1nov\xE1no",
- DAYS: "Dn\xED",
- NUMBER_OF_CARDS: "Po\u010Det karti\u010Dek",
- REVIEWS_PER_DAY: "Pr\u016Fm\u011Br: ${avg} revize/den",
- INTERVALS: "Intervaly",
- INTERVALS_DESC: "Doba, za kterou bude znovu zobrazeno k revize",
- COUNT: "Po\u010Det",
- INTERVALS_SUMMARY: "Pr\u016Fm\u011Brn\xFD interval: ${avg}, Nejdel\u0161\xED interval: ${longest}",
- EASES: "Slo\u017Eitost",
- EASES_SUMMARY: "Pr\u016Fm\u011Brn\xE1 slo\u017Eitost: ${avgEase}",
- CARD_TYPES: "Typy karti\u010Dek",
- CARD_TYPES_DESC: "Obsahuje i odlo\u017Een\xE9 karti\u010Dky (pokud existuj\xED)",
- CARD_TYPE_NEW: "Nov\xE1",
- CARD_TYPE_YOUNG: "Mlad\xE1",
- CARD_TYPE_MATURE: "Dosp\u011Bl\xE1",
- CARD_TYPES_SUMMARY: "Karti\u010Dek celkem: ${totalCardsCount}"
-};
-
-// src/lang/locale/bn.ts
-var bn_default = {};
-
-// src/lang/locale/da.ts
-var da_default = {};
-
-// src/lang/locale/de.ts
-var de_default = {
- // flashcard-modal.tsx
- DECKS: "Stapel",
- DUE_CARDS: "Anstehende Karten",
- NEW_CARDS: "Neue Karten",
- TOTAL_CARDS: "Alle Karten",
- BACK: "Back",
- SKIP: "Skip",
- EDIT_CARD: "Edit Card",
- RESET_CARD_PROGRESS: "Kartenfortschritt zur\xFCcksetzten",
- HARD: "Schwer",
- GOOD: "Gut",
- EASY: "Einfach",
- SHOW_ANSWER: "Zeige Antwort",
- CARD_PROGRESS_RESET: "Kartenfortschritt wurde zur\xFCckgesetzt.",
- SAVE: "Save",
- CANCEL: "Cancel",
- NO_INPUT: "No input provided.",
- CURRENT_EASE_HELP_TEXT: "Current Ease: ",
- CURRENT_INTERVAL_HELP_TEXT: "Current Interval: ",
- CARD_GENERATED_FROM: "Generated from: ${notePath}",
- // main.ts
- OPEN_NOTE_FOR_REVIEW: "Notiz zur Wiederholung \xF6ffnen",
- REVIEW_CARDS: "Lernkarten wiederholen",
- REVIEW_EASY_FILE_MENU: "Notiz abschliessen als: Einfach",
- REVIEW_GOOD_FILE_MENU: "Notiz abschliessen als: Gut",
- REVIEW_HARD_FILE_MENU: "Notiz abschliessen als: Schwer",
- REVIEW_NOTE_EASY_CMD: "Notiz abschliessen als: Einfach",
- REVIEW_NOTE_GOOD_CMD: "Notiz abschliessen als: Gut",
- REVIEW_NOTE_HARD_CMD: "Notiz abschliessen als: Schwer",
- REVIEW_ALL_CARDS: "Alle Lernkarten wiederholen",
- CRAM_ALL_CARDS: "Select a deck to cram",
- REVIEW_CARDS_IN_NOTE: "Lernkarten in dieser Notiz wiederholen",
- CRAM_CARDS_IN_NOTE: "Lernkarten in dieser Notiz pauken.",
- VIEW_STATS: "Statistiken anzeigen",
- STATUS_BAR: "Wiederholung: ${dueNotesCount} Notiz(en), ${dueFlashcardsCount} Karte(n) anstehend",
- SYNC_TIME_TAKEN: "Sync dauerte ${t}ms",
- NOTE_IN_IGNORED_FOLDER: "Notiz befindet sich in einem ausgeschlossenen Ordner (siehe Einstellungen).",
- PLEASE_TAG_NOTE: "Bitte die Notiz f\xFCr Wiederholungen entsprechend taggen (siehe Einstellungen).",
- RESPONSE_RECEIVED: "Antwort erhalten.",
- NO_DECK_EXISTS: "Kein Stapel f\xFCr ${deckName} gefunden.",
- ALL_CAUGHT_UP: "Yuhu! Alles geschafft! :D.",
- // scheduling.ts
- DAYS_STR_IVL: "${interval} Tag(e)",
- MONTHS_STR_IVL: "${interval} Monat(e)",
- YEARS_STR_IVL: "${interval} Jahr(e)",
- DAYS_STR_IVL_MOBILE: "${interval}d",
- MONTHS_STR_IVL_MOBILE: "${interval}m",
- YEARS_STR_IVL_MOBILE: "${interval}y",
- // settings.ts
- SETTINGS_HEADER: "Spaced Repetition Plugin - Einstellungen",
- CHECK_WIKI: 'Weitere Informationen gibt es im Wiki (english).',
- FOLDERS_TO_IGNORE: "Ausgeschlossene Ordner",
- FOLDERS_TO_IGNORE_DESC: "Mehrere Ordner mit Zeilenumbr\xFCchen getrennt angeben. Bsp. OrdnerA[Zeilenumbruch]OrdnerB/Unterordner",
- FLASHCARDS: "Lernkarten",
- FLASHCARD_EASY_LABEL: "Easy Button Text",
- FLASHCARD_GOOD_LABEL: "Good Button Text",
- FLASHCARD_HARD_LABEL: "Hard Button Text",
- FLASHCARD_EASY_DESC: 'Customize the label for the "Easy" Button',
- FLASHCARD_GOOD_DESC: 'Customize the label for the "Good" Button',
- FLASHCARD_HARD_DESC: 'Customize the label for the "Hard" Button',
- FLASHCARD_TAGS: "Lernkarten Tags",
- FLASHCARD_TAGS_DESC: "Mehrere Tags mit Leerzeichen oder Zeilenumbr\xFCchen getrennt angeben. Bsp. #karte #stapel2 #stapel3.",
- CONVERT_FOLDERS_TO_DECKS: "Ordner in Stapel und Substapel umwandeln?",
- CONVERT_FOLDERS_TO_DECKS_DESC: 'Eine Alternative zur oberen "Lernkarten Tags" Option.',
- INLINE_SCHEDULING_COMMENTS: "Den Fortschritt in der gleichen Zeile wie die letzte Zeile einer Lernkartei speichern?",
- INLINE_SCHEDULING_COMMENTS_DESC: "Wenn aktiviert, wird der HTML Kommentar die umgebende Liste nicht aufbrechen.",
- BURY_SIBLINGS_TILL_NEXT_DAY: "Verwandte Karten auf den n\xE4chsten Tag verlegen?",
- BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Verwandte Karten sind aus der gleichen Karte generiert worden (z.B. L\xFCckentextkarten oder beidseitige Karten).",
- SHOW_CARD_CONTEXT: "Kontext in den Karten anzeigen?",
- SHOW_CARD_CONTEXT_DESC: "Bsp. Titel > \xDCberschrift 1 > Sektion > ... > Untersektion",
- CARD_MODAL_HEIGHT_PERCENT: "H\xF6he der Lernkartei in Prozent",
- CARD_MODAL_SIZE_PERCENT_DESC: "Auf kleinen Bildschirmen (z.B. Smartphones) oder bei sehr grossen Bildern sollte dieser Wert auf 100% gesetzt werden.",
- RESET_DEFAULT: "Standardeinstellung wiederherstellen",
- CARD_MODAL_WIDTH_PERCENT: "Breite einer Lernkarte in Prozent",
- RANDOMIZE_CARD_ORDER: "W\xE4hrend der Wiederhoung die Reihenfolge zuf\xE4llig mischen?",
- DISABLE_CLOZE_CARDS: "L\xFCckentextkarten (cloze deletions) deaktivieren?",
- CONVERT_HIGHLIGHTS_TO_CLOZES: "==Hervorgehobenen== Text in L\xFCckentextkarten umwandeln?",
- CONVERT_BOLD_TEXT_TO_CLOZES: "**Fettgedruckten** Text in L\xFCckentextkarten umwandeln?",
- CONVERT_CURLY_BRACKETS_TO_CLOZES: "{{Geschweifte Klammern}} Text in L\xFCckentextkarten umwandeln?",
- INLINE_CARDS_SEPARATOR: "Trennzeichen f\xFCr einzeilige Lernkarten",
- FIX_SEPARATORS_MANUALLY_WARNING: "Wenn diese Einstellung ge\xE4ndert wird, dann m\xFCssen die entsprechenden Lernkarten manuell angepasst werden.",
- INLINE_REVERSED_CARDS_SEPARATOR: "Trennzeichen f\xFCr einzeilige beidseitige Lernkarten",
- MULTILINE_CARDS_SEPARATOR: "Trennzeichen f\xFCr mehrzeilige Lernkarten",
- MULTILINE_REVERSED_CARDS_SEPARATOR: "Trennzeichen f\xFCr mehrzeilige beidseitige Lernkarten",
- NOTES: "Notizen",
- REVIEW_PANE_ON_STARTUP: "Enable note review pane on startup",
- TAGS_TO_REVIEW: "Zu wiederholende Tags",
- TAGS_TO_REVIEW_DESC: "Mehrere Tags k\xF6nnen mit Leerzeichen oder Zeilenumbr\xFCchen getrennt angegeben werden. Bsp. #karte #tag1 #tag2.",
- OPEN_RANDOM_NOTE: "Zuf\xE4llige Karten wiederholen",
- OPEN_RANDOM_NOTE_DESC: "Wenn dies deaktiviert wird, dann werden die Notizen nach Wichtigkeit wiederholt (PageRank).",
- AUTO_NEXT_NOTE: "Nach einer Wiederholung automatisch die n\xE4chste Karte \xF6ffnen",
- DISABLE_FILE_MENU_REVIEW_OPTIONS: "Optionen zur Wiederholung im Men\xFC einer Datei deaktivieren. Bsp. Wiederholen: Einfach Gut Schwer",
- DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "Nach dem Deaktivieren k\xF6nnen die Tastenk\xFCrzel zur Wiederholung verwendet werden. Obsidian muss nach einer \xC4nderung neu geladen weren.",
- MAX_N_DAYS_REVIEW_QUEUE: "Maximale Anzahl anstehender Notizen, die im rechten Fensterbereich angezeigt werden",
- MIN_ONE_DAY: "Anzahl der Tage muss mindestens 1 sein.",
- VALID_NUMBER_WARNING: "Bitte eine g\xFCltige Zahl eingeben.",
- UI_PREFERENCES: "Einstellungen der Benutzeroberfl\xE4che",
- INITIALLY_EXPAND_SUBDECKS_IN_TREE: "Deckb\xE4ume sollten anf\xE4nglich erweitert angezeigt werden",
- INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Deaktivieren Sie dies, um verschachtelte Decks in derselben Karte zu reduzieren. N\xFCtzlich, wenn Sie Karten haben, die zu vielen Decks in derselben Datei geh\xF6ren.",
- ALGORITHM: "Algorithmus",
- CHECK_ALGORITHM_WIKI: 'Weiterf\xFChrende Informationen: Implementierung des Algorithmus (english).',
- BASE_EASE: "Basis der Einfachheit",
- BASE_EASE_DESC: "Minimum ist 130. Empfohlen wird ca. 250.",
- BASE_EASE_MIN_WARNING: "Basis der Einfachheit muss mindestens 130 sein.",
- LAPSE_INTERVAL_CHANGE: "Anpassungsfaktor des Intervalls wenn eine Notiz / Karte 'Schwer' abgeschlossen wird",
- LAPSE_INTERVAL_CHANGE_DESC: "neuesIntervall = altesIntervall * anpassungsfaktor / 100.",
- EASY_BONUS: "Einfachheit-Bonus",
- EASY_BONUS_DESC: "Der Einfachheit-Bonus gibt an um welchen Faktor (in Prozent) das Intervall l\xE4nger sein soll, wenn eine Notiz / Karte 'Einfach' statt 'Gut' abgeschlossen wird. Minimum ist 100%.",
- EASY_BONUS_MIN_WARNING: "Der Einfachheit-Bonus muss mindestens 100 sein.",
- MAX_INTERVAL: "Maximum interval in days",
- MAX_INTERVAL_DESC: "Das maximale Intervall (in Tagen) f\xFCr Wiederholungen. Standard sind 100 Jahre.",
- MAX_INTERVAL_MIN_WARNING: "Das maximale Interall muss mindestens ein Tag sein.",
- MAX_LINK_CONTRIB: "Maximaler Einfluss von Links",
- MAX_LINK_CONTRIB_DESC: "Maximaler Einfluss der Einfachheiten verlinkter Notizen zur gewichteten initialen Einfachheit einer neuen Lernkarte.",
- LOGGING: "Logging",
- DISPLAY_DEBUG_INFO: "Informationen zum Debugging in der Entwicklerkonsole anzeigen?",
- // sidebar.ts
- NOTES_REVIEW_QUEUE: "Anstehende Notizen zur Wiederholung",
- CLOSE: "Schliessen",
- NEW: "Neu",
- YESTERDAY: "Gestern",
- TODAY: "Heute",
- TOMORROW: "Morgen",
- // stats-modal.tsx
- STATS_TITLE: "Statistiken",
- MONTH: "Month",
- QUARTER: "Quarter",
- YEAR: "Year",
- LIFETIME: "Lifetime",
- FORECAST: "Prognose",
- FORECAST_DESC: "Anzahl der k\xFCnftig anstehenden Karten",
- SCHEDULED: "Anstehend",
- DAYS: "Tage",
- NUMBER_OF_CARDS: "Anzahl der Karten",
- REVIEWS_PER_DAY: "Durchschnitt: ${avg} Wiederholungen/Tag",
- INTERVALS: "Intervalle",
- INTERVALS_DESC: "Intervalle bis Wiederholungen anstehen",
- COUNT: "Anzahl",
- INTERVALS_SUMMARY: "Durchschnittliches Intervall: ${avg}, L\xE4ngstes Intervall: ${longest}",
- EASES: "Einfachheit",
- EASES_SUMMARY: "Durchschnittliche Einfachheit: ${avgEase}",
- CARD_TYPES: "Kategorisierung",
- CARD_TYPES_DESC: "Verlegte Karten eingeschlossen",
- CARD_TYPE_NEW: "Neu",
- CARD_TYPE_YOUNG: "Jung",
- CARD_TYPE_MATURE: "Ausgereift",
- CARD_TYPES_SUMMARY: "Insgesamt ${totalCardsCount} Karten"
-};
-
-// src/lang/locale/en.ts
-var en_default = {
- // flashcard-modal.tsx
- DECKS: "Decks",
- DUE_CARDS: "Due Cards",
- NEW_CARDS: "New Cards",
- TOTAL_CARDS: "Total Cards",
- BACK: "Back",
- SKIP: "Skip",
- EDIT_CARD: "Edit Card",
- RESET_CARD_PROGRESS: "Reset card's progress",
- IMPOSSIBLE: "Impossible",
- HARD: "Hard",
- GOOD: "Good",
- EASY: "Easy",
- SHOW_ANSWER: "Show Answer",
- CARD_PROGRESS_RESET: "Card's progress has been reset.",
- SAVE: "Save",
- CANCEL: "Cancel",
- NO_INPUT: "No input provided.",
- CURRENT_EASE_HELP_TEXT: "Current Ease: ",
- CURRENT_INTERVAL_HELP_TEXT: "Current Interval: ",
- CARD_GENERATED_FROM: "Generated from: ${notePath}",
- // main.ts
- OPEN_NOTE_FOR_REVIEW: "Open a note for review",
- REVIEW_CARDS: "Review flashcards",
- REVIEW_EASY_FILE_MENU: "Review: Easy",
- REVIEW_GOOD_FILE_MENU: "Review: Good",
- REVIEW_HARD_FILE_MENU: "Review: Hard",
- REVIEW_NOTE_EASY_CMD: "Review note as easy",
- REVIEW_NOTE_GOOD_CMD: "Review note as good",
- REVIEW_NOTE_HARD_CMD: "Review note as hard",
- CRAM_ALL_CARDS: "Select a deck to cram",
- REVIEW_ALL_CARDS: "Review flashcards from all notes",
- REVIEW_CARDS_IN_NOTE: "Review flashcards in this note",
- CRAM_CARDS_IN_NOTE: "Cram flashcards in this note",
- VIEW_STATS: "View statistics",
- STATUS_BAR: "Review: ${dueNotesCount} note(s), ${dueFlashcardsCount} card(s) due",
- SYNC_TIME_TAKEN: "Sync took ${t}ms",
- NOTE_IN_IGNORED_FOLDER: "Note is saved under ignored folder (check settings).",
- PLEASE_TAG_NOTE: "Please tag the note appropriately for reviewing (in settings).",
- RESPONSE_RECEIVED: "Response received.",
- NO_DECK_EXISTS: "No deck exists for ${deckName}",
- ALL_CAUGHT_UP: "You're all caught up now :D.",
- // scheduling.ts
- // TODO: Translate MINUTES_X to other langs
- MINUTES_STR_IVL: "${interval} minute(s)",
- DAYS_STR_IVL: "${interval} day(s)",
- MONTHS_STR_IVL: "${interval} month(s)",
- YEARS_STR_IVL: "${interval} year(s)",
- MINUTES_STR_IVL_MOBILE: "${interval}m",
- DAYS_STR_IVL_MOBILE: "${interval}d",
- MONTHS_STR_IVL_MOBILE: "${interval}mo",
- YEARS_STR_IVL_MOBILE: "${interval}y",
- DATE_SCHED_FMT: "YYYY-MM-DD HH:mm:ss",
- // settings.ts
- SETTINGS_HEADER: "Spaced Repetition Plugin - Settings",
- CHECK_WIKI: 'For more information, check the wiki.',
- FOLDERS_TO_IGNORE: "Folders to ignore",
- FOLDERS_TO_IGNORE_DESC: "Enter folder paths separated by newlines i.e. Templates Meta/Scripts",
- FLASHCARDS: "Flashcards",
- FLASHCARD_EASY_LABEL: "Easy Button Text",
- FLASHCARD_GOOD_LABEL: "Good Button Text",
- FLASHCARD_HARD_LABEL: "Hard Button Text",
- FLASHCARD_EASY_DESC: 'Customize the label for the "Easy" Button',
- FLASHCARD_GOOD_DESC: 'Customize the label for the "Good" Button',
- FLASHCARD_HARD_DESC: 'Customize the label for the "Hard" Button',
- FLASHCARD_TAGS: "Flashcard tags",
- FLASHCARD_TAGS_DESC: "Enter tags separated by spaces or newlines i.e. #flashcards #deck2 #deck3.",
- CONVERT_FOLDERS_TO_DECKS: "Convert folders to decks and subdecks?",
- CONVERT_FOLDERS_TO_DECKS_DESC: "This is an alternative to the Flashcard tags option above.",
- INLINE_SCHEDULING_COMMENTS: "Save scheduling comment on the same line as the flashcard's last line?",
- INLINE_SCHEDULING_COMMENTS_DESC: "Turning this on will make the HTML comments not break list formatting.",
- BURY_SIBLINGS_TILL_NEXT_DAY: "Bury sibling cards until the next day?",
- BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Siblings are cards generated from the same card text i.e. cloze deletions",
- SHOW_CARD_CONTEXT: "Show context in cards?",
- SHOW_CARD_CONTEXT_DESC: "i.e. Title > Heading 1 > Subheading > ... > Subheading",
- CARD_MODAL_HEIGHT_PERCENT: "Flashcard Height Percentage",
- CARD_MODAL_SIZE_PERCENT_DESC: "Should be set to 100% on mobile or if you have very large images",
- RESET_DEFAULT: "Reset to default",
- CARD_MODAL_WIDTH_PERCENT: "Flashcard Width Percentage",
- RANDOMIZE_CARD_ORDER: "Randomize card order during review?",
- DISABLE_CLOZE_CARDS: "Disable cloze cards?",
- CONVERT_HIGHLIGHTS_TO_CLOZES: "Convert ==hightlights== to clozes?",
- CONVERT_BOLD_TEXT_TO_CLOZES: "Convert **bolded text** to clozes?",
- CONVERT_CURLY_BRACKETS_TO_CLOZES: "Convert {{curly brackets}} to clozes?",
- INLINE_CARDS_SEPARATOR: "Separator for inline flashcards",
- FIX_SEPARATORS_MANUALLY_WARNING: "Note that after changing this you have to manually edit any flashcards you already have.",
- INLINE_REVERSED_CARDS_SEPARATOR: "Separator for inline reversed flashcards",
- MULTILINE_CARDS_SEPARATOR: "Separator for multiline flashcards",
- MULTILINE_REVERSED_CARDS_SEPARATOR: "Separator for multiline reversed flashcards",
- NOTES: "Notes",
- REVIEW_PANE_ON_STARTUP: "Enable note review pane on startup",
- TAGS_TO_REVIEW: "Tags to review",
- TAGS_TO_REVIEW_DESC: "Enter tags separated by spaces or newlines i.e. #review #tag2 #tag3.",
- OPEN_RANDOM_NOTE: "Open a random note for review",
- OPEN_RANDOM_NOTE_DESC: "When you turn this off, notes are ordered by importance (PageRank).",
- AUTO_NEXT_NOTE: "Open next note automatically after a review",
- DISABLE_FILE_MENU_REVIEW_OPTIONS: "Disable review options in the file menu i.e. Review: Easy Good Hard",
- DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "After disabling, you can review using the command hotkeys. Reload Obsidian after changing this.",
- MAX_N_DAYS_REVIEW_QUEUE: "Maximum number of days to display on right panel",
- MIN_ONE_DAY: "The number of days must be at least 1.",
- VALID_NUMBER_WARNING: "Please provide a valid number.",
- UI_PREFERENCES: "UI Preferences",
- INITIALLY_EXPAND_SUBDECKS_IN_TREE: "Deck trees should be initially displayed as expanded",
- INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Turn this off to collapse nested decks in the same card. Useful if you have cards which belong to many decks in the same file.",
- ALGORITHM: "Algorithm",
- CHECK_ALGORITHM_WIKI: 'For more information, check the algorithm implementation.',
- BASE_EASE: "Base ease",
- BASE_EASE_DESC: "minimum = 130, preferrably approximately 250.",
- BASE_EASE_MIN_WARNING: "The base ease must be at least 130.",
- LAPSE_INTERVAL_CHANGE: "Interval change when you review a flashcard/note as hard",
- LAPSE_INTERVAL_CHANGE_DESC: "newInterval = oldInterval * intervalChange / 100.",
- EASY_BONUS: "Easy Bonus",
- EASY_BONUS_DESC: "The easy bonus allows you to set the difference in intervals between answering Good and Easy on a flashcard/note (minimum = 100%).",
- EASY_BONUS_MIN_WARNING: "The easy bonus must be at least 100.",
- MAX_INTERVAL: "Maximum interval in days",
- MAX_INTERVAL_DESC: "Allows you to place an upper limit on the interval (default = 100 years).",
- MAX_INTERVAL_MIN_WARNING: "The maximum interval must be at least 1 day.",
- MAX_LINK_CONTRIB: "Maximum link contribution",
- MAX_LINK_CONTRIB_DESC: "Maximum contribution of the weighted ease of linked notes to the initial ease.",
- LOGGING: "Logging",
- DISPLAY_DEBUG_INFO: "Display debugging information on the developer console?",
- // sidebar.ts
- NOTES_REVIEW_QUEUE: "Notes Review Queue",
- CLOSE: "Close",
- NEW: "New",
- YESTERDAY: "Yesterday",
- TODAY: "Today",
- TOMORROW: "Tomorrow",
- // stats-modal.tsx
- STATS_TITLE: "Statistics",
- MONTH: "Month",
- QUARTER: "Quarter",
- YEAR: "Year",
- LIFETIME: "Lifetime",
- FORECAST: "Forecast",
- FORECAST_DESC: "The number of cards due in the future",
- SCHEDULED: "Scheduled",
- DAYS: "Days",
- NUMBER_OF_CARDS: "Number of cards",
- REVIEWS_PER_DAY: "Average: ${avg} reviews/day",
- INTERVALS: "Intervals",
- INTERVALS_DESC: "Delays until reviews are shown again",
- COUNT: "Count",
- INTERVALS_SUMMARY: "Average interval: ${avg}, Longest interval: ${longest}",
- EASES: "Eases",
- EASES_SUMMARY: "Average ease: ${avgEase}",
- CARD_TYPES: "Card Types",
- CARD_TYPES_DESC: "This includes buried cards as well, if any",
- CARD_TYPE_NEW: "New",
- CARD_TYPE_YOUNG: "Young",
- CARD_TYPE_MATURE: "Mature",
- CARD_TYPES_SUMMARY: "Total cards: ${totalCardsCount}"
-};
-
-// src/lang/locale/en-gb.ts
-var en_gb_default = {};
-
-// src/lang/locale/es.ts
-var es_default = {
- // flashcard-modal.tsx
- DECKS: "Mazos",
- DUE_CARDS: "Tarjetas Vencidas",
- NEW_CARDS: "Tarjetas Nuevas",
- TOTAL_CARDS: "Tarjetas Totales",
- BACK: "Atr\xE1s",
- SKIP: "Saltar",
- EDIT_CARD: "Editar Tarjeta",
- RESET_CARD_PROGRESS: "Reiniciar progreso de la tarjeta",
- HARD: "Dif\xEDcil",
- GOOD: "Bien",
- EASY: "F\xE1cil",
- SHOW_ANSWER: "Mostrar Respuesta",
- CARD_PROGRESS_RESET: "El progreso de la tarjeta se ha reiniciado.",
- SAVE: "Guardar",
- CANCEL: "Cancelar",
- NO_INPUT: "Se ha prove\xEDdo entrada.",
- CURRENT_EASE_HELP_TEXT: "Facilidad Actual: ",
- CURRENT_INTERVAL_HELP_TEXT: "Intervalo Actual: ",
- CARD_GENERATED_FROM: "Generado Desde: ${notePath}",
- // main.ts
- OPEN_NOTE_FOR_REVIEW: "Abrir nota para revisi\xF3n",
- REVIEW_CARDS: "Revisar Tarjetas",
- REVIEW_EASY_FILE_MENU: "Revisar: F\xE1cil",
- REVIEW_GOOD_FILE_MENU: "Revisar: Bien",
- REVIEW_HARD_FILE_MENU: "Revisar: Dif\xEDcil",
- REVIEW_NOTE_EASY_CMD: "Revisar nota como f\xE1cil",
- REVIEW_NOTE_GOOD_CMD: "Revisar nota como bien",
- REVIEW_NOTE_HARD_CMD: "Revisar nota como dif\xEDcil",
- CRAM_ALL_CARDS: "Selecciona un mazo a memorizar",
- REVIEW_ALL_CARDS: "Revisar tarjetas de todas las notas",
- REVIEW_CARDS_IN_NOTE: "Revisar tarjetas en esta nota",
- CRAM_CARDS_IN_NOTE: "Memorizar tarjetas en esta nota",
- VIEW_STATS: "Ver estad\xEDsticas",
- STATUS_BAR: "Revisar: ${dueNotesCount} nota(s), ${dueFlashcardsCount} tarjetas vencidas",
- SYNC_TIME_TAKEN: "La sincronizaci\xF3n tom\xF3 ${t} milisegundos",
- NOTE_IN_IGNORED_FOLDER: "La nota est\xE1 guardada en un directorio ignorado (revisa los ajustes).",
- PLEASE_TAG_NOTE: "Por favor etiquete apropiadamente la nota para revisi\xF3n (en los ajustes).",
- RESPONSE_RECEIVED: "Respuesta Recibida",
- NO_DECK_EXISTS: "No existen mazos para: ${deckName}",
- ALL_CAUGHT_UP: "\xA1Est\xE1s al d\xEDa! \u{1F603}",
- // scheduling.ts
- DAYS_STR_IVL: "${interval} d\xEDa(s)",
- MONTHS_STR_IVL: "${interval} mes(es)",
- YEARS_STR_IVL: "${interval} a\xF1o(s)",
- DAYS_STR_IVL_MOBILE: "${interval}d",
- MONTHS_STR_IVL_MOBILE: "${interval}m",
- YEARS_STR_IVL_MOBILE: "${interval}a",
- // settings.ts
- SETTINGS_HEADER: "Extensi\xF3n de Repetici\xF3n Espaciada - Ajustes",
- CHECK_WIKI: 'Para m\xE1s informaci\xF3n revisa la wiki.',
- FOLDERS_TO_IGNORE: "Directorios a ignorar",
- FOLDERS_TO_IGNORE_DESC: "Escriba las rutas de los directorios separadas por saltos de l\xEDnea, por ejemplo, Plantillas Extra/Guiones",
- FLASHCARDS: "Tarjetas de Memorizaci\xF3n",
- FLASHCARD_EASY_LABEL: "Texto del bot\xF3n: F\xE1cil",
- FLASHCARD_GOOD_LABEL: "Texto del bot\xF3n: Bien",
- FLASHCARD_HARD_LABEL: "Texto del bot\xF3n: Dif\xEDcil",
- FLASHCARD_EASY_DESC: "Personalize la etiqueta para el bot\xF3n: F\xE1cil",
- FLASHCARD_GOOD_DESC: "Personalize la etiqueta para el bot\xF3n: Bien",
- FLASHCARD_HARD_DESC: "Personalize la etiqueta para el bot\xF3n: Dif\xEDcil",
- FLASHCARD_TAGS: "Etiquetas de las Tarjetas de Memorizaci\xF3n",
- FLASHCARD_TAGS_DESC: "Escriba las etiquetas separadas por espacios o saltos de l\xEDnea, por ejemplo, #memorizar #mazo2 #mazo3",
- CONVERT_FOLDERS_TO_DECKS: "\xBFConvertir directorios a mazos y submazos?",
- CONVERT_FOLDERS_TO_DECKS_DESC: "Esta es una opci\xF3n alternativa a las etiquetas de las Tarjetas de Memorizaci\xF3n.",
- INLINE_SCHEDULING_COMMENTS: "\xBFGuardar el comentario para programaci\xF3n de las tarjetas en la \xFAltima l\xEDnea?",
- INLINE_SCHEDULING_COMMENTS_DESC: "Activar esto har\xE1 que los comentarios HTML no rompan el formato de las listas.",
- BURY_SIBLINGS_TILL_NEXT_DAY: "\xBFEnterrar tarjetas hermanas hasta el siguiente d\xEDa?",
- BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Los hermanos son tarjetas generadas del mismo texto de la tarjeta, por ejemplo, deletreos de huecos (cloze deletions en ingl\xE9s)",
- SHOW_CARD_CONTEXT: "\xBFMostrar contexto en las tarjetas?",
- SHOW_CARD_CONTEXT_DESC: "Por Ejemplo: T\xEDtulo > Cabecera > Sub-Cabecera > ... > Sub-Cabecera",
- CARD_MODAL_HEIGHT_PERCENT: "Porcentaje de la altura de las tarjetas de memoria",
- CARD_MODAL_SIZE_PERCENT_DESC: "Deber\xEDa ser establecido en 100% si tienes im\xE1genes grandes",
- RESET_DEFAULT: "Reiniciar a la configuraci\xF3n por defecto",
- CARD_MODAL_WIDTH_PERCENT: "Porcentaje del ancho de las tarjetas de memoria",
- RANDOMIZE_CARD_ORDER: "\xBFAleatorizar el orden de las tarjetas para revisi\xF3n?",
- DISABLE_CLOZE_CARDS: "\xBFDeshabilitar deletreo de huecos en las tarjetas?",
- CONVERT_HIGHLIGHTS_TO_CLOZES: "\xBFConvertir ==resaltados== a deletreo de huecos?",
- CONVERT_BOLD_TEXT_TO_CLOZES: "\xBFConvertir **texto en negrita** a deletreo de huecos?",
- CONVERT_CURLY_BRACKETS_TO_CLOZES: "\xBFConvertir {{llaves rizadas}} a deletreo de huecos?",
- INLINE_CARDS_SEPARATOR: "Separador de tarjetas de memorizaci\xF3n en l\xEDnea",
- FIX_SEPARATORS_MANUALLY_WARNING: "Note que despu\xE9s de cambiar este ajuste, tendr\xE1 que cambiar manualmente todas las notas que tenga.",
- INLINE_REVERSED_CARDS_SEPARATOR: "Separador de tarjetas de memorizaci\xF3n para tarjetas de notas invertidas",
- MULTILINE_CARDS_SEPARATOR: "Separador para tarjetas de memorizaci\xF3n multil\xEDnea",
- MULTILINE_REVERSED_CARDS_SEPARATOR: "Separador para tarjetas de memorizaci\xF3n multil\xEDnea invertidas",
- NOTES: "Notes",
- REVIEW_PANE_ON_STARTUP: "Activar panel de revisi\xF3n de notas al arrancar",
- TAGS_TO_REVIEW: "Etiquetas a revisar",
- TAGS_TO_REVIEW_DESC: "Escriba las etiquetas separadas por espacios o saltos de l\xEDneas, por ejemplo, #revisi\xF3n #etiqueta2 #etiqueta3.",
- OPEN_RANDOM_NOTE: "Abrir una nota al azar para revisar",
- OPEN_RANDOM_NOTE_DESC: "Cuando deshabilita esto, las notas son ordenadas por importancia (Algoritmo PageRank).",
- AUTO_NEXT_NOTE: "Abrir la siguiente nota autom\xE1ticamente despu\xE9s de una revisi\xF3n",
- DISABLE_FILE_MENU_REVIEW_OPTIONS: "Deshabilitar opciones de revisi\xF3n en el men\xFA de archivo, por ejemplo, Revisi\xF3n: F\xE1cil Bien Dif\xEDcil",
- DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "Despu\xE9s de deshabilitarlo, puede hacer las revisiones utilizando atajos de teclado. Reinicie Obsidian despu\xE9s de cambiar esto.",
- MAX_N_DAYS_REVIEW_QUEUE: "N\xFAmero m\xE1ximo de d\xEDas a mostrar en el panel derecho.",
- MIN_ONE_DAY: "El n\xFAmero de d\xEDas debe ser al menos uno.",
- VALID_NUMBER_WARNING: "Por favor especifique un n\xFAmero v\xE1lido.",
- UI_PREFERENCES: "Preferencias de la interfaz de usuario.",
- INITIALLY_EXPAND_SUBDECKS_IN_TREE: "Los \xE1rboles de mazos deber\xEDan ser expandidos al inicio.",
- INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Desactiva esto para contraer mazos anidados en la misma tarjeta. \xDAtil si tienes tarjetas que pertenecen a muchos mazos en el mismo archivo.",
- ALGORITHM: "Algoritmo",
- CHECK_ALGORITHM_WIKI: 'Para m\xE1s informaci\xF3n, revisa la implementaci\xF3n del algoritmo.',
- BASE_EASE: "Base ease",
- BASE_EASE_DESC: "El m\xEDnimo es 130, es preferible que est\xE9 aproximado a 250.",
- BASE_EASE_MIN_WARNING: "La facilidad base de las tarjetas debe ser al menos 130.",
- LAPSE_INTERVAL_CHANGE: "El intervalo cambiar\xE1 cuando se revise una tarjeta o nota como Dif\xEDcil.",
- LAPSE_INTERVAL_CHANGE_DESC: "NuevoInterval = ViejoIntervalo * CambioDeIntervalo / 100.",
- EASY_BONUS: "Bonificaci\xF3n para F\xE1cil",
- EASY_BONUS_DESC: "La bonificaci\xF3n para F\xE1cil te permite establecer la diferencia entre intervalos al responder Bien y F\xE1cil en las tarjetas o notas (m\xEDnimo = 100%).",
- EASY_BONUS_MIN_WARNING: "El bono de facilidad debe ser al menos 100.",
- MAX_INTERVAL: "Intervalo m\xE1ximo en d\xEDas",
- MAX_INTERVAL_DESC: "Te permite establecer un l\xEDmite mayor en el intervalo (por defecto es de 100 a\xF1os).",
- MAX_INTERVAL_MIN_WARNING: "El intervalo m\xE1ximo debe ser de al menos un d\xEDa.",
- MAX_LINK_CONTRIB: "Contribuci\xF3n m\xE1xima de las notas vinculadas.",
- MAX_LINK_CONTRIB_DESC: "Contribuci\xF3n m\xE1xima de la facilidad ponderada de las notas vinculadas a la facilidad inicial.",
- LOGGING: "Registro",
- DISPLAY_DEBUG_INFO: "\xBFMostrar informaci\xF3n de depuraci\xF3n en la consola de desarrollador?",
- // sidebar.ts
- NOTES_REVIEW_QUEUE: "Cola de notas a revisar",
- CLOSE: "Cerrar",
- NEW: "Nuevo",
- YESTERDAY: "Ayer",
- TODAY: "Hoy",
- TOMORROW: "Ma\xF1ana",
- // stats-modal.tsx
- STATS_TITLE: "Estad\xEDsticas",
- MONTH: "Mes",
- QUARTER: "Trimestre o Cuatrimestre",
- // En Inglés: Quarter.
- YEAR: "A\xF1o",
- LIFETIME: "Tiempo de Vida",
- FORECAST: "Pron\xF3stico",
- FORECAST_DESC: "El n\xFAmero de tarjetas vencidas en el futuro",
- SCHEDULED: "Programado",
- DAYS: "D\xEDas",
- NUMBER_OF_CARDS: "N\xFAmero de tarjetas",
- REVIEWS_PER_DAY: "Carga: ${avg} Revisiones por d\xEDa",
- INTERVALS: "Intervalos",
- INTERVALS_DESC: "Retrasos hasta que las revisiones se muestren de nuevo",
- COUNT: "Conteo",
- INTERVALS_SUMMARY: "Intervalo de carga: ${avg}, Intervalo mayor: ${longest}",
- EASES: "Facilidad",
- EASES_SUMMARY: "Carga de Facilidad: ${avgEase}",
- CARD_TYPES: "Tipos de tarjetas",
- CARD_TYPES_DESC: "Esto incluye tambi\xE9n a las tarjetas enterradas, si las hay",
- CARD_TYPE_NEW: "Nueva",
- CARD_TYPE_YOUNG: "Joven",
- CARD_TYPE_MATURE: "Madura",
- CARD_TYPES_SUMMARY: "Tarjetas Totales: ${totalCardsCount}"
-};
-
-// src/lang/locale/fr.ts
-var fr_default = {};
-
-// src/lang/locale/hi.ts
-var hi_default = {};
-
-// src/lang/locale/id.ts
-var id_default = {};
-
-// src/lang/locale/it.ts
-var it_default = {};
-
-// src/lang/locale/ja.ts
-var ja_default = {
- // flashcard-modal.tsx
- DECKS: "\u30C7\u30C3\u30AD",
- DUE_CARDS: "\u671F\u65E5\u306E\u30AB\u30FC\u30C9",
- NEW_CARDS: "\u65B0\u898F\u306E\u30AB\u30FC\u30C9",
- TOTAL_CARDS: "\u30AB\u30FC\u30C9\u5408\u8A08",
- BACK: "Back",
- SKIP: "Skip",
- EDIT_CARD: "Edit Card",
- RESET_CARD_PROGRESS: "\u30AB\u30FC\u30C9\u306E\u9032\u6357\u3092\u30EA\u30BB\u30C3\u30C8",
- HARD: "Hard",
- GOOD: "Good",
- EASY: "Easy",
- SHOW_ANSWER: "\u89E3\u7B54\u3092\u8868\u793A",
- CARD_PROGRESS_RESET: "\u30AB\u30FC\u30C9\u306E\u9032\u6357\u304C\u30EA\u30BB\u30C3\u30C8\u3055\u308C\u307E\u3057\u305F\u3002",
- SAVE: "Save",
- CANCEL: "Cancel",
- NO_INPUT: "No input provided.",
- CURRENT_EASE_HELP_TEXT: "Current Ease: ",
- CURRENT_INTERVAL_HELP_TEXT: "Current Interval: ",
- CARD_GENERATED_FROM: "Generated from: ${notePath}",
- // main.ts
- OPEN_NOTE_FOR_REVIEW: "\u30EC\u30D3\u30E5\u30FC\u3059\u308B\u30CE\u30FC\u30C8\u3092\u958B\u304F",
- REVIEW_CARDS: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306E\u30EC\u30D3\u30E5\u30FC",
- REVIEW_EASY_FILE_MENU: "\u30EC\u30D3\u30E5\u30FC: Easy",
- REVIEW_GOOD_FILE_MENU: "\u30EC\u30D3\u30E5\u30FC: Good",
- REVIEW_HARD_FILE_MENU: "\u30EC\u30D3\u30E5\u30FC: Hard",
- REVIEW_NOTE_EASY_CMD: "\u30CE\u30FC\u30C8\u3092Easy\u3068\u3057\u3066\u30EC\u30D3\u30E5\u30FC\u3059\u308B",
- REVIEW_NOTE_GOOD_CMD: "\u30CE\u30FC\u30C8\u3092Good\u3068\u3057\u3066\u30EC\u30D3\u30E5\u30FC\u3059\u308B",
- REVIEW_NOTE_HARD_CMD: "\u30CE\u30FC\u30C8\u3092Hard\u3068\u3057\u3066\u30EC\u30D3\u30E5\u30FC\u3059\u308B",
- REVIEW_ALL_CARDS: "\u3059\u3079\u3066\u306E\u30CE\u30FC\u30C8\u304B\u3089\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u3092\u30EC\u30D3\u30E5\u30FC\u3059\u308B",
- CRAM_ALL_CARDS: "Select a deck to cram",
- REVIEW_CARDS_IN_NOTE: "\u3053\u306E\u30CE\u30FC\u30C8\u306E\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u3092\u30EC\u30D3\u30E5\u30FC\u3059\u308B",
- CRAM_CARDS_IN_NOTE: "\u3053\u306E\u30CE\u30FC\u30C8\u306E\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u3092\u8A70\u3081\u8FBC\u307F\u5B66\u7FD2\u3059\u308B",
- VIEW_STATS: "\u7D71\u8A08\u3092\u95B2\u89A7\u3059\u308B",
- STATUS_BAR: "\u30EC\u30D3\u30E5\u30FC: ${dueNotesCount}\u30CE\u30FC\u30C8, ${dueFlashcardsCount}\u30AB\u30FC\u30C9\u304C\u671F\u65E5",
- SYNC_TIME_TAKEN: "\u540C\u671F\u306B${t}ms\u304B\u304B\u308A\u307E\u3057\u305F\u3002",
- NOTE_IN_IGNORED_FOLDER: "\u30CE\u30FC\u30C8\u304C\u7121\u8996\u3059\u308B\u30D5\u30A9\u30EB\u30C0\u306B\u4FDD\u5B58\u3055\u308C\u3066\u3044\u307E\u3059(\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044)\u3002",
- PLEASE_TAG_NOTE: "\u30EC\u30D3\u30E5\u30FC\u3092\u884C\u3046\u306B\u306F\u30CE\u30FC\u30C8\u306B\u5BFE\u3057\u3066\u6B63\u3057\u304F\u30BF\u30B0\u4ED8\u3051\u3057\u3066\u304F\u3060\u3055\u3044(\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044)\u3002",
- RESPONSE_RECEIVED: "\u7B54\u3048\u3092\u53D7\u3051\u53D6\u308A\u307E\u3057\u305F\u3002",
- NO_DECK_EXISTS: "${deckName}\u306B\u306F\u30C7\u30C3\u30AD\u304C\u5B58\u5728\u3057\u307E\u305B\u3093\u3002",
- ALL_CAUGHT_UP: "\u4ECA\u65E5\u306E\u8AB2\u984C\u3092\u3059\u3079\u3066\u9054\u6210\u3057\u307E\u3057\u305F :D",
- // scheduling.ts
- DAYS_STR_IVL: "${interval}\u65E5\u5F8C",
- MONTHS_STR_IVL: "${interval}\u6708\u5F8C",
- YEARS_STR_IVL: "${interval}\u5E74\u5F8C",
- DAYS_STR_IVL_MOBILE: "${interval}d",
- MONTHS_STR_IVL_MOBILE: "${interval}m",
- YEARS_STR_IVL_MOBILE: "${interval}y",
- // settings.ts
- SETTINGS_HEADER: "Spaced Repetition Plugin - \u8A2D\u5B9A",
- CHECK_WIKI: '\u8A73\u7D30\u306B\u3064\u3044\u3066\u306Fwiki\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002',
- FOLDERS_TO_IGNORE: "\u7121\u8996\u3059\u308B\u30D5\u30A9\u30EB\u30C0",
- FOLDERS_TO_IGNORE_DESC: '\u30D5\u30A9\u30EB\u30C0\u30D1\u30B9\u3092\u6539\u884C\u3067\u533A\u5207\u3063\u3066\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"Templates Meta/Scripts" \u306E\u3088\u3046\u306A\u30B9\u30DA\u30FC\u30B9\u306B\u3088\u308B\u533A\u5207\u308A\u3067\u306E\u66F8\u304D\u65B9\u306F\u7121\u52B9\u3067\u3059\u3002',
- FLASHCARDS: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9",
- FLASHCARD_EASY_LABEL: "Easy Button Text",
- FLASHCARD_GOOD_LABEL: "Good Button Text",
- FLASHCARD_HARD_LABEL: "Hard Button Text",
- FLASHCARD_EASY_DESC: 'Customize the label for the "Easy" Button',
- FLASHCARD_GOOD_DESC: 'Customize the label for the "Good" Button',
- FLASHCARD_HARD_DESC: 'Customize the label for the "Hard" Button',
- FLASHCARD_TAGS: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306B\u4F7F\u7528\u3059\u308B\u30BF\u30B0",
- FLASHCARD_TAGS_DESC: '\u30BF\u30B0\u3092\u30B9\u30DA\u30FC\u30B9\u307E\u305F\u306F\u6539\u884C\u3067\u533A\u5207\u3063\u3066\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u4F8B: "#flashcards #deck2 #deck3"',
- CONVERT_FOLDERS_TO_DECKS: "\u30D5\u30A9\u30EB\u30C0\u3092\u30C7\u30C3\u30AD\u3068\u30B5\u30D6\u30C7\u30C3\u30AD\u3068\u3057\u3066\u4F7F\u7528\u3057\u307E\u3059\u304B\uFF1F",
- CONVERT_FOLDERS_TO_DECKS_DESC: "\u3053\u308C\u306F\u4E0A\u8A18\u306E\u30BF\u30B0\u3092\u4F7F\u7528\u3057\u305F\u30C7\u30C3\u30AD\u69CB\u7BC9\u306E\u4EE3\u66FF\u3068\u306A\u308B\u30AA\u30D7\u30B7\u30E7\u30F3\u3067\u3059\u3002",
- INLINE_SCHEDULING_COMMENTS: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306E\u6700\u7D42\u884C\u3068\u540C\u4E00\u306E\u884C\u306B\u30B9\u30B1\u30B8\u30E5\u30FC\u30EA\u30F3\u30B0\u30B3\u30E1\u30F3\u30C8\u3092\u4FDD\u5B58\u3057\u307E\u3059\u304B\uFF1F",
- INLINE_SCHEDULING_COMMENTS_DESC: "\u3053\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u6709\u52B9\u5316\u3059\u308B\u3068\u3001HTML\u30B3\u30E1\u30F3\u30C8\u306B\u3088\u3063\u3066Markdown\u306E\u30EA\u30B9\u30C8\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u304C\u5D29\u308C\u306A\u304F\u306A\u308A\u307E\u3059\u3002",
- BURY_SIBLINGS_TILL_NEXT_DAY: "\u6B21\u306E\u30EC\u30D3\u30E5\u30FC\u307E\u3067\u30B7\u30D6\u30EA\u30F3\u30B0\u3092\u5EF6\u671F\u3057\u307E\u3059\u304B\uFF1F",
- BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "\u30B7\u30D6\u30EA\u30F3\u30B0\u306F\u540C\u4E00\u306E\u30AB\u30FC\u30C9\u30C6\u30AD\u30B9\u30C8\u304B\u3089\u751F\u6210\u3055\u308C\u305F\u30AB\u30FC\u30C9\u3001\u3064\u307E\u308A\u7A74\u57CB\u3081\u554F\u984C\u306E\u6D3E\u751F\u30AB\u30FC\u30C9\u3067\u3059\u3002",
- SHOW_CARD_CONTEXT: "\u30AB\u30FC\u30C9\u306B\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u3092\u8868\u793A\u3057\u307E\u3059\u304B\uFF1F",
- SHOW_CARD_CONTEXT_DESC: "\uFF62\u30BF\u30A4\u30C8\u30EB > \u898B\u51FA\u3057 1 > \u526F\u898B\u51FA\u3057 > ... > \u526F\u898B\u51FA\u3057\uFF63\u306E\u8868\u793A\u3092\u884C\u3046\u304B\u3069\u3046\u304B\u3092\u6C7A\u3081\u307E\u3059\u3002",
- CARD_MODAL_HEIGHT_PERCENT: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306E\u7E26\u30B5\u30A4\u30BA\u306E\u30D1\u30FC\u30BB\u30F3\u30C6\u30FC\u30B8",
- CARD_MODAL_SIZE_PERCENT_DESC: "\u30E2\u30D0\u30A4\u30EB\u7248\u3001\u307E\u305F\u306F\u975E\u5E38\u306B\u5927\u304D\u306A\u30B5\u30A4\u30BA\u306E\u753B\u50CF\u304C\u3042\u308B\u5834\u5408\u306B\u306F100%\u306B\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002",
- RESET_DEFAULT: "\u30C7\u30D5\u30A9\u30EB\u30C8\u5024\u306B\u30EA\u30BB\u30C3\u30C8\u3059\u308B",
- CARD_MODAL_WIDTH_PERCENT: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306E\u6A2A\u30B5\u30A4\u30BA\u306E\u30D1\u30FC\u30BB\u30F3\u30C6\u30FC\u30B8",
- RANDOMIZE_CARD_ORDER: "\u30EC\u30D3\u30E5\u30FC\u4E2D\u306E\u30AB\u30FC\u30C9\u306E\u9806\u756A\u3092\u30E9\u30F3\u30C0\u30E0\u306B\u3057\u307E\u3059\u304B\uFF1F",
- DISABLE_CLOZE_CARDS: "\u7A74\u57CB\u3081\u30AB\u30FC\u30C9\u3092\u7121\u52B9\u5316\u3057\u307E\u3059\u304B\uFF1F",
- CONVERT_HIGHLIGHTS_TO_CLOZES: "==\u30CF\u30A4\u30E9\u30A4\u30C8==\u3092\u7A74\u57CB\u3081\u3068\u3057\u3066\u4F7F\u7528\u3057\u307E\u3059\u304B\uFF1F",
- CONVERT_BOLD_TEXT_TO_CLOZES: "**\u30DC\u30FC\u30EB\u30C9\u4F53**\u3092\u7A74\u57CB\u3081\u3068\u3057\u3066\u4F7F\u7528\u3057\u307E\u3059\u304B\uFF1F",
- CONVERT_CURLY_BRACKETS_TO_CLOZES: "{{\u4E2D\u62EC\u5F27}}\u3092\u7A74\u57CB\u3081\u3068\u3057\u3066\u4F7F\u7528\u3057\u307E\u3059\u304B\uFF1F",
- INLINE_CARDS_SEPARATOR: "\u30A4\u30F3\u30E9\u30A4\u30F3\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306B\u4F7F\u7528\u3059\u308B\u30BB\u30D1\u30EC\u30FC\u30BF\u30FC",
- FIX_SEPARATORS_MANUALLY_WARNING: "\u3053\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u5909\u66F4\u3059\u308B\u5834\u5408\u306B\u306F\u3001\u4F5C\u6210\u6E08\u307F\u306E\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u3092\u624B\u52D5\u3067\u7DE8\u96C6\u3057\u76F4\u3059\u5FC5\u8981\u304C\u3042\u308B\u3053\u3068\u306B\u6CE8\u610F\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
- INLINE_REVERSED_CARDS_SEPARATOR: "\u30A4\u30F3\u30E9\u30A4\u30F3\u306E\u8868\u88CF\u53CD\u8EE2\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306B\u4F7F\u7528\u3059\u308B\u30BB\u30D1\u30EC\u30FC\u30BF\u30FC",
- MULTILINE_CARDS_SEPARATOR: "\u8907\u6570\u884C\u306E\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306B\u4F7F\u7528\u3059\u308B\u30BB\u30D1\u30EC\u30FC\u30BF\u30FC",
- MULTILINE_REVERSED_CARDS_SEPARATOR: "\u8907\u6570\u884C\u306E\u8868\u88CF\u53CD\u8EE2\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306B\u4F7F\u7528\u3059\u308B\u30BB\u30D1\u30EC\u30FC\u30BF\u30FC",
- NOTES: "\u30CE\u30FC\u30C8",
- REVIEW_PANE_ON_STARTUP: "Enable note review pane on startup",
- TAGS_TO_REVIEW: "\u30EC\u30D3\u30E5\u30FC\u306B\u4F7F\u7528\u3059\u308B\u30BF\u30B0",
- TAGS_TO_REVIEW_DESC: '\u30BF\u30B0\u3092\u30B9\u30DA\u30FC\u30B9\u307E\u305F\u306F\u6539\u884C\u3067\u533A\u5207\u3063\u3066\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u4F8B: "#review #tag2 #tag3"',
- OPEN_RANDOM_NOTE: "\u30E9\u30F3\u30C0\u30E0\u306B\u30CE\u30FC\u30C8\u3092\u958B\u3044\u3066\u30EC\u30D3\u30E5\u30FC\u3059\u308B",
- OPEN_RANDOM_NOTE_DESC: "\u3053\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u304C\u7121\u52B9\u5316\u3055\u308C\u3066\u3044\u308B\u72B6\u614B\u3067\u306F\u3001\u30CE\u30FC\u30C8\u306F\u91CD\u8981\u5EA6(\u30DA\u30FC\u30B8\u30E9\u30F3\u30AF)\u306B\u3088\u308B\u9806\u756A\u3067\u8868\u793A\u3055\u308C\u307E\u3059\u3002",
- AUTO_NEXT_NOTE: "\u30EC\u30D3\u30E5\u30FC\u5F8C\u306B\u6B21\u306E\u30CE\u30FC\u30C8\u3092\u81EA\u52D5\u7684\u306B\u958B\u304F",
- DISABLE_FILE_MENU_REVIEW_OPTIONS: "\u30D5\u30A1\u30A4\u30EB\u30E1\u30CB\u30E5\u30FC\u3067\u306E\u30EC\u30D3\u30E5\u30FC\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u7121\u52B9\u5316(\uFF62\u30EC\u30D3\u30E5\u30FC: Easy\uFF63\u7B49\u306E\u9805\u76EE\u3092\u975E\u8868\u793A\u306B\u3059\u308B)",
- DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\u7121\u52B9\u5316\u3057\u305F\u5F8C\u3001\u30B3\u30DE\u30F3\u30C9\u30DB\u30C3\u30C8\u30AD\u30FC\u3092\u4F7F\u3063\u3066\u30EC\u30D3\u30E5\u30FC\u3059\u308B\u3053\u3068\u304C\u53EF\u80FD\u306B\u306A\u308A\u307E\u3059\u3002\u3053\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u5909\u66F4\u3057\u305F\u5834\u5408\u306B\u306FObsidian\u3092\u30EA\u30ED\u30FC\u30C9\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
- MAX_N_DAYS_REVIEW_QUEUE: "\u53F3\u30D1\u30CD\u30EB\u306B\u8868\u793A\u3059\u308B\u6700\u5927\u306E\u65E5\u6570",
- MIN_ONE_DAY: "\u65E5\u6570\u306B\u306F1\u4EE5\u4E0A\u306E\u6570\u5B57\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
- VALID_NUMBER_WARNING: "\u6709\u52B9\u306A\u6570\u5B57\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
- UI_PREFERENCES: "\u30E6\u30FC\u30B6\u30FC \u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30A4\u30B9\u306E\u8A2D\u5B9A",
- INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\u30C7\u30C3\u30AD \u30C4\u30EA\u30FC\u306F\u6700\u521D\u306F\u5C55\u958B\u3057\u3066\u8868\u793A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059",
- INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "\u3053\u308C\u3092\u30AA\u30D5\u306B\u3059\u308B\u3068\u3001\u540C\u3058\u30AB\u30FC\u30C9\u5185\u306E\u30CD\u30B9\u30C8\u3055\u308C\u305F\u30C7\u30C3\u30AD\u304C\u6298\u308A\u305F\u305F\u307E\u308C\u307E\u3059\u3002\u540C\u3058\u30D5\u30A1\u30A4\u30EB\u306B\u591A\u304F\u306E\u30C7\u30C3\u30AD\u306B\u5C5E\u3059\u308B\u30AB\u30FC\u30C9\u304C\u3042\u308B\u5834\u5408\u306B\u4FBF\u5229\u3067\u3059\u3002",
- ALGORITHM: "\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0",
- CHECK_ALGORITHM_WIKI: '\u8A73\u7D30\u306B\u3064\u3044\u3066\u306F\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u306E\u5B9F\u88C5\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002',
- BASE_EASE: "\u30D9\u30FC\u30B9\u306E\u6613\u3057\u3055",
- BASE_EASE_DESC: "\u6700\u5C0F\u5024\u306F130\u3067\u3059\u304C\u3001 \u9069\u6B63\u5024\u306F\u304A\u304A\u3088\u305D250\u3067\u3059\u3002",
- BASE_EASE_MIN_WARNING: "\u30D9\u30FC\u30B9\u306E\u6613\u3057\u3055\u306B\u306F130\u4EE5\u4E0A\u306E\u6570\u5B57\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
- LAPSE_INTERVAL_CHANGE: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9/\u30CE\u30FC\u30C8\u3092Hard\u3068\u3057\u3066\u30EC\u30D3\u30E5\u30FC\u3057\u305F\u969B\u306E\u9593\u9694\u5909\u66F4",
- LAPSE_INTERVAL_CHANGE_DESC: '"\u65B0\u3057\u3044\u9593\u9694 = \u4EE5\u524D\u306E\u9593\u9694 * \u9593\u9694\u5909\u66F4 / 100" \u3068\u3057\u3066\u8A08\u7B97\u3055\u308C\u307E\u3059\u3002',
- EASY_BONUS: "Easy\u30DC\u30FC\u30CA\u30B9",
- EASY_BONUS_DESC: "Easy\u30DC\u30FC\u30CA\u30B9\u306B\u3088\u3063\u3066\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9/\u30CE\u30FC\u30C8\u306B\u304A\u3051\u308B\u9593\u9694\u306E\u5DEE\u5206\u3092\u8A2D\u5B9A\u3067\u304D\u307E\u3059(\u6700\u5C0F\u5024 = 100%)\u3002",
- EASY_BONUS_MIN_WARNING: "Easy\u30DC\u30FC\u30CA\u30B9\u306B\u306F100\u4EE5\u4E0A\u306E\u6570\u5B57\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
- MAX_INTERVAL: "Maximum interval in days",
- MAX_INTERVAL_DESC: "\u9593\u9694\u306B\u4E0A\u9650\u5024\u3092\u8A2D\u5B9A\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059(\u30C7\u30D5\u30A9\u30EB\u30C8\u5024 = 100\u5E74)\u3002",
- MAX_INTERVAL_MIN_WARNING: "\u9593\u9694\u306E\u6700\u5927\u5024\u306B\u306F1\u4EE5\u4E0A\u306E\u6570\u5B57\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
- MAX_LINK_CONTRIB: "\u30EA\u30F3\u30AF\u30B3\u30F3\u30C8\u30EA\u30D3\u30E5\u30FC\u30B7\u30E7\u30F3\u306E\u6700\u5927\u5024",
- MAX_LINK_CONTRIB_DESC: "\u6700\u521D\u306E\u6613\u3057\u3055\u306B\u5BFE\u3057\u3066\u3001\u30EA\u30F3\u30AF\u3055\u308C\u305F\u30CE\u30FC\u30C8\u306E\u91CD\u307F\u4ED8\u3051\u3055\u308C\u305F\u6613\u3057\u3055\u304C\u5BC4\u4E0E\u3059\u308B\u6700\u5927\u5024\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
- LOGGING: "\u30ED\u30B0\u7BA1\u7406",
- DISPLAY_DEBUG_INFO: "\u30C7\u30D9\u30ED\u30C3\u30D1\u30FC\u30B3\u30F3\u30BD\u30FC\u30EB\u306B\u3066\u30C7\u30D0\u30C3\u30B0\u60C5\u5831\u3092\u8868\u793A\u3057\u307E\u3059\u304B\uFF1F",
- // sidebar.ts
- NOTES_REVIEW_QUEUE: "\u30CE\u30FC\u30C8\u30EC\u30D3\u30E5\u30FC\u306E\u30AD\u30E5\u30FC",
- CLOSE: "\u9589\u3058\u308B",
- NEW: "\u65B0\u898F",
- YESTERDAY: "\u6628\u65E5",
- TODAY: "\u4ECA\u65E5",
- TOMORROW: "\u660E\u65E5",
- // stats-modal.tsx
- STATS_TITLE: "\u7D71\u8A08",
- MONTH: "Month",
- QUARTER: "Quarter",
- YEAR: "Year",
- LIFETIME: "Lifetime",
- FORECAST: "\u4E88\u6E2C",
- FORECAST_DESC: "\u5FA9\u7FD2\u671F\u65E5\u304C\u6765\u308B\u30AB\u30FC\u30C9\u306E\u679A\u6570",
- SCHEDULED: "\u30B9\u30B1\u30B8\u30E5\u30FC\u30EA\u30F3\u30B0\u6E08\u307F",
- DAYS: "\u65E5",
- NUMBER_OF_CARDS: "\u30AB\u30FC\u30C9\u6570",
- REVIEWS_PER_DAY: "\u5E73\u5747: ${avg}\u30EC\u30D3\u30E5\u30FC/\u65E5",
- INTERVALS: "\u9593\u9694",
- INTERVALS_DESC: "\u6B21\u306E\u30EC\u30D3\u30E5\u30FC\u4E88\u5B9A\u65E5",
- COUNT: "\u30AB\u30A6\u30F3\u30C8",
- INTERVALS_SUMMARY: "\u9593\u9694\u306E\u5E73\u5747\u5024: ${avg}, \u6700\u9577\u306E\u9593\u9694: ${longest}",
- EASES: "\u6613\u3057\u3055",
- EASES_SUMMARY: "\u6613\u3057\u3055\u306E\u5E73\u5747\u5024: ${avgEase}",
- CARD_TYPES: "\u30AB\u30FC\u30C9\u30BF\u30A4\u30D7",
- CARD_TYPES_DESC: "\u5EF6\u671F\u306E\u30AB\u30FC\u30C9\u304C\u3042\u308B\u5834\u5408\u306B\u306F\u3053\u308C\u306B\u542B\u307E\u308C\u307E\u3059",
- CARD_TYPE_NEW: "\u65B0\u898F",
- CARD_TYPE_YOUNG: "\u5FA9\u7FD2(\u521D\u671F)",
- CARD_TYPE_MATURE: "\u5FA9\u7FD2(\u5F8C\u671F)",
- CARD_TYPES_SUMMARY: "\u30AB\u30FC\u30C9\u306E\u5408\u8A08: ${totalCardsCount}\u679A"
-};
-
-// src/lang/locale/ko.ts
-var ko_default = {
- // flashcard-modal.tsx
- DECKS: "\uB371",
- DUE_CARDS: "\uB2E4\uC2DC \uBCFC \uCE74\uB4DC\uB4E4",
- NEW_CARDS: "\uC0C8\uB85C\uC6B4 \uCE74\uB4DC\uB4E4",
- TOTAL_CARDS: "\uC804\uCCB4 \uCE74\uB4DC\uB4E4",
- BACK: "Back",
- SKIP: "Skip",
- EDIT_CARD: "Edit Card",
- RESET_CARD_PROGRESS: "\uCE74\uB4DC\uC758 \uC9C4\uD589\uC0C1\uD669\uC744 \uCD08\uAE30\uD654\uD569\uB2C8\uB2E4.",
- HARD: "\uC5B4\uB824\uC6C0(Hard)",
- GOOD: "\uC88B\uC74C(Good)",
- EASY: "\uC26C\uC6C0(Easy)",
- SHOW_ANSWER: "\uC815\uB2F5 \uD655\uC778\uD558\uAE30",
- CARD_PROGRESS_RESET: "\uCE74\uB4DC\uC758 \uC9C4\uD589\uC0C1\uD669\uC774 \uCD08\uAE30\uD654\uB418\uC5C8\uC2B5\uB2C8\uB2E4.",
- SAVE: "Save",
- CANCEL: "Cancel",
- NO_INPUT: "No input provided.",
- CURRENT_EASE_HELP_TEXT: "Current Ease: ",
- CURRENT_INTERVAL_HELP_TEXT: "Current Interval: ",
- CARD_GENERATED_FROM: "Generated from: ${notePath}",
- // main.ts
- OPEN_NOTE_FOR_REVIEW: "\uB9AC\uBDF0\uD560 \uB178\uD2B8 \uC5F4\uAE30",
- REVIEW_CARDS: "\uD50C\uB798\uC2DC\uCE74\uB4DC \uB9AC\uBDF0",
- REVIEW_EASY_FILE_MENU: "\uB9AC\uBDF0: \uC26C\uC6C0(Easy)",
- REVIEW_GOOD_FILE_MENU: "\uB9AC\uBDF0: \uC88B\uC74C(Good)",
- REVIEW_HARD_FILE_MENU: "\uB9AC\uBDF0: \uC5B4\uB824\uC6C0(Hard)",
- REVIEW_NOTE_EASY_CMD: "\uB178\uD2B8\uB97C \uC26C\uC6C0(easy)\uC73C\uB85C \uB9AC\uBDF0\uD569\uB2C8\uB2E4",
- REVIEW_NOTE_GOOD_CMD: "\uB178\uD2B8\uB97C \uC88B\uC74C(good)\uC73C\uB85C \uB9AC\uBDF0\uD569\uB2C8\uB2E4",
- REVIEW_NOTE_HARD_CMD: "\uB178\uD2B8\uB97C \uC5B4\uB824\uC6C0(hard)\uC73C\uB85C \uB9AC\uBDF0\uD569\uB2C8\uB2E4",
- REVIEW_ALL_CARDS: "\uBAA8\uB4E0 \uB178\uD2B8\uB4E4\uC758 \uD50C\uB798\uC2DC\uCE74\uB4DC\uB4E4\uC744 \uB9AC\uBDF0\uD569\uB2C8\uB2E4",
- CRAM_ALL_CARDS: "Select a deck to cram",
- REVIEW_CARDS_IN_NOTE: "\uC774 \uB178\uD2B8\uC758 \uD50C\uB798\uC2DC\uCE74\uB4DC\uB4E4\uC744 \uB9AC\uBDF0\uD569\uB2C8\uB2E4",
- CRAM_CARDS_IN_NOTE: "\uC774 \uB178\uD2B8\uC758 \uD50C\uB798\uC2DC\uCE74\uB4DC\uB4E4\uC744 \uBCBC\uB77D\uCE58\uAE30\uD569\uB2C8\uB2E4.",
- VIEW_STATS: "\uD1B5\uACC4 \uD655\uC778",
- STATUS_BAR: "--\uB9AC\uBDF0: ${dueNotesCount} \uB178\uD2B8, ${dueFlashcardsCount} \uCE74\uB4DC \uB0A8\uC558\uC2B5\uB2C8\uB2E4.",
- SYNC_TIME_TAKEN: "\uB3D9\uAE30\uD654\uC5D0 ${t}\uBC00\uB9AC\uCD08 \uAC78\uB838\uC2B5\uB2C8\uB2E4",
- NOTE_IN_IGNORED_FOLDER: "\uB178\uD2B8\uAC00 \uBB34\uC2DC\uB41C \uD3F4\uB354 \uC544\uB798\uC5D0 \uC800\uC7A5\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4. (\uC124\uC815\uC744 \uD655\uC778\uD574\uC8FC\uC138\uC694)",
- PLEASE_TAG_NOTE: "\uB9AC\uBDF0\uB97C \uD558\uAE30\uC704\uD574 \uB178\uD2B8\uC5D0 \uC801\uC808\uD788 \uD0DC\uADF8\uD574\uC8FC\uC138\uC694. (\uC124\uC815\uC744 \uD655\uC778\uD574\uC8FC\uC138\uC694)",
- RESPONSE_RECEIVED: "\uC694\uCCAD\uC774 \uC644\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4",
- NO_DECK_EXISTS: "${deckName}\uC774\uB77C\uB294 \uC774\uB984\uC758 \uB371\uC774 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.",
- ALL_CAUGHT_UP: "\uBAA8\uB450 \uD655\uC778\uD588\uC2B5\uB2C8\uB2E4. :D",
- // scheduling.ts
- DAYS_STR_IVL: "${interval} \uC77C \uD6C4",
- MONTHS_STR_IVL: "${interval} \uAC1C\uC6D4 \uD6C4",
- YEARS_STR_IVL: "${interval} \uB144 \uD6C4",
- DAYS_STR_IVL_MOBILE: "${interval}d",
- MONTHS_STR_IVL_MOBILE: "${interval}m",
- YEARS_STR_IVL_MOBILE: "${interval}y",
- // settings.ts
- SETTINGS_HEADER: "Spaced Repetition Plugin - \uC124\uC815",
- CHECK_WIKI: '\uB354 \uB9CE\uC740 \uC815\uBCF4\uB97C \uC6D0\uD558\uC2DC\uBA74, wiki\uB97C \uD655\uC778\uD574\uC8FC\uC138\uC694.',
- FOLDERS_TO_IGNORE: "\uBB34\uC2DC\uD560 \uD3F4\uB354\uB4E4",
- FOLDERS_TO_IGNORE_DESC: "\uD3F4\uB354 \uACBD\uB85C\uB97C \uBE48 \uC904\uB85C \uAD6C\uBD84\uD574\uC11C \uC785\uB825\uD574\uC8FC\uC138\uC694. 'Templates Meta/Scripts' \uC640 \uAC19\uC774 \uC785\uB825\uD558\uB294 \uAC83\uC740 \uC720\uD6A8\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.",
- FLASHCARDS: "\uD50C\uB798\uC2DC\uCE74\uB4DC",
- FLASHCARD_EASY_LABEL: "Easy Button Text",
- FLASHCARD_GOOD_LABEL: "Good Button Text",
- FLASHCARD_HARD_LABEL: "Hard Button Text",
- FLASHCARD_EASY_DESC: 'Customize the label for the "Easy" Button',
- FLASHCARD_GOOD_DESC: 'Customize the label for the "Good" Button',
- FLASHCARD_HARD_DESC: 'Customize the label for the "Hard" Button',
- FLASHCARD_TAGS: "\uD50C\uB798\uC2DC\uCE74\uB4DC \uD0DC\uADF8",
- FLASHCARD_TAGS_DESC: "\uD0DC\uADF8\uB97C \uACF5\uBC31 \uB610\uB294 \uBE48 \uC904\uB85C \uAD6C\uBD84\uD574\uC11C \uC785\uB825\uD574\uC8FC\uC138\uC694. \uC608) '#flashcards #deck2 #deck3'",
- CONVERT_FOLDERS_TO_DECKS: "\uD3F4\uB354\uB97C \uB371\uACFC \uC11C\uBE0C\uB371\uC73C\uB85C \uC0AC\uC6A9\uD560\uAE4C\uC694?",
- CONVERT_FOLDERS_TO_DECKS_DESC: "\uC774 \uAE30\uB2A5\uC740 \uC704\uC758 \uD50C\uB798\uC2DC\uCE74\uB4DC \uD0DC\uADF8 \uC635\uC158\uC744 \uB300\uCCB4\uD569\uB2C8\uB2E4.",
- INLINE_SCHEDULING_COMMENTS: "\uD50C\uB798\uC2DC\uCE74\uB4DC\uC758 \uB9C8\uC9C0\uB9C9 \uC904\uACFC \uB3D9\uC77C\uD55C \uC904\uC5D0 \uC2A4\uCF00\uC904\uB9C1 \uCF54\uBA58\uD2B8\uB97C \uC800\uC7A5\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?",
- INLINE_SCHEDULING_COMMENTS_DESC: "\uC774 \uC635\uC158\uC744 \uC0AC\uC6A9\uD558\uBA74 HTML \uC8FC\uC11D\uC774 \uBAA9\uB85D\uC758 \uD3EC\uB9E4\uD305\uC744 \uBB34\uB108\uD2B8\uB9AC\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.",
- BURY_SIBLINGS_TILL_NEXT_DAY: "Sibling \uCE74\uB4DC\uB97C \uB2E4\uC74C\uB0A0\uAE4C\uC9C0 \uBB3B\uC5B4\uB450\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?",
- BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Sibling \uCE74\uB4DC\uB294 \uB3D9\uC77C\uD55C \uCE74\uB4DC \uD14D\uC2A4\uD2B8\uC5D0\uC11C \uC0DD\uC131\uB41C \uCE74\uB4DC\uC785\uB2C8\uB2E4. i.e. cloze deletions",
- SHOW_CARD_CONTEXT: "\uCE74\uB4DC\uC758 \uBB38\uB9E5(context)\uC744 \uD45C\uC2DC\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?",
- SHOW_CARD_CONTEXT_DESC: "\uCE74\uB4DC\uC5D0\uC11C 'Title > Heading 1 > Subheading > ... > Subheading' \uC758 \uD45C\uC2DC\uB97C \uD560\uC9C0 \uC124\uC815\uD569\uB2C8\uB2E4.",
- CARD_MODAL_HEIGHT_PERCENT: "\uD50C\uB798\uC2DC\uCE74\uB4DC \uB192\uC774 \uBE44\uC728",
- CARD_MODAL_SIZE_PERCENT_DESC: "\uBAA8\uBC14\uC77C \uBC84\uC804 \uD639\uC740 \uB9E4\uC6B0 \uD070 \uC774\uBBF8\uC9C0\uAC00 \uC788\uB294 \uACBD\uC6B0 100%\uB85C \uC124\uC815\uD574\uC57C \uD569\uB2C8\uB2E4.",
- RESET_DEFAULT: "\uAE30\uBCF8\uAC12\uC73C\uB85C \uCD08\uAE30\uD654",
- CARD_MODAL_WIDTH_PERCENT: "\uD50C\uB798\uC2DC\uCE74\uB4DC \uB108\uBE44 \uBE44\uC728",
- RANDOMIZE_CARD_ORDER: "\uB9AC\uBDF0\uC911\uC778 \uCE74\uB4DC\uC758 \uC21C\uC11C\uB97C \uB79C\uB364\uC73C\uB85C \uB450\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?",
- DISABLE_CLOZE_CARDS: "\uBE48 \uCE78 \uCC44\uC6B0\uAE30 \uCE74\uB4DC\uB97C \uBE44\uD65C\uC131\uD654\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?",
- CONVERT_HIGHLIGHTS_TO_CLOZES: "==hightlights== \uB97C \uBE48 \uCE78 \uCC44\uC6B0\uAE30\uB85C \uC804\uD658\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?",
- CONVERT_BOLD_TEXT_TO_CLOZES: "**bolded text** \uB97C \uBE48 \uCE78 \uCC44\uC6B0\uAE30\uB85C \uC804\uD658\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?",
- CONVERT_CURLY_BRACKETS_TO_CLOZES: "{{curly brackets}} \uB97C \uBE48 \uCE78 \uCC44\uC6B0\uAE30\uB85C \uC804\uD658\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?",
- INLINE_CARDS_SEPARATOR: "\uC778\uB77C\uC778 \uD50C\uB798\uC2DC\uCE74\uB4DC \uAD6C\uBD84\uC790",
- FIX_SEPARATORS_MANUALLY_WARNING: "\uC8FC\uC758: \uC774 \uC635\uC158\uC744 \uC218\uC815\uD55C \uD6C4\uC5D0\uB294 \uC774\uBBF8 \uC791\uC131\uB41C \uD50C\uB798\uC2DC\uCE74\uB4DC\uB97C \uC218\uB3D9\uC73C\uB85C \uC218\uC815\uD574\uC57C \uD568\uC744 \uC8FC\uC758\uD558\uC2ED\uC2DC\uC624.",
- INLINE_REVERSED_CARDS_SEPARATOR: "\uC778\uB77C\uC778 \uBC18\uC804 \uD50C\uB798\uC2DC\uCE74\uB4DC \uAD6C\uBD84\uC790",
- MULTILINE_CARDS_SEPARATOR: "\uC5EC\uB7EC \uC904 \uD50C\uB798\uC2DC\uCE74\uB4DC \uAD6C\uBD84\uC790",
- MULTILINE_REVERSED_CARDS_SEPARATOR: "\uC5EC\uB7EC \uC904 \uBC18\uC804 \uD50C\uB798\uC2DC\uCE74\uB4DC \uAD6C\uBD84\uC790",
- NOTES: "\uB178\uD2B8",
- REVIEW_PANE_ON_STARTUP: "Enable note review pane on startup",
- TAGS_TO_REVIEW: "\uB9AC\uBDF0\uC5D0 \uC0AC\uC6A9\uD560 \uD0DC\uADF8",
- TAGS_TO_REVIEW_DESC: "\uD0DC\uADF8\uB97C \uACF5\uBC31 \uB610\uB294 \uBE48 \uC904\uB85C \uAD6C\uBD84\uD574\uC11C \uC785\uB825\uD574\uC8FC\uC138\uC694. \uC608) '#review #tag2 #tag3'",
- OPEN_RANDOM_NOTE: "\uB9AC\uBDF0\uB97C \uC704\uD574 \uB79C\uB364 \uB178\uD2B8\uB97C \uC5FD\uB2C8\uB2E4.",
- OPEN_RANDOM_NOTE_DESC: "\uC774 \uC635\uC158\uC774 \uAEBC\uC838\uC788\uC73C\uBA74, \uB178\uD2B8\uB294 \uC911\uC694\uB3C4(\uD398\uC774\uC9C0 \uB7AD\uD06C)\uC5D0 \uB530\uB77C \uC815\uB82C\uB429\uB2C8\uB2E4.",
- AUTO_NEXT_NOTE: "\uB9AC\uBDF0 \uD6C4\uC5D0 \uB2E4\uC74C \uB178\uD2B8\uB97C \uC790\uB3D9\uC73C\uB85C \uC5FD\uB2C8\uB2E4.",
- DISABLE_FILE_MENU_REVIEW_OPTIONS: "\uD30C\uC77C \uBA54\uB274\uC5D0\uC11C\uC758 \uB9AC\uBDF0 \uC635\uC158\uC744 \uBE44\uD65C\uC131\uD654 \uD569\uB2C8\uB2E4. \uC608) \uB9AC\uBDF0: Easy Good Hard",
- DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\uC774 \uC635\uC158\uC744 \uBE44\uD65C\uC131\uD654 \uD55C \uD6C4, \uBA85\uB839 \uB2E8\uCD95\uD0A4\uB97C \uC774\uC6A9\uD574 \uB9AC\uBDF0\uD558\uC2E4 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC774 \uC635\uC158\uC744 \uBCC0\uACBD\uD55C \uD6C4\uC5D0 \uC635\uC2DC\uB514\uC5B8\uC744 \uC0C8\uB85C\uACE0\uCE68 \uD558\uC2ED\uC2DC\uC624.",
- MAX_N_DAYS_REVIEW_QUEUE: "\uC624\uB978\uCABD \uD328\uB110\uC5D0 \uD45C\uC2DC\uD560 \uCD5C\uB300 \uC77C\uC218",
- MIN_ONE_DAY: "\uC801\uC5B4\uB3C4 1\uC774\uC0C1\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.",
- VALID_NUMBER_WARNING: "\uC720\uD6A8\uD55C \uC22B\uC790\uB97C \uC785\uB825\uD574\uC8FC\uC138\uC694.",
- UI_PREFERENCES: "\uC0AC\uC6A9\uC790 \uC778\uD130\uD398\uC774\uC2A4 \uAE30\uBCF8 \uC124\uC815",
- INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\uB371 \uD2B8\uB9AC\uB294 \uCC98\uC74C\uC5D0 \uD655\uC7A5\uB41C \uAC83\uC73C\uB85C \uD45C\uC2DC\uB418\uC5B4\uC57C \uD569\uB2C8\uB2E4.",
- INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "\uAC19\uC740 \uCE74\uB4DC\uC5D0 \uC911\uCCA9\uB41C \uB371\uC744 \uC811\uC73C\uB824\uBA74 \uC774 \uC635\uC158\uC744 \uB044\uC2ED\uC2DC\uC624. \uAC19\uC740 \uD30C\uC77C\uC5D0 \uC5EC\uB7EC \uB371\uC5D0 \uC18D\uD55C \uCE74\uB4DC\uAC00 \uC788\uB294 \uACBD\uC6B0 \uC720\uC6A9\uD569\uB2C8\uB2E4.",
- ALGORITHM: "\uC54C\uACE0\uB9AC\uC998",
- CHECK_ALGORITHM_WIKI: '\uB354 \uB9CE\uC740 \uC815\uBCF4\uB97C \uC6D0\uD558\uC2DC\uBA74, algorithm implementation\uC744 \uD655\uC778\uD574\uC8FC\uC138\uC694.',
- BASE_EASE: "\uAE30\uBCF8 ease",
- BASE_EASE_DESC: "\uCD5C\uC19F\uAC12 = 130, \uC801\uC815\uCE58\uB294 \uB300\uB7B5 250\uC785\uB2C8\uB2E4.",
- BASE_EASE_MIN_WARNING: "\uAE30\uBCF8 ease\uB294 \uC801\uC5B4\uB3C4 130 \uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.",
- LAPSE_INTERVAL_CHANGE: "\uD50C\uB798\uC2DC\uCE74\uB4DC/\uB178\uD2B8\uB97C \uC5B4\uB824\uC6C0(Hard)\uC73C\uB85C \uB9AC\uBDF0\uD588\uC744 \uB54C\uC758 \uAC04\uACA9 \uBCC0\uACBD",
- LAPSE_INTERVAL_CHANGE_DESC: "\uC0C8\uB85C\uC6B4 \uAC04\uACA9 = \uC774\uC804 \uAC04\uACA9 * \uAC04\uACA9\uBCC0\uACBD \uAC12 / 100.",
- EASY_BONUS: "\uC26C\uC6C0(Easy) \uBCF4\uB108\uC2A4",
- EASY_BONUS_DESC: "\uC26C\uC6C0(Easy) \uBCF4\uB108\uC2A4\uB294 \uD50C\uB798\uC2DC\uCE74\uB4DC/\uB178\uD2B8\uC5D0\uC11C \uC88B\uC74C(Good)\uACFC \uC26C\uC6C0(Easy) \uC0AC\uC774\uC758 \uAC04\uACA9 \uCC28\uC774\uB97C \uC124\uC815\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. (\uCD5C\uC18C = 100%)",
- EASY_BONUS_MIN_WARNING: "\uC26C\uC6C0(Easy) \uBCF4\uB108\uC2A4\uB294 \uC801\uC5B4\uB3C4 100\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.",
- MAX_INTERVAL: "Maximum interval in days",
- MAX_INTERVAL_DESC: "\uAC04\uACA9\uC758 \uC0C1\uD55C\uC120\uC744 \uB458 \uC218 \uC788\uC2B5\uB2C8\uB2E4. (\uAE30\uBCF8\uAC12 = 100\uB144)",
- MAX_INTERVAL_MIN_WARNING: "\uCD5C\uB300 \uAC04\uACA9\uC740 \uC801\uC5B4\uB3C4 1\uC77C\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.",
- MAX_LINK_CONTRIB: "\uCD5C\uB300 \uC5F0\uACB0 \uAE30\uC5EC\uB3C4",
- MAX_LINK_CONTRIB_DESC: "\uB9C1\uD06C\uB41C \uB178\uD2B8\uC758 \uCD08\uAE30 ease\uC5D0 \uB300\uD55C \uAC00\uC911\uCE58\uAC00 \uC801\uC6A9\uB41C ease\uC758 \uCD5C\uB300 \uAE30\uC5EC\uB3C4\uC785\uB2C8\uB2E4.",
- LOGGING: "\uB85C\uAE45",
- DISPLAY_DEBUG_INFO: "\uB514\uBC84\uAE45 \uC815\uBCF4\uB97C \uAC1C\uBC1C\uC790 \uCF58\uC194\uC5D0 \uD45C\uC2DC\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?",
- // sidebar.ts
- NOTES_REVIEW_QUEUE: "\uB9AC\uBDF0\uD560 \uB178\uD2B8 \uB300\uAE30\uC5F4",
- CLOSE: "\uB2EB\uAE30",
- NEW: "New",
- YESTERDAY: "\uC5B4\uC81C",
- TODAY: "\uC624\uB298",
- TOMORROW: "\uB0B4\uC77C",
- // stats-modal.tsx
- STATS_TITLE: "\uD1B5\uACC4",
- MONTH: "\uC6D4",
- QUARTER: "\uBD84\uAE30",
- YEAR: "\uB144",
- LIFETIME: "\uD3C9\uC0DD",
- FORECAST: "\uC608\uCE21",
- FORECAST_DESC: "\uC774\uD6C4\uC5D0 \uD559\uC2B5\uD560 \uCE74\uB4DC\uC758 \uC218",
- SCHEDULED: "Scheduled",
- DAYS: "\uC77C",
- NUMBER_OF_CARDS: "\uCE74\uB4DC\uC758 \uC218",
- REVIEWS_PER_DAY: "\uD3C9\uADE0: ${avg} \uB9AC\uBDF0/\uC77C",
- INTERVALS: "\uAC04\uACA9",
- INTERVALS_DESC: "\uB9AC\uBDF0\uB97C \uB2E4\uC2DC \uD560 \uB54C \uAE4C\uC9C0\uC758 \uAE30\uAC04",
- COUNT: "Count",
- INTERVALS_SUMMARY: "\uD3C9\uADE0 \uAC04\uACA9: ${avg}, \uAC00\uC7A5 \uAE34 \uAC04\uACA9: ${longest}",
- EASES: "Eases",
- EASES_SUMMARY: "Average ease: ${avgEase}",
- CARD_TYPES: "\uCE74\uB4DC \uD0C0\uC785",
- CARD_TYPES_DESC: "\uC5EC\uAE30\uC5D0\uB294 \uBB3B\uC5B4\uB454 \uCE74\uB4DC\uB3C4 \uD3EC\uD568\uB429\uB2C8\uB2E4.",
- CARD_TYPE_NEW: "New",
- CARD_TYPE_YOUNG: "Young",
- CARD_TYPE_MATURE: "Mature",
- CARD_TYPES_SUMMARY: "\uC804\uCCB4 \uCE74\uB4DC \uC218: ${totalCardsCount}"
-};
-
-// src/lang/locale/mr.ts
-var mr_default = {};
-
-// src/lang/locale/nl.ts
-var nl_default = {};
-
-// src/lang/locale/no.ts
-var no_default = {};
-
-// src/lang/locale/pl.ts
-var pl_default = {};
-
-// src/lang/locale/pt.ts
-var pt_default = {};
-
-// src/lang/locale/pt-br.ts
-var pt_br_default = {
- // flashcard-modal.tsx
- DECKS: "Baralhos",
- DUE_CARDS: "Cartas para Colocar em Dia",
- NEW_CARDS: "Novas Cartas",
- TOTAL_CARDS: "Total de Cartas",
- BACK: "Back",
- SKIP: "Skip",
- EDIT_CARD: "Edit Card",
- RESET_CARD_PROGRESS: "Reiniciar o Progresso da Carta",
- HARD: "Dif\xEDcil",
- GOOD: "OK",
- EASY: "F\xE1cil",
- SHOW_ANSWER: "Mostrar Resposta",
- CARD_PROGRESS_RESET: "O Progresso da Carta foi reiniciado",
- SAVE: "Save",
- CANCEL: "Cancel",
- NO_INPUT: "No input provided.",
- CURRENT_EASE_HELP_TEXT: "Current Ease: ",
- CURRENT_INTERVAL_HELP_TEXT: "Current Interval: ",
- CARD_GENERATED_FROM: "Generated from: ${notePath}",
- // main.ts
- OPEN_NOTE_FOR_REVIEW: "Abrir uma nota para revisar",
- REVIEW_CARDS: "Revisar flashcards",
- REVIEW_EASY_FILE_MENU: "Revis\xE3o: F\xE1cil",
- REVIEW_GOOD_FILE_MENU: "Revis\xE3o: OK",
- REVIEW_HARD_FILE_MENU: "Revis\xE3o: Dif\xEDcil",
- REVIEW_NOTE_EASY_CMD: "Revisar nota como f\xE1cil",
- REVIEW_NOTE_GOOD_CMD: "Revisar nota como OK",
- REVIEW_NOTE_HARD_CMD: "Revisar nota como dif\xEDcil",
- REVIEW_ALL_CARDS: "Revisar flashcards de todas as notas",
- CRAM_ALL_CARDS: "Select a deck to cram",
- REVIEW_CARDS_IN_NOTE: "Revisar flashcards nessa nota",
- CRAM_CARDS_IN_NOTE: "Revisar todas as flashcards nessa nota",
- VIEW_STATS: "Ver estat\xEDsticas",
- STATUS_BAR: "Revis\xE3o: ${dueNotesCount} nota(s), ${dueFlashcardsCount} Carta(s) para colocar em dia",
- SYNC_TIME_TAKEN: "Sicroniza\xE7\xE3o levou ${t}ms",
- NOTE_IN_IGNORED_FOLDER: "Nota \xE9 salva na pasta ignorada (cheque as configura\xE7\xF5es).",
- PLEASE_TAG_NOTE: "Por favor etiquete a nota apropriadamente para revisar (nas configura\xE7\xF5es).",
- RESPONSE_RECEIVED: "Resposta recebida.",
- NO_DECK_EXISTS: "Nenhum baralho existe para ${deckName}",
- ALL_CAUGHT_UP: "Voc\xEA colocou tudo em prazo agora :D.",
- // scheduling.ts
- DAYS_STR_IVL: "${interval} dia(s)",
- MONTHS_STR_IVL: "${interval} m\xEAs(es)",
- YEARS_STR_IVL: "${interval} ano(s)",
- DAYS_STR_IVL_MOBILE: "${interval}d",
- MONTHS_STR_IVL_MOBILE: "${interval}m",
- YEARS_STR_IVL_MOBILE: "${interval}a",
- // settings.ts
- SETTINGS_HEADER: "Plguin Spaced Repetition - Configura\xE7\xE3o",
- CHECK_WIKI: 'Para mais informa\xE7\xF5es, checke o wiki.',
- FOLDERS_TO_IGNORE: "Pastas para ignorar",
- FOLDERS_TO_IGNORE_DESC: "Ensira o caminho das pastas separado por quebras de linha ex: Templates Meta/Scripts",
- FLASHCARDS: "Flashcards",
- FLASHCARD_EASY_LABEL: "Texto do Bot\xE3o de F\xE1cil",
- FLASHCARD_GOOD_LABEL: "Texto do Bot\xE3o de OK",
- FLASHCARD_HARD_LABEL: "Texto do Bot\xE3o de Dif\xEDcil",
- FLASHCARD_EASY_DESC: 'Costumize o r\xF3tulo para o bot\xE3o de "F\xE1cil"',
- FLASHCARD_GOOD_DESC: 'Costumize o r\xF3tulo para o bot\xE3o de "OK"',
- FLASHCARD_HARD_DESC: 'Customize o r\xF3tulo para o bot\xE3o de "Dif\xEDcil"',
- FLASHCARD_TAGS: "Etiquetas dos Flashcards",
- FLASHCARD_TAGS_DESC: "Ensira etiquetas separadas por espa\xE7os ou quebras de linha ex: #flashcards #baralho2 #baralho3.",
- CONVERT_FOLDERS_TO_DECKS: "Converter pastas para baralhos e sub-baralhos?",
- CONVERT_FOLDERS_TO_DECKS_DESC: "Isso \xE9 uma alternativa para a op\xE7\xE3o de etiqueta dos Flashcards em cima.",
- INLINE_SCHEDULING_COMMENTS: "Salvar coment\xE1rios de agendamento na mesma linha que a \xFAltima linha do flashcard?",
- INLINE_SCHEDULING_COMMENTS_DESC: "Ligar isso vai fazer com que os coment\xE1rios em HTML n\xE3o quebrem a formata\xE7\xE3o de listas.",
- BURY_SIBLINGS_TILL_NEXT_DAY: "Enterrar cartas irm\xE3s at\xE9 o pr\xF3ximo dia?",
- BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Cartas irm\xE3s s\xE3o geradas pelo texto da mesma carta ex: omiss\xE3o de palavras",
- SHOW_CARD_CONTEXT: "Mostrar conxtexto nas cartas?",
- SHOW_CARD_CONTEXT_DESC: "ex: T\xEDtulo > Cabe\xE7alho 1 > Subcabe\xE7alho > ... > Subcabe\xE7alho",
- CARD_MODAL_HEIGHT_PERCENT: "Porcentagem da Altura do Flashcard",
- CARD_MODAL_SIZE_PERCENT_DESC: "Deveria estar configurado em 100% em dispositivos m\xF3veis ou se voc\xEA tem imagens muito grandes",
- RESET_DEFAULT: "Reiniciar para a pr\xE9-defini\xE7\xE3o",
- CARD_MODAL_WIDTH_PERCENT: "Porcentagem de Largura do Flashcard",
- RANDOMIZE_CARD_ORDER: "Aleatorizar a ordem das cartas durante a revis\xE3o?",
- DISABLE_CLOZE_CARDS: "Desabilitar cartas que usam omiss\xE3o de palavras?",
- CONVERT_HIGHLIGHTS_TO_CLOZES: "Converter ==marca-texto== em omiss\xF5es?",
- CONVERT_BOLD_TEXT_TO_CLOZES: "Converter **texto em negrito** em omiss\xF5es?",
- CONVERT_CURLY_BRACKETS_TO_CLOZES: "Converter {{chaves}} em omiss\xF5es?",
- INLINE_CARDS_SEPARATOR: "Separador para flashcards inline",
- FIX_SEPARATORS_MANUALLY_WARNING: "Note que depois de mudar isso voc\xEA vai ter que manualmente mudar quaisquer flashcards que voc\xEA tenha.",
- INLINE_REVERSED_CARDS_SEPARATOR: "Separador para flashcards inline reversos",
- MULTILINE_CARDS_SEPARATOR: "Separador para flashcards de m\xFAltiplas linhas",
- MULTILINE_REVERSED_CARDS_SEPARATOR: "Separador para flashcards de m\xFAltiplas linhas reversos",
- NOTES: "Notas",
- REVIEW_PANE_ON_STARTUP: "Enable note review pane on startup",
- TAGS_TO_REVIEW: "Etiquetas para revisar",
- TAGS_TO_REVIEW_DESC: "Ensira etiquetas separadas por espa\xE7os ou quebra de linhas ex: #revisar #etiqueta2 #etiqueta3.",
- OPEN_RANDOM_NOTE: "Abrir uma nota aleat\xF3ria para revisar",
- OPEN_RANDOM_NOTE_DESC: "Quando voc\xEA desabilitar isso, as notas v\xE3o ser ordenadas por import\xE2ncia (PageRank).",
- AUTO_NEXT_NOTE: "Abrir a pr\xF3xima nota automaticamente depois de uma revis\xE3o",
- DISABLE_FILE_MENU_REVIEW_OPTIONS: "Desabilitar op\xE7\xF5es de revis\xE3o no menu de arquivos ex: Revis\xE3o: F\xE1cil OK Dif\xEDcil",
- DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "Depois de desabilitar, voc\xEA pode revisar usando os atalhos de comando. Reinicie Obsidian depois de mudar isso.",
- MAX_N_DAYS_REVIEW_QUEUE: "N\xFAmero m\xE1ximo de dias para exibir no painel direito",
- MIN_ONE_DAY: "O n\xFAmero de dias deve ser pelo menos 1.",
- VALID_NUMBER_WARNING: "Por favor ensira um n\xFAmero v\xE1lido.",
- UI_PREFERENCES: "Prefer\xEAncias de UI",
- INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\xC1rvores de baralhos devem inicialmente serem exibidas como expandidas",
- INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Desabilite isso para colapsar baralhos que est\xE3o um dentro do outro na mesma carta. \xDAtil se voc\xEA tem cartas que pertencem a muitos baralhos em um mesmo arquivo.",
- ALGORITHM: "Algor\xEDtmo",
- CHECK_ALGORITHM_WIKI: 'Para mais informa\xE7\xF5es, cheque a implementa\xE7\xE3o do algor\xEDtmo.',
- BASE_EASE: "Facilidade base",
- BASE_EASE_DESC: "m\xEDnimo = 130, preferivelmente aproximadamente 250.",
- BASE_EASE_MIN_WARNING: "A facilidade base deve ser pelo menos 130.",
- LAPSE_INTERVAL_CHANGE: "Mudan\xE7a de intervalo quando voc\xEA revisa um(a) flashcard/nota como dif\xEDcil",
- LAPSE_INTERVAL_CHANGE_DESC: "novoIntervalo = velhoIntervalo * mudancaIntervalo / 100.",
- EASY_BONUS: "B\xF4nus de F\xE1cil",
- EASY_BONUS_DESC: "O b\xF4nus de f\xE1cil te permite mudar a difer\xEAncia entre intervalos de responder OK e F\xE1cil em um(a) flashcard/nota (m\xEDnimo = 100%).",
- EASY_BONUS_MIN_WARNING: "O b\xF4nus de f\xE1cil deve ser pelo menos 100.",
- MAX_INTERVAL: "Maximum interval in days",
- MAX_INTERVAL_DESC: "Te permite colocar um limite m\xE1ximo no intervalo (pr\xE9-defini\xE7\xE3o = 100 anos).",
- MAX_INTERVAL_MIN_WARNING: "O intervalo m\xE1ximo deve ser pelo menos 1 dia.",
- MAX_LINK_CONTRIB: "Contribui\xE7\xE3o M\xE1xima de Links",
- MAX_LINK_CONTRIB_DESC: "Contribui\xE7\xE3o m\xE1xima da facilidade ponderada das notas linkadas \xE0 facilidade inicial.",
- LOGGING: "Logging",
- DISPLAY_DEBUG_INFO: "Mostrar informa\xE7\xE3o de debugging no console de desenvolvimento?",
- // sidebar.ts
- NOTES_REVIEW_QUEUE: "Fila de Notas para Revisar",
- CLOSE: "Fechar",
- NEW: "Novo",
- YESTERDAY: "Ontem",
- TODAY: "Hoje",
- TOMORROW: "Amanh\xE3",
- // stats-modal.tsx
- STATS_TITLE: "Estat\xEDsticas",
- MONTH: "M\xEAs",
- QUARTER: "Quarto",
- YEAR: "Ano",
- LIFETIME: "Tempo Total",
- FORECAST: "Previs\xE3o",
- FORECAST_DESC: "O n\xFAmero de cartas a serem colocadas em dia no futuro",
- SCHEDULED: "Agendado",
- DAYS: "Dias",
- NUMBER_OF_CARDS: "N\xFAmero de cartas",
- REVIEWS_PER_DAY: "M\xE9dia: ${avg} revis\xF5es/dia",
- INTERVALS: "Intervalos",
- INTERVALS_DESC: "Atrasos at\xE9 que as revis\xF5es sejam exibidas de novo",
- COUNT: "Contagem",
- INTERVALS_SUMMARY: "Intervalo em m\xE9dia: ${avg}, Maior intervalo: ${longest}",
- EASES: "Facilidades",
- EASES_SUMMARY: "Facilidade em m\xE9dia: ${avgEase}",
- CARD_TYPES: "Tipos de Cartas",
- CARD_TYPES_DESC: "Isso tamb\xE9m inclui cartas enterrados, caso existam",
- CARD_TYPE_NEW: "Novo",
- CARD_TYPE_YOUNG: "Jovem",
- CARD_TYPE_MATURE: "Amadurecido",
- CARD_TYPES_SUMMARY: "Total de cartas: ${totalCardsCount}"
-};
-
-// src/lang/locale/ro.ts
-var ro_default = {};
-
-// src/lang/locale/ru.ts
-var ru_default = {
- // flashcard-modal.tsx
- DECKS: "\u041A\u043E\u043B\u043E\u0434\u044B",
- DUE_CARDS: "\u041F\u0440\u0435\u0434\u0441\u0442\u043E\u044F\u0449\u0438\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438",
- NEW_CARDS: "\u041D\u043E\u0432\u044B\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438",
- TOTAL_CARDS: "\u0412\u0441\u0435\u0433\u043E \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A",
- BACK: "\u041D\u0430\u0437\u0430\u0434",
- SKIP: "\u041F\u0440\u043E\u043F\u0443\u0441\u0442\u0438\u0442\u044C",
- EDIT_CARD: "\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0443",
- RESET_CARD_PROGRESS: "\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C \u043F\u0440\u043E\u0433\u0440\u0435\u0441\u0441 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438",
- HARD: "\u0421\u043B\u043E\u0436\u043D\u043E",
- GOOD: "\u041D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E",
- EASY: "\u041B\u0435\u0433\u043A\u043E",
- SHOW_ANSWER: "\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u043E\u0442\u0432\u0435\u0442",
- CARD_PROGRESS_RESET: "\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C \u043F\u0440\u043E\u0433\u0440\u0435\u0441\u0441 \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438",
- SAVE: "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C",
- CANCEL: "\u041E\u0442\u043C\u0435\u043D\u0430",
- NO_INPUT: "\u041F\u0443\u0441\u0442\u043E\u0439 \u0432\u0432\u043E\u0434.",
- CURRENT_EASE_HELP_TEXT: "\u0422\u0435\u043A\u0443\u0449\u0430\u044F \u041B\u0435\u0433\u043A\u043E\u0441\u0442\u044C: ",
- CURRENT_INTERVAL_HELP_TEXT: "\u0422\u0435\u043A\u0443\u0449\u0438\u0439 \u0438\u043D\u0442\u0435\u0440\u0432\u0430\u043B: ",
- CARD_GENERATED_FROM: "\u0421\u0433\u0435\u043D\u0435\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E \u0438\u0437: ${notePath}",
- // main.ts
- OPEN_NOTE_FOR_REVIEW: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0437\u0430\u043C\u0435\u0442\u043A\u0443 \u0434\u043B\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F",
- REVIEW_CARDS: "\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438",
- REVIEW_EASY_FILE_MENU: "\u041F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435: \u041B\u0435\u0433\u043A\u043E",
- REVIEW_GOOD_FILE_MENU: "\u041F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435: \u041D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E",
- REVIEW_HARD_FILE_MENU: "\u041F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435: \u0421\u043B\u043E\u0436\u043D\u043E",
- REVIEW_NOTE_EASY_CMD: "\u041F\u043E\u0432\u0442\u043E\u0440\u044F\u0442\u044C \u0437\u0430\u043C\u0435\u0442\u043A\u0443 \u043A\u0430\u043A \u041B\u0451\u0433\u043A\u0443\u044E",
- REVIEW_NOTE_GOOD_CMD: "\u041F\u043E\u0432\u0442\u043E\u0440\u044F\u0442\u044C \u0437\u0430\u043C\u0435\u0442\u043A\u0443 \u043A\u0430\u043A \u041D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u0443\u044E",
- REVIEW_NOTE_HARD_CMD: "\u041F\u043E\u0432\u0442\u043E\u0440\u044F\u0442\u044C \u0437\u0430\u043C\u0435\u0442\u043A\u0443 \u043A\u0430\u043A \u0421\u043B\u043E\u0436\u043D\u0443\u044E",
- CRAM_ALL_CARDS: "\u0417\u0443\u0431\u0440\u0438\u0442\u044C \u0432\u0441\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432 \u044D\u0442\u043E\u0439 \u043A\u043E\u043B\u043E\u0434\u0435",
- REVIEW_ALL_CARDS: "\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C \u0432\u0441\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432\u043E \u0432\u0441\u0435\u0445 \u0437\u0430\u043C\u0435\u0442\u043A\u0430\u0445",
- REVIEW_CARDS_IN_NOTE: "\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432 \u044D\u0442\u043E\u0439 \u0437\u0430\u043C\u0435\u0442\u043A\u0435",
- CRAM_CARDS_IN_NOTE: "\u0417\u0443\u0431\u0440\u0438\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432 \u044D\u0442\u043E\u0439 \u0437\u0430\u043C\u0435\u0442\u043A\u0435",
- VIEW_STATS: "\u041F\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0443",
- STATUS_BAR: "\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C: ${dueNotesCount} \u0437\u0430\u043C\u0435\u0442\u043E\u043A(-\u043A\u0438), ${dueFlashcardsCount} \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A(-\u043A\u0438) \u043F\u0440\u0435\u0434\u0441\u0442\u043E\u0438\u0442",
- SYNC_TIME_TAKEN: "\u0421\u0438\u043D\u0445\u0440\u043E\u043D\u0438\u0437\u0430\u0446\u0438\u044F \u0437\u0430\u043D\u044F\u043B\u0430 ${t}\u043C\u0441",
- NOTE_IN_IGNORED_FOLDER: "\u0417\u0430\u043C\u0435\u0442\u043A\u0430 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0430 \u0432 \u0438\u0433\u043D\u043E\u0440\u0438\u0440\u0443\u0435\u043C\u0443\u044E \u043F\u0430\u043F\u043A\u0443 (\u0441\u043C. \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438).",
- PLEASE_TAG_NOTE: "\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430 \u043F\u043E\u043C\u0435\u0442\u044C\u0442\u0435 \u0437\u0430\u043C\u0435\u0442\u043A\u0443 \u043A\u0430\u043A \u043D\u0430\u0434\u043E \u0434\u043B\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F (\u0441\u043C. \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438).",
- RESPONSE_RECEIVED: "\u041E\u0442\u0432\u0435\u0442 \u043F\u043E\u043B\u0443\u0447\u0435\u043D.",
- NO_DECK_EXISTS: "\u041D\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0443\u0440\u043E\u0432\u043D\u044F ${deckName}",
- ALL_CAUGHT_UP: "\u041C\u043E\u043B\u043E\u0434\u0435\u0446! \u0422\u044B \u0441\u043F\u0440\u0430\u0432\u0438\u043B\u0441\u044F \u0438 \u0434\u043E\u0448\u0435\u043B \u0434\u043E \u043A\u043E\u043D\u0446\u0430! :D",
- // scheduling.ts
- DAYS_STR_IVL: "${interval} \u0434\u043D\u0435\u0439",
- MONTHS_STR_IVL: "${interval} \u043C\u0435\u0441\u044F\u0446\u043E\u0432",
- YEARS_STR_IVL: "${interval} \u0433\u043E\u0434\u0430 (\u043B\u0435\u0442)",
- DAYS_STR_IVL_MOBILE: "${interval}\u0434.",
- MONTHS_STR_IVL_MOBILE: "${interval}\u043C.",
- YEARS_STR_IVL_MOBILE: "${interval}\u0433.",
- // settings.ts
- SETTINGS_HEADER: "\u041F\u043B\u0430\u0433\u0438\u043D Spaced Repetition - \u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438",
- CHECK_WIKI: '\u0414\u043B\u044F \u0434\u043E\u043F. \u0438\u043D\u0444\u044B, \u0441\u043C\u043E\u0442\u0440\u0438 wiki.',
- FOLDERS_TO_IGNORE: "\u0418\u0433\u043D\u043E\u0440\u0438\u0440\u0443\u0435\u043C\u044B\u0435 \u043F\u0430\u043F\u043A\u0438",
- FOLDERS_TO_IGNORE_DESC: "\u0412\u0435\u0434\u0438\u0442\u0435 \u043F\u0443\u0442\u0438 \u043F\u0430\u043F\u043E\u043A, \u043A\u0430\u0436\u0434\u0430\u044F \u043D\u0430 \u0441\u0432\u043E\u0435\u0439 \u0441\u0442\u0440\u043E\u043A\u0435, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440: Templates Meta/Scripts",
- FLASHCARDS: "\u041A\u0430\u0440\u0442\u043E\u0447\u043A\u0438",
- FLASHCARD_EASY_LABEL: "\u0422\u0435\u043A\u0441\u0442 \u043A\u043D\u043E\u043F\u043A\u0438 \u041B\u0435\u0433\u043A\u043E",
- FLASHCARD_GOOD_LABEL: "\u0422\u0435\u043A\u0441\u0442 \u043A\u043D\u043E\u043F\u043A\u0438 \u041D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E",
- FLASHCARD_HARD_LABEL: "\u0422\u0435\u043A\u0441\u0442 \u043A\u043D\u043E\u043F\u043A\u0438 \u0421\u043B\u043E\u0436\u043D\u043E",
- FLASHCARD_EASY_DESC: '\u041D\u0430\u0441\u0442\u0440\u043E\u0438\u0442\u044C \u044F\u0440\u043B\u044B\u043A \u0434\u043B\u044F \u043A\u043D\u043E\u043F\u043A\u0438 "\u041B\u0435\u0433\u043A\u043E"',
- FLASHCARD_GOOD_DESC: '\u041D\u0430\u0441\u0442\u0440\u043E\u0438\u0442\u044C \u044F\u0440\u043B\u044B\u043A \u0434\u043B\u044F \u043A\u043D\u043E\u043F\u043A\u0438 "\u041D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E"',
- FLASHCARD_HARD_DESC: '\u041D\u0430\u0441\u0442\u0440\u043E\u0438\u0442\u044C \u044F\u0440\u043B\u044B\u043A \u0434\u043B\u044F \u043A\u043D\u043E\u043F\u043A\u0438 "\u0421\u043B\u043E\u0436\u043D\u043E"',
- FLASHCARD_TAGS: "\u0422\u044D\u0433\u0438 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A",
- FLASHCARD_TAGS_DESC: "\u0412\u0435\u0434\u0438\u0442\u0435 \u0442\u044D\u0433\u0438 \u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0435 Enter-\u043E\u043C \u0438\u043B\u0438 \u043F\u0440\u043E\u0431\u0435\u043B\u043E\u043C, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440: #flashcards #deck2 #deck3.",
- CONVERT_FOLDERS_TO_DECKS: "\u041A\u043E\u043D\u0432\u0435\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u0430\u043F\u043A\u0438 \u0432 \u0443\u0440\u043E\u0432\u043D\u0438 \u0438 \u043F\u043E\u0434\u0443\u0440\u043E\u0432\u043D\u0438?",
- CONVERT_FOLDERS_TO_DECKS_DESC: "\u042D\u0442\u043E \u0430\u043B\u044C\u0442\u0435\u0440\u043D\u0430\u0442\u0438\u0432\u0430 \u0442\u044D\u0433\u0430\u043C \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A, \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430 \u0441\u0432\u0435\u0440\u0445\u0443.",
- INLINE_SCHEDULING_COMMENTS: "\u0421\u043E\u0445\u0440\u0430\u043D\u044F\u0442\u044C \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043D\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0441\u0442\u0440\u043E\u043A\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438?",
- INLINE_SCHEDULING_COMMENTS_DESC: "\u0412\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 \u044D\u0442\u043E\u0439 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0441\u0434\u0435\u043B\u0430\u0435\u0442 \u0442\u0430\u043A, \u0447\u0442\u043E HTML \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0438 \u043D\u0435 \u0431\u0443\u0434\u0443\u0442 \u043B\u043E\u043C\u0430\u0442\u044C \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0441\u043F\u0438\u0441\u043A\u0430.",
- BURY_SIBLINGS_TILL_NEXT_DAY: "\u041F\u0440\u044F\u0442\u0430\u0442\u044C \u0440\u043E\u0434\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0434\u043E \u0441\u043B\u0435\u0434. \u0434\u043D\u044F?",
- BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "\u0420\u043E\u0434\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 - \u0442\u0435, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u043D\u044B \u0438\u0437 \u043E\u0434\u043D\u043E\u0433\u043E \u0442\u0435\u043A\u0441\u0442\u0430, \u043F\u0440\u0438\u043C\u0435\u0440: \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0441 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0430\u043C\u0438 ([...])",
- SHOW_CARD_CONTEXT: "\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442(\u0443\u0440\u043E\u0432\u0435\u043D\u044C) \u0432 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0430\u0445(\u0432\u043E \u0432\u0440\u0435\u043C\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F)?",
- SHOW_CARD_CONTEXT_DESC: "\u043F\u0440\u0438\u043C\u0435\u0440: Title > Heading 1 > Subheading > ... > Subheading",
- CARD_MODAL_HEIGHT_PERCENT: "\u0412\u044B\u0441\u043E\u0442\u0430 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432\u043F\u0440\u043E\u0446\u0435\u043D\u0442\u0430\u0445",
- CARD_MODAL_SIZE_PERCENT_DESC: "\u0415\u0441\u043B\u0438 \u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0435\u0441\u044C \u043C\u043E\u0431\u0438\u043B\u044C\u043D\u044B\u043C \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u043E\u043C, \u0432\u044B\u0441\u0442\u0430\u0432\u044C\u0442\u0435 100% \u0438\u043B\u0438 \u0443 \u0432\u0430\u0441 \u0431\u0443\u0434\u0443\u0442 \u043E\u0433\u0440\u043E\u043C\u043D\u044B\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F",
- RESET_DEFAULT: "\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E",
- CARD_MODAL_WIDTH_PERCENT: "\u0428\u0438\u0440\u0438\u043D\u0430 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432 \u043F\u0440\u043E\u0446\u0435\u043D\u0442\u0430\u0445",
- RANDOMIZE_CARD_ORDER: "\u0421\u043B\u0443\u0447\u0430\u0439\u043D\u044B\u0439 \u043F\u043E\u0440\u044F\u0434\u043E\u043A \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F?",
- DISABLE_CLOZE_CARDS: "\u0412\u044B\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043A\u0430\u0440\u0442\u044B \u0441 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0430\u043C\u0438 (\u043F\u0440\u0438\u043C\u0435\u0440: [...])?",
- CONVERT_HIGHLIGHTS_TO_CLOZES: "\u041A\u043E\u043D\u0432\u0435\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C ==\u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442== \u0432 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0438 (\u043F\u0440\u0438\u043C\u0435\u0440: [...])?",
- CONVERT_BOLD_TEXT_TO_CLOZES: "\u041A\u043E\u043D\u0432\u0435\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C **\u0436\u0438\u0440\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442** \u0432 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0438 (\u043F\u0440\u0438\u043C\u0435\u0440: [...])?",
- CONVERT_CURLY_BRACKETS_TO_CLOZES: "\u041A\u043E\u043D\u0432\u0435\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C {{\u0444\u0438\u0433\u0443\u0440\u043D\u044B\u0435 \u0441\u043A\u043E\u0431\u043A\u0438}} \u0432 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0438 (\u043F\u0440\u0438\u043C\u0435\u0440: [...])?",
- INLINE_CARDS_SEPARATOR: "\u0420\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C \u0434\u043B\u044F \u0432\u043D\u0443\u0442\u0440\u0438\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0445 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A",
- FIX_SEPARATORS_MANUALLY_WARNING: "\u0412\u043D\u0438\u043C\u0430\u043D\u0438\u0435! \u041F\u043E\u0441\u043B\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u044D\u0442\u043E\u0433\u043E \u0432\u0430\u043C \u043F\u0440\u0438\u0434\u0451\u0442\u0441\u044F \u0432\u0440\u0443\u0447\u043D\u0443\u044E \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044E\u0449\u0438\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438",
- INLINE_REVERSED_CARDS_SEPARATOR: "\u0420\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C \u0434\u043B\u044F \u043E\u0431\u0440\u0430\u0442\u043D\u044B\u0445 \u0432\u043D\u0443\u0442\u0440\u0438\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0445 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A",
- MULTILINE_CARDS_SEPARATOR: "\u0420\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C \u0434\u043B\u044F \u043C\u043D\u043E\u0433\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0445 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A",
- MULTILINE_REVERSED_CARDS_SEPARATOR: "\u0420\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C \u0434\u043B\u044F \u043E\u0431\u0440\u0430\u0442\u043D\u044B\u0445 \u043C\u043D\u043E\u0433\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0445 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A",
- NOTES: "\u0417\u0430\u043C\u0435\u0442\u043A\u0438",
- REVIEW_PANE_ON_STARTUP: "\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043F\u0430\u043D\u0435\u043B\u044C \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F \u043F\u0440\u0438 \u0437\u0430\u043F\u0443\u0441\u043A\u0435 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u044B",
- TAGS_TO_REVIEW: "\u0422\u044D\u0433\u0438 \u0434\u043B\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F",
- TAGS_TO_REVIEW_DESC: "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u044D\u0433\u0438, \u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0435 Enter-\u0430\u043C\u0438 \u0438\u043B\u0438 \u043F\u0440\u043E\u0431\u0435\u043B\u0430\u043C\u0438, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440: #review #tag2 #tag3.",
- OPEN_RANDOM_NOTE: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0441\u043B\u0443\u0447\u0430\u0439\u043D\u0443\u044E \u0437\u0430\u043C\u0435\u0442\u043A\u0443 \u0434\u043B\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F",
- OPEN_RANDOM_NOTE_DESC: "\u0415\u0441\u043B\u0438 \u0432\u044B\u043A\u043B\u044E\u0447\u0438\u0442\u044C, \u0442\u043E \u0437\u0430\u043C\u0435\u0442\u043A\u0438 \u0431\u0443\u0434\u0443\u0442 \u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u044C \u043F\u043E \u0432\u0430\u0436\u043D\u043E\u0441\u0442\u0438 (PageRank).",
- AUTO_NEXT_NOTE: "\u041F\u043E\u0441\u043B\u0435 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u043E\u0442\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0443\u044E \u0437\u0430\u043C\u0435\u0442\u043A\u0443",
- DISABLE_FILE_MENU_REVIEW_OPTIONS: "\u0412\u044B\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0432\u044B\u0431\u043E\u0440 \u0441\u043B\u043E\u0436\u043D\u043E\u0441\u0442\u0438 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F \u0432 \u043C\u0435\u043D\u044E \u0444\u0430\u0439\u043B\u0430, \u0442.\u0435.: \u041F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435: \u041B\u0435\u0433\u043A\u043E \u041D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E \u0421\u043B\u043E\u0436\u043D\u043E",
- DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\u041F\u043E\u0441\u043B\u0435 \u0432\u044B\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u044F \u0432\u044B \u0441\u043C\u043E\u0436\u0435\u0442\u0435 \u043F\u043E\u0432\u0442\u043E\u0440\u044F\u0442\u044C \u043F\u0440\u0438 \u043F\u043E\u043C\u043E\u0449\u0438 \u0445\u043E\u0442\u043A\u0435\u0435\u0432. \u041F\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 Obsidian \u043F\u043E\u0441\u043B\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u044D\u0442\u043E\u0433\u043E.",
- MAX_N_DAYS_REVIEW_QUEUE: "\u041D\u0430\u0438\u0431\u043E\u043B\u044C\u0448\u0435\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0434\u043D\u0435\u0439 \u0434\u043B\u044F \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u043D\u0430 \u043F\u0430\u043D\u0435\u043B\u0438 \u0441\u043F\u0440\u0430\u0432\u0430",
- MIN_ONE_DAY: "\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0434\u043D\u0435\u0439 \u043D\u0435 \u043C\u0435\u043D\u044C\u0448\u0435 1.",
- VALID_NUMBER_WARNING: "\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043F\u043E\u0434\u0445\u043E\u0434\u044F\u0449\u0435\u0435 \u0447\u0438\u0441\u043B\u043E.",
- UI_PREFERENCES: "\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 \u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438",
- INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\u0414\u0435\u0440\u0435\u0432\u044C\u044F \u043A\u043E\u043B\u043E\u0434 \u0434\u043E\u043B\u0436\u043D\u044B \u0438\u0437\u043D\u0430\u0447\u0430\u043B\u044C\u043D\u043E \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C\u0441\u044F \u043A\u0430\u043A \u0440\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044B\u0435",
- INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "\u041E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u0435 \u044D\u0442\u043E\u0442 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440, \u0447\u0442\u043E\u0431\u044B \u0441\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0432\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0435 \u043A\u043E\u043B\u043E\u0434\u044B \u043D\u0430 \u043E\u0434\u043D\u043E\u0439 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0435. \u041F\u043E\u043B\u0435\u0437\u043D\u043E, \u0435\u0441\u043B\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044C \u043A\u0430\u0440\u0442\u044B, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043F\u0440\u0438\u043D\u0430\u0434\u043B\u0435\u0436\u0430\u0442 \u043C\u043D\u043E\u0433\u0438\u043C \u043A\u043E\u043B\u043E\u0434\u0430\u043C \u0432 \u043E\u0434\u043D\u043E\u043C \u0444\u0430\u0439\u043B\u0435.",
- ALGORITHM: "\u0410\u043B\u0433\u043E\u0440\u0438\u0442\u043C",
- CHECK_ALGORITHM_WIKI: '\u0417\u0430 \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0439 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0435\u0439 \u043E\u0431\u0440\u0430\u0449\u0430\u0439\u0442\u0435\u0441\u044C \u043A \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C\u0430.',
- BASE_EASE: "\u0411\u0430\u0437\u043E\u0432\u0430\u044F \u041B\u0451\u0433\u043A\u043E\u0441\u0442\u044C",
- BASE_EASE_DESC: "\u043C\u0438\u043D\u0438\u043C\u0443\u043C = 130, \u043F\u0440\u0435\u0434\u043F\u043E\u0447\u0442\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u043E\u043A\u043E\u043B\u043E 250.",
- BASE_EASE_MIN_WARNING: "\u041B\u0451\u0433\u043A\u043E\u0441\u0442\u044C \u0434\u043E\u043B\u0436\u043D\u0430 \u0431\u044B\u0442\u044C \u043C\u0438\u043D\u0438\u043C\u0443\u043C 130.",
- LAPSE_INTERVAL_CHANGE: "\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435 \u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043A\u0430 \u043A\u043E\u0433\u0434\u0430 \u0432\u044B \u043E\u0442\u0432\u0435\u0447\u0430\u0435\u0442\u0435 \u0421\u043B\u043E\u0436\u043D\u043E \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438/\u0437\u0430\u043C\u0435\u0442\u043A\u0438",
- LAPSE_INTERVAL_CHANGE_DESC: "\u043D\u043E\u0432\u044B\u0439\u041F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A = \u0441\u0442\u0430\u0440\u044B\u0439\u041F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A * \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435\u041F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043A\u0430 / 100.",
- EASY_BONUS: "\u041B\u0435\u0433\u043A\u043E: \u0431\u043E\u043D\u0443\u0441",
- EASY_BONUS_DESC: "\u0411\u043E\u043D\u0443\u0441 \u0437\u0430 \u041B\u0435\u0433\u043A\u043E \u043F\u043E\u0437\u0432\u043E\u043B\u044F\u0435\u0442 \u0432\u0430\u043C \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0440\u0430\u0437\u043D\u0438\u0446\u0443 \u0432 \u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043A\u0430\u0445 \u043C\u0435\u0436\u0434\u0443 \u043E\u0442\u0432\u0435\u0442\u0430\u043C\u0438 \u0425\u043E\u0440\u043E\u0448\u043E \u0438 \u041B\u0435\u0433\u043A\u043E \u043D\u0430 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0435/\u0437\u0430\u043C\u0435\u0442\u043A\u0435 (\u043C\u0438\u043D. = 100%).",
- EASY_BONUS_MIN_WARNING: "\u0411\u043E\u043D\u0443\u0441 \u0437\u0430 \u041B\u0435\u0433\u043A\u043E \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435 \u043C\u0435\u043D\u044C\u0448\u0435 100.",
- MAX_INTERVAL: "Maximum interval in days",
- MAX_INTERVAL_DESC: "\u041F\u043E\u0437\u0432\u043E\u043B\u044F\u0435\u0442 \u0432\u0430\u043C \u0443\u0441\u0442\u0430\u043D\u0430\u0432\u043B\u0438\u0432\u0430\u0442\u044C \u0432\u0435\u0440\u0445\u043D\u044E\u044E \u0433\u0440\u0430\u043D\u0438\u0446\u0443 \u043D\u0430 \u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A (\u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E = 100 \u043B\u0435\u0442).",
- MAX_INTERVAL_MIN_WARNING: "\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435 \u043C\u0435\u043D\u044C\u0448\u0435 1.",
- MAX_LINK_CONTRIB: "\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0432\u043A\u043B\u0430\u0434 \u0441\u0432\u044F\u0437\u0438 (\u0441\u0441\u044B\u043B\u043A\u0438)",
- MAX_LINK_CONTRIB_DESC: "\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0432\u043A\u043B\u0430\u0434 \u0432\u0437\u0432\u0435\u0448\u0435\u043D\u043D\u043E\u0439 \u041B\u0451\u0433\u043A\u043E\u0441\u0442\u0438 \u0441\u0432\u044F\u0437\u0430\u043D\u043D\u044B\u0445 \u0437\u0430\u043C\u0435\u0442\u043E\u043A \u0432 \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u0443\u044E \u041B\u0451\u0433\u043A\u043E\u0441\u0442\u044C.",
- LOGGING: "\u0412\u0435\u0434\u0435\u043D\u0438\u0435 \u043B\u043E\u0433\u0430",
- DISPLAY_DEBUG_INFO: "\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u043E\u0442\u043B\u0430\u0434\u043E\u0447\u043D\u0443\u044E \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044E \u0432 \u043A\u043E\u043D\u0441\u043E\u043B\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u0430 (developer console)?",
- // sidebar.ts
- NOTES_REVIEW_QUEUE: "\u041E\u0447\u0435\u0440\u0435\u0434\u044C \u0437\u0430\u043C\u0435\u0442\u043E\u043A \u043D\u0430 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435",
- CLOSE: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C",
- NEW: "\u041D\u043E\u0432\u044B\u0435",
- YESTERDAY: "\u0412\u0447\u0435\u0440\u0430\u0448\u043D\u0438\u0435",
- TODAY: "\u0421\u0435\u0433\u043E\u0434\u043D\u044F\u0448\u043D\u0438\u0435",
- TOMORROW: "\u0417\u0430\u0432\u0442\u0440\u0430\u0448\u043D\u0438\u0435",
- // stats-modal.tsx
- STATS_TITLE: "\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0430",
- MONTH: "\u041C\u0435\u0441\u044F\u0446",
- QUARTER: "\u0427\u0435\u0442\u0432\u0435\u0440\u0442\u044C",
- YEAR: "\u0413\u043E\u0434",
- LIFETIME: "\u0412\u0441\u0451 \u0432\u0440\u0435\u043C\u044F",
- FORECAST: "\u041F\u0440\u043E\u0433\u043D\u043E\u0437",
- FORECAST_DESC: "\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A \u043F\u0440\u0435\u0434\u0441\u0442\u043E\u044F\u0449\u0438\u0445 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043C",
- SCHEDULED: "\u0417\u0430\u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u043E",
- DAYS: "\u0414\u043D\u0435\u0439",
- NUMBER_OF_CARDS: "\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A",
- REVIEWS_PER_DAY: "\u0421\u0440\u0435\u0434\u043D\u0435\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E: ${avg} \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0439 \u0432 \u0434\u0435\u043D\u044C",
- //!!!
- INTERVALS: "\u0418\u043D\u0442\u0435\u0440\u0432\u0430\u043B\u044B",
- INTERVALS_DESC: "\u041F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043A\u0438 \u0432\u0440\u0435\u043C\u0435\u043D\u0438 \u0434\u043E \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u0433\u043E \u043F\u043E\u043A\u0430\u0437\u0430 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F",
- COUNT: "\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E",
- INTERVALS_SUMMARY: "\u0421\u0440\u0435\u0434\u043D\u0438\u0439 \u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A: ${avg}, \u0421\u0430\u043C\u044B\u0439 \u0434\u043B\u0438\u043D\u043D\u044B\u0439 \u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A: ${longest}",
- EASES: "\u041B\u0451\u0433\u043A\u043E\u0441\u0442\u044C (\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432 \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C\u0435, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u0432\u043B\u0438\u044F\u0435\u0442 \u043D\u0430 \u043F\u0440\u0438\u043E\u0440\u0438\u0442\u0435\u0442 \u0438 \u0432\u0440\u0435\u043C\u044F \u043F\u043E\u043A\u0430\u0437\u0430 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A) \n (\u043E\u0442 \u0430\u043D\u0433\u043B. ease, \u0441\u043C. \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C\u0430)",
- EASES_SUMMARY: "\u0421\u0440\u0435\u0434\u043D\u0435\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u041B\u0451\u0433\u043A\u043E\u0441\u0442\u0438: ${avgEase}",
- CARD_TYPES: "\u0422\u0438\u043F\u044B \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A",
- CARD_TYPES_DESC: "\u0412\u043A\u043B\u044E\u0447\u0430\u044F \u0441\u043F\u0440\u044F\u0442\u0430\u043D\u043D\u044B\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438, \u0435\u0441\u043B\u0438 \u0442\u0430\u043A\u0438\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044E\u0442.",
- CARD_TYPE_NEW: "\u041D\u043E\u0432\u044B\u0445",
- CARD_TYPE_YOUNG: "\u041C\u043E\u043B\u043E\u0434\u044B\u0445",
- CARD_TYPE_MATURE: "\u0412\u0437\u0440\u043E\u0441\u043B\u044B\u0445",
- CARD_TYPES_SUMMARY: "\u0412\u0441\u0435\u0433\u043E \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A: ${totalCardsCount}"
-};
-
-// src/lang/locale/ta.ts
-var ta_default = {};
-
-// src/lang/locale/te.ts
-var te_default = {};
-
-// src/lang/locale/th.ts
-var th_default = {};
-
-// src/lang/locale/tr.ts
-var tr_default = {};
-
-// src/lang/locale/uk.ts
-var uk_default = {};
-
-// src/lang/locale/ur.ts
-var ur_default = {};
-
-// src/lang/locale/vi.ts
-var vi_default = {};
-
-// src/lang/locale/zh-cn.ts
-var zh_cn_default = {
- // flashcard-modal.tsx
- DECKS: "\u5361\u7EC4",
- DUE_CARDS: "\u5230\u671F\u5361\u7247",
- NEW_CARDS: "\u65B0\u5361\u7247",
- TOTAL_CARDS: "\u5168\u90E8\u5361\u7247",
- BACK: "\u8FD4\u56DE",
- SKIP: "\u7565\u8FC7",
- EDIT_CARD: "\u7F16\u8F91\u5361\u7247",
- RESET_CARD_PROGRESS: "\u91CD\u7F6E\u5361\u7247",
- HARD: "\u8F83\u96BE",
- GOOD: "\u8BB0\u5F97",
- EASY: "\u7B80\u5355",
- SHOW_ANSWER: "\u663E\u793A\u7B54\u6848",
- CARD_PROGRESS_RESET: "\u5361\u7247\u5DF2\u88AB\u91CD\u7F6E\u3002",
- SAVE: "\u50A8\u5B58",
- CANCEL: "\u53D6\u6D88",
- NO_INPUT: "\u6CA1\u6709\u63D0\u4F9B\u8F93\u5165\u3002",
- CURRENT_EASE_HELP_TEXT: "\u76EE\u524D\u638C\u63E1\u7A0B\u5EA6\uFF1A",
- CURRENT_INTERVAL_HELP_TEXT: "\u76EE\u524D\u95F4\u9694\uFF1A",
- CARD_GENERATED_FROM: "\u751F\u6210\u81EA\uFF1A${notePath}",
- // main.ts
- OPEN_NOTE_FOR_REVIEW: "\u6253\u5F00\u4E00\u4E2A\u7B14\u8BB0\u5F00\u59CB\u590D\u4E60",
- REVIEW_CARDS: "\u590D\u4E60\u5361\u7247",
- REVIEW_EASY_FILE_MENU: "\u590D\u4E60\uFF1A\u7B80\u5355",
- REVIEW_GOOD_FILE_MENU: "\u590D\u4E60\uFF1A\u8BB0\u5F97",
- REVIEW_HARD_FILE_MENU: "\u590D\u4E60\uFF1A\u8F83\u96BE",
- REVIEW_NOTE_EASY_CMD: "\u6807\u8BB0\u4E3A\u201C\u7B80\u5355\u201D",
- REVIEW_NOTE_GOOD_CMD: "\u6807\u8BB0\u4E3A\u201C\u8BB0\u5F97\u201D",
- REVIEW_NOTE_HARD_CMD: "\u6807\u8BB0\u4E3A\u201C\u8F83\u96BE\u201D",
- REVIEW_ALL_CARDS: "\u590D\u4E60\u6240\u6709\u7B14\u8BB0\u4E2D\u7684\u5361\u7247",
- CRAM_ALL_CARDS: "\u9009\u62E9\u8981\u96C6\u4E2D\u590D\u4E60\u7684\u5361\u7EC4",
- REVIEW_CARDS_IN_NOTE: "\u590D\u4E60\u6B64\u7B14\u8BB0\u4E2D\u7684\u5361\u7247",
- CRAM_CARDS_IN_NOTE: "\u96C6\u4E2D\u590D\u4E60\u6B64\u7B14\u8BB0\u4E2D\u7684\u5361\u7247",
- VIEW_STATS: "\u67E5\u770B\u6570\u636E",
- STATUS_BAR: "\u590D\u4E60: ${dueNotesCount} \u7B14\u8BB0, ${dueFlashcardsCount} \u5361\u7247\u5DF2\u5230\u671F",
- SYNC_TIME_TAKEN: "\u540C\u6B65\u65F6\u95F4 ${t}ms",
- NOTE_IN_IGNORED_FOLDER: "\u7B14\u8BB0\u4FDD\u5B58\u5728\u5DF2\u88AB\u5FFD\u7565\u7684\u8DEF\u5F84\u4E2D\uFF08\u68C0\u67E5\u8BBE\u7F6E\u9009\u9879\uFF09\u3002",
- PLEASE_TAG_NOTE: "\u8BF7\u5C06\u9700\u8981\u590D\u4E60\u7684\u7B14\u8BB0\u4E2D\u52A0\u5165\u6B63\u786E\u7684\u6807\u7B7E\uFF08\u68C0\u67E5\u8BBE\u7F6E\u9009\u9879\uFF09\u3002",
- RESPONSE_RECEIVED: "\u53CD\u9988\u5DF2\u6536\u5230",
- NO_DECK_EXISTS: "\u6CA1\u6709 ${deckName} \u5361\u7EC4",
- ALL_CAUGHT_UP: "\u90FD\u590D\u4E60\u5B8C\u5566\uFF0C\u4F60\u771F\u68D2\uFF01",
- // scheduling.ts
- DAYS_STR_IVL: "${interval}\u5929",
- MONTHS_STR_IVL: "${interval}\u6708",
- YEARS_STR_IVL: "${interval}\u5E74",
- DAYS_STR_IVL_MOBILE: "${interval}\u5929",
- MONTHS_STR_IVL_MOBILE: "${interval}\u6708",
- YEARS_STR_IVL_MOBILE: "${interval}\u5E74",
- // settings.ts
- SETTINGS_HEADER: "\u95F4\u9694\u91CD\u590D\u63D2\u4EF6 - \u8BBE\u7F6E",
- CHECK_WIKI: '\u4E86\u89E3\u66F4\u591A, \u8BF7\u70B9\u51FBwiki.',
- FOLDERS_TO_IGNORE: "\u5FFD\u7565\u6B64\u6587\u4EF6\u5939",
- FOLDERS_TO_IGNORE_DESC: "\u8F93\u5165\u6587\u4EF6\u5939\u8DEF\u5F84\uFF0C\u7528\u65B0\u5EFA\u884C\u5206\u9694\uFF0C\u4F8B\u5982\uFF1ATemplates Meta/Scripts",
- FLASHCARDS: "\u5361\u7247",
- FLASHCARD_EASY_LABEL: "\u201C\u7B80\u5355\u201D\u6309\u94AE\u6587\u672C",
- FLASHCARD_GOOD_LABEL: "\u201C\u8BB0\u5F97\u201D\u6309\u94AE\u6587\u672C",
- FLASHCARD_HARD_LABEL: "\u201C\u8F83\u96BE\u201D\u6309\u94AE\u6587\u672C",
- FLASHCARD_EASY_DESC: "\u81EA\u5B9A\u4E49\u201C\u7B80\u5355\u201D\u6309\u94AE\u7684\u6807\u7B7E",
- FLASHCARD_GOOD_DESC: "\u81EA\u5B9A\u4E49\u201C\u8BB0\u5F97\u201D\u6309\u94AE\u7684\u6807\u7B7E",
- FLASHCARD_HARD_DESC: "\u81EA\u5B9A\u4E49\u201C\u8F83\u96BE\u201D\u6309\u94AE\u7684\u6807\u7B7E",
- FLASHCARD_TAGS: "\u5361\u7247\u6807\u7B7E",
- FLASHCARD_TAGS_DESC: "\u8F93\u5165\u6807\u7B7E\uFF0C\u7528\u7A7A\u683C\u6216\u65B0\u5EFA\u884C\u5206\u9694\uFF0C\u4F8B\u5982\uFF1A#flashcards #deck2 #deck3.",
- CONVERT_FOLDERS_TO_DECKS: "\u662F\u5426\u5C06\u6587\u4EF6\u5939\u5185\u5BB9\u8F6C\u6362\u4E3A\u5361\u7247\u7EC4\u548C\u5B50\u5361\u7247\u7EC4\uFF1F",
- CONVERT_FOLDERS_TO_DECKS_DESC: "\u6B64\u9009\u9879\u4E3A\u5361\u7247\u6807\u7B7E\u9009\u9879\u7684\u66FF\u4EE3\u9009\u9879\u3002",
- INLINE_SCHEDULING_COMMENTS: "\u662F\u5426\u5C06\u8BA1\u5212\u91CD\u590D\u65F6\u95F4\u4FDD\u5B58\u5728\u5361\u7247\u6700\u540E\u4E00\u884C\u7684\u540C\u4E00\u884C\uFF1F",
- INLINE_SCHEDULING_COMMENTS_DESC: "HTML\u6CE8\u91CA\u4E0D\u518D\u7834\u574F\u5217\u8868\u683C\u5F0F",
- BURY_SIBLINGS_TILL_NEXT_DAY: "\u5C06\u5173\u8054\u5361\u7247\u9690\u85CF\u81F3\u4E0B\u4E00\u5929\uFF1F",
- BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "\u5173\u8054\u5361\u7247\u662F\u6765\u81EA\u540C\u4E00\u5361\u7247\u7684\u4E0D\u540C\u5F62\u5F0F\uFF0C \u4F8B\u5982\uFF1A\u5B8C\u5F62\u586B\u7A7A\u5361\u7247",
- SHOW_CARD_CONTEXT: "\u5728\u5361\u7247\u4E2D\u663E\u793A\u4E0A\u4E0B\u6587\uFF1F",
- SHOW_CARD_CONTEXT_DESC: "\u4F8B\u5982\uFF1A\u6807\u9898 > \u526F\u6807\u9898 > \u5C0F\u6807\u9898 > ... > \u5C0F\u6807\u9898",
- CARD_MODAL_HEIGHT_PERCENT: "\u5361\u7247\u9AD8\u5EA6\u767E\u5206\u6BD4",
- CARD_MODAL_SIZE_PERCENT_DESC: "\u8BF7\u5728\u79FB\u52A8\u7AEF\u4F7F\u7528\u5E76\u9700\u8981\u6D4F\u89C8\u8F83\u5927\u56FE\u7247\u65F6\u8BBE\u4E3A100%",
- RESET_DEFAULT: "\u91CD\u7F6E\u4E3A\u9ED8\u8BA4",
- CARD_MODAL_WIDTH_PERCENT: "\u5361\u7247\u5BBD\u5EA6\u767E\u5206\u6BD4",
- RANDOMIZE_CARD_ORDER: "\u590D\u4E60\u65F6\u968F\u673A\u663E\u793A\u5361\u7247\uFF1F",
- DISABLE_CLOZE_CARDS: "\u4E0D\u8FDB\u884C\u5B8C\u5F62\u586B\u7A7A\uFF1F",
- CONVERT_HIGHLIGHTS_TO_CLOZES: "\u5C06 ==\u9AD8\u4EAE== \u8F6C\u6362\u4E3A\u5B8C\u5F62\u586B\u7A7A\uFF1F",
- CONVERT_BOLD_TEXT_TO_CLOZES: "\u5C06 **\u7C97\u4F53** \u8F6C\u6362\u4E3A\u5B8C\u5F62\u586B\u7A7A\uFF1F",
- CONVERT_CURLY_BRACKETS_TO_CLOZES: "\u5C06 {{\u5927\u62EC\u53F7}} \u8F6C\u6362\u4E3A\u5B8C\u5F62\u586B\u7A7A\uFF1F",
- INLINE_CARDS_SEPARATOR: "\u5355\u884C\u5361\u7247\u7684\u5206\u9694\u7B26",
- FIX_SEPARATORS_MANUALLY_WARNING: "\u6CE8\u610F\uFF1A\u66F4\u6539\u6B64\u9009\u9879\u540E\u4F60\u5C06\u9700\u8981\u81EA\u884C\u66F4\u6539\u5DF2\u5B58\u5728\u5361\u7247\u7684\u5206\u9694\u7B26\u3002",
- INLINE_REVERSED_CARDS_SEPARATOR: "\u5355\u884C\u7FFB\u8F6C\u5361\u7247\u7684\u5206\u9694\u7B26",
- MULTILINE_CARDS_SEPARATOR: "\u591A\u884C\u5361\u7247\u7684\u5206\u9694\u7B26",
- MULTILINE_REVERSED_CARDS_SEPARATOR: "\u591A\u884C\u7FFB\u8F6C\u5361\u7247\u7684\u5206\u9694\u7B26",
- NOTES: "\u7B14\u8BB0",
- REVIEW_PANE_ON_STARTUP: "\u542F\u52A8\u65F6\u5F00\u542F\u7B14\u8BB0\u590D\u4E60\u7A97\u683C",
- TAGS_TO_REVIEW: "\u590D\u4E60\u6807\u7B7E",
- TAGS_TO_REVIEW_DESC: "\u8F93\u5165\u6807\u7B7E\uFF0C\u7528\u7A7A\u683C\u6216\u65B0\u5EFA\u884C\u5206\u9694\uFF0C\u4F8B\u5982\uFF1A#review #tag2 #tag3.",
- OPEN_RANDOM_NOTE: "\u590D\u4E60\u968F\u673A\u7B14\u8BB0",
- OPEN_RANDOM_NOTE_DESC: "\u5173\u95ED\u6B64\u9009\u9879\uFF0C\u7B14\u8BB0\u5C06\u4EE5\u91CD\u8981\u5EA6(PageRank)\u6392\u5E8F\u3002",
- AUTO_NEXT_NOTE: "\u590D\u4E60\u540E\u81EA\u52A8\u6253\u5F00\u4E0B\u4E00\u4E2A\u7B14\u8BB0",
- DISABLE_FILE_MENU_REVIEW_OPTIONS: "\u5173\u95ED\u6587\u4EF6\u9009\u5355\u4E2D\u7684\u590D\u4E60\u9009\u9879 \u4F8B\u5982\uFF1A\u590D\u4E60\uFF1A\u7B80\u5355 \u8BB0\u5F97 \u8F83\u96BE",
- DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\u5173\u95ED\u6B64\u9009\u9879\u540E\u4F60\u53EF\u4EE5\u4F7F\u7528\u5FEB\u6377\u952E\u5F00\u59CB\u590D\u4E60\u3002\u91CD\u65B0\u542F\u52A8Obsidian\u4F7F\u672C\u9009\u9879\u751F\u6548\u3002",
- MAX_N_DAYS_REVIEW_QUEUE: "\u53F3\u8FB9\u680F\u4E2D\u663E\u793A\u7684\u6700\u5927\u5929\u6570",
- MIN_ONE_DAY: "\u5929\u6570\u6700\u5C0F\u503C\u4E3A1",
- VALID_NUMBER_WARNING: "\u8BF7\u8F93\u5165\u6709\u6548\u7684\u6570\u5B57\u3002",
- UI_PREFERENCES: "\u7528\u6237\u754C\u9762\u9996\u9009\u9879",
- INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\u7532\u677F\u6811\u6700\u521D\u5E94\u663E\u793A\u4E3A\u5C55\u5F00",
- INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "\u5173\u95ED\u6B64\u9009\u9879\u53EF\u6298\u53E0\u540C\u4E00\u5F20\u5361\u7247\u4E2D\u7684\u5D4C\u5957\u724C\u7EC4\u3002\u5982\u679C\u60A8\u7684\u5361\u7247\u5C5E\u4E8E\u540C\u4E00\u6587\u4EF6\u4E2D\u7684\u8BB8\u591A\u5957\u724C\uFF0C\u5219\u5F88\u6709\u7528\u3002",
- ALGORITHM: "\u7B97\u6CD5",
- CHECK_ALGORITHM_WIKI: '\u4E86\u89E3\u66F4\u591A, \u8BF7\u70B9\u51FB\u7B97\u6CD5\u5B9E\u73B0.',
- BASE_EASE: "\u57FA\u7840\u638C\u63E1\u7A0B\u5EA6",
- BASE_EASE_DESC: "\u6700\u5C0F\u503C130\uFF0C\u63A8\u8350\u503C\u7EA6250.",
- BASE_EASE_MIN_WARNING: "\u57FA\u7840\u638C\u63E1\u7A0B\u5EA6\u7684\u6700\u5C0F\u503C\u4E3A130\u3002",
- LAPSE_INTERVAL_CHANGE: "\u5C06\u590D\u4E60\u65F6\u6807\u6CE8\u4E3A\u201C\u8F83\u96BE\u201D\u7684\u5361\u7247\u6216\u7B14\u8BB0\u590D\u4E60\u95F4\u9694\u7F29\u77ED",
- LAPSE_INTERVAL_CHANGE_DESC: "\u65B0\u590D\u4E60\u95F4\u9694 = \u539F\u590D\u4E60\u95F4\u9694 * \u95F4\u9694\u6539\u53D8\u7CFB\u6570 / 100.",
- EASY_BONUS: "\u7B80\u5355\u5956\u52B1",
- EASY_BONUS_DESC: "\u7B80\u5355\u5956\u52B1\u8BBE\u5B9A\u201C\u8BB0\u5F97\u201D\u548C\u201C\u7B80\u5355\u201D\u5361\u7247\u6216\u7B14\u8BB0\u7684\u590D\u4E60\u95F4\u9694\u5DEE\u8DDD\uFF08\u6700\u5C0F\u503C100%\uFF09\u3002",
- EASY_BONUS_MIN_WARNING: "\u7B80\u5355\u5956\u52B1\u81F3\u5C11\u4E3A100\u3002",
- MAX_INTERVAL: "\u6700\u5927\u95F4\u9694\uFF08\u5929\uFF09",
- MAX_INTERVAL_DESC: "\u8BBE\u5B9A\u590D\u4E60\u7684\u6700\u5927\u95F4\u9694\u65F6\u95F4\uFF08\u9ED8\u8BA4\u503C100\u5E74\uFF09\u3002",
- MAX_INTERVAL_MIN_WARNING: "\u6700\u5927\u95F4\u9694\u81F3\u5C11\u4E3A1\u5929",
- MAX_LINK_CONTRIB: "\u6700\u5927\u94FE\u63A5\u6536\u76CA",
- MAX_LINK_CONTRIB_DESC: "\u94FE\u63A5\u7B14\u8BB0\u7684\u52A0\u6743\u638C\u63E1\u7A0B\u5EA6\u5BF9\u539F\u59CB\u638C\u63E1\u7A0B\u5EA6\u7684\u6700\u5927\u8D21\u732E\u3002",
- LOGGING: "\u8BB0\u5F55\u4E2D",
- DISPLAY_DEBUG_INFO: "\u5728\u5F00\u53D1\u8005\u63A7\u5236\u53F0\u4E2D\u663E\u793A\u8C03\u8BD5\u4FE1\u606F\uFF1F",
- // sidebar.ts
- NOTES_REVIEW_QUEUE: "\u7B14\u8BB0\u590D\u4E60\u5E8F\u5217",
- CLOSE: "\u4E34\u8FD1",
- NEW: "\u65B0",
- YESTERDAY: "\u6628\u5929",
- TODAY: "\u4ECA\u5929",
- TOMORROW: "\u660E\u5929",
- // stats-modal.tsx
- STATS_TITLE: "\u6570\u636E",
- MONTH: "\u6708",
- QUARTER: "\u5B63",
- YEAR: "\u5E74",
- LIFETIME: "\u5168\u90E8",
- FORECAST: "\u9884\u671F",
- FORECAST_DESC: "\u5C06\u8981\u5230\u671F\u7684\u5361\u7247\u6570\u91CF",
- SCHEDULED: "\u5DF2\u6392\u671F",
- DAYS: "\u5929",
- NUMBER_OF_CARDS: "\u5361\u7247\u6570\u91CF",
- REVIEWS_PER_DAY: "\u5E73\u5747: \u590D\u4E60${avg} /\u5929",
- INTERVALS: "\u95F4\u9694",
- INTERVALS_DESC: "\u5230\u4E0B\u4E00\u6B21\u590D\u4E60\u7684\u65F6\u95F4\u95F4\u9694",
- COUNT: "\u8BA1\u6570",
- INTERVALS_SUMMARY: "\u5E73\u5747\u95F4\u9694\u65F6\u95F4: ${avg}, \u6700\u957F\u95F4\u9694\u65F6\u95F4: ${longest}",
- EASES: "\u638C\u63E1\u7A0B\u5EA6",
- EASES_SUMMARY: "\u5E73\u5747\u638C\u63E1\u7A0B\u5EA6: ${avgEase}",
- CARD_TYPES: "\u5361\u7247\u7C7B\u578B",
- CARD_TYPES_DESC: "\u5982\u6709\uFF0C\u5C06\u663E\u793A\u9690\u85CF\u7684\u5361\u7247",
- CARD_TYPE_NEW: "\u65B0",
- CARD_TYPE_YOUNG: "\u8F83\u65B0",
- CARD_TYPE_MATURE: "\u719F\u6089",
- CARD_TYPES_SUMMARY: "\u603B\u5361\u7247\u6570: ${totalCardsCount}"
-};
-
-// src/lang/locale/zh-tw.ts
-var zh_tw_default = {
- // flashcard-modal.tsx
- DECKS: "\u724C\u7D44",
- DUE_CARDS: "\u5230\u671F\u5361\u7247",
- NEW_CARDS: "\u65B0\u5361\u7247",
- TOTAL_CARDS: "\u5168\u90E8\u5361\u7247",
- BACK: "\u8FD4\u56DE",
- SKIP: "\u7565\u904E",
- EDIT_CARD: "\u7DE8\u8F2F\u5361\u7247",
- RESET_CARD_PROGRESS: "\u91CD\u7F6E\u5361\u7247",
- HARD: "\u8F03\u96E3",
- GOOD: "\u8A18\u5F97",
- EASY: "\u7C21\u55AE",
- SHOW_ANSWER: "\u986F\u793A\u7B54\u6848",
- CARD_PROGRESS_RESET: "\u5361\u7247\u5DF2\u88AB\u91CD\u7F6E\u3002",
- SAVE: "\u5132\u5B58",
- CANCEL: "\u53D6\u6D88",
- NO_INPUT: "\u6C92\u6709\u63D0\u4F9B\u8F38\u5165\u3002",
- CURRENT_EASE_HELP_TEXT: "\u76EE\u524D\u638C\u63E1\u7A0B\u5EA6\uFF1A",
- CURRENT_INTERVAL_HELP_TEXT: "\u76EE\u524D\u9593\u9694\u6642\u9593\uFF1A",
- CARD_GENERATED_FROM: "\u751F\u6210\u81EA\uFF1A${notePath}",
- // main.ts
- OPEN_NOTE_FOR_REVIEW: "\u6253\u958B\u4E00\u500B\u7B46\u8A18\u958B\u59CB\u5FA9\u7FD2",
- REVIEW_CARDS: "\u5FA9\u7FD2\u5361\u7247",
- REVIEW_EASY_FILE_MENU: "\u5FA9\u7FD2\uFF1A\u7C21\u55AE",
- REVIEW_GOOD_FILE_MENU: "\u5FA9\u7FD2\uFF1A\u8A18\u5F97",
- REVIEW_HARD_FILE_MENU: "\u5FA9\u7FD2\uFF1A\u8F03\u96E3",
- REVIEW_NOTE_EASY_CMD: "\u6A19\u8A18\u70BA\u300C\u7C21\u55AE\u300D",
- REVIEW_NOTE_GOOD_CMD: "\u6A19\u8A18\u70BA\u300C\u8A18\u5F97\u300D",
- REVIEW_NOTE_HARD_CMD: "\u6A19\u8A18\u70BA\u300C\u8F03\u96E3\u300D",
- REVIEW_CARDS_IN_NOTE: "\u5FA9\u7FD2\u6B64\u7B46\u8A18\u4E2D\u7684\u5361\u7247",
- CRAM_ALL_CARDS: "\u9078\u64C7\u8981\u4E0D\u8A08\u96E3\u6613\u5EA6\u5FA9\u7FD2\u7684\u724C\u7D44",
- REVIEW_ALL_CARDS: "\u5FA9\u7FD2\u6240\u6709\u7B46\u8A18\u4E2D\u7684\u5361\u7247",
- CRAM_CARDS_IN_NOTE: "\u4E0D\u8A08\u96E3\u6613\u5EA6\u5FA9\u7FD2\u6B64\u7B46\u8A18\u4E2D\u7684\u5361\u7247",
- VIEW_STATS: "\u6AA2\u8996\u6578\u64DA",
- STATUS_BAR: "\u5FA9\u7FD2: ${dueNotesCount} \u7B46\u8A18, ${dueFlashcardsCount} \u5361\u7247\u5DF2\u5230\u671F",
- SYNC_TIME_TAKEN: "\u540C\u6B65\u6642\u9593 ${t}ms",
- NOTE_IN_IGNORED_FOLDER: "\u7B46\u8A18\u5132\u5B58\u5728\u5DF2\u88AB\u5FFD\u7565\u7684\u8DEF\u5F91\u4E2D\uFF08\u6AA2\u67E5\u8A2D\u5B9A\u9078\u9805\uFF09\u3002",
- PLEASE_TAG_NOTE: "\u8ACB\u5C07\u9700\u8981\u5FA9\u7FD2\u7684\u7B46\u8A18\u4E2D\u52A0\u5165\u6B63\u78BA\u7684\u6A19\u7C64\uFF08\u6AA2\u67E5\u8A2D\u5B9A\u9078\u9805\uFF09\u3002",
- RESPONSE_RECEIVED: "\u56DE\u994B\u5DF2\u6536\u5230",
- NO_DECK_EXISTS: "\u6C92\u6709 ${deckName} \u724C\u7D44",
- ALL_CAUGHT_UP: "\u90FD\u5FA9\u7FD2\u5B8C\u5566\uFF0C\u4F60\u771F\u68D2\uFF01",
- // scheduling.ts
- DAYS_STR_IVL: "${interval}\u5929",
- MONTHS_STR_IVL: "${interval}\u6708",
- YEARS_STR_IVL: "${interval}\u5E74",
- DAYS_STR_IVL_MOBILE: "${interval}\u5929",
- MONTHS_STR_IVL_MOBILE: "${interval}\u6708",
- YEARS_STR_IVL_MOBILE: "${interval}\u5E74",
- // settings.ts
- SETTINGS_HEADER: "\u9593\u9694\u91CD\u8907\u5916\u639B - \u8A2D\u5B9A",
- CHECK_WIKI: '\u77AD\u89E3\u66F4\u591A, \u8ACB\u9EDE\u9078wiki.',
- FOLDERS_TO_IGNORE: "\u5FFD\u7565\u6B64\u8CC7\u6599\u593E",
- FOLDERS_TO_IGNORE_DESC: "\u8F38\u5165\u8CC7\u6599\u593E\u8DEF\u5F91\uFF08\u7528\u63DB\u884C\u5B57\u5143\u5206\u9694\uFF09\uFF0C\u4F8B\u5982\uFF1ATemplates Meta/Scripts",
- FLASHCARDS: "\u5361\u7247",
- FLASHCARD_EASY_LABEL: "\u7C21\u55AE\u6309\u9215\u6587\u5B57",
- FLASHCARD_GOOD_LABEL: "\u8A18\u5F97\u6309\u9215\u6587\u5B57",
- FLASHCARD_HARD_LABEL: "\u8F03\u96E3\u6309\u9215\u6587\u5B57",
- FLASHCARD_EASY_DESC: "\u81EA\u8A02\u300C\u7C21\u55AE\u300D\u6309\u9215\u7684\u6A19\u7C64",
- FLASHCARD_GOOD_DESC: "\u81EA\u8A02\u300C\u8A18\u5F97\u300D\u6309\u9215\u7684\u6A19\u7C64",
- FLASHCARD_HARD_DESC: "\u81EA\u8A02\u300C\u8F03\u96E3\u300D\u6309\u9215\u7684\u6A19\u7C64",
- FLASHCARD_TAGS: "\u5361\u7247\u6A19\u7C64",
- FLASHCARD_TAGS_DESC: "\u8F38\u5165\u6A19\u7C64\uFF08\u7528\u7A7A\u767D\u6216\u63DB\u884C\u5B57\u5143\u5206\u9694\uFF09\uFF0C\u4F8B\u5982\uFF1A#flashcards #deck2 #deck3.",
- CONVERT_FOLDERS_TO_DECKS: "\u662F\u5426\u5C07\u8CC7\u6599\u593E\u5167\u5BB9\u8F49\u63DB\u70BA\u724C\u7D44\u548C\u5B50\u724C\u7D44\uFF1F",
- CONVERT_FOLDERS_TO_DECKS_DESC: "\u6B64\u9078\u9805\u70BA\u5361\u7247\u6A19\u7C64\u9078\u9805\u7684\u66FF\u4EE3\u9078\u9805\u3002",
- INLINE_SCHEDULING_COMMENTS: "\u662F\u5426\u5C07\u8A08\u5283\u91CD\u8907\u6642\u9593\u5132\u5B58\u5728\u5361\u7247\u6700\u5F8C\u4E00\u884C\u7684\u540C\u4E00\u884C\uFF1F",
- INLINE_SCHEDULING_COMMENTS_DESC: "\u52FE\u9078\u5F8CHTML\u8A3B\u89E3\u4E0D\u6703\u7834\u58DE\u5217\u8868\u683C\u5F0F\u554F\u984C\u3002",
- BURY_SIBLINGS_TILL_NEXT_DAY: "\u5C07\u53CD\u8F49\u5361\u7247\u96B1\u85CF\u81F3\u4E0B\u4E00\u5929\uFF1F",
- BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "\u53CD\u8F49\u5361\u7247\u7531\u540C\u4E00\u5361\u7247\u6587\u5B57\u7522\u751F\uFF0C\u4F8B\u5982\uFF1A\u586B\u7A7A\u514B\u6F0F\u5B57",
- SHOW_CARD_CONTEXT: "\u5728\u5361\u7247\u4E2D\u986F\u793A\u4E0A\u4E0B\u6587\uFF1F",
- SHOW_CARD_CONTEXT_DESC: "\u4F8B\u5982\uFF1A\u6A19\u984C > \u526F\u6A19\u984C > \u5C0F\u6A19\u984C > ... > \u5C0F\u6A19\u984C",
- CARD_MODAL_HEIGHT_PERCENT: "\u5361\u7247\u9AD8\u5EA6\u767E\u5206\u6BD4",
- CARD_MODAL_SIZE_PERCENT_DESC: "\u5728\u79FB\u52D5\u7AEF\u6216\u9700\u8981\u8F03\u5927\u5716\u7247\u6642\u61C9\u8A2D\u5B9A\u70BA100%",
- RESET_DEFAULT: "\u91CD\u7F6E\u70BA\u9810\u8A2D\u503C",
- CARD_MODAL_WIDTH_PERCENT: "\u5361\u7247\u5BEC\u5EA6\u767E\u5206\u6BD4",
- RANDOMIZE_CARD_ORDER: "\u5FA9\u7FD2\u6642\u96A8\u6A5F\u986F\u793A\u5361\u7247\uFF1F",
- DISABLE_CLOZE_CARDS: "\u505C\u7528\u586B\u7A7A\u514B\u6F0F\u5B57\u5361\u7247\uFF1F",
- CONVERT_HIGHLIGHTS_TO_CLOZES: "\u5C07 ==\u9AD8\u4EAE== \u8F49\u63DB\u70BA\u586B\u7A7A\u514B\u6F0F\u5B57\uFF1F",
- CONVERT_BOLD_TEXT_TO_CLOZES: "\u5C07 **\u7C97\u9AD4** \u8F49\u63DB\u70BA\u586B\u7A7A\u514B\u6F0F\u5B57\uFF1F",
- CONVERT_CURLY_BRACKETS_TO_CLOZES: "\u5C07 {{\u5927\u62EC\u865F}} \u8F49\u63DB\u70BA\u586B\u7A7A\u514B\u6F0F\u5B57\uFF1F",
- INLINE_CARDS_SEPARATOR: "\u55AE\u884C\u5361\u7247\u7684\u5206\u9694\u5B57\u5143",
- FIX_SEPARATORS_MANUALLY_WARNING: "\u6CE8\u610F\uFF1A\u66F4\u6539\u6B64\u9078\u9805\u5F8C\u4F60\u5C07\u9700\u8981\u81EA\u884C\u66F4\u6539\u5DF2\u5B58\u5728\u5361\u7247\u7684\u5206\u9694\u5B57\u5143\u3002",
- INLINE_REVERSED_CARDS_SEPARATOR: "\u55AE\u884C\u53CD\u8F49\u5361\u7247\u7684\u5206\u9694\u5B57\u5143",
- MULTILINE_CARDS_SEPARATOR: "\u591A\u884C\u5361\u7247\u7684\u5206\u9694\u5B57\u5143",
- MULTILINE_REVERSED_CARDS_SEPARATOR: "\u591A\u884C\u7FFB\u8F49\u5361\u7247\u7684\u5206\u9694\u5B57\u5143",
- NOTES: "\u7B46\u8A18",
- REVIEW_PANE_ON_STARTUP: "\u555F\u52D5\u6642\u958B\u555F\u7B46\u8A18\u5FA9\u7FD2\u7A97\u683C",
- TAGS_TO_REVIEW: "\u5FA9\u7FD2\u6A19\u7C64",
- TAGS_TO_REVIEW_DESC: "\u8F38\u5165\u6A19\u7C64\uFF0C\u7528\u7A7A\u683C\u6216\u63DB\u884C\u5B57\u5143\u5206\u9694\uFF0C\u4F8B\u5982\uFF1A#review #tag2 #tag3.",
- OPEN_RANDOM_NOTE: "\u5FA9\u7FD2\u96A8\u6A5F\u7B46\u8A18",
- OPEN_RANDOM_NOTE_DESC: "\u95DC\u9589\u6B64\u9078\u9805\uFF0C\u7B46\u8A18\u5C07\u4EE5\u91CD\u8981\u5EA6(PageRank)\u6392\u5E8F\u3002",
- AUTO_NEXT_NOTE: "\u5FA9\u7FD2\u5F8C\u81EA\u52D5\u6253\u958B\u4E0B\u4E00\u500B\u7B46\u8A18",
- DISABLE_FILE_MENU_REVIEW_OPTIONS: "\u95DC\u9589\u6A94\u6848\u9078\u55AE\u4E2D\u7684\u5FA9\u7FD2\u9078\u9805 \u4F8B\u5982\uFF1A\u5FA9\u7FD2\uFF1A\u7C21\u55AE \u8A18\u5F97 \u8F03\u96E3",
- DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\u95DC\u9589\u6A94\u6848\u9078\u55AE\u7684\u5FA9\u7FD2\u9078\u9805\uFF0C\u4F8B\u5982\uFF1A\u5FA9\u7FD2: \u7C21\u55AE \u8A18\u5F97 \u8F03\u96E3\u3002",
- MAX_N_DAYS_REVIEW_QUEUE: "\u53F3\u908A\u9762\u677F\u986F\u793A\u7684\u6700\u5927\u5929\u6578",
- MIN_ONE_DAY: "\u5929\u6578\u6700\u5C0F\u503C\u70BA1",
- VALID_NUMBER_WARNING: "\u8ACB\u8F38\u5165\u6709\u6548\u7684\u6578\u5B57\u3002",
- UI_PREFERENCES: "\u7528\u6236\u4ECB\u9762\u9996\u9078\u9805",
- INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\u724C\u7D44\u6A39\u6700\u521D\u61C9\u986F\u793A\u70BA\u5C55\u958B",
- INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "\u95DC\u9589\u6B64\u9078\u9805\u53EF\u647A\u758A\u540C\u4E00\u5F35\u5361\u7247\u4E2D\u7684\u5DE2\u72C0\u724C\u7D44\u3002\u5982\u679C\u60A8\u7684\u5361\u7247\u5C6C\u65BC\u540C\u4E00\u6A94\u6848\u4E2D\u7684\u8A31\u591A\u5957\u724C\uFF0C\u5247\u5F88\u6709\u7528\u3002",
- ALGORITHM: "\u6F14\u7B97\u6CD5",
- CHECK_ALGORITHM_WIKI: '\u77AD\u89E3\u66F4\u591A, \u8ACB\u9EDE\u9078\u7B97\u6CD5\u5BE6\u73FE.',
- BASE_EASE: "\u57FA\u790E\u638C\u63E1\u7A0B\u5EA6",
- BASE_EASE_DESC: "\u6700\u5C0F\u503C130\uFF0C\u63A8\u85A6\u503C\u7D04250.",
- BASE_EASE_MIN_WARNING: "\u57FA\u790E\u638C\u63E1\u7A0B\u5EA6\u7684\u6700\u5C0F\u503C\u70BA130\u3002",
- LAPSE_INTERVAL_CHANGE: "\u5C07\u5FA9\u7FD2\u6642\u6A19\u8A3B\u70BA\u300C\u8F03\u96E3\u300D\u7684\u5361\u7247\u6216\u7B46\u8A18\u5FA9\u7FD2\u9593\u9694\u7E2E\u77ED",
- LAPSE_INTERVAL_CHANGE_DESC: "\u65B0\u5FA9\u7FD2\u9593\u9694 = \u539F\u5FA9\u7FD2\u9593\u9694 * \u9593\u9694\u6539\u8B8A\u4FC2\u6578 / 100.",
- EASY_BONUS: "\u7C21\u55AE\u734E\u52F5",
- EASY_BONUS_DESC: "\u7C21\u55AE\u734E\u52F5\u8A2D\u5B9A\u300C\u8A18\u5F97\u300D\u548C\u300C\u7C21\u55AE\u300D\u5361\u7247\u6216\u7B46\u8A18\u7684\u5FA9\u7FD2\u9593\u9694\u5DEE\u8DDD\uFF08\u6700\u5C0F\u503C100%\uFF09\u3002",
- EASY_BONUS_MIN_WARNING: "\u7C21\u55AE\u734E\u52F5\u81F3\u5C11\u70BA100\u3002",
- MAX_INTERVAL: "\u6700\u5927\u9593\u9694\uFF08\u5929\uFF09",
- MAX_INTERVAL_DESC: "\u8A2D\u5B9A\u5FA9\u7FD2\u7684\u6700\u5927\u9593\u9694\u6642\u9593\uFF08\u9810\u8A2D\u503C100\u5E74\uFF09\u3002",
- MAX_INTERVAL_MIN_WARNING: "\u6700\u5927\u9593\u9694\u81F3\u5C11\u70BA1\u5929",
- MAX_LINK_CONTRIB: "\u6700\u5927\u93C8\u63A5\u8CA2\u737B",
- MAX_LINK_CONTRIB_DESC: "\u93C8\u63A5\u7B46\u8A18\u7684\u52A0\u6B0A\u638C\u63E1\u7A0B\u5EA6\u5C0D\u539F\u59CB\u638C\u63E1\u7A0B\u5EA6\u7684\u6700\u5927\u8CA2\u737B\u3002",
- LOGGING: "\u8A18\u9304\u4E2D",
- DISPLAY_DEBUG_INFO: "\u5728\u958B\u767C\u8005\u63A7\u5236\u53F0\u4E2D\u986F\u793A\u9664\u932F\u8CC7\u8A0A\uFF1F",
- // sidebar.ts
- NOTES_REVIEW_QUEUE: "\u7B46\u8A18\u5FA9\u7FD2\u5E8F\u5217",
- CLOSE: "\u81E8\u8FD1",
- NEW: "\u65B0",
- YESTERDAY: "\u6628\u5929",
- TODAY: "\u4ECA\u5929",
- TOMORROW: "\u660E\u5929",
- // stats-modal.tsx
- STATS_TITLE: "\u7D71\u8A08",
- MONTH: "\u6708",
- QUARTER: "\u5B63",
- YEAR: "\u5E74",
- LIFETIME: "\u5168\u90E8",
- FORECAST: "\u9810\u6E2C",
- FORECAST_DESC: "\u5C07\u8981\u5230\u671F\u7684\u5361\u7247\u6578\u91CF",
- SCHEDULED: "\u5DF2\u6392\u7A0B",
- DAYS: "\u5929",
- NUMBER_OF_CARDS: "\u5361\u7247\u6578\u91CF",
- REVIEWS_PER_DAY: "\u5E73\u5747: \u5FA9\u7FD2${avg} /\u5929",
- INTERVALS: "\u9593\u9694",
- INTERVALS_DESC: "\u5230\u4E0B\u4E00\u6B21\u5FA9\u7FD2\u7684\u6642\u9593\u9593\u9694",
- COUNT: "\u8A08\u6578",
- INTERVALS_SUMMARY: "\u5E73\u5747\u9593\u9694\u6642\u9593: ${avg}, \u6700\u9577\u9593\u9694\u6642\u9593: ${longest}",
- EASES: "\u638C\u63E1\u7A0B\u5EA6",
- EASES_SUMMARY: "\u5E73\u5747\u638C\u63E1\u7A0B\u5EA6: ${avgEase}",
- CARD_TYPES: "\u5361\u7247\u578B\u5225",
- CARD_TYPES_DESC: "\u5982\u6709\uFF0C\u5C07\u986F\u793A\u96B1\u85CF\u7684\u5361\u7247",
- CARD_TYPE_NEW: "\u65B0",
- CARD_TYPE_YOUNG: "\u8F03\u65B0",
- CARD_TYPE_MATURE: "\u719F\u6089",
- CARD_TYPES_SUMMARY: "\u7E3D\u5361\u7247\u6578: ${totalCardsCount}"
-};
-
-// src/lang/helpers.ts
-var localeMap = {
- af: af_default,
- ar: ar_default,
- bn: bn_default,
- cs: cz_default,
- da: da_default,
- de: de_default,
- en: en_default,
- "en-gb": en_gb_default,
- es: es_default,
- fr: fr_default,
- hi: hi_default,
- id: id_default,
- it: it_default,
- ja: ja_default,
- ko: ko_default,
- mr: mr_default,
- nl: nl_default,
- nn: no_default,
- pl: pl_default,
- pt: pt_default,
- "pt-br": pt_br_default,
- ro: ro_default,
- ru: ru_default,
- ta: ta_default,
- te: te_default,
- th: th_default,
- tr: tr_default,
- uk: uk_default,
- ur: ur_default,
- vi: vi_default,
- "zh-cn": zh_cn_default,
- "zh-tw": zh_tw_default
-};
-var locale = localeMap[import_obsidian.moment.locale()];
-function interpolate(str, params) {
- const names2 = Object.keys(params);
- const vals = Object.values(params);
- return new Function(...names2, `return \`${str}\`;`)(...vals);
-}
-function t(str, params) {
- if (!locale) {
- console.error(`SRS error: Locale ${import_obsidian.moment.locale()} not found.`);
- }
- const result = locale && locale[str] || en_default[str];
- if (params) {
- return interpolate(result, params);
- }
- return result;
-}
-
-// src/settings.ts
-var DEFAULT_SETTINGS = {
- // flashcards
- flashcardEasyText: t("EASY"),
- flashcardGoodText: t("GOOD"),
- flashcardHardText: t("HARD"),
- flashcardImpossibleText: t("IMPOSSIBLE"),
- flashcardTags: ["#flashcards"],
- convertFoldersToDecks: false,
- cardCommentOnSameLine: false,
- burySiblingCards: false,
- showContextInCards: true,
- flashcardHeightPercentage: import_obsidian2.Platform.isMobile ? 100 : 80,
- flashcardWidthPercentage: import_obsidian2.Platform.isMobile ? 100 : 40,
- randomizeCardOrder: true,
- convertHighlightsToClozes: true,
- convertBoldTextToClozes: false,
- convertCurlyBracketsToClozes: false,
- singleLineCardSeparator: "::",
- singleLineReversedCardSeparator: ":::",
- multilineCardSeparator: "?",
- multilineReversedCardSeparator: "??",
- editLaterTag: "#edit-later",
- // notes
- enableNoteReviewPaneOnStartup: true,
- tagsToReview: ["#review"],
- noteFoldersToIgnore: [],
- openRandomNote: false,
- autoNextNote: false,
- disableFileMenuReviewOptions: false,
- maxNDaysNotesReviewQueue: 365,
- // UI settings
- initiallyExpandAllSubdecksInTree: false,
- // algorithm
- baseEase: 250,
- lapsesIntervalChange: 0.5,
- easyBonus: 1.3,
- maximumInterval: 36525,
- maxLinkFactor: 1,
- // logging
- showDebugMessages: false
-};
-var applyDebounceTimer = 0;
-function applySettingsUpdate(callback2) {
- clearTimeout(applyDebounceTimer);
- applyDebounceTimer = window.setTimeout(callback2, 512);
-}
-var SRSettingTab = class extends import_obsidian2.PluginSettingTab {
- constructor(app2, plugin) {
- super(app2, plugin);
- this.plugin = plugin;
- }
- display() {
- const { containerEl } = this;
- containerEl.empty();
- const header = containerEl.createEl("h1", { text: `${t("SETTINGS_HEADER")}` });
- header.addClass("sr-centered");
- containerEl.createDiv().innerHTML = t("CHECK_WIKI", {
- wiki_url: "https://www.stephenmwangi.com/obsidian-spaced-repetition/"
- });
- new import_obsidian2.Setting(containerEl).setName(t("FOLDERS_TO_IGNORE")).setDesc(t("FOLDERS_TO_IGNORE_DESC")).addTextArea(
- (text) => text.setValue(this.plugin.data.settings.noteFoldersToIgnore.join("\n")).onChange((value) => {
- applySettingsUpdate(async () => {
- this.plugin.data.settings.noteFoldersToIgnore = value.split(/\n+/).map((v) => v.trim()).filter((v) => v);
- await this.plugin.savePluginData();
- });
- })
- );
- containerEl.createEl("h3", { text: `${t("FLASHCARDS")}` });
- new import_obsidian2.Setting(containerEl).setName(t("FLASHCARD_TAGS")).setDesc(t("FLASHCARD_TAGS_DESC")).addTextArea(
- (text) => text.setValue(this.plugin.data.settings.flashcardTags.join(" ")).onChange((value) => {
- applySettingsUpdate(async () => {
- this.plugin.data.settings.flashcardTags = value.split(/\s+/);
- await this.plugin.savePluginData();
- });
- })
- );
- new import_obsidian2.Setting(containerEl).setName(t("CONVERT_FOLDERS_TO_DECKS")).setDesc(t("CONVERT_FOLDERS_TO_DECKS_DESC")).addToggle(
- (toggle) => toggle.setValue(this.plugin.data.settings.convertFoldersToDecks).onChange(async (value) => {
- this.plugin.data.settings.convertFoldersToDecks = value;
- await this.plugin.savePluginData();
- })
- );
- new import_obsidian2.Setting(containerEl).setName(t("INLINE_SCHEDULING_COMMENTS")).setDesc(t("INLINE_SCHEDULING_COMMENTS_DESC")).addToggle(
- (toggle) => toggle.setValue(this.plugin.data.settings.cardCommentOnSameLine).onChange(async (value) => {
- this.plugin.data.settings.cardCommentOnSameLine = value;
- await this.plugin.savePluginData();
- })
- );
- new import_obsidian2.Setting(containerEl).setName(t("BURY_SIBLINGS_TILL_NEXT_DAY")).setDesc(t("BURY_SIBLINGS_TILL_NEXT_DAY_DESC")).addToggle(
- (toggle) => toggle.setValue(this.plugin.data.settings.burySiblingCards).onChange(async (value) => {
- this.plugin.data.settings.burySiblingCards = value;
- await this.plugin.savePluginData();
- })
- );
- new import_obsidian2.Setting(containerEl).setName(t("SHOW_CARD_CONTEXT")).setDesc(t("SHOW_CARD_CONTEXT_DESC")).addToggle(
- (toggle) => toggle.setValue(this.plugin.data.settings.showContextInCards).onChange(async (value) => {
- this.plugin.data.settings.showContextInCards = value;
- await this.plugin.savePluginData();
- })
- );
- new import_obsidian2.Setting(containerEl).setName(t("CARD_MODAL_HEIGHT_PERCENT")).setDesc(t("CARD_MODAL_SIZE_PERCENT_DESC")).addSlider(
- (slider) => slider.setLimits(10, 100, 5).setValue(this.plugin.data.settings.flashcardHeightPercentage).setDynamicTooltip().onChange(async (value) => {
- this.plugin.data.settings.flashcardHeightPercentage = value;
- await this.plugin.savePluginData();
- })
- ).addExtraButton((button) => {
- button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
- this.plugin.data.settings.flashcardHeightPercentage = DEFAULT_SETTINGS.flashcardHeightPercentage;
- await this.plugin.savePluginData();
- this.display();
- });
- });
- new import_obsidian2.Setting(containerEl).setName(t("CARD_MODAL_WIDTH_PERCENT")).setDesc(t("CARD_MODAL_SIZE_PERCENT_DESC")).addSlider(
- (slider) => slider.setLimits(10, 100, 5).setValue(this.plugin.data.settings.flashcardWidthPercentage).setDynamicTooltip().onChange(async (value) => {
- this.plugin.data.settings.flashcardWidthPercentage = value;
- await this.plugin.savePluginData();
- })
- ).addExtraButton((button) => {
- button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
- this.plugin.data.settings.flashcardWidthPercentage = DEFAULT_SETTINGS.flashcardWidthPercentage;
- await this.plugin.savePluginData();
- this.display();
- });
- });
- new import_obsidian2.Setting(containerEl).setName(t("RANDOMIZE_CARD_ORDER")).addToggle(
- (toggle) => toggle.setValue(this.plugin.data.settings.randomizeCardOrder).onChange(async (value) => {
- this.plugin.data.settings.randomizeCardOrder = value;
- await this.plugin.savePluginData();
- })
- );
- new import_obsidian2.Setting(containerEl).setName(t("CONVERT_HIGHLIGHTS_TO_CLOZES")).addToggle(
- (toggle) => toggle.setValue(this.plugin.data.settings.convertHighlightsToClozes).onChange(async (value) => {
- this.plugin.data.settings.convertHighlightsToClozes = value;
- await this.plugin.savePluginData();
- })
- );
- new import_obsidian2.Setting(containerEl).setName(t("CONVERT_BOLD_TEXT_TO_CLOZES")).addToggle(
- (toggle) => toggle.setValue(this.plugin.data.settings.convertBoldTextToClozes).onChange(async (value) => {
- this.plugin.data.settings.convertBoldTextToClozes = value;
- await this.plugin.savePluginData();
- })
- );
- new import_obsidian2.Setting(containerEl).setName(t("CONVERT_CURLY_BRACKETS_TO_CLOZES")).addToggle(
- (toggle) => toggle.setValue(this.plugin.data.settings.convertCurlyBracketsToClozes).onChange(async (value) => {
- this.plugin.data.settings.convertCurlyBracketsToClozes = value;
- await this.plugin.savePluginData();
- })
- );
- new import_obsidian2.Setting(containerEl).setName(t("INLINE_CARDS_SEPARATOR")).setDesc(t("FIX_SEPARATORS_MANUALLY_WARNING")).addText(
- (text) => text.setValue(this.plugin.data.settings.singleLineCardSeparator).onChange((value) => {
- applySettingsUpdate(async () => {
- this.plugin.data.settings.singleLineCardSeparator = value;
- await this.plugin.savePluginData();
- });
- })
- ).addExtraButton((button) => {
- button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
- this.plugin.data.settings.singleLineCardSeparator = DEFAULT_SETTINGS.singleLineCardSeparator;
- await this.plugin.savePluginData();
- this.display();
- });
- });
- new import_obsidian2.Setting(containerEl).setName(t("INLINE_REVERSED_CARDS_SEPARATOR")).setDesc(t("FIX_SEPARATORS_MANUALLY_WARNING")).addText(
- (text) => text.setValue(this.plugin.data.settings.singleLineReversedCardSeparator).onChange((value) => {
- applySettingsUpdate(async () => {
- this.plugin.data.settings.singleLineReversedCardSeparator = value;
- await this.plugin.savePluginData();
- });
- })
- ).addExtraButton((button) => {
- button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
- this.plugin.data.settings.singleLineReversedCardSeparator = DEFAULT_SETTINGS.singleLineReversedCardSeparator;
- await this.plugin.savePluginData();
- this.display();
- });
- });
- new import_obsidian2.Setting(containerEl).setName(t("MULTILINE_CARDS_SEPARATOR")).setDesc(t("FIX_SEPARATORS_MANUALLY_WARNING")).addText(
- (text) => text.setValue(this.plugin.data.settings.multilineCardSeparator).onChange((value) => {
- applySettingsUpdate(async () => {
- this.plugin.data.settings.multilineCardSeparator = value;
- await this.plugin.savePluginData();
- });
- })
- ).addExtraButton((button) => {
- button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
- this.plugin.data.settings.multilineCardSeparator = DEFAULT_SETTINGS.multilineCardSeparator;
- await this.plugin.savePluginData();
- this.display();
- });
- });
- new import_obsidian2.Setting(containerEl).setName(t("MULTILINE_REVERSED_CARDS_SEPARATOR")).setDesc(t("FIX_SEPARATORS_MANUALLY_WARNING")).addText(
- (text) => text.setValue(this.plugin.data.settings.multilineReversedCardSeparator).onChange((value) => {
- applySettingsUpdate(async () => {
- this.plugin.data.settings.multilineReversedCardSeparator = value;
- await this.plugin.savePluginData();
- });
- })
- ).addExtraButton((button) => {
- button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
- this.plugin.data.settings.multilineReversedCardSeparator = DEFAULT_SETTINGS.multilineReversedCardSeparator;
- await this.plugin.savePluginData();
- this.display();
- });
- });
- new import_obsidian2.Setting(containerEl).setName(t("FLASHCARD_EASY_LABEL")).setDesc(t("FLASHCARD_EASY_DESC")).addText(
- (text) => text.setValue(this.plugin.data.settings.flashcardEasyText).onChange((value) => {
- applySettingsUpdate(async () => {
- this.plugin.data.settings.flashcardEasyText = value;
- await this.plugin.savePluginData();
- });
- })
- ).addExtraButton((button) => {
- button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
- this.plugin.data.settings.flashcardEasyText = DEFAULT_SETTINGS.flashcardEasyText;
- await this.plugin.savePluginData();
- this.display();
- });
- });
- new import_obsidian2.Setting(containerEl).setName(t("FLASHCARD_GOOD_LABEL")).setDesc(t("FLASHCARD_GOOD_DESC")).addText(
- (text) => text.setValue(this.plugin.data.settings.flashcardGoodText).onChange((value) => {
- applySettingsUpdate(async () => {
- this.plugin.data.settings.flashcardGoodText = value;
- await this.plugin.savePluginData();
- });
- })
- ).addExtraButton((button) => {
- button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
- this.plugin.data.settings.flashcardGoodText = DEFAULT_SETTINGS.flashcardGoodText;
- await this.plugin.savePluginData();
- this.display();
- });
- });
- new import_obsidian2.Setting(containerEl).setName(t("FLASHCARD_HARD_LABEL")).setDesc(t("FLASHCARD_HARD_DESC")).addText(
- (text) => text.setValue(this.plugin.data.settings.flashcardHardText).onChange((value) => {
- applySettingsUpdate(async () => {
- this.plugin.data.settings.flashcardHardText = value;
- await this.plugin.savePluginData();
- });
- })
- ).addExtraButton((button) => {
- button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
- this.plugin.data.settings.flashcardHardText = DEFAULT_SETTINGS.flashcardHardText;
- await this.plugin.savePluginData();
- this.display();
- });
- });
- containerEl.createEl("h3", { text: `${t("NOTES")}` });
- new import_obsidian2.Setting(containerEl).setName(t("REVIEW_PANE_ON_STARTUP")).addToggle(
- (toggle) => toggle.setValue(this.plugin.data.settings.enableNoteReviewPaneOnStartup).onChange(async (value) => {
- this.plugin.data.settings.enableNoteReviewPaneOnStartup = value;
- await this.plugin.savePluginData();
- })
- );
- new import_obsidian2.Setting(containerEl).setName(t("TAGS_TO_REVIEW")).setDesc(t("TAGS_TO_REVIEW_DESC")).addTextArea(
- (text) => text.setValue(this.plugin.data.settings.tagsToReview.join(" ")).onChange((value) => {
- applySettingsUpdate(async () => {
- this.plugin.data.settings.tagsToReview = value.split(/\s+/);
- await this.plugin.savePluginData();
- });
- })
- );
- new import_obsidian2.Setting(containerEl).setName(t("OPEN_RANDOM_NOTE")).setDesc(t("OPEN_RANDOM_NOTE_DESC")).addToggle(
- (toggle) => toggle.setValue(this.plugin.data.settings.openRandomNote).onChange(async (value) => {
- this.plugin.data.settings.openRandomNote = value;
- await this.plugin.savePluginData();
- })
- );
- new import_obsidian2.Setting(containerEl).setName(t("AUTO_NEXT_NOTE")).addToggle(
- (toggle) => toggle.setValue(this.plugin.data.settings.autoNextNote).onChange(async (value) => {
- this.plugin.data.settings.autoNextNote = value;
- await this.plugin.savePluginData();
- })
- );
- new import_obsidian2.Setting(containerEl).setName(t("DISABLE_FILE_MENU_REVIEW_OPTIONS")).setDesc(t("DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC")).addToggle(
- (toggle) => toggle.setValue(this.plugin.data.settings.disableFileMenuReviewOptions).onChange(async (value) => {
- this.plugin.data.settings.disableFileMenuReviewOptions = value;
- await this.plugin.savePluginData();
- })
- );
- new import_obsidian2.Setting(containerEl).setName(t("MAX_N_DAYS_REVIEW_QUEUE")).addText(
- (text) => text.setValue(this.plugin.data.settings.maxNDaysNotesReviewQueue.toString()).onChange((value) => {
- applySettingsUpdate(async () => {
- const numValue = Number.parseInt(value);
- if (!isNaN(numValue)) {
- if (numValue < 1) {
- new import_obsidian2.Notice(t("MIN_ONE_DAY"));
- text.setValue(
- this.plugin.data.settings.maxNDaysNotesReviewQueue.toString()
- );
- return;
- }
- this.plugin.data.settings.maxNDaysNotesReviewQueue = numValue;
- await this.plugin.savePluginData();
- } else {
- new import_obsidian2.Notice(t("VALID_NUMBER_WARNING"));
- }
- });
- })
- ).addExtraButton((button) => {
- button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
- this.plugin.data.settings.maxNDaysNotesReviewQueue = DEFAULT_SETTINGS.maxNDaysNotesReviewQueue;
- await this.plugin.savePluginData();
- this.display();
- });
- });
- containerEl.createEl("h3", { text: `${t("UI_PREFERENCES")}` });
- new import_obsidian2.Setting(containerEl).setName(t("INITIALLY_EXPAND_SUBDECKS_IN_TREE")).setDesc(t("INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC")).addToggle(
- (toggle) => toggle.setValue(this.plugin.data.settings.initiallyExpandAllSubdecksInTree).onChange(async (value) => {
- this.plugin.data.settings.initiallyExpandAllSubdecksInTree = value;
- await this.plugin.savePluginData();
- })
- );
- containerEl.createEl("h3", { text: `${t("ALGORITHM")}` });
- containerEl.createDiv().innerHTML = t("CHECK_ALGORITHM_WIKI", {
- algo_url: "https://www.stephenmwangi.com/obsidian-spaced-repetition/algorithms/"
- });
- new import_obsidian2.Setting(containerEl).setName(t("BASE_EASE")).setDesc(t("BASE_EASE_DESC")).addText(
- (text) => text.setValue(this.plugin.data.settings.baseEase.toString()).onChange((value) => {
- applySettingsUpdate(async () => {
- const numValue = Number.parseInt(value);
- if (!isNaN(numValue)) {
- if (numValue < 130) {
- new import_obsidian2.Notice(t("BASE_EASE_MIN_WARNING"));
- text.setValue(this.plugin.data.settings.baseEase.toString());
- return;
- }
- this.plugin.data.settings.baseEase = numValue;
- await this.plugin.savePluginData();
- } else {
- new import_obsidian2.Notice(t("VALID_NUMBER_WARNING"));
- }
- });
- })
- ).addExtraButton((button) => {
- button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
- this.plugin.data.settings.baseEase = DEFAULT_SETTINGS.baseEase;
- await this.plugin.savePluginData();
- this.display();
- });
- });
- new import_obsidian2.Setting(containerEl).setName(t("LAPSE_INTERVAL_CHANGE")).setDesc(t("LAPSE_INTERVAL_CHANGE_DESC")).addSlider(
- (slider) => slider.setLimits(1, 99, 1).setValue(this.plugin.data.settings.lapsesIntervalChange * 100).setDynamicTooltip().onChange(async (value) => {
- this.plugin.data.settings.lapsesIntervalChange = value / 100;
- await this.plugin.savePluginData();
- })
- ).addExtraButton((button) => {
- button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
- this.plugin.data.settings.lapsesIntervalChange = DEFAULT_SETTINGS.lapsesIntervalChange;
- await this.plugin.savePluginData();
- this.display();
- });
- });
- new import_obsidian2.Setting(containerEl).setName(t("EASY_BONUS")).setDesc(t("EASY_BONUS_DESC")).addText(
- (text) => text.setValue((this.plugin.data.settings.easyBonus * 100).toString()).onChange((value) => {
- applySettingsUpdate(async () => {
- const numValue = Number.parseInt(value) / 100;
- if (!isNaN(numValue)) {
- if (numValue < 1) {
- new import_obsidian2.Notice(t("EASY_BONUS_MIN_WARNING"));
- text.setValue(
- (this.plugin.data.settings.easyBonus * 100).toString()
- );
- return;
- }
- this.plugin.data.settings.easyBonus = numValue;
- await this.plugin.savePluginData();
- } else {
- new import_obsidian2.Notice(t("VALID_NUMBER_WARNING"));
- }
- });
- })
- ).addExtraButton((button) => {
- button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
- this.plugin.data.settings.easyBonus = DEFAULT_SETTINGS.easyBonus;
- await this.plugin.savePluginData();
- this.display();
- });
- });
- new import_obsidian2.Setting(containerEl).setName(t("MAX_INTERVAL")).setDesc(t("MAX_INTERVAL_DESC")).addText(
- (text) => text.setValue(this.plugin.data.settings.maximumInterval.toString()).onChange((value) => {
- applySettingsUpdate(async () => {
- const numValue = Number.parseInt(value);
- if (!isNaN(numValue)) {
- if (numValue < 1) {
- new import_obsidian2.Notice(t("MAX_INTERVAL_MIN_WARNING"));
- text.setValue(
- this.plugin.data.settings.maximumInterval.toString()
- );
- return;
- }
- this.plugin.data.settings.maximumInterval = numValue;
- await this.plugin.savePluginData();
- } else {
- new import_obsidian2.Notice(t("VALID_NUMBER_WARNING"));
- }
- });
- })
- ).addExtraButton((button) => {
- button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
- this.plugin.data.settings.maximumInterval = DEFAULT_SETTINGS.maximumInterval;
- await this.plugin.savePluginData();
- this.display();
- });
- });
- new import_obsidian2.Setting(containerEl).setName(t("MAX_LINK_CONTRIB")).setDesc(t("MAX_LINK_CONTRIB_DESC")).addSlider(
- (slider) => slider.setLimits(0, 100, 1).setValue(this.plugin.data.settings.maxLinkFactor * 100).setDynamicTooltip().onChange(async (value) => {
- this.plugin.data.settings.maxLinkFactor = value / 100;
- await this.plugin.savePluginData();
- })
- ).addExtraButton((button) => {
- button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
- this.plugin.data.settings.maxLinkFactor = DEFAULT_SETTINGS.maxLinkFactor;
- await this.plugin.savePluginData();
- this.display();
- });
- });
- containerEl.createEl("h3", { text: `${t("LOGGING")}` });
- new import_obsidian2.Setting(containerEl).setName(t("DISPLAY_DEBUG_INFO")).addToggle(
- (toggle) => toggle.setValue(this.plugin.data.settings.showDebugMessages).onChange(async (value) => {
- this.plugin.data.settings.showDebugMessages = value;
- await this.plugin.savePluginData();
- })
- );
- }
-};
-
-// src/flashcard-modal.tsx
-var import_obsidian3 = require("obsidian");
-var import_vhtml = __toESM(require_vhtml());
-
-// src/constants.ts
-var SCHEDULING_INFO_REGEX = /^---\n((?:.*\n)*)sr-due: (.+)\nsr-interval: (\d+)\nsr-ease: (\d+)\n((?:.*\n)?)---/;
-var YAML_FRONT_MATTER_REGEX = /^---\n((?:.*\n)*?)---/;
-var MULTI_SCHEDULING_EXTRACTOR = /!([-\d :]+),(\d+),(\d+)/gm;
-var LEGACY_SCHEDULING_EXTRACTOR = //gm;
-var MINUTES_PER_DAY = 24 * 60;
-var IMAGE_FORMATS = [
- "jpg",
- "jpeg",
- "gif",
- "png",
- "svg",
- "webp",
- "apng",
- "avif",
- "jfif",
- "pjpeg",
- "pjp",
- "bmp"
-];
-var AUDIO_FORMATS = ["mp3", "webm", "m4a", "wav", "ogg"];
-var VIDEO_FORMATS = ["mp4", "mkv", "avi", "mov"];
-var COLLAPSE_ICON = '';
-
-// src/scheduling.ts
-function schedule(response, interval, ease, delayBeforeReview, settingsObj, dueDates) {
- const minutesBeforeReview = Math.max(0, Math.floor(delayBeforeReview / (60 * 1e3)));
- if (interval < MINUTES_PER_DAY) {
- if (response === 0 /* Easy */) {
- ease += 20;
- interval = MINUTES_PER_DAY;
- } else if (response === 1 /* Good */) {
- interval = 10;
- } else if (response === 2 /* Hard */) {
- interval = 5;
- ease = Math.max(settingsObj.baseEase, ease - 20);
- } else {
- interval = 1;
- ease = Math.max(settingsObj.baseEase, ease - 20);
- }
- } else {
- if (response === 0 /* Easy */) {
- ease += 20;
- interval = (interval + minutesBeforeReview) * ease / 100;
- interval *= settingsObj.easyBonus;
- } else if (response === 1 /* Good */) {
- interval = (interval + minutesBeforeReview / 2) * ease / 100;
- } else if (response === 2 /* Hard */) {
- ease = Math.max(settingsObj.baseEase, ease - 20);
- interval = Math.max(
- 1,
- (interval + minutesBeforeReview / 4) * settingsObj.lapsesIntervalChange
- );
- } else {
- ease = Math.max(settingsObj.baseEase, ease - 20);
- interval = 5;
- }
- }
- interval = roundInterval(interval, settingsObj.maximumInterval);
- if (dueDates !== void 0) {
- const dayInterval = Math.round(interval / MINUTES_PER_DAY);
- if (!Object.prototype.hasOwnProperty.call(dueDates, dayInterval)) {
- dueDates[dayInterval] = 0;
- } else {
- if (interval > 4 * MINUTES_PER_DAY) {
- let fuzz = 0;
- if (interval <= 7 * MINUTES_PER_DAY) {
- fuzz = MINUTES_PER_DAY;
- } else if (interval <= 30 * MINUTES_PER_DAY) {
- fuzz = Math.max(2 * MINUTES_PER_DAY, Math.floor(interval * 0.15));
- } else {
- fuzz = Math.max(4 * MINUTES_PER_DAY, Math.floor(interval * 0.05));
- }
- const originalInterval = interval;
- outer:
- for (let i = MINUTES_PER_DAY; i <= fuzz; i += MINUTES_PER_DAY) {
- for (let ivl of [originalInterval - i, originalInterval + i]) {
- ivl = roundInterval(ivl, settingsObj.maximumInterval);
- const dayIvl = Math.round(ivl / MINUTES_PER_DAY);
- if (!Object.prototype.hasOwnProperty.call(dueDates, dayIvl)) {
- dueDates[dayIvl] = 0;
- interval = ivl;
- break outer;
- }
- if (dueDates[dayIvl] < dueDates[dayInterval])
- interval = ivl;
- }
- }
- }
- }
- dueDates[Math.round(interval / MINUTES_PER_DAY)]++;
- }
- return { interval: Math.round(interval * 10) / 10, ease };
-}
-function textInterval(interval, isMobile) {
- if (interval === void 0) {
- return t("NEW");
- }
- const days = Math.round(interval / (24 * 60)), months = Math.round(days / 3.04375) / 10, years = Math.round(days / 36.525) / 10;
- if (isMobile) {
- if (days < 1)
- return t("MINUTES_STR_IVL_MOBILE", { interval });
- if (months < 1)
- return t("DAYS_STR_IVL_MOBILE", { interval: days });
- if (years < 1)
- return t("MONTHS_STR_IVL_MOBILE", { interval: months });
- return t("YEARS_STR_IVL_MOBILE", { interval: years });
- } else {
- if (days < 1)
- return t("MINUTES_STR_IVL", { interval });
- if (months < 1)
- return t("DAYS_STR_IVL", { interval: days });
- if (years < 1)
- return t("MONTHS_STR_IVL", { interval: months });
- return t("YEARS_STR_IVL", { interval: years });
- }
-}
-function roundInterval(interval, maximumInterval) {
- interval = Math.round(interval);
- interval = Math.min(interval, maximumInterval * MINUTES_PER_DAY);
- if (interval < 5) {
- interval = 1;
- } else if (interval < 10) {
- interval = 5;
- } else if (interval < MINUTES_PER_DAY / 3) {
- interval = 10;
- } else if (interval < MINUTES_PER_DAY) {
- interval = MINUTES_PER_DAY;
- }
- return interval;
-}
-
-// src/utils.ts
-function getTypedObjectEntries(obj) {
- return Object.entries(obj);
-}
-var getKeysPreserveType = Object.keys;
-var escapeRegexString = (text) => text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
-function cyrb53(str, seed = 0) {
- let h12 = 3735928559 ^ seed, h22 = 1103547991 ^ seed;
- for (let i = 0, ch; i < str.length; i++) {
- ch = str.charCodeAt(i);
- h12 = Math.imul(h12 ^ ch, 2654435761);
- h22 = Math.imul(h22 ^ ch, 1597334677);
- }
- h12 = Math.imul(h12 ^ h12 >>> 16, 2246822507) ^ Math.imul(h22 ^ h22 >>> 13, 3266489909);
- h22 = Math.imul(h22 ^ h22 >>> 16, 2246822507) ^ Math.imul(h12 ^ h12 >>> 13, 3266489909);
- return (4294967296 * (2097151 & h22) + (h12 >>> 0)).toString(16);
-}
-
-// src/flashcard-modal.tsx
-var import_heap = __toESM(require_heap2());
-var FlashcardEditModal = class extends import_obsidian3.Modal {
- constructor(app2, plugin, existingText) {
- super(app2);
- this.didSubmit = false;
- this.submitClickCallback = (_) => this.submit();
- this.cancelClickCallback = (_) => this.cancel();
- this.submitEnterCallback = (evt) => {
- if ((evt.ctrlKey || evt.metaKey) && evt.key === "Enter") {
- evt.preventDefault();
- this.submit();
- }
- };
- this.plugin = plugin;
- this.titleEl.setText(t("EDIT_CARD"));
- this.titleEl.addClass("sr-centered");
- this.modalText = existingText;
- this.waitForClose = new Promise((resolve2, reject) => {
- this.resolvePromise = resolve2;
- this.rejectPromise = reject;
- });
- this.display();
- this.open();
- }
- static Prompt(app2, plugin, placeholder) {
- const newPromptModal = new FlashcardEditModal(app2, plugin, placeholder);
- return newPromptModal.waitForClose;
- }
- display() {
- this.contentEl.empty();
- this.modalEl.addClass("sr-flashcard-input-modal");
- const mainContentContainer = this.contentEl.createDiv();
- mainContentContainer.addClass("sr-flashcard-input-area");
- this.inputComponent = this.createInputField(mainContentContainer, this.modalText);
- this.createButtonBar(mainContentContainer);
- }
- createButton(container, text, callback2) {
- const btn = new import_obsidian3.ButtonComponent(container);
- btn.setButtonText(text).onClick(callback2);
- return btn;
- }
- createButtonBar(mainContentContainer) {
- const buttonBarContainer = mainContentContainer.createDiv();
- buttonBarContainer.addClass("sr-flashcard-edit-button-bar");
- this.createButton(
- buttonBarContainer,
- t("SAVE"),
- this.submitClickCallback
- ).setCta().buttonEl.style.marginRight = "0";
- this.createButton(buttonBarContainer, t("CANCEL"), this.cancelClickCallback);
- }
- createInputField(container, value) {
- const textComponent = new import_obsidian3.TextAreaComponent(container);
- textComponent.inputEl.style.width = "100%";
- textComponent.setValue(value != null ? value : "").onChange((value2) => this.input = value2).inputEl.addEventListener("keydown", this.submitEnterCallback);
- return textComponent;
- }
- submit() {
- this.didSubmit = true;
- this.close();
- }
- cancel() {
- this.close();
- }
- onOpen() {
- super.onOpen();
- this.inputComponent.inputEl.focus();
- }
- onClose() {
- super.onClose();
- this.resolveInput();
- this.removeInputListener();
- }
- resolveInput() {
- if (!this.didSubmit)
- this.rejectPromise(t("NO_INPUT"));
- else
- this.resolvePromise(this.input);
- }
- removeInputListener() {
- this.inputComponent.inputEl.removeEventListener("keydown", this.submitEnterCallback);
- }
-};
-var FlashcardModal = class extends import_obsidian3.Modal {
- constructor(app2, plugin, ignoreStats = false) {
- super(app2);
- this.plugin = plugin;
- this.ignoreStats = ignoreStats;
- this.titleEl.setText(t("DECKS"));
- this.titleEl.addClass("sr-centered");
- if (import_obsidian3.Platform.isMobile) {
- this.contentEl.style.display = "block";
- }
- this.modalEl.style.height = this.plugin.data.settings.flashcardHeightPercentage + "%";
- this.modalEl.style.width = this.plugin.data.settings.flashcardWidthPercentage + "%";
- this.contentEl.style.position = "relative";
- this.contentEl.style.height = "92%";
- this.contentEl.addClass("sr-modal-content");
- document.body.onkeydown = (e) => {
- if (document.activeElement.nodeName !== "TEXTAREA" && this.mode !== 0 /* DecksList */) {
- const consume = () => {
- e.preventDefault();
- e.stopPropagation();
- };
- if (this.mode !== 3 /* Closed */ && e.code === "KeyS") {
- this.skipCurrentCard();
- consume();
- } else if (this.mode === 1 /* Front */ && (e.code === "Space" || e.code === "Enter")) {
- this.showAnswer();
- consume();
- } else if (this.mode === 2 /* Back */) {
- if (e.code === "Numpad1" || e.code === "Digit1") {
- this.processReview(2 /* Hard */);
- consume();
- } else if (e.code === "Numpad2" || e.code === "Digit2" || e.code === "Space") {
- this.processReview(1 /* Good */);
- consume();
- } else if (e.code === "Numpad3" || e.code === "Digit3") {
- this.processReview(0 /* Easy */);
- consume();
- } else if (e.code === "Numpad0" || e.code === "Digit0") {
- this.processReview(4 /* Reset */);
- consume();
- }
- }
- }
- };
- }
- onOpen() {
- this.decksList();
- }
- onClose() {
- this.mode = 3 /* Closed */;
- }
- decksList() {
- const aimDeck = this.plugin.deckTree.subdecks.filter(
- (deck) => deck.deckName === this.plugin.data.historyDeck
- );
- if (this.plugin.data.historyDeck && aimDeck.length > 0) {
- const deck = aimDeck[0];
- this.currentDeck = deck;
- this.checkDeck = deck.parent;
- this.setupCardsView();
- deck.nextCard(this);
- return;
- }
- this.mode = 0 /* DecksList */;
- this.titleEl.setText(t("DECKS"));
- this.titleEl.innerHTML += /* @__PURE__ */ (0, import_vhtml.default)("p", { style: "margin:0px;line-height:12px;" }, /* @__PURE__ */ (0, import_vhtml.default)(
- "span",
- {
- style: "background-color:#4caf50;color:#ffffff;",
- "aria-label": t("DUE_CARDS"),
- class: "tag-pane-tag-count tree-item-flair sr-deck-counts"
- },
- this.plugin.deckTree.dueFlashcardsCount.toString()
- ), /* @__PURE__ */ (0, import_vhtml.default)(
- "span",
- {
- style: "background-color:#2196f3;",
- "aria-label": t("NEW_CARDS"),
- class: "tag-pane-tag-count tree-item-flair sr-deck-counts"
- },
- this.plugin.deckTree.newFlashcardsCount.toString()
- ), /* @__PURE__ */ (0, import_vhtml.default)(
- "span",
- {
- style: "background-color:#ff7043;",
- "aria-label": t("TOTAL_CARDS"),
- class: "tag-pane-tag-count tree-item-flair sr-deck-counts"
- },
- this.plugin.deckTree.totalFlashcards.toString()
- ));
- this.contentEl.empty();
- this.contentEl.setAttribute("id", "sr-flashcard-view");
- for (const deck of this.plugin.deckTree.subdecks) {
- deck.render(this.contentEl, this);
- }
- }
- setupCardsView() {
- this.contentEl.empty();
- const flashCardMenu = this.contentEl.createDiv("sr-flashcard-menu");
- const backButton = flashCardMenu.createEl("button");
- backButton.addClass("sr-flashcard-menu-item");
- (0, import_obsidian3.setIcon)(backButton, "arrow-left");
- backButton.setAttribute("aria-label", t("BACK"));
- backButton.addEventListener("click", () => {
- this.plugin.data.historyDeck = "";
- this.decksList();
- });
- this.editButton = flashCardMenu.createEl("button");
- this.editButton.addClass("sr-flashcard-menu-item");
- (0, import_obsidian3.setIcon)(this.editButton, "edit");
- this.editButton.setAttribute("aria-label", t("EDIT_CARD"));
- this.editButton.addEventListener("click", async () => {
- const textPromptArr = this.currentCard.cardText.split("\n");
- let textPrompt = "";
- if (textPromptArr[textPromptArr.length - 1].startsWith("`;
- } else {
- let scheduling = [
- ...this.currentCard.cardText.matchAll(MULTI_SCHEDULING_EXTRACTOR)
- ];
- if (scheduling.length === 0) {
- scheduling = [...this.currentCard.cardText.matchAll(LEGACY_SCHEDULING_EXTRACTOR)];
- }
- const currCardSched = ["0", dueString, interval.toString(), ease.toString()];
- if (this.currentCard.isDue) {
- scheduling[this.currentCard.siblingIdx] = currCardSched;
- } else {
- scheduling.push(currCardSched);
- }
- this.currentCard.cardText = this.currentCard.cardText.replace(//gm, "");
- this.currentCard.cardText += "";
- }
- fileText = fileText.replace(replacementRegex, () => this.currentCard.cardText);
- for (const sibling of this.currentCard.siblings) {
- sibling.cardText = this.currentCard.cardText;
- }
- if (this.plugin.data.settings.burySiblingCards) {
- this.burySiblingCards(true);
- }
- await this.app.vault.modify(this.currentCard.note, fileText);
- if (interval < MINUTES_PER_DAY) {
- const newCard = { ...this.currentCard };
- newCard.isDue = true;
- newCard.isReDue = true;
- newCard.interval = interval;
- newCard.ease = ease;
- newCard.delayBeforeReview = interval;
- newCard.previousReview = window.moment(Date.now()).valueOf();
- this.currentDeck.notifyCardChanged(this.currentCardIdx, newCard);
- } else {
- this.currentDeck.deleteFlashcardAtIndex(this.currentCardIdx, this.currentCard.isDue);
- }
- this.currentDeck.nextCard(this);
- }
- async burySiblingCards(tillNextDay) {
- if (tillNextDay) {
- this.plugin.data.buryList.push(cyrb53(this.currentCard.cardText));
- await this.plugin.savePluginData();
- }
- let idx;
- for (const sibling of this.currentCard.siblings) {
- while ((idx = this.currentDeck.flashcards.indexOf(sibling)) != -1) {
- this.currentDeck.deleteFlashcardAtIndex(
- idx,
- this.currentDeck.flashcards[idx].isDue
- );
- }
- }
- }
- skipCurrentCard() {
- this.currentDeck.deleteFlashcardAtIndex(this.currentCardIdx, this.currentCard.isDue);
- this.burySiblingCards(false);
- this.currentDeck.nextCard(this);
- }
- // slightly modified version of the renderMarkdown function in
- // https://github.com/mgmeyers/obsidian-kanban/blob/main/src/KanbanView.tsx
- async renderMarkdownWrapper(markdownString, containerEl, recursiveDepth = 0) {
- if (recursiveDepth > 4)
- return;
- import_obsidian3.MarkdownRenderer.renderMarkdown(
- markdownString,
- containerEl,
- this.currentCard.note.path,
- this.plugin
- );
- containerEl.findAll(".internal-embed").forEach((el) => {
- const link2 = this.parseLink(el.getAttribute("src"));
- if (!link2.target) {
- el.innerText = link2.text;
- } else if (link2.target instanceof import_obsidian3.TFile) {
- if (link2.target.extension !== "md") {
- this.embedMediaFile(el, link2.target);
- } else {
- el.innerText = "";
- this.renderTransclude(el, link2, recursiveDepth);
- }
- }
- });
- }
- parseLink(src) {
- const linkComponentsRegex = /^(?[^#^]+)?(?:#(?!\^)(?.+)|#\^(?.+)|#)?$/;
- const matched = typeof src === "string" && src.match(linkComponentsRegex);
- const file = matched.groups.file || this.currentCard.note.path;
- const target = this.plugin.app.metadataCache.getFirstLinkpathDest(
- file,
- this.currentCard.note.path
- );
- return {
- text: matched[0],
- file: matched.groups.file,
- heading: matched.groups.heading,
- blockId: matched.groups.blockId,
- target
- };
- }
- embedMediaFile(el, target) {
- el.innerText = "";
- if (IMAGE_FORMATS.includes(target.extension)) {
- el.createEl(
- "img",
- {
- attr: {
- src: this.plugin.app.vault.getResourcePath(target)
- }
- },
- (img) => {
- if (el.hasAttribute("width"))
- img.setAttribute("width", el.getAttribute("width"));
- else
- img.setAttribute("width", "100%");
- if (el.hasAttribute("alt"))
- img.setAttribute("alt", el.getAttribute("alt"));
- el.addEventListener(
- "click",
- (ev) => ev.target.style.minWidth = ev.target.style.minWidth === "100%" ? null : "100%"
- );
- }
- );
- el.addClasses(["image-embed", "is-loaded"]);
- } else if (AUDIO_FORMATS.includes(target.extension) || VIDEO_FORMATS.includes(target.extension)) {
- el.createEl(
- AUDIO_FORMATS.includes(target.extension) ? "audio" : "video",
- {
- attr: {
- controls: "",
- src: this.plugin.app.vault.getResourcePath(target)
- }
- },
- (audio) => {
- if (el.hasAttribute("alt"))
- audio.setAttribute("alt", el.getAttribute("alt"));
- }
- );
- el.addClasses(["media-embed", "is-loaded"]);
- } else {
- el.innerText = target.path;
- }
- }
- async renderTransclude(el, link2, recursiveDepth) {
- var _a, _b, _c, _d;
- const cache = this.app.metadataCache.getCache(link2.target.path);
- const text = await this.app.vault.cachedRead(link2.target);
- let blockText;
- if (link2.heading) {
- const clean = (s) => s.replace(/[\W\s]/g, "");
- const headingIndex = (_a = cache.headings) == null ? void 0 : _a.findIndex(
- (h4) => clean(h4.heading) === clean(link2.heading)
- );
- const heading = cache.headings[headingIndex];
- const startAt = heading.position.start.offset;
- const endAt = ((_d = (_c = (_b = cache.headings.slice(headingIndex + 1).find((h4) => h4.level <= heading.level)) == null ? void 0 : _b.position) == null ? void 0 : _c.start) == null ? void 0 : _d.offset) || text.length;
- blockText = text.substring(startAt, endAt);
- } else if (link2.blockId) {
- const block = cache.blocks[link2.blockId];
- const startAt = block.position.start.offset;
- const endAt = block.position.end.offset;
- blockText = text.substring(startAt, endAt);
- } else {
- blockText = text;
- }
- this.renderMarkdownWrapper(blockText, el, recursiveDepth + 1);
- }
-};
-var Deck = class {
- constructor(deckName, parent) {
- this.newFlashcardsCount = 0;
- // counts those in subdecks too
- this.dueFlashcardsCount = 0;
- // counts those in subdecks too
- this.totalFlashcards = 0;
- this.deckName = deckName;
- this.newFlashcardsCount = 0;
- this.flashcards = [];
- this.dueFlashcardsCount = 0;
- this.totalFlashcards = 0;
- this.subdecks = [];
- this.parent = parent;
- }
- createDeck(deckPath) {
- if (deckPath.length === 0) {
- return;
- }
- const deckName = deckPath.shift();
- for (const deck2 of this.subdecks) {
- if (deckName === deck2.deckName) {
- deck2.createDeck(deckPath);
- return;
- }
- }
- const deck = new Deck(deckName, this);
- this.subdecks.push(deck);
- deck.createDeck(deckPath);
- }
- insertFlashcard(deckPath, cardObj) {
- if (cardObj.isDue) {
- this.dueFlashcardsCount++;
- } else {
- this.newFlashcardsCount++;
- }
- if (!cardObj.isReDue)
- this.totalFlashcards++;
- if (deckPath.length === 0) {
- import_heap.default.push(this.flashcards, cardObj, Deck.comparator);
- return;
- }
- const deckName = deckPath.shift();
- for (const deck of this.subdecks) {
- if (deckName === deck.deckName) {
- deck.insertFlashcard(deckPath, cardObj);
- return;
- }
- }
- }
- // count flashcards that have either been buried
- // or aren't due yet
- countFlashcard(deckPath, n = 1) {
- this.totalFlashcards += n;
- const deckName = deckPath.shift();
- for (const deck of this.subdecks) {
- if (deckName === deck.deckName) {
- deck.countFlashcard(deckPath, n);
- return;
- }
- }
- }
- deleteFlashcardAtIndex(index, cardIsDue, base = true) {
- if (base) {
- this.flashcards.splice(index, 1);
- import_heap.default.heapify(this.flashcards, Deck.comparator);
- }
- if (cardIsDue) {
- this.dueFlashcardsCount--;
- } else {
- this.newFlashcardsCount--;
- }
- if (this.parent !== null)
- this.parent.deleteFlashcardAtIndex(index, cardIsDue, false);
- }
- /*
- * Notify the deck that a card has been changed.
- * Rather than updating the card in-place, we delete the old card
- * and insert the new card.
- */
- notifyCardChanged(oldCardIdx, newCard) {
- this.deleteFlashcardAtIndex(oldCardIdx, this.flashcards[oldCardIdx].isDue);
- const deckName = [this.deckName];
- let deck = this.parent;
- let root = this.parent;
- while (deck !== null) {
- deckName.push(deck.deckName);
- root = deck;
- deck = deck.parent;
- }
- root.insertFlashcard(deckName.reverse().slice(1, deckName.length), newCard);
- }
- sortSubdecksList() {
- this.subdecks.sort((a, b) => {
- if (a.deckName < b.deckName) {
- return -1;
- } else if (a.deckName > b.deckName) {
- return 1;
- }
- return 0;
- });
- for (const deck of this.subdecks) {
- deck.sortSubdecksList();
- }
- }
- render(containerEl, modal) {
- const deckView = containerEl.createDiv("tree-item");
- const deckViewSelf = deckView.createDiv(
- "tree-item-self tag-pane-tag is-clickable"
- );
- const shouldBeInitiallyExpanded = modal.plugin.data.settings.initiallyExpandAllSubdecksInTree;
- let collapsed = !shouldBeInitiallyExpanded;
- let collapseIconEl = null;
- if (this.subdecks.length > 0) {
- collapseIconEl = deckViewSelf.createDiv("tree-item-icon collapse-icon");
- collapseIconEl.innerHTML = COLLAPSE_ICON;
- collapseIconEl.childNodes[0].style.transform = collapsed ? "rotate(-90deg)" : "";
- }
- const deckViewInner = deckViewSelf.createDiv("tree-item-inner");
- deckViewInner.addEventListener("click", () => {
- modal.plugin.data.historyDeck = this.deckName;
- modal.currentDeck = this;
- modal.checkDeck = this.parent;
- modal.setupCardsView();
- this.nextCard(modal);
- });
- const deckViewInnerText = deckViewInner.createDiv("tag-pane-tag-text");
- deckViewInnerText.innerHTML += /* @__PURE__ */ (0, import_vhtml.default)("span", { class: "tag-pane-tag-self" }, this.deckName);
- const deckViewOuter = deckViewSelf.createDiv("tree-item-flair-outer");
- deckViewOuter.innerHTML += /* @__PURE__ */ (0, import_vhtml.default)("span", null, /* @__PURE__ */ (0, import_vhtml.default)(
- "span",
- {
- style: "background-color:#4caf50;",
- class: "tag-pane-tag-count tree-item-flair sr-deck-counts"
- },
- this.dueFlashcardsCount.toString()
- ), /* @__PURE__ */ (0, import_vhtml.default)(
- "span",
- {
- style: "background-color:#2196f3;",
- class: "tag-pane-tag-count tree-item-flair sr-deck-counts"
- },
- this.newFlashcardsCount.toString()
- ), /* @__PURE__ */ (0, import_vhtml.default)(
- "span",
- {
- style: "background-color:#ff7043;",
- class: "tag-pane-tag-count tree-item-flair sr-deck-counts"
- },
- this.totalFlashcards.toString()
- ));
- const deckViewChildren = deckView.createDiv("tree-item-children");
- deckViewChildren.style.display = collapsed ? "none" : "block";
- if (this.subdecks.length > 0) {
- collapseIconEl.addEventListener("click", () => {
- if (collapsed) {
- collapseIconEl.childNodes[0].style.transform = "";
- deckViewChildren.style.display = "block";
- } else {
- collapseIconEl.childNodes[0].style.transform = "rotate(-90deg)";
- deckViewChildren.style.display = "none";
- }
- collapsed = !collapsed;
- });
- }
- for (const deck of this.subdecks) {
- deck.render(deckViewChildren, modal);
- }
- }
- nextCard(modal) {
- if (this.flashcards.length === 0) {
- if (this.dueFlashcardsCount + this.newFlashcardsCount > 0) {
- for (const deck of this.subdecks) {
- if (deck.dueFlashcardsCount + deck.newFlashcardsCount > 0) {
- modal.currentDeck = deck;
- deck.nextCard(modal);
- return;
- }
- }
- }
- if (this.parent == modal.checkDeck) {
- modal.plugin.data.historyDeck = "";
- modal.decksList();
- } else {
- this.parent.nextCard(modal);
- }
- return;
- }
- import_heap.default.heapify(this.flashcards, Deck.comparator);
- modal.responseDiv.style.display = "none";
- modal.resetButton.disabled = true;
- modal.titleEl.setText(
- `${this.deckName}: ${this.dueFlashcardsCount + this.newFlashcardsCount}`
- );
- modal.answerBtn.style.display = "initial";
- modal.flashcardView.empty();
- modal.mode = 1 /* Front */;
- let interval = 1, ease = modal.plugin.data.settings.baseEase, delayBeforeReview = 0;
- if (this.flashcards.length > 0) {
- modal.currentCardIdx = 0;
- modal.currentCard = this.flashcards[modal.currentCardIdx];
- modal.renderMarkdownWrapper(modal.currentCard.front, modal.flashcardView);
- if (modal.currentCard.isDue) {
- interval = modal.currentCard.interval;
- ease = modal.currentCard.ease;
- delayBeforeReview = modal.currentCard.delayBeforeReview;
- } else if (Object.prototype.hasOwnProperty.call(
- modal.plugin.easeByPath,
- modal.currentCard.note.path
- )) {
- ease = modal.plugin.easeByPath[modal.currentCard.note.path];
- }
- }
- const impossibleInterval = schedule(
- 3 /* Impossible */,
- interval,
- ease,
- delayBeforeReview,
- modal.plugin.data.settings
- ).interval;
- const hardInterval = schedule(
- 2 /* Hard */,
- interval,
- ease,
- delayBeforeReview,
- modal.plugin.data.settings
- ).interval;
- const goodInterval = schedule(
- 1 /* Good */,
- interval,
- ease,
- delayBeforeReview,
- modal.plugin.data.settings
- ).interval;
- const easyInterval = schedule(
- 0 /* Easy */,
- interval,
- ease,
- delayBeforeReview,
- modal.plugin.data.settings
- ).interval;
- if (modal.ignoreStats) {
- modal.impossibleBtn.setText(`${modal.plugin.data.settings.flashcardImpossibleText}`);
- modal.hardBtn.setText(`${modal.plugin.data.settings.flashcardHardText}`);
- modal.goodBtn.setText(`${modal.plugin.data.settings.flashcardGoodText}`);
- modal.easyBtn.setText(`${modal.plugin.data.settings.flashcardEasyText}`);
- } else if (import_obsidian3.Platform.isMobile) {
- modal.impossibleBtn.setText(textInterval(impossibleInterval, true));
- modal.hardBtn.setText(textInterval(hardInterval, true));
- modal.goodBtn.setText(textInterval(goodInterval, true));
- modal.easyBtn.setText(textInterval(easyInterval, true));
- } else {
- modal.impossibleBtn.setText(
- `${modal.plugin.data.settings.flashcardImpossibleText} - ${textInterval(
- impossibleInterval,
- false
- )}`
- );
- modal.hardBtn.setText(
- `${modal.plugin.data.settings.flashcardHardText} - ${textInterval(
- hardInterval,
- false
- )}`
- );
- modal.goodBtn.setText(
- `${modal.plugin.data.settings.flashcardGoodText} - ${textInterval(
- goodInterval,
- false
- )}`
- );
- modal.easyBtn.setText(
- `${modal.plugin.data.settings.flashcardEasyText} - ${textInterval(
- easyInterval,
- false
- )}`
- );
- }
- if (modal.plugin.data.settings.showContextInCards)
- modal.contextView.setText(modal.currentCard.context);
- }
- /**
- * Comparator for cards. Used to determine which card should be reviewed first.
- * @param a One card to compare with another
- * @param b The other card to compare
- * @returns +1 => b should be reviewed first, -1 => a should be reviewed first, 0 => no preference
- */
- static comparator(a, b) {
- if (!a.isDue && !b.isDue)
- return 0;
- const now = window.moment(Date.now()).valueOf();
- if (a.isReDue && b.isReDue) {
- const aReviewDelay = a.previousReview + a.interval * 60 * 1e3 - now;
- const bReviewDelay = b.previousReview + b.interval * 60 * 1e3 - now;
- return aReviewDelay < bReviewDelay ? -1 : 1;
- }
- if (a.isReDue) {
- const aDiff = now - a.previousReview + a.interval * 60 * 1e3;
- return aDiff > 0 ? 1 : -1;
- } else if (b.isReDue) {
- const bDiff = now - b.previousReview + b.interval * 60 * 1e3;
- return bDiff > 0 ? -1 : 1;
- }
- return 0;
- }
-};
-
-// src/stats-modal.tsx
-var import_obsidian4 = require("obsidian");
-var import_vhtml2 = __toESM(require_vhtml());
-
-// node_modules/@kurkle/color/dist/color.esm.js
-function round(v) {
- return v + 0.5 | 0;
-}
-var lim = (v, l, h4) => Math.max(Math.min(v, h4), l);
-function p2b(v) {
- return lim(round(v * 2.55), 0, 255);
-}
-function n2b(v) {
- return lim(round(v * 255), 0, 255);
-}
-function b2n(v) {
- return lim(round(v / 2.55) / 100, 0, 1);
-}
-function n2p(v) {
- return lim(round(v * 100), 0, 100);
-}
-var map$1 = { 0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15 };
-var hex = [..."0123456789ABCDEF"];
-var h1 = (b) => hex[b & 15];
-var h2 = (b) => hex[(b & 240) >> 4] + hex[b & 15];
-var eq = (b) => (b & 240) >> 4 === (b & 15);
-var isShort = (v) => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);
-function hexParse(str) {
- var len = str.length;
- var ret;
- if (str[0] === "#") {
- if (len === 4 || len === 5) {
- ret = {
- r: 255 & map$1[str[1]] * 17,
- g: 255 & map$1[str[2]] * 17,
- b: 255 & map$1[str[3]] * 17,
- a: len === 5 ? map$1[str[4]] * 17 : 255
- };
- } else if (len === 7 || len === 9) {
- ret = {
- r: map$1[str[1]] << 4 | map$1[str[2]],
- g: map$1[str[3]] << 4 | map$1[str[4]],
- b: map$1[str[5]] << 4 | map$1[str[6]],
- a: len === 9 ? map$1[str[7]] << 4 | map$1[str[8]] : 255
- };
- }
- }
- return ret;
-}
-var alpha = (a, f) => a < 255 ? f(a) : "";
-function hexString(v) {
- var f = isShort(v) ? h1 : h2;
- return v ? "#" + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f) : void 0;
-}
-var HUE_RE = /^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;
-function hsl2rgbn(h4, s, l) {
- const a = s * Math.min(l, 1 - l);
- const f = (n, k = (n + h4 / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);
- return [f(0), f(8), f(4)];
-}
-function hsv2rgbn(h4, s, v) {
- const f = (n, k = (n + h4 / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);
- return [f(5), f(3), f(1)];
-}
-function hwb2rgbn(h4, w, b) {
- const rgb = hsl2rgbn(h4, 1, 0.5);
- let i;
- if (w + b > 1) {
- i = 1 / (w + b);
- w *= i;
- b *= i;
- }
- for (i = 0; i < 3; i++) {
- rgb[i] *= 1 - w - b;
- rgb[i] += w;
- }
- return rgb;
-}
-function hueValue(r, g, b, d, max) {
- if (r === max) {
- return (g - b) / d + (g < b ? 6 : 0);
- }
- if (g === max) {
- return (b - r) / d + 2;
- }
- return (r - g) / d + 4;
-}
-function rgb2hsl(v) {
- const range = 255;
- const r = v.r / range;
- const g = v.g / range;
- const b = v.b / range;
- const max = Math.max(r, g, b);
- const min = Math.min(r, g, b);
- const l = (max + min) / 2;
- let h4, s, d;
- if (max !== min) {
- d = max - min;
- s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
- h4 = hueValue(r, g, b, d, max);
- h4 = h4 * 60 + 0.5;
- }
- return [h4 | 0, s || 0, l];
-}
-function calln(f, a, b, c) {
- return (Array.isArray(a) ? f(a[0], a[1], a[2]) : f(a, b, c)).map(n2b);
-}
-function hsl2rgb(h4, s, l) {
- return calln(hsl2rgbn, h4, s, l);
-}
-function hwb2rgb(h4, w, b) {
- return calln(hwb2rgbn, h4, w, b);
-}
-function hsv2rgb(h4, s, v) {
- return calln(hsv2rgbn, h4, s, v);
-}
-function hue(h4) {
- return (h4 % 360 + 360) % 360;
-}
-function hueParse(str) {
- const m = HUE_RE.exec(str);
- let a = 255;
- let v;
- if (!m) {
- return;
- }
- if (m[5] !== v) {
- a = m[6] ? p2b(+m[5]) : n2b(+m[5]);
- }
- const h4 = hue(+m[2]);
- const p1 = +m[3] / 100;
- const p2 = +m[4] / 100;
- if (m[1] === "hwb") {
- v = hwb2rgb(h4, p1, p2);
- } else if (m[1] === "hsv") {
- v = hsv2rgb(h4, p1, p2);
- } else {
- v = hsl2rgb(h4, p1, p2);
- }
- return {
- r: v[0],
- g: v[1],
- b: v[2],
- a
- };
-}
-function rotate(v, deg) {
- var h4 = rgb2hsl(v);
- h4[0] = hue(h4[0] + deg);
- h4 = hsl2rgb(h4);
- v.r = h4[0];
- v.g = h4[1];
- v.b = h4[2];
-}
-function hslString(v) {
- if (!v) {
- return;
- }
- const a = rgb2hsl(v);
- const h4 = a[0];
- const s = n2p(a[1]);
- const l = n2p(a[2]);
- return v.a < 255 ? `hsla(${h4}, ${s}%, ${l}%, ${b2n(v.a)})` : `hsl(${h4}, ${s}%, ${l}%)`;
-}
-var map = {
- x: "dark",
- Z: "light",
- Y: "re",
- X: "blu",
- W: "gr",
- V: "medium",
- U: "slate",
- A: "ee",
- T: "ol",
- S: "or",
- B: "ra",
- C: "lateg",
- D: "ights",
- R: "in",
- Q: "turquois",
- E: "hi",
- P: "ro",
- O: "al",
- N: "le",
- M: "de",
- L: "yello",
- F: "en",
- K: "ch",
- G: "arks",
- H: "ea",
- I: "ightg",
- J: "wh"
-};
-var names$1 = {
- OiceXe: "f0f8ff",
- antiquewEte: "faebd7",
- aqua: "ffff",
- aquamarRe: "7fffd4",
- azuY: "f0ffff",
- beige: "f5f5dc",
- bisque: "ffe4c4",
- black: "0",
- blanKedOmond: "ffebcd",
- Xe: "ff",
- XeviTet: "8a2be2",
- bPwn: "a52a2a",
- burlywood: "deb887",
- caMtXe: "5f9ea0",
- KartYuse: "7fff00",
- KocTate: "d2691e",
- cSO: "ff7f50",
- cSnflowerXe: "6495ed",
- cSnsilk: "fff8dc",
- crimson: "dc143c",
- cyan: "ffff",
- xXe: "8b",
- xcyan: "8b8b",
- xgTMnPd: "b8860b",
- xWay: "a9a9a9",
- xgYF: "6400",
- xgYy: "a9a9a9",
- xkhaki: "bdb76b",
- xmagFta: "8b008b",
- xTivegYF: "556b2f",
- xSange: "ff8c00",
- xScEd: "9932cc",
- xYd: "8b0000",
- xsOmon: "e9967a",
- xsHgYF: "8fbc8f",
- xUXe: "483d8b",
- xUWay: "2f4f4f",
- xUgYy: "2f4f4f",
- xQe: "ced1",
- xviTet: "9400d3",
- dAppRk: "ff1493",
- dApskyXe: "bfff",
- dimWay: "696969",
- dimgYy: "696969",
- dodgerXe: "1e90ff",
- fiYbrick: "b22222",
- flSOwEte: "fffaf0",
- foYstWAn: "228b22",
- fuKsia: "ff00ff",
- gaRsbSo: "dcdcdc",
- ghostwEte: "f8f8ff",
- gTd: "ffd700",
- gTMnPd: "daa520",
- Way: "808080",
- gYF: "8000",
- gYFLw: "adff2f",
- gYy: "808080",
- honeyMw: "f0fff0",
- hotpRk: "ff69b4",
- RdianYd: "cd5c5c",
- Rdigo: "4b0082",
- ivSy: "fffff0",
- khaki: "f0e68c",
- lavFMr: "e6e6fa",
- lavFMrXsh: "fff0f5",
- lawngYF: "7cfc00",
- NmoncEffon: "fffacd",
- ZXe: "add8e6",
- ZcSO: "f08080",
- Zcyan: "e0ffff",
- ZgTMnPdLw: "fafad2",
- ZWay: "d3d3d3",
- ZgYF: "90ee90",
- ZgYy: "d3d3d3",
- ZpRk: "ffb6c1",
- ZsOmon: "ffa07a",
- ZsHgYF: "20b2aa",
- ZskyXe: "87cefa",
- ZUWay: "778899",
- ZUgYy: "778899",
- ZstAlXe: "b0c4de",
- ZLw: "ffffe0",
- lime: "ff00",
- limegYF: "32cd32",
- lRF: "faf0e6",
- magFta: "ff00ff",
- maPon: "800000",
- VaquamarRe: "66cdaa",
- VXe: "cd",
- VScEd: "ba55d3",
- VpurpN: "9370db",
- VsHgYF: "3cb371",
- VUXe: "7b68ee",
- VsprRggYF: "fa9a",
- VQe: "48d1cc",
- VviTetYd: "c71585",
- midnightXe: "191970",
- mRtcYam: "f5fffa",
- mistyPse: "ffe4e1",
- moccasR: "ffe4b5",
- navajowEte: "ffdead",
- navy: "80",
- Tdlace: "fdf5e6",
- Tive: "808000",
- TivedBb: "6b8e23",
- Sange: "ffa500",
- SangeYd: "ff4500",
- ScEd: "da70d6",
- pOegTMnPd: "eee8aa",
- pOegYF: "98fb98",
- pOeQe: "afeeee",
- pOeviTetYd: "db7093",
- papayawEp: "ffefd5",
- pHKpuff: "ffdab9",
- peru: "cd853f",
- pRk: "ffc0cb",
- plum: "dda0dd",
- powMrXe: "b0e0e6",
- purpN: "800080",
- YbeccapurpN: "663399",
- Yd: "ff0000",
- Psybrown: "bc8f8f",
- PyOXe: "4169e1",
- saddNbPwn: "8b4513",
- sOmon: "fa8072",
- sandybPwn: "f4a460",
- sHgYF: "2e8b57",
- sHshell: "fff5ee",
- siFna: "a0522d",
- silver: "c0c0c0",
- skyXe: "87ceeb",
- UXe: "6a5acd",
- UWay: "708090",
- UgYy: "708090",
- snow: "fffafa",
- sprRggYF: "ff7f",
- stAlXe: "4682b4",
- tan: "d2b48c",
- teO: "8080",
- tEstN: "d8bfd8",
- tomato: "ff6347",
- Qe: "40e0d0",
- viTet: "ee82ee",
- JHt: "f5deb3",
- wEte: "ffffff",
- wEtesmoke: "f5f5f5",
- Lw: "ffff00",
- LwgYF: "9acd32"
-};
-function unpack() {
- const unpacked = {};
- const keys = Object.keys(names$1);
- const tkeys = Object.keys(map);
- let i, j, k, ok, nk;
- for (i = 0; i < keys.length; i++) {
- ok = nk = keys[i];
- for (j = 0; j < tkeys.length; j++) {
- k = tkeys[j];
- nk = nk.replace(k, map[k]);
- }
- k = parseInt(names$1[ok], 16);
- unpacked[nk] = [k >> 16 & 255, k >> 8 & 255, k & 255];
- }
- return unpacked;
-}
-var names;
-function nameParse(str) {
- if (!names) {
- names = unpack();
- names.transparent = [0, 0, 0, 0];
- }
- const a = names[str.toLowerCase()];
- return a && {
- r: a[0],
- g: a[1],
- b: a[2],
- a: a.length === 4 ? a[3] : 255
- };
-}
-var RGB_RE = /^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;
-function rgbParse(str) {
- const m = RGB_RE.exec(str);
- let a = 255;
- let r, g, b;
- if (!m) {
- return;
- }
- if (m[7] !== r) {
- const v = +m[7];
- a = m[8] ? p2b(v) : lim(v * 255, 0, 255);
- }
- r = +m[1];
- g = +m[3];
- b = +m[5];
- r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));
- g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));
- b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));
- return {
- r,
- g,
- b,
- a
- };
-}
-function rgbString(v) {
- return v && (v.a < 255 ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})` : `rgb(${v.r}, ${v.g}, ${v.b})`);
-}
-var to = (v) => v <= 31308e-7 ? v * 12.92 : Math.pow(v, 1 / 2.4) * 1.055 - 0.055;
-var from = (v) => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);
-function interpolate2(rgb1, rgb2, t2) {
- const r = from(b2n(rgb1.r));
- const g = from(b2n(rgb1.g));
- const b = from(b2n(rgb1.b));
- return {
- r: n2b(to(r + t2 * (from(b2n(rgb2.r)) - r))),
- g: n2b(to(g + t2 * (from(b2n(rgb2.g)) - g))),
- b: n2b(to(b + t2 * (from(b2n(rgb2.b)) - b))),
- a: rgb1.a + t2 * (rgb2.a - rgb1.a)
- };
-}
-function modHSL(v, i, ratio) {
- if (v) {
- let tmp = rgb2hsl(v);
- tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));
- tmp = hsl2rgb(tmp);
- v.r = tmp[0];
- v.g = tmp[1];
- v.b = tmp[2];
- }
-}
-function clone(v, proto) {
- return v ? Object.assign(proto || {}, v) : v;
-}
-function fromObject(input) {
- var v = { r: 0, g: 0, b: 0, a: 255 };
- if (Array.isArray(input)) {
- if (input.length >= 3) {
- v = { r: input[0], g: input[1], b: input[2], a: 255 };
- if (input.length > 3) {
- v.a = n2b(input[3]);
- }
- }
- } else {
- v = clone(input, { r: 0, g: 0, b: 0, a: 1 });
- v.a = n2b(v.a);
- }
- return v;
-}
-function functionParse(str) {
- if (str.charAt(0) === "r") {
- return rgbParse(str);
- }
- return hueParse(str);
-}
-var Color = class {
- constructor(input) {
- if (input instanceof Color) {
- return input;
- }
- const type = typeof input;
- let v;
- if (type === "object") {
- v = fromObject(input);
- } else if (type === "string") {
- v = hexParse(input) || nameParse(input) || functionParse(input);
- }
- this._rgb = v;
- this._valid = !!v;
- }
- get valid() {
- return this._valid;
- }
- get rgb() {
- var v = clone(this._rgb);
- if (v) {
- v.a = b2n(v.a);
- }
- return v;
- }
- set rgb(obj) {
- this._rgb = fromObject(obj);
- }
- rgbString() {
- return this._valid ? rgbString(this._rgb) : void 0;
- }
- hexString() {
- return this._valid ? hexString(this._rgb) : void 0;
- }
- hslString() {
- return this._valid ? hslString(this._rgb) : void 0;
- }
- mix(color2, weight) {
- if (color2) {
- const c1 = this.rgb;
- const c2 = color2.rgb;
- let w2;
- const p = weight === w2 ? 0.5 : weight;
- const w = 2 * p - 1;
- const a = c1.a - c2.a;
- const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2;
- w2 = 1 - w1;
- c1.r = 255 & w1 * c1.r + w2 * c2.r + 0.5;
- c1.g = 255 & w1 * c1.g + w2 * c2.g + 0.5;
- c1.b = 255 & w1 * c1.b + w2 * c2.b + 0.5;
- c1.a = p * c1.a + (1 - p) * c2.a;
- this.rgb = c1;
- }
- return this;
- }
- interpolate(color2, t2) {
- if (color2) {
- this._rgb = interpolate2(this._rgb, color2._rgb, t2);
- }
- return this;
- }
- clone() {
- return new Color(this.rgb);
- }
- alpha(a) {
- this._rgb.a = n2b(a);
- return this;
- }
- clearer(ratio) {
- const rgb = this._rgb;
- rgb.a *= 1 - ratio;
- return this;
- }
- greyscale() {
- const rgb = this._rgb;
- const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);
- rgb.r = rgb.g = rgb.b = val;
- return this;
- }
- opaquer(ratio) {
- const rgb = this._rgb;
- rgb.a *= 1 + ratio;
- return this;
- }
- negate() {
- const v = this._rgb;
- v.r = 255 - v.r;
- v.g = 255 - v.g;
- v.b = 255 - v.b;
- return this;
- }
- lighten(ratio) {
- modHSL(this._rgb, 2, ratio);
- return this;
- }
- darken(ratio) {
- modHSL(this._rgb, 2, -ratio);
- return this;
- }
- saturate(ratio) {
- modHSL(this._rgb, 1, ratio);
- return this;
- }
- desaturate(ratio) {
- modHSL(this._rgb, 1, -ratio);
- return this;
- }
- rotate(deg) {
- rotate(this._rgb, deg);
- return this;
- }
-};
-
-// node_modules/chart.js/dist/chunks/helpers.segment.js
-function noop() {
-}
-var uid = (() => {
- let id = 0;
- return () => id++;
-})();
-function isNullOrUndef(value) {
- return value === null || typeof value === "undefined";
-}
-function isArray(value) {
- if (Array.isArray && Array.isArray(value)) {
- return true;
- }
- const type = Object.prototype.toString.call(value);
- if (type.slice(0, 7) === "[object" && type.slice(-6) === "Array]") {
- return true;
- }
- return false;
-}
-function isObject(value) {
- return value !== null && Object.prototype.toString.call(value) === "[object Object]";
-}
-function isNumberFinite(value) {
- return (typeof value === "number" || value instanceof Number) && isFinite(+value);
-}
-function finiteOrDefault(value, defaultValue) {
- return isNumberFinite(value) ? value : defaultValue;
-}
-function valueOrDefault(value, defaultValue) {
- return typeof value === "undefined" ? defaultValue : value;
-}
-var toPercentage = (value, dimension) => typeof value === "string" && value.endsWith("%") ? parseFloat(value) / 100 : +value / dimension;
-var toDimension = (value, dimension) => typeof value === "string" && value.endsWith("%") ? parseFloat(value) / 100 * dimension : +value;
-function callback(fn, args, thisArg) {
- if (fn && typeof fn.call === "function") {
- return fn.apply(thisArg, args);
- }
-}
-function each(loopable, fn, thisArg, reverse) {
- let i, len, keys;
- if (isArray(loopable)) {
- len = loopable.length;
- if (reverse) {
- for (i = len - 1; i >= 0; i--) {
- fn.call(thisArg, loopable[i], i);
- }
- } else {
- for (i = 0; i < len; i++) {
- fn.call(thisArg, loopable[i], i);
- }
- }
- } else if (isObject(loopable)) {
- keys = Object.keys(loopable);
- len = keys.length;
- for (i = 0; i < len; i++) {
- fn.call(thisArg, loopable[keys[i]], keys[i]);
- }
- }
-}
-function _elementsEqual(a0, a1) {
- let i, ilen, v0, v1;
- if (!a0 || !a1 || a0.length !== a1.length) {
- return false;
- }
- for (i = 0, ilen = a0.length; i < ilen; ++i) {
- v0 = a0[i];
- v1 = a1[i];
- if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {
- return false;
- }
- }
- return true;
-}
-function clone2(source) {
- if (isArray(source)) {
- return source.map(clone2);
- }
- if (isObject(source)) {
- const target = /* @__PURE__ */ Object.create(null);
- const keys = Object.keys(source);
- const klen = keys.length;
- let k = 0;
- for (; k < klen; ++k) {
- target[keys[k]] = clone2(source[keys[k]]);
- }
- return target;
- }
- return source;
-}
-function isValidKey(key) {
- return [
- "__proto__",
- "prototype",
- "constructor"
- ].indexOf(key) === -1;
-}
-function _merger(key, target, source, options) {
- if (!isValidKey(key)) {
- return;
- }
- const tval = target[key];
- const sval = source[key];
- if (isObject(tval) && isObject(sval)) {
- merge(tval, sval, options);
- } else {
- target[key] = clone2(sval);
- }
-}
-function merge(target, source, options) {
- const sources = isArray(source) ? source : [
- source
- ];
- const ilen = sources.length;
- if (!isObject(target)) {
- return target;
- }
- options = options || {};
- const merger = options.merger || _merger;
- let current;
- for (let i = 0; i < ilen; ++i) {
- current = sources[i];
- if (!isObject(current)) {
- continue;
- }
- const keys = Object.keys(current);
- for (let k = 0, klen = keys.length; k < klen; ++k) {
- merger(keys[k], target, current, options);
- }
- }
- return target;
-}
-function mergeIf(target, source) {
- return merge(target, source, {
- merger: _mergerIf
- });
-}
-function _mergerIf(key, target, source) {
- if (!isValidKey(key)) {
- return;
- }
- const tval = target[key];
- const sval = source[key];
- if (isObject(tval) && isObject(sval)) {
- mergeIf(tval, sval);
- } else if (!Object.prototype.hasOwnProperty.call(target, key)) {
- target[key] = clone2(sval);
- }
-}
-var keyResolvers = {
- // Chart.helpers.core resolveObjectKey should resolve empty key to root object
- "": (v) => v,
- // default resolvers
- x: (o) => o.x,
- y: (o) => o.y
-};
-function _splitKey(key) {
- const parts = key.split(".");
- const keys = [];
- let tmp = "";
- for (const part of parts) {
- tmp += part;
- if (tmp.endsWith("\\")) {
- tmp = tmp.slice(0, -1) + ".";
- } else {
- keys.push(tmp);
- tmp = "";
- }
- }
- return keys;
-}
-function _getKeyResolver(key) {
- const keys = _splitKey(key);
- return (obj) => {
- for (const k of keys) {
- if (k === "") {
- break;
- }
- obj = obj && obj[k];
- }
- return obj;
- };
-}
-function resolveObjectKey(obj, key) {
- const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));
- return resolver(obj);
-}
-function _capitalize(str) {
- return str.charAt(0).toUpperCase() + str.slice(1);
-}
-var defined = (value) => typeof value !== "undefined";
-var isFunction = (value) => typeof value === "function";
-var setsEqual = (a, b) => {
- if (a.size !== b.size) {
- return false;
- }
- for (const item of a) {
- if (!b.has(item)) {
- return false;
- }
- }
- return true;
-};
-function _isClickEvent(e) {
- return e.type === "mouseup" || e.type === "click" || e.type === "contextmenu";
-}
-var PI = Math.PI;
-var TAU = 2 * PI;
-var PITAU = TAU + PI;
-var INFINITY = Number.POSITIVE_INFINITY;
-var RAD_PER_DEG = PI / 180;
-var HALF_PI = PI / 2;
-var QUARTER_PI = PI / 4;
-var TWO_THIRDS_PI = PI * 2 / 3;
-var log10 = Math.log10;
-var sign = Math.sign;
-function almostEquals(x, y, epsilon) {
- return Math.abs(x - y) < epsilon;
-}
-function niceNum(range) {
- const roundedRange = Math.round(range);
- range = almostEquals(range, roundedRange, range / 1e3) ? roundedRange : range;
- const niceRange = Math.pow(10, Math.floor(log10(range)));
- const fraction = range / niceRange;
- const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;
- return niceFraction * niceRange;
-}
-function _factorize(value) {
- const result = [];
- const sqrt = Math.sqrt(value);
- let i;
- for (i = 1; i < sqrt; i++) {
- if (value % i === 0) {
- result.push(i);
- result.push(value / i);
- }
- }
- if (sqrt === (sqrt | 0)) {
- result.push(sqrt);
- }
- result.sort((a, b) => a - b).pop();
- return result;
-}
-function isNumber(n) {
- return !isNaN(parseFloat(n)) && isFinite(n);
-}
-function almostWhole(x, epsilon) {
- const rounded = Math.round(x);
- return rounded - epsilon <= x && rounded + epsilon >= x;
-}
-function _setMinAndMaxByKey(array, target, property) {
- let i, ilen, value;
- for (i = 0, ilen = array.length; i < ilen; i++) {
- value = array[i][property];
- if (!isNaN(value)) {
- target.min = Math.min(target.min, value);
- target.max = Math.max(target.max, value);
- }
- }
-}
-function toRadians(degrees) {
- return degrees * (PI / 180);
-}
-function toDegrees(radians) {
- return radians * (180 / PI);
-}
-function _decimalPlaces(x) {
- if (!isNumberFinite(x)) {
- return;
- }
- let e = 1;
- let p = 0;
- while (Math.round(x * e) / e !== x) {
- e *= 10;
- p++;
- }
- return p;
-}
-function getAngleFromPoint(centrePoint, anglePoint) {
- const distanceFromXCenter = anglePoint.x - centrePoint.x;
- const distanceFromYCenter = anglePoint.y - centrePoint.y;
- const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);
- let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);
- if (angle < -0.5 * PI) {
- angle += TAU;
- }
- return {
- angle,
- distance: radialDistanceFromCenter
- };
-}
-function distanceBetweenPoints(pt1, pt2) {
- return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));
-}
-function _normalizeAngle(a) {
- return (a % TAU + TAU) % TAU;
-}
-function _angleBetween(angle, start, end, sameAngleIsFullCircle) {
- const a = _normalizeAngle(angle);
- const s = _normalizeAngle(start);
- const e = _normalizeAngle(end);
- const angleToStart = _normalizeAngle(s - a);
- const angleToEnd = _normalizeAngle(e - a);
- const startToAngle = _normalizeAngle(a - s);
- const endToAngle = _normalizeAngle(a - e);
- return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;
-}
-function _limitValue(value, min, max) {
- return Math.max(min, Math.min(max, value));
-}
-function _int16Range(value) {
- return _limitValue(value, -32768, 32767);
-}
-function _isBetween(value, start, end, epsilon = 1e-6) {
- return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;
-}
-function _lookup(table, value, cmp) {
- cmp = cmp || ((index) => table[index] < value);
- let hi = table.length - 1;
- let lo = 0;
- let mid;
- while (hi - lo > 1) {
- mid = lo + hi >> 1;
- if (cmp(mid)) {
- lo = mid;
- } else {
- hi = mid;
- }
- }
- return {
- lo,
- hi
- };
-}
-var _lookupByKey = (table, key, value, last) => _lookup(table, value, last ? (index) => {
- const ti = table[index][key];
- return ti < value || ti === value && table[index + 1][key] === value;
-} : (index) => table[index][key] < value);
-var _rlookupByKey = (table, key, value) => _lookup(table, value, (index) => table[index][key] >= value);
-function _filterBetween(values, min, max) {
- let start = 0;
- let end = values.length;
- while (start < end && values[start] < min) {
- start++;
- }
- while (end > start && values[end - 1] > max) {
- end--;
- }
- return start > 0 || end < values.length ? values.slice(start, end) : values;
-}
-var arrayEvents = [
- "push",
- "pop",
- "shift",
- "splice",
- "unshift"
-];
-function listenArrayEvents(array, listener) {
- if (array._chartjs) {
- array._chartjs.listeners.push(listener);
- return;
- }
- Object.defineProperty(array, "_chartjs", {
- configurable: true,
- enumerable: false,
- value: {
- listeners: [
- listener
- ]
- }
- });
- arrayEvents.forEach((key) => {
- const method = "_onData" + _capitalize(key);
- const base = array[key];
- Object.defineProperty(array, key, {
- configurable: true,
- enumerable: false,
- value(...args) {
- const res = base.apply(this, args);
- array._chartjs.listeners.forEach((object) => {
- if (typeof object[method] === "function") {
- object[method](...args);
- }
- });
- return res;
- }
- });
- });
-}
-function unlistenArrayEvents(array, listener) {
- const stub = array._chartjs;
- if (!stub) {
- return;
- }
- const listeners = stub.listeners;
- const index = listeners.indexOf(listener);
- if (index !== -1) {
- listeners.splice(index, 1);
- }
- if (listeners.length > 0) {
- return;
- }
- arrayEvents.forEach((key) => {
- delete array[key];
- });
- delete array._chartjs;
-}
-function _arrayUnique(items) {
- const set2 = new Set(items);
- if (set2.size === items.length) {
- return items;
- }
- return Array.from(set2);
-}
-var requestAnimFrame = function() {
- if (typeof window === "undefined") {
- return function(callback2) {
- return callback2();
- };
- }
- return window.requestAnimationFrame;
-}();
-function throttled(fn, thisArg) {
- let argsToUse = [];
- let ticking = false;
- return function(...args) {
- argsToUse = args;
- if (!ticking) {
- ticking = true;
- requestAnimFrame.call(window, () => {
- ticking = false;
- fn.apply(thisArg, argsToUse);
- });
- }
- };
-}
-function debounce(fn, delay) {
- let timeout;
- return function(...args) {
- if (delay) {
- clearTimeout(timeout);
- timeout = setTimeout(fn, delay, args);
- } else {
- fn.apply(this, args);
- }
- return delay;
- };
-}
-var _toLeftRightCenter = (align) => align === "start" ? "left" : align === "end" ? "right" : "center";
-var _alignStartEnd = (align, start, end) => align === "start" ? start : align === "end" ? end : (start + end) / 2;
-var _textX = (align, left, right, rtl) => {
- const check = rtl ? "left" : "right";
- return align === check ? right : align === "center" ? (left + right) / 2 : left;
-};
-var atEdge = (t2) => t2 === 0 || t2 === 1;
-var elasticIn = (t2, s, p) => -(Math.pow(2, 10 * (t2 -= 1)) * Math.sin((t2 - s) * TAU / p));
-var elasticOut = (t2, s, p) => Math.pow(2, -10 * t2) * Math.sin((t2 - s) * TAU / p) + 1;
-var effects = {
- linear: (t2) => t2,
- easeInQuad: (t2) => t2 * t2,
- easeOutQuad: (t2) => -t2 * (t2 - 2),
- easeInOutQuad: (t2) => (t2 /= 0.5) < 1 ? 0.5 * t2 * t2 : -0.5 * (--t2 * (t2 - 2) - 1),
- easeInCubic: (t2) => t2 * t2 * t2,
- easeOutCubic: (t2) => (t2 -= 1) * t2 * t2 + 1,
- easeInOutCubic: (t2) => (t2 /= 0.5) < 1 ? 0.5 * t2 * t2 * t2 : 0.5 * ((t2 -= 2) * t2 * t2 + 2),
- easeInQuart: (t2) => t2 * t2 * t2 * t2,
- easeOutQuart: (t2) => -((t2 -= 1) * t2 * t2 * t2 - 1),
- easeInOutQuart: (t2) => (t2 /= 0.5) < 1 ? 0.5 * t2 * t2 * t2 * t2 : -0.5 * ((t2 -= 2) * t2 * t2 * t2 - 2),
- easeInQuint: (t2) => t2 * t2 * t2 * t2 * t2,
- easeOutQuint: (t2) => (t2 -= 1) * t2 * t2 * t2 * t2 + 1,
- easeInOutQuint: (t2) => (t2 /= 0.5) < 1 ? 0.5 * t2 * t2 * t2 * t2 * t2 : 0.5 * ((t2 -= 2) * t2 * t2 * t2 * t2 + 2),
- easeInSine: (t2) => -Math.cos(t2 * HALF_PI) + 1,
- easeOutSine: (t2) => Math.sin(t2 * HALF_PI),
- easeInOutSine: (t2) => -0.5 * (Math.cos(PI * t2) - 1),
- easeInExpo: (t2) => t2 === 0 ? 0 : Math.pow(2, 10 * (t2 - 1)),
- easeOutExpo: (t2) => t2 === 1 ? 1 : -Math.pow(2, -10 * t2) + 1,
- easeInOutExpo: (t2) => atEdge(t2) ? t2 : t2 < 0.5 ? 0.5 * Math.pow(2, 10 * (t2 * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t2 * 2 - 1)) + 2),
- easeInCirc: (t2) => t2 >= 1 ? t2 : -(Math.sqrt(1 - t2 * t2) - 1),
- easeOutCirc: (t2) => Math.sqrt(1 - (t2 -= 1) * t2),
- easeInOutCirc: (t2) => (t2 /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t2 * t2) - 1) : 0.5 * (Math.sqrt(1 - (t2 -= 2) * t2) + 1),
- easeInElastic: (t2) => atEdge(t2) ? t2 : elasticIn(t2, 0.075, 0.3),
- easeOutElastic: (t2) => atEdge(t2) ? t2 : elasticOut(t2, 0.075, 0.3),
- easeInOutElastic(t2) {
- const s = 0.1125;
- const p = 0.45;
- return atEdge(t2) ? t2 : t2 < 0.5 ? 0.5 * elasticIn(t2 * 2, s, p) : 0.5 + 0.5 * elasticOut(t2 * 2 - 1, s, p);
- },
- easeInBack(t2) {
- const s = 1.70158;
- return t2 * t2 * ((s + 1) * t2 - s);
- },
- easeOutBack(t2) {
- const s = 1.70158;
- return (t2 -= 1) * t2 * ((s + 1) * t2 + s) + 1;
- },
- easeInOutBack(t2) {
- let s = 1.70158;
- if ((t2 /= 0.5) < 1) {
- return 0.5 * (t2 * t2 * (((s *= 1.525) + 1) * t2 - s));
- }
- return 0.5 * ((t2 -= 2) * t2 * (((s *= 1.525) + 1) * t2 + s) + 2);
- },
- easeInBounce: (t2) => 1 - effects.easeOutBounce(1 - t2),
- easeOutBounce(t2) {
- const m = 7.5625;
- const d = 2.75;
- if (t2 < 1 / d) {
- return m * t2 * t2;
- }
- if (t2 < 2 / d) {
- return m * (t2 -= 1.5 / d) * t2 + 0.75;
- }
- if (t2 < 2.5 / d) {
- return m * (t2 -= 2.25 / d) * t2 + 0.9375;
- }
- return m * (t2 -= 2.625 / d) * t2 + 0.984375;
- },
- easeInOutBounce: (t2) => t2 < 0.5 ? effects.easeInBounce(t2 * 2) * 0.5 : effects.easeOutBounce(t2 * 2 - 1) * 0.5 + 0.5
-};
-function isPatternOrGradient(value) {
- if (value && typeof value === "object") {
- const type = value.toString();
- return type === "[object CanvasPattern]" || type === "[object CanvasGradient]";
- }
- return false;
-}
-function color(value) {
- return isPatternOrGradient(value) ? value : new Color(value);
-}
-function getHoverColor(value) {
- return isPatternOrGradient(value) ? value : new Color(value).saturate(0.5).darken(0.1).hexString();
-}
-var numbers = [
- "x",
- "y",
- "borderWidth",
- "radius",
- "tension"
-];
-var colors = [
- "color",
- "borderColor",
- "backgroundColor"
-];
-function applyAnimationsDefaults(defaults2) {
- defaults2.set("animation", {
- delay: void 0,
- duration: 1e3,
- easing: "easeOutQuart",
- fn: void 0,
- from: void 0,
- loop: void 0,
- to: void 0,
- type: void 0
- });
- defaults2.describe("animation", {
- _fallback: false,
- _indexable: false,
- _scriptable: (name) => name !== "onProgress" && name !== "onComplete" && name !== "fn"
- });
- defaults2.set("animations", {
- colors: {
- type: "color",
- properties: colors
- },
- numbers: {
- type: "number",
- properties: numbers
- }
- });
- defaults2.describe("animations", {
- _fallback: "animation"
- });
- defaults2.set("transitions", {
- active: {
- animation: {
- duration: 400
- }
- },
- resize: {
- animation: {
- duration: 0
- }
- },
- show: {
- animations: {
- colors: {
- from: "transparent"
- },
- visible: {
- type: "boolean",
- duration: 0
- }
- }
- },
- hide: {
- animations: {
- colors: {
- to: "transparent"
- },
- visible: {
- type: "boolean",
- easing: "linear",
- fn: (v) => v | 0
- }
- }
- }
- });
-}
-function applyLayoutsDefaults(defaults2) {
- defaults2.set("layout", {
- autoPadding: true,
- padding: {
- top: 0,
- right: 0,
- bottom: 0,
- left: 0
- }
- });
-}
-var intlCache = /* @__PURE__ */ new Map();
-function getNumberFormat(locale2, options) {
- options = options || {};
- const cacheKey = locale2 + JSON.stringify(options);
- let formatter = intlCache.get(cacheKey);
- if (!formatter) {
- formatter = new Intl.NumberFormat(locale2, options);
- intlCache.set(cacheKey, formatter);
- }
- return formatter;
-}
-function formatNumber(num, locale2, options) {
- return getNumberFormat(locale2, options).format(num);
-}
-var formatters = {
- values(value) {
- return isArray(value) ? value : "" + value;
- },
- numeric(tickValue, index, ticks) {
- if (tickValue === 0) {
- return "0";
- }
- const locale2 = this.chart.options.locale;
- let notation;
- let delta = tickValue;
- if (ticks.length > 1) {
- const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));
- if (maxTick < 1e-4 || maxTick > 1e15) {
- notation = "scientific";
- }
- delta = calculateDelta(tickValue, ticks);
- }
- const logDelta = log10(Math.abs(delta));
- const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);
- const options = {
- notation,
- minimumFractionDigits: numDecimal,
- maximumFractionDigits: numDecimal
- };
- Object.assign(options, this.options.ticks.format);
- return formatNumber(tickValue, locale2, options);
- },
- logarithmic(tickValue, index, ticks) {
- if (tickValue === 0) {
- return "0";
- }
- const remain = ticks[index].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue)));
- if ([
- 1,
- 2,
- 3,
- 5,
- 10,
- 15
- ].includes(remain) || index > 0.8 * ticks.length) {
- return formatters.numeric.call(this, tickValue, index, ticks);
- }
- return "";
- }
-};
-function calculateDelta(tickValue, ticks) {
- let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;
- if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {
- delta = tickValue - Math.floor(tickValue);
- }
- return delta;
-}
-var Ticks = {
- formatters
-};
-function applyScaleDefaults(defaults2) {
- defaults2.set("scale", {
- display: true,
- offset: false,
- reverse: false,
- beginAtZero: false,
- bounds: "ticks",
- grace: 0,
- grid: {
- display: true,
- lineWidth: 1,
- drawOnChartArea: true,
- drawTicks: true,
- tickLength: 8,
- tickWidth: (_ctx, options) => options.lineWidth,
- tickColor: (_ctx, options) => options.color,
- offset: false
- },
- border: {
- display: true,
- dash: [],
- dashOffset: 0,
- width: 1
- },
- title: {
- display: false,
- text: "",
- padding: {
- top: 4,
- bottom: 4
- }
- },
- ticks: {
- minRotation: 0,
- maxRotation: 50,
- mirror: false,
- textStrokeWidth: 0,
- textStrokeColor: "",
- padding: 3,
- display: true,
- autoSkip: true,
- autoSkipPadding: 3,
- labelOffset: 0,
- callback: Ticks.formatters.values,
- minor: {},
- major: {},
- align: "center",
- crossAlign: "near",
- showLabelBackdrop: false,
- backdropColor: "rgba(255, 255, 255, 0.75)",
- backdropPadding: 2
- }
- });
- defaults2.route("scale.ticks", "color", "", "color");
- defaults2.route("scale.grid", "color", "", "borderColor");
- defaults2.route("scale.border", "color", "", "borderColor");
- defaults2.route("scale.title", "color", "", "color");
- defaults2.describe("scale", {
- _fallback: false,
- _scriptable: (name) => !name.startsWith("before") && !name.startsWith("after") && name !== "callback" && name !== "parser",
- _indexable: (name) => name !== "borderDash" && name !== "tickBorderDash" && name !== "dash"
- });
- defaults2.describe("scales", {
- _fallback: "scale"
- });
- defaults2.describe("scale.ticks", {
- _scriptable: (name) => name !== "backdropPadding" && name !== "callback",
- _indexable: (name) => name !== "backdropPadding"
- });
-}
-var overrides = /* @__PURE__ */ Object.create(null);
-var descriptors = /* @__PURE__ */ Object.create(null);
-function getScope$1(node, key) {
- if (!key) {
- return node;
- }
- const keys = key.split(".");
- for (let i = 0, n = keys.length; i < n; ++i) {
- const k = keys[i];
- node = node[k] || (node[k] = /* @__PURE__ */ Object.create(null));
- }
- return node;
-}
-function set(root, scope, values) {
- if (typeof scope === "string") {
- return merge(getScope$1(root, scope), values);
- }
- return merge(getScope$1(root, ""), scope);
-}
-var Defaults = class {
- constructor(_descriptors2, _appliers) {
- this.animation = void 0;
- this.backgroundColor = "rgba(0,0,0,0.1)";
- this.borderColor = "rgba(0,0,0,0.1)";
- this.color = "#666";
- this.datasets = {};
- this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();
- this.elements = {};
- this.events = [
- "mousemove",
- "mouseout",
- "click",
- "touchstart",
- "touchmove"
- ];
- this.font = {
- family: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",
- size: 12,
- style: "normal",
- lineHeight: 1.2,
- weight: null
- };
- this.hover = {};
- this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);
- this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);
- this.hoverColor = (ctx, options) => getHoverColor(options.color);
- this.indexAxis = "x";
- this.interaction = {
- mode: "nearest",
- intersect: true,
- includeInvisible: false
- };
- this.maintainAspectRatio = true;
- this.onHover = null;
- this.onClick = null;
- this.parsing = true;
- this.plugins = {};
- this.responsive = true;
- this.scale = void 0;
- this.scales = {};
- this.showLine = true;
- this.drawActiveElementsOnTop = true;
- this.describe(_descriptors2);
- this.apply(_appliers);
- }
- set(scope, values) {
- return set(this, scope, values);
- }
- get(scope) {
- return getScope$1(this, scope);
- }
- describe(scope, values) {
- return set(descriptors, scope, values);
- }
- override(scope, values) {
- return set(overrides, scope, values);
- }
- route(scope, name, targetScope, targetName) {
- const scopeObject = getScope$1(this, scope);
- const targetScopeObject = getScope$1(this, targetScope);
- const privateName = "_" + name;
- Object.defineProperties(scopeObject, {
- [privateName]: {
- value: scopeObject[name],
- writable: true
- },
- [name]: {
- enumerable: true,
- get() {
- const local = this[privateName];
- const target = targetScopeObject[targetName];
- if (isObject(local)) {
- return Object.assign({}, target, local);
- }
- return valueOrDefault(local, target);
- },
- set(value) {
- this[privateName] = value;
- }
- }
- });
- }
- apply(appliers) {
- appliers.forEach((apply) => apply(this));
- }
-};
-var defaults = /* @__PURE__ */ new Defaults({
- _scriptable: (name) => !name.startsWith("on"),
- _indexable: (name) => name !== "events",
- hover: {
- _fallback: "interaction"
- },
- interaction: {
- _scriptable: false,
- _indexable: false
- }
-}, [
- applyAnimationsDefaults,
- applyLayoutsDefaults,
- applyScaleDefaults
-]);
-function toFontString(font) {
- if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {
- return null;
- }
- return (font.style ? font.style + " " : "") + (font.weight ? font.weight + " " : "") + font.size + "px " + font.family;
-}
-function _measureText(ctx, data, gc, longest, string) {
- let textWidth = data[string];
- if (!textWidth) {
- textWidth = data[string] = ctx.measureText(string).width;
- gc.push(string);
- }
- if (textWidth > longest) {
- longest = textWidth;
- }
- return longest;
-}
-function _longestText(ctx, font, arrayOfThings, cache) {
- cache = cache || {};
- let data = cache.data = cache.data || {};
- let gc = cache.garbageCollect = cache.garbageCollect || [];
- if (cache.font !== font) {
- data = cache.data = {};
- gc = cache.garbageCollect = [];
- cache.font = font;
- }
- ctx.save();
- ctx.font = font;
- let longest = 0;
- const ilen = arrayOfThings.length;
- let i, j, jlen, thing, nestedThing;
- for (i = 0; i < ilen; i++) {
- thing = arrayOfThings[i];
- if (thing !== void 0 && thing !== null && !isArray(thing)) {
- longest = _measureText(ctx, data, gc, longest, thing);
- } else if (isArray(thing)) {
- for (j = 0, jlen = thing.length; j < jlen; j++) {
- nestedThing = thing[j];
- if (nestedThing !== void 0 && nestedThing !== null && !isArray(nestedThing)) {
- longest = _measureText(ctx, data, gc, longest, nestedThing);
- }
- }
- }
- }
- ctx.restore();
- const gcLen = gc.length / 2;
- if (gcLen > arrayOfThings.length) {
- for (i = 0; i < gcLen; i++) {
- delete data[gc[i]];
- }
- gc.splice(0, gcLen);
- }
- return longest;
-}
-function _alignPixel(chart, pixel, width) {
- const devicePixelRatio = chart.currentDevicePixelRatio;
- const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;
- return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;
-}
-function clearCanvas(canvas, ctx) {
- ctx = ctx || canvas.getContext("2d");
- ctx.save();
- ctx.resetTransform();
- ctx.clearRect(0, 0, canvas.width, canvas.height);
- ctx.restore();
-}
-function drawPoint(ctx, options, x, y) {
- drawPointLegend(ctx, options, x, y, null);
-}
-function drawPointLegend(ctx, options, x, y, w) {
- let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;
- const style = options.pointStyle;
- const rotation = options.rotation;
- const radius = options.radius;
- let rad = (rotation || 0) * RAD_PER_DEG;
- if (style && typeof style === "object") {
- type = style.toString();
- if (type === "[object HTMLImageElement]" || type === "[object HTMLCanvasElement]") {
- ctx.save();
- ctx.translate(x, y);
- ctx.rotate(rad);
- ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);
- ctx.restore();
- return;
- }
- }
- if (isNaN(radius) || radius <= 0) {
- return;
- }
- ctx.beginPath();
- switch (style) {
- default:
- if (w) {
- ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);
- } else {
- ctx.arc(x, y, radius, 0, TAU);
- }
- ctx.closePath();
- break;
- case "triangle":
- width = w ? w / 2 : radius;
- ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);
- rad += TWO_THIRDS_PI;
- ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);
- rad += TWO_THIRDS_PI;
- ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);
- ctx.closePath();
- break;
- case "rectRounded":
- cornerRadius = radius * 0.516;
- size = radius - cornerRadius;
- xOffset = Math.cos(rad + QUARTER_PI) * size;
- xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);
- yOffset = Math.sin(rad + QUARTER_PI) * size;
- yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);
- ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);
- ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);
- ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);
- ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);
- ctx.closePath();
- break;
- case "rect":
- if (!rotation) {
- size = Math.SQRT1_2 * radius;
- width = w ? w / 2 : size;
- ctx.rect(x - width, y - size, 2 * width, 2 * size);
- break;
- }
- rad += QUARTER_PI;
- case "rectRot":
- xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);
- xOffset = Math.cos(rad) * radius;
- yOffset = Math.sin(rad) * radius;
- yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);
- ctx.moveTo(x - xOffsetW, y - yOffset);
- ctx.lineTo(x + yOffsetW, y - xOffset);
- ctx.lineTo(x + xOffsetW, y + yOffset);
- ctx.lineTo(x - yOffsetW, y + xOffset);
- ctx.closePath();
- break;
- case "crossRot":
- rad += QUARTER_PI;
- case "cross":
- xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);
- xOffset = Math.cos(rad) * radius;
- yOffset = Math.sin(rad) * radius;
- yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);
- ctx.moveTo(x - xOffsetW, y - yOffset);
- ctx.lineTo(x + xOffsetW, y + yOffset);
- ctx.moveTo(x + yOffsetW, y - xOffset);
- ctx.lineTo(x - yOffsetW, y + xOffset);
- break;
- case "star":
- xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);
- xOffset = Math.cos(rad) * radius;
- yOffset = Math.sin(rad) * radius;
- yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);
- ctx.moveTo(x - xOffsetW, y - yOffset);
- ctx.lineTo(x + xOffsetW, y + yOffset);
- ctx.moveTo(x + yOffsetW, y - xOffset);
- ctx.lineTo(x - yOffsetW, y + xOffset);
- rad += QUARTER_PI;
- xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);
- xOffset = Math.cos(rad) * radius;
- yOffset = Math.sin(rad) * radius;
- yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);
- ctx.moveTo(x - xOffsetW, y - yOffset);
- ctx.lineTo(x + xOffsetW, y + yOffset);
- ctx.moveTo(x + yOffsetW, y - xOffset);
- ctx.lineTo(x - yOffsetW, y + xOffset);
- break;
- case "line":
- xOffset = w ? w / 2 : Math.cos(rad) * radius;
- yOffset = Math.sin(rad) * radius;
- ctx.moveTo(x - xOffset, y - yOffset);
- ctx.lineTo(x + xOffset, y + yOffset);
- break;
- case "dash":
- ctx.moveTo(x, y);
- ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);
- break;
- case false:
- ctx.closePath();
- break;
- }
- ctx.fill();
- if (options.borderWidth > 0) {
- ctx.stroke();
- }
-}
-function _isPointInArea(point, area, margin) {
- margin = margin || 0.5;
- return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;
-}
-function clipArea(ctx, area) {
- ctx.save();
- ctx.beginPath();
- ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);
- ctx.clip();
-}
-function unclipArea(ctx) {
- ctx.restore();
-}
-function setRenderOpts(ctx, opts) {
- if (opts.translation) {
- ctx.translate(opts.translation[0], opts.translation[1]);
- }
- if (!isNullOrUndef(opts.rotation)) {
- ctx.rotate(opts.rotation);
- }
- if (opts.color) {
- ctx.fillStyle = opts.color;
- }
- if (opts.textAlign) {
- ctx.textAlign = opts.textAlign;
- }
- if (opts.textBaseline) {
- ctx.textBaseline = opts.textBaseline;
- }
-}
-function decorateText(ctx, x, y, line, opts) {
- if (opts.strikethrough || opts.underline) {
- const metrics = ctx.measureText(line);
- const left = x - metrics.actualBoundingBoxLeft;
- const right = x + metrics.actualBoundingBoxRight;
- const top = y - metrics.actualBoundingBoxAscent;
- const bottom = y + metrics.actualBoundingBoxDescent;
- const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;
- ctx.strokeStyle = ctx.fillStyle;
- ctx.beginPath();
- ctx.lineWidth = opts.decorationWidth || 2;
- ctx.moveTo(left, yDecoration);
- ctx.lineTo(right, yDecoration);
- ctx.stroke();
- }
-}
-function drawBackdrop(ctx, opts) {
- const oldColor = ctx.fillStyle;
- ctx.fillStyle = opts.color;
- ctx.fillRect(opts.left, opts.top, opts.width, opts.height);
- ctx.fillStyle = oldColor;
-}
-function renderText(ctx, text, x, y, font, opts = {}) {
- const lines = isArray(text) ? text : [
- text
- ];
- const stroke = opts.strokeWidth > 0 && opts.strokeColor !== "";
- let i, line;
- ctx.save();
- ctx.font = font.string;
- setRenderOpts(ctx, opts);
- for (i = 0; i < lines.length; ++i) {
- line = lines[i];
- if (opts.backdrop) {
- drawBackdrop(ctx, opts.backdrop);
- }
- if (stroke) {
- if (opts.strokeColor) {
- ctx.strokeStyle = opts.strokeColor;
- }
- if (!isNullOrUndef(opts.strokeWidth)) {
- ctx.lineWidth = opts.strokeWidth;
- }
- ctx.strokeText(line, x, y, opts.maxWidth);
- }
- ctx.fillText(line, x, y, opts.maxWidth);
- decorateText(ctx, x, y, line, opts);
- y += Number(font.lineHeight);
- }
- ctx.restore();
-}
-function addRoundedRectPath(ctx, rect) {
- const { x, y, w, h: h4, radius } = rect;
- ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);
- ctx.lineTo(x, y + h4 - radius.bottomLeft);
- ctx.arc(x + radius.bottomLeft, y + h4 - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);
- ctx.lineTo(x + w - radius.bottomRight, y + h4);
- ctx.arc(x + w - radius.bottomRight, y + h4 - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);
- ctx.lineTo(x + w, y + radius.topRight);
- ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);
- ctx.lineTo(x + radius.topLeft, y);
-}
-var LINE_HEIGHT = /^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/;
-var FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;
-function toLineHeight(value, size) {
- const matches = ("" + value).match(LINE_HEIGHT);
- if (!matches || matches[1] === "normal") {
- return size * 1.2;
- }
- value = +matches[2];
- switch (matches[3]) {
- case "px":
- return value;
- case "%":
- value /= 100;
- break;
- }
- return size * value;
-}
-var numberOrZero = (v) => +v || 0;
-function _readValueToProps(value, props) {
- const ret = {};
- const objProps = isObject(props);
- const keys = objProps ? Object.keys(props) : props;
- const read = isObject(value) ? objProps ? (prop) => valueOrDefault(value[prop], value[props[prop]]) : (prop) => value[prop] : () => value;
- for (const prop of keys) {
- ret[prop] = numberOrZero(read(prop));
- }
- return ret;
-}
-function toTRBL(value) {
- return _readValueToProps(value, {
- top: "y",
- right: "x",
- bottom: "y",
- left: "x"
- });
-}
-function toTRBLCorners(value) {
- return _readValueToProps(value, [
- "topLeft",
- "topRight",
- "bottomLeft",
- "bottomRight"
- ]);
-}
-function toPadding(value) {
- const obj = toTRBL(value);
- obj.width = obj.left + obj.right;
- obj.height = obj.top + obj.bottom;
- return obj;
-}
-function toFont(options, fallback) {
- options = options || {};
- fallback = fallback || defaults.font;
- let size = valueOrDefault(options.size, fallback.size);
- if (typeof size === "string") {
- size = parseInt(size, 10);
- }
- let style = valueOrDefault(options.style, fallback.style);
- if (style && !("" + style).match(FONT_STYLE)) {
- console.warn('Invalid font style specified: "' + style + '"');
- style = void 0;
- }
- const font = {
- family: valueOrDefault(options.family, fallback.family),
- lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),
- size,
- style,
- weight: valueOrDefault(options.weight, fallback.weight),
- string: ""
- };
- font.string = toFontString(font);
- return font;
-}
-function resolve(inputs, context, index, info) {
- let cacheable = true;
- let i, ilen, value;
- for (i = 0, ilen = inputs.length; i < ilen; ++i) {
- value = inputs[i];
- if (value === void 0) {
- continue;
- }
- if (context !== void 0 && typeof value === "function") {
- value = value(context);
- cacheable = false;
- }
- if (index !== void 0 && isArray(value)) {
- value = value[index % value.length];
- cacheable = false;
- }
- if (value !== void 0) {
- if (info && !cacheable) {
- info.cacheable = false;
- }
- return value;
- }
- }
-}
-function _addGrace(minmax, grace, beginAtZero) {
- const { min, max } = minmax;
- const change = toDimension(grace, (max - min) / 2);
- const keepZero = (value, add) => beginAtZero && value === 0 ? 0 : value + add;
- return {
- min: keepZero(min, -Math.abs(change)),
- max: keepZero(max, change)
- };
-}
-function createContext(parentContext, context) {
- return Object.assign(Object.create(parentContext), context);
-}
-function _createResolver(scopes, prefixes = [
- ""
-], rootScopes, fallback, getTarget = () => scopes[0]) {
- const finalRootScopes = rootScopes || scopes;
- if (typeof fallback === "undefined") {
- fallback = _resolve("_fallback", scopes);
- }
- const cache = {
- [Symbol.toStringTag]: "Object",
- _cacheable: true,
- _scopes: scopes,
- _rootScopes: finalRootScopes,
- _fallback: fallback,
- _getTarget: getTarget,
- override: (scope) => _createResolver([
- scope,
- ...scopes
- ], prefixes, finalRootScopes, fallback)
- };
- return new Proxy(cache, {
- /**
- * A trap for the delete operator.
- */
- deleteProperty(target, prop) {
- delete target[prop];
- delete target._keys;
- delete scopes[0][prop];
- return true;
- },
- /**
- * A trap for getting property values.
- */
- get(target, prop) {
- return _cached(target, prop, () => _resolveWithPrefixes(prop, prefixes, scopes, target));
- },
- /**
- * A trap for Object.getOwnPropertyDescriptor.
- * Also used by Object.hasOwnProperty.
- */
- getOwnPropertyDescriptor(target, prop) {
- return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);
- },
- /**
- * A trap for Object.getPrototypeOf.
- */
- getPrototypeOf() {
- return Reflect.getPrototypeOf(scopes[0]);
- },
- /**
- * A trap for the in operator.
- */
- has(target, prop) {
- return getKeysFromAllScopes(target).includes(prop);
- },
- /**
- * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.
- */
- ownKeys(target) {
- return getKeysFromAllScopes(target);
- },
- /**
- * A trap for setting property values.
- */
- set(target, prop, value) {
- const storage = target._storage || (target._storage = getTarget());
- target[prop] = storage[prop] = value;
- delete target._keys;
- return true;
- }
- });
-}
-function _attachContext(proxy, context, subProxy, descriptorDefaults) {
- const cache = {
- _cacheable: false,
- _proxy: proxy,
- _context: context,
- _subProxy: subProxy,
- _stack: /* @__PURE__ */ new Set(),
- _descriptors: _descriptors(proxy, descriptorDefaults),
- setContext: (ctx) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),
- override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)
- };
- return new Proxy(cache, {
- /**
- * A trap for the delete operator.
- */
- deleteProperty(target, prop) {
- delete target[prop];
- delete proxy[prop];
- return true;
- },
- /**
- * A trap for getting property values.
- */
- get(target, prop, receiver) {
- return _cached(target, prop, () => _resolveWithContext(target, prop, receiver));
- },
- /**
- * A trap for Object.getOwnPropertyDescriptor.
- * Also used by Object.hasOwnProperty.
- */
- getOwnPropertyDescriptor(target, prop) {
- return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {
- enumerable: true,
- configurable: true
- } : void 0 : Reflect.getOwnPropertyDescriptor(proxy, prop);
- },
- /**
- * A trap for Object.getPrototypeOf.
- */
- getPrototypeOf() {
- return Reflect.getPrototypeOf(proxy);
- },
- /**
- * A trap for the in operator.
- */
- has(target, prop) {
- return Reflect.has(proxy, prop);
- },
- /**
- * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.
- */
- ownKeys() {
- return Reflect.ownKeys(proxy);
- },
- /**
- * A trap for setting property values.
- */
- set(target, prop, value) {
- proxy[prop] = value;
- delete target[prop];
- return true;
- }
- });
-}
-function _descriptors(proxy, defaults2 = {
- scriptable: true,
- indexable: true
-}) {
- const { _scriptable = defaults2.scriptable, _indexable = defaults2.indexable, _allKeys = defaults2.allKeys } = proxy;
- return {
- allKeys: _allKeys,
- scriptable: _scriptable,
- indexable: _indexable,
- isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,
- isIndexable: isFunction(_indexable) ? _indexable : () => _indexable
- };
-}
-var readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name;
-var needsSubResolver = (prop, value) => isObject(value) && prop !== "adapters" && (Object.getPrototypeOf(value) === null || value.constructor === Object);
-function _cached(target, prop, resolve2) {
- if (Object.prototype.hasOwnProperty.call(target, prop)) {
- return target[prop];
- }
- const value = resolve2();
- target[prop] = value;
- return value;
-}
-function _resolveWithContext(target, prop, receiver) {
- const { _proxy, _context, _subProxy, _descriptors: descriptors2 } = target;
- let value = _proxy[prop];
- if (isFunction(value) && descriptors2.isScriptable(prop)) {
- value = _resolveScriptable(prop, value, target, receiver);
- }
- if (isArray(value) && value.length) {
- value = _resolveArray(prop, value, target, descriptors2.isIndexable);
- }
- if (needsSubResolver(prop, value)) {
- value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors2);
- }
- return value;
-}
-function _resolveScriptable(prop, getValue, target, receiver) {
- const { _proxy, _context, _subProxy, _stack } = target;
- if (_stack.has(prop)) {
- throw new Error("Recursion detected: " + Array.from(_stack).join("->") + "->" + prop);
- }
- _stack.add(prop);
- let value = getValue(_context, _subProxy || receiver);
- _stack.delete(prop);
- if (needsSubResolver(prop, value)) {
- value = createSubResolver(_proxy._scopes, _proxy, prop, value);
- }
- return value;
-}
-function _resolveArray(prop, value, target, isIndexable) {
- const { _proxy, _context, _subProxy, _descriptors: descriptors2 } = target;
- if (typeof _context.index !== "undefined" && isIndexable(prop)) {
- return value[_context.index % value.length];
- } else if (isObject(value[0])) {
- const arr = value;
- const scopes = _proxy._scopes.filter((s) => s !== arr);
- value = [];
- for (const item of arr) {
- const resolver = createSubResolver(scopes, _proxy, prop, item);
- value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors2));
- }
- }
- return value;
-}
-function resolveFallback(fallback, prop, value) {
- return isFunction(fallback) ? fallback(prop, value) : fallback;
-}
-var getScope = (key, parent) => key === true ? parent : typeof key === "string" ? resolveObjectKey(parent, key) : void 0;
-function addScopes(set2, parentScopes, key, parentFallback, value) {
- for (const parent of parentScopes) {
- const scope = getScope(key, parent);
- if (scope) {
- set2.add(scope);
- const fallback = resolveFallback(scope._fallback, key, value);
- if (typeof fallback !== "undefined" && fallback !== key && fallback !== parentFallback) {
- return fallback;
- }
- } else if (scope === false && typeof parentFallback !== "undefined" && key !== parentFallback) {
- return null;
- }
- }
- return false;
-}
-function createSubResolver(parentScopes, resolver, prop, value) {
- const rootScopes = resolver._rootScopes;
- const fallback = resolveFallback(resolver._fallback, prop, value);
- const allScopes = [
- ...parentScopes,
- ...rootScopes
- ];
- const set2 = /* @__PURE__ */ new Set();
- set2.add(value);
- let key = addScopesFromKey(set2, allScopes, prop, fallback || prop, value);
- if (key === null) {
- return false;
- }
- if (typeof fallback !== "undefined" && fallback !== prop) {
- key = addScopesFromKey(set2, allScopes, fallback, key, value);
- if (key === null) {
- return false;
- }
- }
- return _createResolver(Array.from(set2), [
- ""
- ], rootScopes, fallback, () => subGetTarget(resolver, prop, value));
-}
-function addScopesFromKey(set2, allScopes, key, fallback, item) {
- while (key) {
- key = addScopes(set2, allScopes, key, fallback, item);
- }
- return key;
-}
-function subGetTarget(resolver, prop, value) {
- const parent = resolver._getTarget();
- if (!(prop in parent)) {
- parent[prop] = {};
- }
- const target = parent[prop];
- if (isArray(target) && isObject(value)) {
- return value;
- }
- return target || {};
-}
-function _resolveWithPrefixes(prop, prefixes, scopes, proxy) {
- let value;
- for (const prefix of prefixes) {
- value = _resolve(readKey(prefix, prop), scopes);
- if (typeof value !== "undefined") {
- return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;
- }
- }
-}
-function _resolve(key, scopes) {
- for (const scope of scopes) {
- if (!scope) {
- continue;
- }
- const value = scope[key];
- if (typeof value !== "undefined") {
- return value;
- }
- }
-}
-function getKeysFromAllScopes(target) {
- let keys = target._keys;
- if (!keys) {
- keys = target._keys = resolveKeysFromAllScopes(target._scopes);
- }
- return keys;
-}
-function resolveKeysFromAllScopes(scopes) {
- const set2 = /* @__PURE__ */ new Set();
- for (const scope of scopes) {
- for (const key of Object.keys(scope).filter((k) => !k.startsWith("_"))) {
- set2.add(key);
- }
- }
- return Array.from(set2);
-}
-var EPSILON = Number.EPSILON || 1e-14;
-function _isDomSupported() {
- return typeof window !== "undefined" && typeof document !== "undefined";
-}
-function _getParentNode(domNode) {
- let parent = domNode.parentNode;
- if (parent && parent.toString() === "[object ShadowRoot]") {
- parent = parent.host;
- }
- return parent;
-}
-function parseMaxStyle(styleValue, node, parentProperty) {
- let valueInPixels;
- if (typeof styleValue === "string") {
- valueInPixels = parseInt(styleValue, 10);
- if (styleValue.indexOf("%") !== -1) {
- valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];
- }
- } else {
- valueInPixels = styleValue;
- }
- return valueInPixels;
-}
-var getComputedStyle2 = (element) => element.ownerDocument.defaultView.getComputedStyle(element, null);
-function getStyle(el, property) {
- return getComputedStyle2(el).getPropertyValue(property);
-}
-var positions = [
- "top",
- "right",
- "bottom",
- "left"
-];
-function getPositionedStyle(styles, style, suffix) {
- const result = {};
- suffix = suffix ? "-" + suffix : "";
- for (let i = 0; i < 4; i++) {
- const pos = positions[i];
- result[pos] = parseFloat(styles[style + "-" + pos + suffix]) || 0;
- }
- result.width = result.left + result.right;
- result.height = result.top + result.bottom;
- return result;
-}
-var useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot);
-function getCanvasPosition(e, canvas) {
- const touches = e.touches;
- const source = touches && touches.length ? touches[0] : e;
- const { offsetX, offsetY } = source;
- let box = false;
- let x, y;
- if (useOffsetPos(offsetX, offsetY, e.target)) {
- x = offsetX;
- y = offsetY;
- } else {
- const rect = canvas.getBoundingClientRect();
- x = source.clientX - rect.left;
- y = source.clientY - rect.top;
- box = true;
- }
- return {
- x,
- y,
- box
- };
-}
-function getRelativePosition(event, chart) {
- if ("native" in event) {
- return event;
- }
- const { canvas, currentDevicePixelRatio } = chart;
- const style = getComputedStyle2(canvas);
- const borderBox = style.boxSizing === "border-box";
- const paddings = getPositionedStyle(style, "padding");
- const borders = getPositionedStyle(style, "border", "width");
- const { x, y, box } = getCanvasPosition(event, canvas);
- const xOffset = paddings.left + (box && borders.left);
- const yOffset = paddings.top + (box && borders.top);
- let { width, height } = chart;
- if (borderBox) {
- width -= paddings.width + borders.width;
- height -= paddings.height + borders.height;
- }
- return {
- x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),
- y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)
- };
-}
-function getContainerSize(canvas, width, height) {
- let maxWidth, maxHeight;
- if (width === void 0 || height === void 0) {
- const container = _getParentNode(canvas);
- if (!container) {
- width = canvas.clientWidth;
- height = canvas.clientHeight;
- } else {
- const rect = container.getBoundingClientRect();
- const containerStyle = getComputedStyle2(container);
- const containerBorder = getPositionedStyle(containerStyle, "border", "width");
- const containerPadding = getPositionedStyle(containerStyle, "padding");
- width = rect.width - containerPadding.width - containerBorder.width;
- height = rect.height - containerPadding.height - containerBorder.height;
- maxWidth = parseMaxStyle(containerStyle.maxWidth, container, "clientWidth");
- maxHeight = parseMaxStyle(containerStyle.maxHeight, container, "clientHeight");
- }
- }
- return {
- width,
- height,
- maxWidth: maxWidth || INFINITY,
- maxHeight: maxHeight || INFINITY
- };
-}
-var round1 = (v) => Math.round(v * 10) / 10;
-function getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {
- const style = getComputedStyle2(canvas);
- const margins = getPositionedStyle(style, "margin");
- const maxWidth = parseMaxStyle(style.maxWidth, canvas, "clientWidth") || INFINITY;
- const maxHeight = parseMaxStyle(style.maxHeight, canvas, "clientHeight") || INFINITY;
- const containerSize = getContainerSize(canvas, bbWidth, bbHeight);
- let { width, height } = containerSize;
- if (style.boxSizing === "content-box") {
- const borders = getPositionedStyle(style, "border", "width");
- const paddings = getPositionedStyle(style, "padding");
- width -= paddings.width + borders.width;
- height -= paddings.height + borders.height;
- }
- width = Math.max(0, width - margins.width);
- height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);
- width = round1(Math.min(width, maxWidth, containerSize.maxWidth));
- height = round1(Math.min(height, maxHeight, containerSize.maxHeight));
- if (width && !height) {
- height = round1(width / 2);
- }
- const maintainHeight = bbWidth !== void 0 || bbHeight !== void 0;
- if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {
- height = containerSize.height;
- width = round1(Math.floor(height * aspectRatio));
- }
- return {
- width,
- height
- };
-}
-function retinaScale(chart, forceRatio, forceStyle) {
- const pixelRatio = forceRatio || 1;
- const deviceHeight = Math.floor(chart.height * pixelRatio);
- const deviceWidth = Math.floor(chart.width * pixelRatio);
- chart.height = Math.floor(chart.height);
- chart.width = Math.floor(chart.width);
- const canvas = chart.canvas;
- if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {
- canvas.style.height = `${chart.height}px`;
- canvas.style.width = `${chart.width}px`;
- }
- if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {
- chart.currentDevicePixelRatio = pixelRatio;
- canvas.height = deviceHeight;
- canvas.width = deviceWidth;
- chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);
- return true;
- }
- return false;
-}
-var supportsEventListenerOptions = function() {
- let passiveSupported = false;
- try {
- const options = {
- get passive() {
- passiveSupported = true;
- return false;
- }
- };
- window.addEventListener("test", null, options);
- window.removeEventListener("test", null, options);
- } catch (e) {
- }
- return passiveSupported;
-}();
-function readUsedSize(element, property) {
- const value = getStyle(element, property);
- const matches = value && value.match(/^(\d+)(\.\d+)?px$/);
- return matches ? +matches[1] : void 0;
-}
-var getRightToLeftAdapter = function(rectX, width) {
- return {
- x(x) {
- return rectX + rectX + width - x;
- },
- setWidth(w) {
- width = w;
- },
- textAlign(align) {
- if (align === "center") {
- return align;
- }
- return align === "right" ? "left" : "right";
- },
- xPlus(x, value) {
- return x - value;
- },
- leftForLtr(x, itemWidth) {
- return x - itemWidth;
- }
- };
-};
-var getLeftToRightAdapter = function() {
- return {
- x(x) {
- return x;
- },
- setWidth(w) {
- },
- textAlign(align) {
- return align;
- },
- xPlus(x, value) {
- return x + value;
- },
- leftForLtr(x, _itemWidth) {
- return x;
- }
- };
-};
-function getRtlAdapter(rtl, rectX, width) {
- return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();
-}
-function overrideTextDirection(ctx, direction) {
- let style, original;
- if (direction === "ltr" || direction === "rtl") {
- style = ctx.canvas.style;
- original = [
- style.getPropertyValue("direction"),
- style.getPropertyPriority("direction")
- ];
- style.setProperty("direction", direction, "important");
- ctx.prevTextDirection = original;
- }
-}
-function restoreTextDirection(ctx, original) {
- if (original !== void 0) {
- delete ctx.prevTextDirection;
- ctx.canvas.style.setProperty("direction", original[0], original[1]);
- }
-}
-
-// node_modules/chart.js/dist/chart.js
-var Animator = class {
- constructor() {
- this._request = null;
- this._charts = /* @__PURE__ */ new Map();
- this._running = false;
- this._lastDate = void 0;
- }
- _notify(chart, anims, date, type) {
- const callbacks = anims.listeners[type];
- const numSteps = anims.duration;
- callbacks.forEach((fn) => fn({
- chart,
- initial: anims.initial,
- numSteps,
- currentStep: Math.min(date - anims.start, numSteps)
- }));
- }
- _refresh() {
- if (this._request) {
- return;
- }
- this._running = true;
- this._request = requestAnimFrame.call(window, () => {
- this._update();
- this._request = null;
- if (this._running) {
- this._refresh();
- }
- });
- }
- _update(date = Date.now()) {
- let remaining = 0;
- this._charts.forEach((anims, chart) => {
- if (!anims.running || !anims.items.length) {
- return;
- }
- const items = anims.items;
- let i = items.length - 1;
- let draw = false;
- let item;
- for (; i >= 0; --i) {
- item = items[i];
- if (item._active) {
- if (item._total > anims.duration) {
- anims.duration = item._total;
- }
- item.tick(date);
- draw = true;
- } else {
- items[i] = items[items.length - 1];
- items.pop();
- }
- }
- if (draw) {
- chart.draw();
- this._notify(chart, anims, date, "progress");
- }
- if (!items.length) {
- anims.running = false;
- this._notify(chart, anims, date, "complete");
- anims.initial = false;
- }
- remaining += items.length;
- });
- this._lastDate = date;
- if (remaining === 0) {
- this._running = false;
- }
- }
- _getAnims(chart) {
- const charts = this._charts;
- let anims = charts.get(chart);
- if (!anims) {
- anims = {
- running: false,
- initial: true,
- items: [],
- listeners: {
- complete: [],
- progress: []
- }
- };
- charts.set(chart, anims);
- }
- return anims;
- }
- listen(chart, event, cb) {
- this._getAnims(chart).listeners[event].push(cb);
- }
- add(chart, items) {
- if (!items || !items.length) {
- return;
- }
- this._getAnims(chart).items.push(...items);
- }
- has(chart) {
- return this._getAnims(chart).items.length > 0;
- }
- start(chart) {
- const anims = this._charts.get(chart);
- if (!anims) {
- return;
- }
- anims.running = true;
- anims.start = Date.now();
- anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);
- this._refresh();
- }
- running(chart) {
- if (!this._running) {
- return false;
- }
- const anims = this._charts.get(chart);
- if (!anims || !anims.running || !anims.items.length) {
- return false;
- }
- return true;
- }
- stop(chart) {
- const anims = this._charts.get(chart);
- if (!anims || !anims.items.length) {
- return;
- }
- const items = anims.items;
- let i = items.length - 1;
- for (; i >= 0; --i) {
- items[i].cancel();
- }
- anims.items = [];
- this._notify(chart, anims, Date.now(), "complete");
- }
- remove(chart) {
- return this._charts.delete(chart);
- }
-};
-var animator = /* @__PURE__ */ new Animator();
-var transparent = "transparent";
-var interpolators = {
- boolean(from2, to2, factor) {
- return factor > 0.5 ? to2 : from2;
- },
- color(from2, to2, factor) {
- const c0 = color(from2 || transparent);
- const c1 = c0.valid && color(to2 || transparent);
- return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to2;
- },
- number(from2, to2, factor) {
- return from2 + (to2 - from2) * factor;
- }
-};
-var Animation = class {
- constructor(cfg, target, prop, to2) {
- const currentValue = target[prop];
- to2 = resolve([
- cfg.to,
- to2,
- currentValue,
- cfg.from
- ]);
- const from2 = resolve([
- cfg.from,
- currentValue,
- to2
- ]);
- this._active = true;
- this._fn = cfg.fn || interpolators[cfg.type || typeof from2];
- this._easing = effects[cfg.easing] || effects.linear;
- this._start = Math.floor(Date.now() + (cfg.delay || 0));
- this._duration = this._total = Math.floor(cfg.duration);
- this._loop = !!cfg.loop;
- this._target = target;
- this._prop = prop;
- this._from = from2;
- this._to = to2;
- this._promises = void 0;
- }
- active() {
- return this._active;
- }
- update(cfg, to2, date) {
- if (this._active) {
- this._notify(false);
- const currentValue = this._target[this._prop];
- const elapsed = date - this._start;
- const remain = this._duration - elapsed;
- this._start = date;
- this._duration = Math.floor(Math.max(remain, cfg.duration));
- this._total += elapsed;
- this._loop = !!cfg.loop;
- this._to = resolve([
- cfg.to,
- to2,
- currentValue,
- cfg.from
- ]);
- this._from = resolve([
- cfg.from,
- currentValue,
- to2
- ]);
- }
- }
- cancel() {
- if (this._active) {
- this.tick(Date.now());
- this._active = false;
- this._notify(false);
- }
- }
- tick(date) {
- const elapsed = date - this._start;
- const duration = this._duration;
- const prop = this._prop;
- const from2 = this._from;
- const loop = this._loop;
- const to2 = this._to;
- let factor;
- this._active = from2 !== to2 && (loop || elapsed < duration);
- if (!this._active) {
- this._target[prop] = to2;
- this._notify(true);
- return;
- }
- if (elapsed < 0) {
- this._target[prop] = from2;
- return;
- }
- factor = elapsed / duration % 2;
- factor = loop && factor > 1 ? 2 - factor : factor;
- factor = this._easing(Math.min(1, Math.max(0, factor)));
- this._target[prop] = this._fn(from2, to2, factor);
- }
- wait() {
- const promises = this._promises || (this._promises = []);
- return new Promise((res, rej) => {
- promises.push({
- res,
- rej
- });
- });
- }
- _notify(resolved) {
- const method = resolved ? "res" : "rej";
- const promises = this._promises || [];
- for (let i = 0; i < promises.length; i++) {
- promises[i][method]();
- }
- }
-};
-var Animations = class {
- constructor(chart, config) {
- this._chart = chart;
- this._properties = /* @__PURE__ */ new Map();
- this.configure(config);
- }
- configure(config) {
- if (!isObject(config)) {
- return;
- }
- const animationOptions = Object.keys(defaults.animation);
- const animatedProps = this._properties;
- Object.getOwnPropertyNames(config).forEach((key) => {
- const cfg = config[key];
- if (!isObject(cfg)) {
- return;
- }
- const resolved = {};
- for (const option of animationOptions) {
- resolved[option] = cfg[option];
- }
- (isArray(cfg.properties) && cfg.properties || [
- key
- ]).forEach((prop) => {
- if (prop === key || !animatedProps.has(prop)) {
- animatedProps.set(prop, resolved);
- }
- });
- });
- }
- _animateOptions(target, values) {
- const newOptions = values.options;
- const options = resolveTargetOptions(target, newOptions);
- if (!options) {
- return [];
- }
- const animations = this._createAnimations(options, newOptions);
- if (newOptions.$shared) {
- awaitAll(target.options.$animations, newOptions).then(() => {
- target.options = newOptions;
- }, () => {
- });
- }
- return animations;
- }
- _createAnimations(target, values) {
- const animatedProps = this._properties;
- const animations = [];
- const running = target.$animations || (target.$animations = {});
- const props = Object.keys(values);
- const date = Date.now();
- let i;
- for (i = props.length - 1; i >= 0; --i) {
- const prop = props[i];
- if (prop.charAt(0) === "$") {
- continue;
- }
- if (prop === "options") {
- animations.push(...this._animateOptions(target, values));
- continue;
- }
- const value = values[prop];
- let animation = running[prop];
- const cfg = animatedProps.get(prop);
- if (animation) {
- if (cfg && animation.active()) {
- animation.update(cfg, value, date);
- continue;
- } else {
- animation.cancel();
- }
- }
- if (!cfg || !cfg.duration) {
- target[prop] = value;
- continue;
- }
- running[prop] = animation = new Animation(cfg, target, prop, value);
- animations.push(animation);
- }
- return animations;
- }
- update(target, values) {
- if (this._properties.size === 0) {
- Object.assign(target, values);
- return;
- }
- const animations = this._createAnimations(target, values);
- if (animations.length) {
- animator.add(this._chart, animations);
- return true;
- }
- }
-};
-function awaitAll(animations, properties) {
- const running = [];
- const keys = Object.keys(properties);
- for (let i = 0; i < keys.length; i++) {
- const anim = animations[keys[i]];
- if (anim && anim.active()) {
- running.push(anim.wait());
- }
- }
- return Promise.all(running);
-}
-function resolveTargetOptions(target, newOptions) {
- if (!newOptions) {
- return;
- }
- let options = target.options;
- if (!options) {
- target.options = newOptions;
- return;
- }
- if (options.$shared) {
- target.options = options = Object.assign({}, options, {
- $shared: false,
- $animations: {}
- });
- }
- return options;
-}
-function scaleClip(scale, allowedOverflow) {
- const opts = scale && scale.options || {};
- const reverse = opts.reverse;
- const min = opts.min === void 0 ? allowedOverflow : 0;
- const max = opts.max === void 0 ? allowedOverflow : 0;
- return {
- start: reverse ? max : min,
- end: reverse ? min : max
- };
-}
-function defaultClip(xScale, yScale, allowedOverflow) {
- if (allowedOverflow === false) {
- return false;
- }
- const x = scaleClip(xScale, allowedOverflow);
- const y = scaleClip(yScale, allowedOverflow);
- return {
- top: y.end,
- right: x.end,
- bottom: y.start,
- left: x.start
- };
-}
-function toClip(value) {
- let t2, r, b, l;
- if (isObject(value)) {
- t2 = value.top;
- r = value.right;
- b = value.bottom;
- l = value.left;
- } else {
- t2 = r = b = l = value;
- }
- return {
- top: t2,
- right: r,
- bottom: b,
- left: l,
- disabled: value === false
- };
-}
-function getSortedDatasetIndices(chart, filterVisible) {
- const keys = [];
- const metasets = chart._getSortedDatasetMetas(filterVisible);
- let i, ilen;
- for (i = 0, ilen = metasets.length; i < ilen; ++i) {
- keys.push(metasets[i].index);
- }
- return keys;
-}
-function applyStack(stack, value, dsIndex, options = {}) {
- const keys = stack.keys;
- const singleMode = options.mode === "single";
- let i, ilen, datasetIndex, otherValue;
- if (value === null) {
- return;
- }
- for (i = 0, ilen = keys.length; i < ilen; ++i) {
- datasetIndex = +keys[i];
- if (datasetIndex === dsIndex) {
- if (options.all) {
- continue;
- }
- break;
- }
- otherValue = stack.values[datasetIndex];
- if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {
- value += otherValue;
- }
- }
- return value;
-}
-function convertObjectDataToArray(data) {
- const keys = Object.keys(data);
- const adata = new Array(keys.length);
- let i, ilen, key;
- for (i = 0, ilen = keys.length; i < ilen; ++i) {
- key = keys[i];
- adata[i] = {
- x: key,
- y: data[key]
- };
- }
- return adata;
-}
-function isStacked(scale, meta) {
- const stacked = scale && scale.options.stacked;
- return stacked || stacked === void 0 && meta.stack !== void 0;
-}
-function getStackKey(indexScale, valueScale, meta) {
- return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;
-}
-function getUserBounds(scale) {
- const { min, max, minDefined, maxDefined } = scale.getUserBounds();
- return {
- min: minDefined ? min : Number.NEGATIVE_INFINITY,
- max: maxDefined ? max : Number.POSITIVE_INFINITY
- };
-}
-function getOrCreateStack(stacks, stackKey, indexValue) {
- const subStack = stacks[stackKey] || (stacks[stackKey] = {});
- return subStack[indexValue] || (subStack[indexValue] = {});
-}
-function getLastIndexInStack(stack, vScale, positive, type) {
- for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {
- const value = stack[meta.index];
- if (positive && value > 0 || !positive && value < 0) {
- return meta.index;
- }
- }
- return null;
-}
-function updateStacks(controller, parsed) {
- const { chart, _cachedMeta: meta } = controller;
- const stacks = chart._stacks || (chart._stacks = {});
- const { iScale, vScale, index: datasetIndex } = meta;
- const iAxis = iScale.axis;
- const vAxis = vScale.axis;
- const key = getStackKey(iScale, vScale, meta);
- const ilen = parsed.length;
- let stack;
- for (let i = 0; i < ilen; ++i) {
- const item = parsed[i];
- const { [iAxis]: index, [vAxis]: value } = item;
- const itemStacks = item._stacks || (item._stacks = {});
- stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);
- stack[datasetIndex] = value;
- stack._top = getLastIndexInStack(stack, vScale, true, meta.type);
- stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);
- const visualValues = stack._visualValues || (stack._visualValues = {});
- visualValues[datasetIndex] = value;
- }
-}
-function getFirstScaleId(chart, axis) {
- const scales = chart.scales;
- return Object.keys(scales).filter((key) => scales[key].axis === axis).shift();
-}
-function createDatasetContext(parent, index) {
- return createContext(parent, {
- active: false,
- dataset: void 0,
- datasetIndex: index,
- index,
- mode: "default",
- type: "dataset"
- });
-}
-function createDataContext(parent, index, element) {
- return createContext(parent, {
- active: false,
- dataIndex: index,
- parsed: void 0,
- raw: void 0,
- element,
- index,
- mode: "default",
- type: "data"
- });
-}
-function clearStacks(meta, items) {
- const datasetIndex = meta.controller.index;
- const axis = meta.vScale && meta.vScale.axis;
- if (!axis) {
- return;
- }
- items = items || meta._parsed;
- for (const parsed of items) {
- const stacks = parsed._stacks;
- if (!stacks || stacks[axis] === void 0 || stacks[axis][datasetIndex] === void 0) {
- return;
- }
- delete stacks[axis][datasetIndex];
- if (stacks[axis]._visualValues !== void 0 && stacks[axis]._visualValues[datasetIndex] !== void 0) {
- delete stacks[axis]._visualValues[datasetIndex];
- }
- }
-}
-var isDirectUpdateMode = (mode) => mode === "reset" || mode === "none";
-var cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);
-var createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked && {
- keys: getSortedDatasetIndices(chart, true),
- values: null
-};
-var DatasetController = class {
- constructor(chart, datasetIndex) {
- this.chart = chart;
- this._ctx = chart.ctx;
- this.index = datasetIndex;
- this._cachedDataOpts = {};
- this._cachedMeta = this.getMeta();
- this._type = this._cachedMeta.type;
- this.options = void 0;
- this._parsing = false;
- this._data = void 0;
- this._objectData = void 0;
- this._sharedOptions = void 0;
- this._drawStart = void 0;
- this._drawCount = void 0;
- this.enableOptionSharing = false;
- this.supportsDecimation = false;
- this.$context = void 0;
- this._syncList = [];
- this.datasetElementType = new.target.datasetElementType;
- this.dataElementType = new.target.dataElementType;
- this.initialize();
- }
- initialize() {
- const meta = this._cachedMeta;
- this.configure();
- this.linkScales();
- meta._stacked = isStacked(meta.vScale, meta);
- this.addElements();
- if (this.options.fill && !this.chart.isPluginEnabled("filler")) {
- console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options");
- }
- }
- updateIndex(datasetIndex) {
- if (this.index !== datasetIndex) {
- clearStacks(this._cachedMeta);
- }
- this.index = datasetIndex;
- }
- linkScales() {
- const chart = this.chart;
- const meta = this._cachedMeta;
- const dataset = this.getDataset();
- const chooseId = (axis, x, y, r) => axis === "x" ? x : axis === "r" ? r : y;
- const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, "x"));
- const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, "y"));
- const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, "r"));
- const indexAxis = meta.indexAxis;
- const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);
- const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);
- meta.xScale = this.getScaleForId(xid);
- meta.yScale = this.getScaleForId(yid);
- meta.rScale = this.getScaleForId(rid);
- meta.iScale = this.getScaleForId(iid);
- meta.vScale = this.getScaleForId(vid);
- }
- getDataset() {
- return this.chart.data.datasets[this.index];
- }
- getMeta() {
- return this.chart.getDatasetMeta(this.index);
- }
- getScaleForId(scaleID) {
- return this.chart.scales[scaleID];
- }
- _getOtherScale(scale) {
- const meta = this._cachedMeta;
- return scale === meta.iScale ? meta.vScale : meta.iScale;
- }
- reset() {
- this._update("reset");
- }
- _destroy() {
- const meta = this._cachedMeta;
- if (this._data) {
- unlistenArrayEvents(this._data, this);
- }
- if (meta._stacked) {
- clearStacks(meta);
- }
- }
- _dataCheck() {
- const dataset = this.getDataset();
- const data = dataset.data || (dataset.data = []);
- const _data = this._data;
- if (isObject(data)) {
- this._data = convertObjectDataToArray(data);
- } else if (_data !== data) {
- if (_data) {
- unlistenArrayEvents(_data, this);
- const meta = this._cachedMeta;
- clearStacks(meta);
- meta._parsed = [];
- }
- if (data && Object.isExtensible(data)) {
- listenArrayEvents(data, this);
- }
- this._syncList = [];
- this._data = data;
- }
- }
- addElements() {
- const meta = this._cachedMeta;
- this._dataCheck();
- if (this.datasetElementType) {
- meta.dataset = new this.datasetElementType();
- }
- }
- buildOrUpdateElements(resetNewElements) {
- const meta = this._cachedMeta;
- const dataset = this.getDataset();
- let stackChanged = false;
- this._dataCheck();
- const oldStacked = meta._stacked;
- meta._stacked = isStacked(meta.vScale, meta);
- if (meta.stack !== dataset.stack) {
- stackChanged = true;
- clearStacks(meta);
- meta.stack = dataset.stack;
- }
- this._resyncElements(resetNewElements);
- if (stackChanged || oldStacked !== meta._stacked) {
- updateStacks(this, meta._parsed);
- }
- }
- configure() {
- const config = this.chart.config;
- const scopeKeys = config.datasetScopeKeys(this._type);
- const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);
- this.options = config.createResolver(scopes, this.getContext());
- this._parsing = this.options.parsing;
- this._cachedDataOpts = {};
- }
- parse(start, count) {
- const { _cachedMeta: meta, _data: data } = this;
- const { iScale, _stacked } = meta;
- const iAxis = iScale.axis;
- let sorted = start === 0 && count === data.length ? true : meta._sorted;
- let prev = start > 0 && meta._parsed[start - 1];
- let i, cur, parsed;
- if (this._parsing === false) {
- meta._parsed = data;
- meta._sorted = true;
- parsed = data;
- } else {
- if (isArray(data[start])) {
- parsed = this.parseArrayData(meta, data, start, count);
- } else if (isObject(data[start])) {
- parsed = this.parseObjectData(meta, data, start, count);
- } else {
- parsed = this.parsePrimitiveData(meta, data, start, count);
- }
- const isNotInOrderComparedToPrev = () => cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];
- for (i = 0; i < count; ++i) {
- meta._parsed[i + start] = cur = parsed[i];
- if (sorted) {
- if (isNotInOrderComparedToPrev()) {
- sorted = false;
- }
- prev = cur;
- }
- }
- meta._sorted = sorted;
- }
- if (_stacked) {
- updateStacks(this, parsed);
- }
- }
- parsePrimitiveData(meta, data, start, count) {
- const { iScale, vScale } = meta;
- const iAxis = iScale.axis;
- const vAxis = vScale.axis;
- const labels = iScale.getLabels();
- const singleScale = iScale === vScale;
- const parsed = new Array(count);
- let i, ilen, index;
- for (i = 0, ilen = count; i < ilen; ++i) {
- index = i + start;
- parsed[i] = {
- [iAxis]: singleScale || iScale.parse(labels[index], index),
- [vAxis]: vScale.parse(data[index], index)
- };
- }
- return parsed;
- }
- parseArrayData(meta, data, start, count) {
- const { xScale, yScale } = meta;
- const parsed = new Array(count);
- let i, ilen, index, item;
- for (i = 0, ilen = count; i < ilen; ++i) {
- index = i + start;
- item = data[index];
- parsed[i] = {
- x: xScale.parse(item[0], index),
- y: yScale.parse(item[1], index)
- };
- }
- return parsed;
- }
- parseObjectData(meta, data, start, count) {
- const { xScale, yScale } = meta;
- const { xAxisKey = "x", yAxisKey = "y" } = this._parsing;
- const parsed = new Array(count);
- let i, ilen, index, item;
- for (i = 0, ilen = count; i < ilen; ++i) {
- index = i + start;
- item = data[index];
- parsed[i] = {
- x: xScale.parse(resolveObjectKey(item, xAxisKey), index),
- y: yScale.parse(resolveObjectKey(item, yAxisKey), index)
- };
- }
- return parsed;
- }
- getParsed(index) {
- return this._cachedMeta._parsed[index];
- }
- getDataElement(index) {
- return this._cachedMeta.data[index];
- }
- applyStack(scale, parsed, mode) {
- const chart = this.chart;
- const meta = this._cachedMeta;
- const value = parsed[scale.axis];
- const stack = {
- keys: getSortedDatasetIndices(chart, true),
- values: parsed._stacks[scale.axis]._visualValues
- };
- return applyStack(stack, value, meta.index, {
- mode
- });
- }
- updateRangeFromParsed(range, scale, parsed, stack) {
- const parsedValue = parsed[scale.axis];
- let value = parsedValue === null ? NaN : parsedValue;
- const values = stack && parsed._stacks[scale.axis];
- if (stack && values) {
- stack.values = values;
- value = applyStack(stack, parsedValue, this._cachedMeta.index);
- }
- range.min = Math.min(range.min, value);
- range.max = Math.max(range.max, value);
- }
- getMinMax(scale, canStack) {
- const meta = this._cachedMeta;
- const _parsed = meta._parsed;
- const sorted = meta._sorted && scale === meta.iScale;
- const ilen = _parsed.length;
- const otherScale = this._getOtherScale(scale);
- const stack = createStack(canStack, meta, this.chart);
- const range = {
- min: Number.POSITIVE_INFINITY,
- max: Number.NEGATIVE_INFINITY
- };
- const { min: otherMin, max: otherMax } = getUserBounds(otherScale);
- let i, parsed;
- function _skip() {
- parsed = _parsed[i];
- const otherValue = parsed[otherScale.axis];
- return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;
- }
- for (i = 0; i < ilen; ++i) {
- if (_skip()) {
- continue;
- }
- this.updateRangeFromParsed(range, scale, parsed, stack);
- if (sorted) {
- break;
- }
- }
- if (sorted) {
- for (i = ilen - 1; i >= 0; --i) {
- if (_skip()) {
- continue;
- }
- this.updateRangeFromParsed(range, scale, parsed, stack);
- break;
- }
- }
- return range;
- }
- getAllParsedValues(scale) {
- const parsed = this._cachedMeta._parsed;
- const values = [];
- let i, ilen, value;
- for (i = 0, ilen = parsed.length; i < ilen; ++i) {
- value = parsed[i][scale.axis];
- if (isNumberFinite(value)) {
- values.push(value);
- }
- }
- return values;
- }
- getMaxOverflow() {
- return false;
- }
- getLabelAndValue(index) {
- const meta = this._cachedMeta;
- const iScale = meta.iScale;
- const vScale = meta.vScale;
- const parsed = this.getParsed(index);
- return {
- label: iScale ? "" + iScale.getLabelForValue(parsed[iScale.axis]) : "",
- value: vScale ? "" + vScale.getLabelForValue(parsed[vScale.axis]) : ""
- };
- }
- _update(mode) {
- const meta = this._cachedMeta;
- this.update(mode || "default");
- meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));
- }
- update(mode) {
- }
- draw() {
- const ctx = this._ctx;
- const chart = this.chart;
- const meta = this._cachedMeta;
- const elements = meta.data || [];
- const area = chart.chartArea;
- const active = [];
- const start = this._drawStart || 0;
- const count = this._drawCount || elements.length - start;
- const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;
- let i;
- if (meta.dataset) {
- meta.dataset.draw(ctx, area, start, count);
- }
- for (i = start; i < start + count; ++i) {
- const element = elements[i];
- if (element.hidden) {
- continue;
- }
- if (element.active && drawActiveElementsOnTop) {
- active.push(element);
- } else {
- element.draw(ctx, area);
- }
- }
- for (i = 0; i < active.length; ++i) {
- active[i].draw(ctx, area);
- }
- }
- getStyle(index, active) {
- const mode = active ? "active" : "default";
- return index === void 0 && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);
- }
- getContext(index, active, mode) {
- const dataset = this.getDataset();
- let context;
- if (index >= 0 && index < this._cachedMeta.data.length) {
- const element = this._cachedMeta.data[index];
- context = element.$context || (element.$context = createDataContext(this.getContext(), index, element));
- context.parsed = this.getParsed(index);
- context.raw = dataset.data[index];
- context.index = context.dataIndex = index;
- } else {
- context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));
- context.dataset = dataset;
- context.index = context.datasetIndex = this.index;
- }
- context.active = !!active;
- context.mode = mode;
- return context;
- }
- resolveDatasetElementOptions(mode) {
- return this._resolveElementOptions(this.datasetElementType.id, mode);
- }
- resolveDataElementOptions(index, mode) {
- return this._resolveElementOptions(this.dataElementType.id, mode, index);
- }
- _resolveElementOptions(elementType, mode = "default", index) {
- const active = mode === "active";
- const cache = this._cachedDataOpts;
- const cacheKey = elementType + "-" + mode;
- const cached = cache[cacheKey];
- const sharing = this.enableOptionSharing && defined(index);
- if (cached) {
- return cloneIfNotShared(cached, sharing);
- }
- const config = this.chart.config;
- const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);
- const prefixes = active ? [
- `${elementType}Hover`,
- "hover",
- elementType,
- ""
- ] : [
- elementType,
- ""
- ];
- const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);
- const names2 = Object.keys(defaults.elements[elementType]);
- const context = () => this.getContext(index, active, mode);
- const values = config.resolveNamedOptions(scopes, names2, context, prefixes);
- if (values.$shared) {
- values.$shared = sharing;
- cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));
- }
- return values;
- }
- _resolveAnimations(index, transition, active) {
- const chart = this.chart;
- const cache = this._cachedDataOpts;
- const cacheKey = `animation-${transition}`;
- const cached = cache[cacheKey];
- if (cached) {
- return cached;
- }
- let options;
- if (chart.options.animation !== false) {
- const config = this.chart.config;
- const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);
- const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);
- options = config.createResolver(scopes, this.getContext(index, active, transition));
- }
- const animations = new Animations(chart, options && options.animations);
- if (options && options._cacheable) {
- cache[cacheKey] = Object.freeze(animations);
- }
- return animations;
- }
- getSharedOptions(options) {
- if (!options.$shared) {
- return;
- }
- return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));
- }
- includeOptions(mode, sharedOptions) {
- return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;
- }
- _getSharedOptions(start, mode) {
- const firstOpts = this.resolveDataElementOptions(start, mode);
- const previouslySharedOptions = this._sharedOptions;
- const sharedOptions = this.getSharedOptions(firstOpts);
- const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;
- this.updateSharedOptions(sharedOptions, mode, firstOpts);
- return {
- sharedOptions,
- includeOptions
- };
- }
- updateElement(element, index, properties, mode) {
- if (isDirectUpdateMode(mode)) {
- Object.assign(element, properties);
- } else {
- this._resolveAnimations(index, mode).update(element, properties);
- }
- }
- updateSharedOptions(sharedOptions, mode, newOptions) {
- if (sharedOptions && !isDirectUpdateMode(mode)) {
- this._resolveAnimations(void 0, mode).update(sharedOptions, newOptions);
- }
- }
- _setStyle(element, index, mode, active) {
- element.active = active;
- const options = this.getStyle(index, active);
- this._resolveAnimations(index, mode, active).update(element, {
- options: !active && this.getSharedOptions(options) || options
- });
- }
- removeHoverStyle(element, datasetIndex, index) {
- this._setStyle(element, index, "active", false);
- }
- setHoverStyle(element, datasetIndex, index) {
- this._setStyle(element, index, "active", true);
- }
- _removeDatasetHoverStyle() {
- const element = this._cachedMeta.dataset;
- if (element) {
- this._setStyle(element, void 0, "active", false);
- }
- }
- _setDatasetHoverStyle() {
- const element = this._cachedMeta.dataset;
- if (element) {
- this._setStyle(element, void 0, "active", true);
- }
- }
- _resyncElements(resetNewElements) {
- const data = this._data;
- const elements = this._cachedMeta.data;
- for (const [method, arg1, arg2] of this._syncList) {
- this[method](arg1, arg2);
- }
- this._syncList = [];
- const numMeta = elements.length;
- const numData = data.length;
- const count = Math.min(numData, numMeta);
- if (count) {
- this.parse(0, count);
- }
- if (numData > numMeta) {
- this._insertElements(numMeta, numData - numMeta, resetNewElements);
- } else if (numData < numMeta) {
- this._removeElements(numData, numMeta - numData);
- }
- }
- _insertElements(start, count, resetNewElements = true) {
- const meta = this._cachedMeta;
- const data = meta.data;
- const end = start + count;
- let i;
- const move = (arr) => {
- arr.length += count;
- for (i = arr.length - 1; i >= end; i--) {
- arr[i] = arr[i - count];
- }
- };
- move(data);
- for (i = start; i < end; ++i) {
- data[i] = new this.dataElementType();
- }
- if (this._parsing) {
- move(meta._parsed);
- }
- this.parse(start, count);
- if (resetNewElements) {
- this.updateElements(data, start, count, "reset");
- }
- }
- updateElements(element, start, count, mode) {
- }
- _removeElements(start, count) {
- const meta = this._cachedMeta;
- if (this._parsing) {
- const removed = meta._parsed.splice(start, count);
- if (meta._stacked) {
- clearStacks(meta, removed);
- }
- }
- meta.data.splice(start, count);
- }
- _sync(args) {
- if (this._parsing) {
- this._syncList.push(args);
- } else {
- const [method, arg1, arg2] = args;
- this[method](arg1, arg2);
- }
- this.chart._dataChanges.push([
- this.index,
- ...args
- ]);
- }
- _onDataPush() {
- const count = arguments.length;
- this._sync([
- "_insertElements",
- this.getDataset().data.length - count,
- count
- ]);
- }
- _onDataPop() {
- this._sync([
- "_removeElements",
- this._cachedMeta.data.length - 1,
- 1
- ]);
- }
- _onDataShift() {
- this._sync([
- "_removeElements",
- 0,
- 1
- ]);
- }
- _onDataSplice(start, count) {
- if (count) {
- this._sync([
- "_removeElements",
- start,
- count
- ]);
- }
- const newCount = arguments.length - 2;
- if (newCount) {
- this._sync([
- "_insertElements",
- start,
- newCount
- ]);
- }
- }
- _onDataUnshift() {
- this._sync([
- "_insertElements",
- 0,
- arguments.length
- ]);
- }
-};
-__publicField(DatasetController, "defaults", {});
-__publicField(DatasetController, "datasetElementType", null);
-__publicField(DatasetController, "dataElementType", null);
-function getAllScaleValues(scale, type) {
- if (!scale._cache.$bar) {
- const visibleMetas = scale.getMatchingVisibleMetas(type);
- let values = [];
- for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {
- values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));
- }
- scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));
- }
- return scale._cache.$bar;
-}
-function computeMinSampleSize(meta) {
- const scale = meta.iScale;
- const values = getAllScaleValues(scale, meta.type);
- let min = scale._length;
- let i, ilen, curr, prev;
- const updateMinAndPrev = () => {
- if (curr === 32767 || curr === -32768) {
- return;
- }
- if (defined(prev)) {
- min = Math.min(min, Math.abs(curr - prev) || min);
- }
- prev = curr;
- };
- for (i = 0, ilen = values.length; i < ilen; ++i) {
- curr = scale.getPixelForValue(values[i]);
- updateMinAndPrev();
- }
- prev = void 0;
- for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {
- curr = scale.getPixelForTick(i);
- updateMinAndPrev();
- }
- return min;
-}
-function computeFitCategoryTraits(index, ruler, options, stackCount) {
- const thickness = options.barThickness;
- let size, ratio;
- if (isNullOrUndef(thickness)) {
- size = ruler.min * options.categoryPercentage;
- ratio = options.barPercentage;
- } else {
- size = thickness * stackCount;
- ratio = 1;
- }
- return {
- chunk: size / stackCount,
- ratio,
- start: ruler.pixels[index] - size / 2
- };
-}
-function computeFlexCategoryTraits(index, ruler, options, stackCount) {
- const pixels = ruler.pixels;
- const curr = pixels[index];
- let prev = index > 0 ? pixels[index - 1] : null;
- let next = index < pixels.length - 1 ? pixels[index + 1] : null;
- const percent = options.categoryPercentage;
- if (prev === null) {
- prev = curr - (next === null ? ruler.end - ruler.start : next - curr);
- }
- if (next === null) {
- next = curr + curr - prev;
- }
- const start = curr - (curr - Math.min(prev, next)) / 2 * percent;
- const size = Math.abs(next - prev) / 2 * percent;
- return {
- chunk: size / stackCount,
- ratio: options.barPercentage,
- start
- };
-}
-function parseFloatBar(entry, item, vScale, i) {
- const startValue = vScale.parse(entry[0], i);
- const endValue = vScale.parse(entry[1], i);
- const min = Math.min(startValue, endValue);
- const max = Math.max(startValue, endValue);
- let barStart = min;
- let barEnd = max;
- if (Math.abs(min) > Math.abs(max)) {
- barStart = max;
- barEnd = min;
- }
- item[vScale.axis] = barEnd;
- item._custom = {
- barStart,
- barEnd,
- start: startValue,
- end: endValue,
- min,
- max
- };
-}
-function parseValue(entry, item, vScale, i) {
- if (isArray(entry)) {
- parseFloatBar(entry, item, vScale, i);
- } else {
- item[vScale.axis] = vScale.parse(entry, i);
- }
- return item;
-}
-function parseArrayOrPrimitive(meta, data, start, count) {
- const iScale = meta.iScale;
- const vScale = meta.vScale;
- const labels = iScale.getLabels();
- const singleScale = iScale === vScale;
- const parsed = [];
- let i, ilen, item, entry;
- for (i = start, ilen = start + count; i < ilen; ++i) {
- entry = data[i];
- item = {};
- item[iScale.axis] = singleScale || iScale.parse(labels[i], i);
- parsed.push(parseValue(entry, item, vScale, i));
- }
- return parsed;
-}
-function isFloatBar(custom) {
- return custom && custom.barStart !== void 0 && custom.barEnd !== void 0;
-}
-function barSign(size, vScale, actualBase) {
- if (size !== 0) {
- return sign(size);
- }
- return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);
-}
-function borderProps(properties) {
- let reverse, start, end, top, bottom;
- if (properties.horizontal) {
- reverse = properties.base > properties.x;
- start = "left";
- end = "right";
- } else {
- reverse = properties.base < properties.y;
- start = "bottom";
- end = "top";
- }
- if (reverse) {
- top = "end";
- bottom = "start";
- } else {
- top = "start";
- bottom = "end";
- }
- return {
- start,
- end,
- reverse,
- top,
- bottom
- };
-}
-function setBorderSkipped(properties, options, stack, index) {
- let edge = options.borderSkipped;
- const res = {};
- if (!edge) {
- properties.borderSkipped = res;
- return;
- }
- if (edge === true) {
- properties.borderSkipped = {
- top: true,
- right: true,
- bottom: true,
- left: true
- };
- return;
- }
- const { start, end, reverse, top, bottom } = borderProps(properties);
- if (edge === "middle" && stack) {
- properties.enableBorderRadius = true;
- if ((stack._top || 0) === index) {
- edge = top;
- } else if ((stack._bottom || 0) === index) {
- edge = bottom;
- } else {
- res[parseEdge(bottom, start, end, reverse)] = true;
- edge = top;
- }
- }
- res[parseEdge(edge, start, end, reverse)] = true;
- properties.borderSkipped = res;
-}
-function parseEdge(edge, a, b, reverse) {
- if (reverse) {
- edge = swap(edge, a, b);
- edge = startEnd(edge, b, a);
- } else {
- edge = startEnd(edge, a, b);
- }
- return edge;
-}
-function swap(orig, v1, v2) {
- return orig === v1 ? v2 : orig === v2 ? v1 : orig;
-}
-function startEnd(v, start, end) {
- return v === "start" ? start : v === "end" ? end : v;
-}
-function setInflateAmount(properties, { inflateAmount }, ratio) {
- properties.inflateAmount = inflateAmount === "auto" ? ratio === 1 ? 0.33 : 0 : inflateAmount;
-}
-var BarController = class extends DatasetController {
- parsePrimitiveData(meta, data, start, count) {
- return parseArrayOrPrimitive(meta, data, start, count);
- }
- parseArrayData(meta, data, start, count) {
- return parseArrayOrPrimitive(meta, data, start, count);
- }
- parseObjectData(meta, data, start, count) {
- const { iScale, vScale } = meta;
- const { xAxisKey = "x", yAxisKey = "y" } = this._parsing;
- const iAxisKey = iScale.axis === "x" ? xAxisKey : yAxisKey;
- const vAxisKey = vScale.axis === "x" ? xAxisKey : yAxisKey;
- const parsed = [];
- let i, ilen, item, obj;
- for (i = start, ilen = start + count; i < ilen; ++i) {
- obj = data[i];
- item = {};
- item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);
- parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));
- }
- return parsed;
- }
- updateRangeFromParsed(range, scale, parsed, stack) {
- super.updateRangeFromParsed(range, scale, parsed, stack);
- const custom = parsed._custom;
- if (custom && scale === this._cachedMeta.vScale) {
- range.min = Math.min(range.min, custom.min);
- range.max = Math.max(range.max, custom.max);
- }
- }
- getMaxOverflow() {
- return 0;
- }
- getLabelAndValue(index) {
- const meta = this._cachedMeta;
- const { iScale, vScale } = meta;
- const parsed = this.getParsed(index);
- const custom = parsed._custom;
- const value = isFloatBar(custom) ? "[" + custom.start + ", " + custom.end + "]" : "" + vScale.getLabelForValue(parsed[vScale.axis]);
- return {
- label: "" + iScale.getLabelForValue(parsed[iScale.axis]),
- value
- };
- }
- initialize() {
- this.enableOptionSharing = true;
- super.initialize();
- const meta = this._cachedMeta;
- meta.stack = this.getDataset().stack;
- }
- update(mode) {
- const meta = this._cachedMeta;
- this.updateElements(meta.data, 0, meta.data.length, mode);
- }
- updateElements(bars, start, count, mode) {
- const reset2 = mode === "reset";
- const { index, _cachedMeta: { vScale } } = this;
- const base = vScale.getBasePixel();
- const horizontal = vScale.isHorizontal();
- const ruler = this._getRuler();
- const { sharedOptions, includeOptions } = this._getSharedOptions(start, mode);
- for (let i = start; i < start + count; i++) {
- const parsed = this.getParsed(i);
- const vpixels = reset2 || isNullOrUndef(parsed[vScale.axis]) ? {
- base,
- head: base
- } : this._calculateBarValuePixels(i);
- const ipixels = this._calculateBarIndexPixels(i, ruler);
- const stack = (parsed._stacks || {})[vScale.axis];
- const properties = {
- horizontal,
- base: vpixels.base,
- enableBorderRadius: !stack || isFloatBar(parsed._custom) || index === stack._top || index === stack._bottom,
- x: horizontal ? vpixels.head : ipixels.center,
- y: horizontal ? ipixels.center : vpixels.head,
- height: horizontal ? ipixels.size : Math.abs(vpixels.size),
- width: horizontal ? Math.abs(vpixels.size) : ipixels.size
- };
- if (includeOptions) {
- properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? "active" : mode);
- }
- const options = properties.options || bars[i].options;
- setBorderSkipped(properties, options, stack, index);
- setInflateAmount(properties, options, ruler.ratio);
- this.updateElement(bars[i], i, properties, mode);
- }
- }
- _getStacks(last, dataIndex) {
- const { iScale } = this._cachedMeta;
- const metasets = iScale.getMatchingVisibleMetas(this._type).filter((meta) => meta.controller.options.grouped);
- const stacked = iScale.options.stacked;
- const stacks = [];
- const skipNull = (meta) => {
- const parsed = meta.controller.getParsed(dataIndex);
- const val = parsed && parsed[meta.vScale.axis];
- if (isNullOrUndef(val) || isNaN(val)) {
- return true;
- }
- };
- for (const meta of metasets) {
- if (dataIndex !== void 0 && skipNull(meta)) {
- continue;
- }
- if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === void 0 && meta.stack === void 0) {
- stacks.push(meta.stack);
- }
- if (meta.index === last) {
- break;
- }
- }
- if (!stacks.length) {
- stacks.push(void 0);
- }
- return stacks;
- }
- _getStackCount(index) {
- return this._getStacks(void 0, index).length;
- }
- _getStackIndex(datasetIndex, name, dataIndex) {
- const stacks = this._getStacks(datasetIndex, dataIndex);
- const index = name !== void 0 ? stacks.indexOf(name) : -1;
- return index === -1 ? stacks.length - 1 : index;
- }
- _getRuler() {
- const opts = this.options;
- const meta = this._cachedMeta;
- const iScale = meta.iScale;
- const pixels = [];
- let i, ilen;
- for (i = 0, ilen = meta.data.length; i < ilen; ++i) {
- pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));
- }
- const barThickness = opts.barThickness;
- const min = barThickness || computeMinSampleSize(meta);
- return {
- min,
- pixels,
- start: iScale._startPixel,
- end: iScale._endPixel,
- stackCount: this._getStackCount(),
- scale: iScale,
- grouped: opts.grouped,
- ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage
- };
- }
- _calculateBarValuePixels(index) {
- const { _cachedMeta: { vScale, _stacked, index: datasetIndex }, options: { base: baseValue, minBarLength } } = this;
- const actualBase = baseValue || 0;
- const parsed = this.getParsed(index);
- const custom = parsed._custom;
- const floating = isFloatBar(custom);
- let value = parsed[vScale.axis];
- let start = 0;
- let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;
- let head, size;
- if (length !== value) {
- start = length - value;
- length = value;
- }
- if (floating) {
- value = custom.barStart;
- length = custom.barEnd - custom.barStart;
- if (value !== 0 && sign(value) !== sign(custom.barEnd)) {
- start = 0;
- }
- start += value;
- }
- const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;
- let base = vScale.getPixelForValue(startValue);
- if (this.chart.getDataVisibility(index)) {
- head = vScale.getPixelForValue(start + length);
- } else {
- head = base;
- }
- size = head - base;
- if (Math.abs(size) < minBarLength) {
- size = barSign(size, vScale, actualBase) * minBarLength;
- if (value === actualBase) {
- base -= size / 2;
- }
- const startPixel = vScale.getPixelForDecimal(0);
- const endPixel = vScale.getPixelForDecimal(1);
- const min = Math.min(startPixel, endPixel);
- const max = Math.max(startPixel, endPixel);
- base = Math.max(Math.min(base, max), min);
- head = base + size;
- if (_stacked && !floating) {
- parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);
- }
- }
- if (base === vScale.getPixelForValue(actualBase)) {
- const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;
- base += halfGrid;
- size -= halfGrid;
- }
- return {
- size,
- base,
- head,
- center: head + size / 2
- };
- }
- _calculateBarIndexPixels(index, ruler) {
- const scale = ruler.scale;
- const options = this.options;
- const skipNull = options.skipNull;
- const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);
- let center, size;
- if (ruler.grouped) {
- const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;
- const range = options.barThickness === "flex" ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount);
- const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : void 0);
- center = range.start + range.chunk * stackIndex + range.chunk / 2;
- size = Math.min(maxBarThickness, range.chunk * range.ratio);
- } else {
- center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);
- size = Math.min(maxBarThickness, ruler.min * ruler.ratio);
- }
- return {
- base: center - size / 2,
- head: center + size / 2,
- center,
- size
- };
- }
- draw() {
- const meta = this._cachedMeta;
- const vScale = meta.vScale;
- const rects = meta.data;
- const ilen = rects.length;
- let i = 0;
- for (; i < ilen; ++i) {
- if (this.getParsed(i)[vScale.axis] !== null) {
- rects[i].draw(this._ctx);
- }
- }
- }
-};
-__publicField(BarController, "id", "bar");
-__publicField(BarController, "defaults", {
- datasetElementType: false,
- dataElementType: "bar",
- categoryPercentage: 0.8,
- barPercentage: 0.9,
- grouped: true,
- animations: {
- numbers: {
- type: "number",
- properties: [
- "x",
- "y",
- "base",
- "width",
- "height"
- ]
- }
- }
-});
-__publicField(BarController, "overrides", {
- scales: {
- _index_: {
- type: "category",
- offset: true,
- grid: {
- offset: true
- }
- },
- _value_: {
- type: "linear",
- beginAtZero: true
- }
- }
-});
-function getRatioAndOffset(rotation, circumference, cutout) {
- let ratioX = 1;
- let ratioY = 1;
- let offsetX = 0;
- let offsetY = 0;
- if (circumference < TAU) {
- const startAngle = rotation;
- const endAngle = startAngle + circumference;
- const startX = Math.cos(startAngle);
- const startY = Math.sin(startAngle);
- const endX = Math.cos(endAngle);
- const endY = Math.sin(endAngle);
- const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);
- const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);
- const maxX = calcMax(0, startX, endX);
- const maxY = calcMax(HALF_PI, startY, endY);
- const minX = calcMin(PI, startX, endX);
- const minY = calcMin(PI + HALF_PI, startY, endY);
- ratioX = (maxX - minX) / 2;
- ratioY = (maxY - minY) / 2;
- offsetX = -(maxX + minX) / 2;
- offsetY = -(maxY + minY) / 2;
- }
- return {
- ratioX,
- ratioY,
- offsetX,
- offsetY
- };
-}
-var DoughnutController = class extends DatasetController {
- constructor(chart, datasetIndex) {
- super(chart, datasetIndex);
- this.enableOptionSharing = true;
- this.innerRadius = void 0;
- this.outerRadius = void 0;
- this.offsetX = void 0;
- this.offsetY = void 0;
- }
- linkScales() {
- }
- parse(start, count) {
- const data = this.getDataset().data;
- const meta = this._cachedMeta;
- if (this._parsing === false) {
- meta._parsed = data;
- } else {
- let getter = (i2) => +data[i2];
- if (isObject(data[start])) {
- const { key = "value" } = this._parsing;
- getter = (i2) => +resolveObjectKey(data[i2], key);
- }
- let i, ilen;
- for (i = start, ilen = start + count; i < ilen; ++i) {
- meta._parsed[i] = getter(i);
- }
- }
- }
- _getRotation() {
- return toRadians(this.options.rotation - 90);
- }
- _getCircumference() {
- return toRadians(this.options.circumference);
- }
- _getRotationExtents() {
- let min = TAU;
- let max = -TAU;
- for (let i = 0; i < this.chart.data.datasets.length; ++i) {
- if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {
- const controller = this.chart.getDatasetMeta(i).controller;
- const rotation = controller._getRotation();
- const circumference = controller._getCircumference();
- min = Math.min(min, rotation);
- max = Math.max(max, rotation + circumference);
- }
- }
- return {
- rotation: min,
- circumference: max - min
- };
- }
- update(mode) {
- const chart = this.chart;
- const { chartArea } = chart;
- const meta = this._cachedMeta;
- const arcs = meta.data;
- const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;
- const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);
- const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);
- const chartWeight = this._getRingWeight(this.index);
- const { circumference, rotation } = this._getRotationExtents();
- const { ratioX, ratioY, offsetX, offsetY } = getRatioAndOffset(rotation, circumference, cutout);
- const maxWidth = (chartArea.width - spacing) / ratioX;
- const maxHeight = (chartArea.height - spacing) / ratioY;
- const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);
- const outerRadius = toDimension(this.options.radius, maxRadius);
- const innerRadius = Math.max(outerRadius * cutout, 0);
- const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();
- this.offsetX = offsetX * outerRadius;
- this.offsetY = offsetY * outerRadius;
- meta.total = this.calculateTotal();
- this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);
- this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);
- this.updateElements(arcs, 0, arcs.length, mode);
- }
- _circumference(i, reset2) {
- const opts = this.options;
- const meta = this._cachedMeta;
- const circumference = this._getCircumference();
- if (reset2 && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {
- return 0;
- }
- return this.calculateCircumference(meta._parsed[i] * circumference / TAU);
- }
- updateElements(arcs, start, count, mode) {
- const reset2 = mode === "reset";
- const chart = this.chart;
- const chartArea = chart.chartArea;
- const opts = chart.options;
- const animationOpts = opts.animation;
- const centerX = (chartArea.left + chartArea.right) / 2;
- const centerY = (chartArea.top + chartArea.bottom) / 2;
- const animateScale = reset2 && animationOpts.animateScale;
- const innerRadius = animateScale ? 0 : this.innerRadius;
- const outerRadius = animateScale ? 0 : this.outerRadius;
- const { sharedOptions, includeOptions } = this._getSharedOptions(start, mode);
- let startAngle = this._getRotation();
- let i;
- for (i = 0; i < start; ++i) {
- startAngle += this._circumference(i, reset2);
- }
- for (i = start; i < start + count; ++i) {
- const circumference = this._circumference(i, reset2);
- const arc = arcs[i];
- const properties = {
- x: centerX + this.offsetX,
- y: centerY + this.offsetY,
- startAngle,
- endAngle: startAngle + circumference,
- circumference,
- outerRadius,
- innerRadius
- };
- if (includeOptions) {
- properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? "active" : mode);
- }
- startAngle += circumference;
- this.updateElement(arc, i, properties, mode);
- }
- }
- calculateTotal() {
- const meta = this._cachedMeta;
- const metaData = meta.data;
- let total = 0;
- let i;
- for (i = 0; i < metaData.length; i++) {
- const value = meta._parsed[i];
- if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {
- total += Math.abs(value);
- }
- }
- return total;
- }
- calculateCircumference(value) {
- const total = this._cachedMeta.total;
- if (total > 0 && !isNaN(value)) {
- return TAU * (Math.abs(value) / total);
- }
- return 0;
- }
- getLabelAndValue(index) {
- const meta = this._cachedMeta;
- const chart = this.chart;
- const labels = chart.data.labels || [];
- const value = formatNumber(meta._parsed[index], chart.options.locale);
- return {
- label: labels[index] || "",
- value
- };
- }
- getMaxBorderWidth(arcs) {
- let max = 0;
- const chart = this.chart;
- let i, ilen, meta, controller, options;
- if (!arcs) {
- for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {
- if (chart.isDatasetVisible(i)) {
- meta = chart.getDatasetMeta(i);
- arcs = meta.data;
- controller = meta.controller;
- break;
- }
- }
- }
- if (!arcs) {
- return 0;
- }
- for (i = 0, ilen = arcs.length; i < ilen; ++i) {
- options = controller.resolveDataElementOptions(i);
- if (options.borderAlign !== "inner") {
- max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);
- }
- }
- return max;
- }
- getMaxOffset(arcs) {
- let max = 0;
- for (let i = 0, ilen = arcs.length; i < ilen; ++i) {
- const options = this.resolveDataElementOptions(i);
- max = Math.max(max, options.offset || 0, options.hoverOffset || 0);
- }
- return max;
- }
- _getRingWeightOffset(datasetIndex) {
- let ringWeightOffset = 0;
- for (let i = 0; i < datasetIndex; ++i) {
- if (this.chart.isDatasetVisible(i)) {
- ringWeightOffset += this._getRingWeight(i);
- }
- }
- return ringWeightOffset;
- }
- _getRingWeight(datasetIndex) {
- return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);
- }
- _getVisibleDatasetWeightTotal() {
- return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;
- }
-};
-__publicField(DoughnutController, "id", "doughnut");
-__publicField(DoughnutController, "defaults", {
- datasetElementType: false,
- dataElementType: "arc",
- animation: {
- animateRotate: true,
- animateScale: false
- },
- animations: {
- numbers: {
- type: "number",
- properties: [
- "circumference",
- "endAngle",
- "innerRadius",
- "outerRadius",
- "startAngle",
- "x",
- "y",
- "offset",
- "borderWidth",
- "spacing"
- ]
- }
- },
- cutout: "50%",
- rotation: 0,
- circumference: 360,
- radius: "100%",
- spacing: 0,
- indexAxis: "r"
-});
-__publicField(DoughnutController, "descriptors", {
- _scriptable: (name) => name !== "spacing",
- _indexable: (name) => name !== "spacing" && !name.startsWith("borderDash") && !name.startsWith("hoverBorderDash")
-});
-__publicField(DoughnutController, "overrides", {
- aspectRatio: 1,
- plugins: {
- legend: {
- labels: {
- generateLabels(chart) {
- const data = chart.data;
- if (data.labels.length && data.datasets.length) {
- const { labels: { pointStyle, color: color2 } } = chart.legend.options;
- return data.labels.map((label, i) => {
- const meta = chart.getDatasetMeta(0);
- const style = meta.controller.getStyle(i);
- return {
- text: label,
- fillStyle: style.backgroundColor,
- strokeStyle: style.borderColor,
- fontColor: color2,
- lineWidth: style.borderWidth,
- pointStyle,
- hidden: !chart.getDataVisibility(i),
- index: i
- };
- });
- }
- return [];
- }
- },
- onClick(e, legendItem, legend) {
- legend.chart.toggleDataVisibility(legendItem.index);
- legend.chart.update();
- }
- }
- }
-});
-var PieController = class extends DoughnutController {
-};
-__publicField(PieController, "id", "pie");
-__publicField(PieController, "defaults", {
- cutout: 0,
- rotation: 0,
- circumference: 360,
- radius: "100%"
-});
-function abstract() {
- throw new Error("This method is not implemented: Check that a complete date adapter is provided.");
-}
-var DateAdapterBase = class {
- constructor(options) {
- __publicField(this, "options");
- this.options = options || {};
- }
- /**
- * Override default date adapter methods.
- * Accepts type parameter to define options type.
- * @example
- * Chart._adapters._date.override<{myAdapterOption: string}>({
- * init() {
- * console.log(this.options.myAdapterOption);
- * }
- * })
- */
- static override(members) {
- Object.assign(DateAdapterBase.prototype, members);
- }
- // eslint-disable-next-line @typescript-eslint/no-empty-function
- init() {
- }
- formats() {
- return abstract();
- }
- parse() {
- return abstract();
- }
- format() {
- return abstract();
- }
- add() {
- return abstract();
- }
- diff() {
- return abstract();
- }
- startOf() {
- return abstract();
- }
- endOf() {
- return abstract();
- }
-};
-var adapters = {
- _date: DateAdapterBase
-};
-function binarySearch(metaset, axis, value, intersect) {
- const { controller, data, _sorted } = metaset;
- const iScale = controller._cachedMeta.iScale;
- if (iScale && axis === iScale.axis && axis !== "r" && _sorted && data.length) {
- const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;
- if (!intersect) {
- return lookupMethod(data, axis, value);
- } else if (controller._sharedOptions) {
- const el = data[0];
- const range = typeof el.getRange === "function" && el.getRange(axis);
- if (range) {
- const start = lookupMethod(data, axis, value - range);
- const end = lookupMethod(data, axis, value + range);
- return {
- lo: start.lo,
- hi: end.hi
- };
- }
- }
- }
- return {
- lo: 0,
- hi: data.length - 1
- };
-}
-function evaluateInteractionItems(chart, axis, position, handler, intersect) {
- const metasets = chart.getSortedVisibleDatasetMetas();
- const value = position[axis];
- for (let i = 0, ilen = metasets.length; i < ilen; ++i) {
- const { index, data } = metasets[i];
- const { lo, hi } = binarySearch(metasets[i], axis, value, intersect);
- for (let j = lo; j <= hi; ++j) {
- const element = data[j];
- if (!element.skip) {
- handler(element, index, j);
- }
- }
- }
-}
-function getDistanceMetricForAxis(axis) {
- const useX = axis.indexOf("x") !== -1;
- const useY = axis.indexOf("y") !== -1;
- return function(pt1, pt2) {
- const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;
- const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;
- return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));
- };
-}
-function getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {
- const items = [];
- if (!includeInvisible && !chart.isPointInArea(position)) {
- return items;
- }
- const evaluationFunc = function(element, datasetIndex, index) {
- if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {
- return;
- }
- if (element.inRange(position.x, position.y, useFinalPosition)) {
- items.push({
- element,
- datasetIndex,
- index
- });
- }
- };
- evaluateInteractionItems(chart, axis, position, evaluationFunc, true);
- return items;
-}
-function getNearestRadialItems(chart, position, axis, useFinalPosition) {
- let items = [];
- function evaluationFunc(element, datasetIndex, index) {
- const { startAngle, endAngle } = element.getProps([
- "startAngle",
- "endAngle"
- ], useFinalPosition);
- const { angle } = getAngleFromPoint(element, {
- x: position.x,
- y: position.y
- });
- if (_angleBetween(angle, startAngle, endAngle)) {
- items.push({
- element,
- datasetIndex,
- index
- });
- }
- }
- evaluateInteractionItems(chart, axis, position, evaluationFunc);
- return items;
-}
-function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {
- let items = [];
- const distanceMetric = getDistanceMetricForAxis(axis);
- let minDistance = Number.POSITIVE_INFINITY;
- function evaluationFunc(element, datasetIndex, index) {
- const inRange2 = element.inRange(position.x, position.y, useFinalPosition);
- if (intersect && !inRange2) {
- return;
- }
- const center = element.getCenterPoint(useFinalPosition);
- const pointInArea = !!includeInvisible || chart.isPointInArea(center);
- if (!pointInArea && !inRange2) {
- return;
- }
- const distance = distanceMetric(position, center);
- if (distance < minDistance) {
- items = [
- {
- element,
- datasetIndex,
- index
- }
- ];
- minDistance = distance;
- } else if (distance === minDistance) {
- items.push({
- element,
- datasetIndex,
- index
- });
- }
- }
- evaluateInteractionItems(chart, axis, position, evaluationFunc);
- return items;
-}
-function getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {
- if (!includeInvisible && !chart.isPointInArea(position)) {
- return [];
- }
- return axis === "r" && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);
-}
-function getAxisItems(chart, position, axis, intersect, useFinalPosition) {
- const items = [];
- const rangeMethod = axis === "x" ? "inXRange" : "inYRange";
- let intersectsItem = false;
- evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {
- if (element[rangeMethod](position[axis], useFinalPosition)) {
- items.push({
- element,
- datasetIndex,
- index
- });
- intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);
- }
- });
- if (intersect && !intersectsItem) {
- return [];
- }
- return items;
-}
-var Interaction = {
- evaluateInteractionItems,
- modes: {
- index(chart, e, options, useFinalPosition) {
- const position = getRelativePosition(e, chart);
- const axis = options.axis || "x";
- const includeInvisible = options.includeInvisible || false;
- const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);
- const elements = [];
- if (!items.length) {
- return [];
- }
- chart.getSortedVisibleDatasetMetas().forEach((meta) => {
- const index = items[0].index;
- const element = meta.data[index];
- if (element && !element.skip) {
- elements.push({
- element,
- datasetIndex: meta.index,
- index
- });
- }
- });
- return elements;
- },
- dataset(chart, e, options, useFinalPosition) {
- const position = getRelativePosition(e, chart);
- const axis = options.axis || "xy";
- const includeInvisible = options.includeInvisible || false;
- let items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);
- if (items.length > 0) {
- const datasetIndex = items[0].datasetIndex;
- const data = chart.getDatasetMeta(datasetIndex).data;
- items = [];
- for (let i = 0; i < data.length; ++i) {
- items.push({
- element: data[i],
- datasetIndex,
- index: i
- });
- }
- }
- return items;
- },
- point(chart, e, options, useFinalPosition) {
- const position = getRelativePosition(e, chart);
- const axis = options.axis || "xy";
- const includeInvisible = options.includeInvisible || false;
- return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);
- },
- nearest(chart, e, options, useFinalPosition) {
- const position = getRelativePosition(e, chart);
- const axis = options.axis || "xy";
- const includeInvisible = options.includeInvisible || false;
- return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);
- },
- x(chart, e, options, useFinalPosition) {
- const position = getRelativePosition(e, chart);
- return getAxisItems(chart, position, "x", options.intersect, useFinalPosition);
- },
- y(chart, e, options, useFinalPosition) {
- const position = getRelativePosition(e, chart);
- return getAxisItems(chart, position, "y", options.intersect, useFinalPosition);
- }
- }
-};
-var STATIC_POSITIONS = [
- "left",
- "top",
- "right",
- "bottom"
-];
-function filterByPosition(array, position) {
- return array.filter((v) => v.pos === position);
-}
-function filterDynamicPositionByAxis(array, axis) {
- return array.filter((v) => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);
-}
-function sortByWeight(array, reverse) {
- return array.sort((a, b) => {
- const v0 = reverse ? b : a;
- const v1 = reverse ? a : b;
- return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;
- });
-}
-function wrapBoxes(boxes) {
- const layoutBoxes = [];
- let i, ilen, box, pos, stack, stackWeight;
- for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {
- box = boxes[i];
- ({ position: pos, options: { stack, stackWeight = 1 } } = box);
- layoutBoxes.push({
- index: i,
- box,
- pos,
- horizontal: box.isHorizontal(),
- weight: box.weight,
- stack: stack && pos + stack,
- stackWeight
- });
- }
- return layoutBoxes;
-}
-function buildStacks(layouts2) {
- const stacks = {};
- for (const wrap of layouts2) {
- const { stack, pos, stackWeight } = wrap;
- if (!stack || !STATIC_POSITIONS.includes(pos)) {
- continue;
- }
- const _stack = stacks[stack] || (stacks[stack] = {
- count: 0,
- placed: 0,
- weight: 0,
- size: 0
- });
- _stack.count++;
- _stack.weight += stackWeight;
- }
- return stacks;
-}
-function setLayoutDims(layouts2, params) {
- const stacks = buildStacks(layouts2);
- const { vBoxMaxWidth, hBoxMaxHeight } = params;
- let i, ilen, layout;
- for (i = 0, ilen = layouts2.length; i < ilen; ++i) {
- layout = layouts2[i];
- const { fullSize } = layout.box;
- const stack = stacks[layout.stack];
- const factor = stack && layout.stackWeight / stack.weight;
- if (layout.horizontal) {
- layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;
- layout.height = hBoxMaxHeight;
- } else {
- layout.width = vBoxMaxWidth;
- layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;
- }
- }
- return stacks;
-}
-function buildLayoutBoxes(boxes) {
- const layoutBoxes = wrapBoxes(boxes);
- const fullSize = sortByWeight(layoutBoxes.filter((wrap) => wrap.box.fullSize), true);
- const left = sortByWeight(filterByPosition(layoutBoxes, "left"), true);
- const right = sortByWeight(filterByPosition(layoutBoxes, "right"));
- const top = sortByWeight(filterByPosition(layoutBoxes, "top"), true);
- const bottom = sortByWeight(filterByPosition(layoutBoxes, "bottom"));
- const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, "x");
- const centerVertical = filterDynamicPositionByAxis(layoutBoxes, "y");
- return {
- fullSize,
- leftAndTop: left.concat(top),
- rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),
- chartArea: filterByPosition(layoutBoxes, "chartArea"),
- vertical: left.concat(right).concat(centerVertical),
- horizontal: top.concat(bottom).concat(centerHorizontal)
- };
-}
-function getCombinedMax(maxPadding, chartArea, a, b) {
- return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);
-}
-function updateMaxPadding(maxPadding, boxPadding) {
- maxPadding.top = Math.max(maxPadding.top, boxPadding.top);
- maxPadding.left = Math.max(maxPadding.left, boxPadding.left);
- maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);
- maxPadding.right = Math.max(maxPadding.right, boxPadding.right);
-}
-function updateDims(chartArea, params, layout, stacks) {
- const { pos, box } = layout;
- const maxPadding = chartArea.maxPadding;
- if (!isObject(pos)) {
- if (layout.size) {
- chartArea[pos] -= layout.size;
- }
- const stack = stacks[layout.stack] || {
- size: 0,
- count: 1
- };
- stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);
- layout.size = stack.size / stack.count;
- chartArea[pos] += layout.size;
- }
- if (box.getPadding) {
- updateMaxPadding(maxPadding, box.getPadding());
- }
- const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, "left", "right"));
- const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, "top", "bottom"));
- const widthChanged = newWidth !== chartArea.w;
- const heightChanged = newHeight !== chartArea.h;
- chartArea.w = newWidth;
- chartArea.h = newHeight;
- return layout.horizontal ? {
- same: widthChanged,
- other: heightChanged
- } : {
- same: heightChanged,
- other: widthChanged
- };
-}
-function handleMaxPadding(chartArea) {
- const maxPadding = chartArea.maxPadding;
- function updatePos(pos) {
- const change = Math.max(maxPadding[pos] - chartArea[pos], 0);
- chartArea[pos] += change;
- return change;
- }
- chartArea.y += updatePos("top");
- chartArea.x += updatePos("left");
- updatePos("right");
- updatePos("bottom");
-}
-function getMargins(horizontal, chartArea) {
- const maxPadding = chartArea.maxPadding;
- function marginForPositions(positions2) {
- const margin = {
- left: 0,
- top: 0,
- right: 0,
- bottom: 0
- };
- positions2.forEach((pos) => {
- margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);
- });
- return margin;
- }
- return horizontal ? marginForPositions([
- "left",
- "right"
- ]) : marginForPositions([
- "top",
- "bottom"
- ]);
-}
-function fitBoxes(boxes, chartArea, params, stacks) {
- const refitBoxes = [];
- let i, ilen, layout, box, refit, changed;
- for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {
- layout = boxes[i];
- box = layout.box;
- box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));
- const { same, other } = updateDims(chartArea, params, layout, stacks);
- refit |= same && refitBoxes.length;
- changed = changed || other;
- if (!box.fullSize) {
- refitBoxes.push(layout);
- }
- }
- return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;
-}
-function setBoxDims(box, left, top, width, height) {
- box.top = top;
- box.left = left;
- box.right = left + width;
- box.bottom = top + height;
- box.width = width;
- box.height = height;
-}
-function placeBoxes(boxes, chartArea, params, stacks) {
- const userPadding = params.padding;
- let { x, y } = chartArea;
- for (const layout of boxes) {
- const box = layout.box;
- const stack = stacks[layout.stack] || {
- count: 1,
- placed: 0,
- weight: 1
- };
- const weight = layout.stackWeight / stack.weight || 1;
- if (layout.horizontal) {
- const width = chartArea.w * weight;
- const height = stack.size || box.height;
- if (defined(stack.start)) {
- y = stack.start;
- }
- if (box.fullSize) {
- setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);
- } else {
- setBoxDims(box, chartArea.left + stack.placed, y, width, height);
- }
- stack.start = y;
- stack.placed += width;
- y = box.bottom;
- } else {
- const height = chartArea.h * weight;
- const width = stack.size || box.width;
- if (defined(stack.start)) {
- x = stack.start;
- }
- if (box.fullSize) {
- setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);
- } else {
- setBoxDims(box, x, chartArea.top + stack.placed, width, height);
- }
- stack.start = x;
- stack.placed += height;
- x = box.right;
- }
- }
- chartArea.x = x;
- chartArea.y = y;
-}
-var layouts = {
- addBox(chart, item) {
- if (!chart.boxes) {
- chart.boxes = [];
- }
- item.fullSize = item.fullSize || false;
- item.position = item.position || "top";
- item.weight = item.weight || 0;
- item._layers = item._layers || function() {
- return [
- {
- z: 0,
- draw(chartArea) {
- item.draw(chartArea);
- }
- }
- ];
- };
- chart.boxes.push(item);
- },
- removeBox(chart, layoutItem) {
- const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;
- if (index !== -1) {
- chart.boxes.splice(index, 1);
- }
- },
- configure(chart, item, options) {
- item.fullSize = options.fullSize;
- item.position = options.position;
- item.weight = options.weight;
- },
- update(chart, width, height, minPadding) {
- if (!chart) {
- return;
- }
- const padding = toPadding(chart.options.layout.padding);
- const availableWidth = Math.max(width - padding.width, 0);
- const availableHeight = Math.max(height - padding.height, 0);
- const boxes = buildLayoutBoxes(chart.boxes);
- const verticalBoxes = boxes.vertical;
- const horizontalBoxes = boxes.horizontal;
- each(chart.boxes, (box) => {
- if (typeof box.beforeLayout === "function") {
- box.beforeLayout();
- }
- });
- const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) => wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;
- const params = Object.freeze({
- outerWidth: width,
- outerHeight: height,
- padding,
- availableWidth,
- availableHeight,
- vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,
- hBoxMaxHeight: availableHeight / 2
- });
- const maxPadding = Object.assign({}, padding);
- updateMaxPadding(maxPadding, toPadding(minPadding));
- const chartArea = Object.assign({
- maxPadding,
- w: availableWidth,
- h: availableHeight,
- x: padding.left,
- y: padding.top
- }, padding);
- const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);
- fitBoxes(boxes.fullSize, chartArea, params, stacks);
- fitBoxes(verticalBoxes, chartArea, params, stacks);
- if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {
- fitBoxes(verticalBoxes, chartArea, params, stacks);
- }
- handleMaxPadding(chartArea);
- placeBoxes(boxes.leftAndTop, chartArea, params, stacks);
- chartArea.x += chartArea.w;
- chartArea.y += chartArea.h;
- placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);
- chart.chartArea = {
- left: chartArea.left,
- top: chartArea.top,
- right: chartArea.left + chartArea.w,
- bottom: chartArea.top + chartArea.h,
- height: chartArea.h,
- width: chartArea.w
- };
- each(boxes.chartArea, (layout) => {
- const box = layout.box;
- Object.assign(box, chart.chartArea);
- box.update(chartArea.w, chartArea.h, {
- left: 0,
- top: 0,
- right: 0,
- bottom: 0
- });
- });
- }
-};
-var BasePlatform = class {
- acquireContext(canvas, aspectRatio) {
- }
- releaseContext(context) {
- return false;
- }
- addEventListener(chart, type, listener) {
- }
- removeEventListener(chart, type, listener) {
- }
- getDevicePixelRatio() {
- return 1;
- }
- getMaximumSize(element, width, height, aspectRatio) {
- width = Math.max(0, width || element.width);
- height = height || element.height;
- return {
- width,
- height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)
- };
- }
- isAttached(canvas) {
- return true;
- }
- updateConfig(config) {
- }
-};
-var BasicPlatform = class extends BasePlatform {
- acquireContext(item) {
- return item && item.getContext && item.getContext("2d") || null;
- }
- updateConfig(config) {
- config.options.animation = false;
- }
-};
-var EXPANDO_KEY = "$chartjs";
-var EVENT_TYPES = {
- touchstart: "mousedown",
- touchmove: "mousemove",
- touchend: "mouseup",
- pointerenter: "mouseenter",
- pointerdown: "mousedown",
- pointermove: "mousemove",
- pointerup: "mouseup",
- pointerleave: "mouseout",
- pointerout: "mouseout"
-};
-var isNullOrEmpty = (value) => value === null || value === "";
-function initCanvas(canvas, aspectRatio) {
- const style = canvas.style;
- const renderHeight = canvas.getAttribute("height");
- const renderWidth = canvas.getAttribute("width");
- canvas[EXPANDO_KEY] = {
- initial: {
- height: renderHeight,
- width: renderWidth,
- style: {
- display: style.display,
- height: style.height,
- width: style.width
- }
- }
- };
- style.display = style.display || "block";
- style.boxSizing = style.boxSizing || "border-box";
- if (isNullOrEmpty(renderWidth)) {
- const displayWidth = readUsedSize(canvas, "width");
- if (displayWidth !== void 0) {
- canvas.width = displayWidth;
- }
- }
- if (isNullOrEmpty(renderHeight)) {
- if (canvas.style.height === "") {
- canvas.height = canvas.width / (aspectRatio || 2);
- } else {
- const displayHeight = readUsedSize(canvas, "height");
- if (displayHeight !== void 0) {
- canvas.height = displayHeight;
- }
- }
- }
- return canvas;
-}
-var eventListenerOptions = supportsEventListenerOptions ? {
- passive: true
-} : false;
-function addListener(node, type, listener) {
- node.addEventListener(type, listener, eventListenerOptions);
-}
-function removeListener(chart, type, listener) {
- chart.canvas.removeEventListener(type, listener, eventListenerOptions);
-}
-function fromNativeEvent(event, chart) {
- const type = EVENT_TYPES[event.type] || event.type;
- const { x, y } = getRelativePosition(event, chart);
- return {
- type,
- chart,
- native: event,
- x: x !== void 0 ? x : null,
- y: y !== void 0 ? y : null
- };
-}
-function nodeListContains(nodeList, canvas) {
- for (const node of nodeList) {
- if (node === canvas || node.contains(canvas)) {
- return true;
- }
- }
-}
-function createAttachObserver(chart, type, listener) {
- const canvas = chart.canvas;
- const observer = new MutationObserver((entries) => {
- let trigger = false;
- for (const entry of entries) {
- trigger = trigger || nodeListContains(entry.addedNodes, canvas);
- trigger = trigger && !nodeListContains(entry.removedNodes, canvas);
- }
- if (trigger) {
- listener();
- }
- });
- observer.observe(document, {
- childList: true,
- subtree: true
- });
- return observer;
-}
-function createDetachObserver(chart, type, listener) {
- const canvas = chart.canvas;
- const observer = new MutationObserver((entries) => {
- let trigger = false;
- for (const entry of entries) {
- trigger = trigger || nodeListContains(entry.removedNodes, canvas);
- trigger = trigger && !nodeListContains(entry.addedNodes, canvas);
- }
- if (trigger) {
- listener();
- }
- });
- observer.observe(document, {
- childList: true,
- subtree: true
- });
- return observer;
-}
-var drpListeningCharts = /* @__PURE__ */ new Map();
-var oldDevicePixelRatio = 0;
-function onWindowResize() {
- const dpr = window.devicePixelRatio;
- if (dpr === oldDevicePixelRatio) {
- return;
- }
- oldDevicePixelRatio = dpr;
- drpListeningCharts.forEach((resize, chart) => {
- if (chart.currentDevicePixelRatio !== dpr) {
- resize();
- }
- });
-}
-function listenDevicePixelRatioChanges(chart, resize) {
- if (!drpListeningCharts.size) {
- window.addEventListener("resize", onWindowResize);
- }
- drpListeningCharts.set(chart, resize);
-}
-function unlistenDevicePixelRatioChanges(chart) {
- drpListeningCharts.delete(chart);
- if (!drpListeningCharts.size) {
- window.removeEventListener("resize", onWindowResize);
- }
-}
-function createResizeObserver(chart, type, listener) {
- const canvas = chart.canvas;
- const container = canvas && _getParentNode(canvas);
- if (!container) {
- return;
- }
- const resize = throttled((width, height) => {
- const w = container.clientWidth;
- listener(width, height);
- if (w < container.clientWidth) {
- listener();
- }
- }, window);
- const observer = new ResizeObserver((entries) => {
- const entry = entries[0];
- const width = entry.contentRect.width;
- const height = entry.contentRect.height;
- if (width === 0 && height === 0) {
- return;
- }
- resize(width, height);
- });
- observer.observe(container);
- listenDevicePixelRatioChanges(chart, resize);
- return observer;
-}
-function releaseObserver(chart, type, observer) {
- if (observer) {
- observer.disconnect();
- }
- if (type === "resize") {
- unlistenDevicePixelRatioChanges(chart);
- }
-}
-function createProxyAndListen(chart, type, listener) {
- const canvas = chart.canvas;
- const proxy = throttled((event) => {
- if (chart.ctx !== null) {
- listener(fromNativeEvent(event, chart));
- }
- }, chart);
- addListener(canvas, type, proxy);
- return proxy;
-}
-var DomPlatform = class extends BasePlatform {
- acquireContext(canvas, aspectRatio) {
- const context = canvas && canvas.getContext && canvas.getContext("2d");
- if (context && context.canvas === canvas) {
- initCanvas(canvas, aspectRatio);
- return context;
- }
- return null;
- }
- releaseContext(context) {
- const canvas = context.canvas;
- if (!canvas[EXPANDO_KEY]) {
- return false;
- }
- const initial = canvas[EXPANDO_KEY].initial;
- [
- "height",
- "width"
- ].forEach((prop) => {
- const value = initial[prop];
- if (isNullOrUndef(value)) {
- canvas.removeAttribute(prop);
- } else {
- canvas.setAttribute(prop, value);
- }
- });
- const style = initial.style || {};
- Object.keys(style).forEach((key) => {
- canvas.style[key] = style[key];
- });
- canvas.width = canvas.width;
- delete canvas[EXPANDO_KEY];
- return true;
- }
- addEventListener(chart, type, listener) {
- this.removeEventListener(chart, type);
- const proxies = chart.$proxies || (chart.$proxies = {});
- const handlers = {
- attach: createAttachObserver,
- detach: createDetachObserver,
- resize: createResizeObserver
- };
- const handler = handlers[type] || createProxyAndListen;
- proxies[type] = handler(chart, type, listener);
- }
- removeEventListener(chart, type) {
- const proxies = chart.$proxies || (chart.$proxies = {});
- const proxy = proxies[type];
- if (!proxy) {
- return;
- }
- const handlers = {
- attach: releaseObserver,
- detach: releaseObserver,
- resize: releaseObserver
- };
- const handler = handlers[type] || removeListener;
- handler(chart, type, proxy);
- proxies[type] = void 0;
- }
- getDevicePixelRatio() {
- return window.devicePixelRatio;
- }
- getMaximumSize(canvas, width, height, aspectRatio) {
- return getMaximumSize(canvas, width, height, aspectRatio);
- }
- isAttached(canvas) {
- const container = _getParentNode(canvas);
- return !!(container && container.isConnected);
- }
-};
-function _detectPlatform(canvas) {
- if (!_isDomSupported() || typeof OffscreenCanvas !== "undefined" && canvas instanceof OffscreenCanvas) {
- return BasicPlatform;
- }
- return DomPlatform;
-}
-var Element = class {
- constructor() {
- __publicField(this, "x");
- __publicField(this, "y");
- __publicField(this, "active", false);
- __publicField(this, "options");
- __publicField(this, "$animations");
- }
- tooltipPosition(useFinalPosition) {
- const { x, y } = this.getProps([
- "x",
- "y"
- ], useFinalPosition);
- return {
- x,
- y
- };
- }
- hasValue() {
- return isNumber(this.x) && isNumber(this.y);
- }
- getProps(props, final) {
- const anims = this.$animations;
- if (!final || !anims) {
- return this;
- }
- const ret = {};
- props.forEach((prop) => {
- ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];
- });
- return ret;
- }
-};
-__publicField(Element, "defaults", {});
-__publicField(Element, "defaultRoutes");
-function autoSkip(scale, ticks) {
- const tickOpts = scale.options.ticks;
- const determinedMaxTicks = determineMaxTicks(scale);
- const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);
- const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];
- const numMajorIndices = majorIndices.length;
- const first = majorIndices[0];
- const last = majorIndices[numMajorIndices - 1];
- const newTicks = [];
- if (numMajorIndices > ticksLimit) {
- skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);
- return newTicks;
- }
- const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);
- if (numMajorIndices > 0) {
- let i, ilen;
- const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;
- skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);
- for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {
- skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);
- }
- skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);
- return newTicks;
- }
- skip(ticks, newTicks, spacing);
- return newTicks;
-}
-function determineMaxTicks(scale) {
- const offset = scale.options.offset;
- const tickLength = scale._tickSize();
- const maxScale = scale._length / tickLength + (offset ? 0 : 1);
- const maxChart = scale._maxLength / tickLength;
- return Math.floor(Math.min(maxScale, maxChart));
-}
-function calculateSpacing(majorIndices, ticks, ticksLimit) {
- const evenMajorSpacing = getEvenSpacing(majorIndices);
- const spacing = ticks.length / ticksLimit;
- if (!evenMajorSpacing) {
- return Math.max(spacing, 1);
- }
- const factors = _factorize(evenMajorSpacing);
- for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {
- const factor = factors[i];
- if (factor > spacing) {
- return factor;
- }
- }
- return Math.max(spacing, 1);
-}
-function getMajorIndices(ticks) {
- const result = [];
- let i, ilen;
- for (i = 0, ilen = ticks.length; i < ilen; i++) {
- if (ticks[i].major) {
- result.push(i);
- }
- }
- return result;
-}
-function skipMajors(ticks, newTicks, majorIndices, spacing) {
- let count = 0;
- let next = majorIndices[0];
- let i;
- spacing = Math.ceil(spacing);
- for (i = 0; i < ticks.length; i++) {
- if (i === next) {
- newTicks.push(ticks[i]);
- count++;
- next = majorIndices[count * spacing];
- }
- }
-}
-function skip(ticks, newTicks, spacing, majorStart, majorEnd) {
- const start = valueOrDefault(majorStart, 0);
- const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);
- let count = 0;
- let length, i, next;
- spacing = Math.ceil(spacing);
- if (majorEnd) {
- length = majorEnd - majorStart;
- spacing = length / Math.floor(length / spacing);
- }
- next = start;
- while (next < 0) {
- count++;
- next = Math.round(start + count * spacing);
- }
- for (i = Math.max(start, 0); i < end; i++) {
- if (i === next) {
- newTicks.push(ticks[i]);
- count++;
- next = Math.round(start + count * spacing);
- }
- }
-}
-function getEvenSpacing(arr) {
- const len = arr.length;
- let i, diff;
- if (len < 2) {
- return false;
- }
- for (diff = arr[0], i = 1; i < len; ++i) {
- if (arr[i] - arr[i - 1] !== diff) {
- return false;
- }
- }
- return diff;
-}
-var reverseAlign = (align) => align === "left" ? "right" : align === "right" ? "left" : align;
-var offsetFromEdge = (scale, edge, offset) => edge === "top" || edge === "left" ? scale[edge] + offset : scale[edge] - offset;
-var getTicksLimit = (ticksLength, maxTicksLimit) => Math.min(maxTicksLimit || ticksLength, ticksLength);
-function sample(arr, numItems) {
- const result = [];
- const increment = arr.length / numItems;
- const len = arr.length;
- let i = 0;
- for (; i < len; i += increment) {
- result.push(arr[Math.floor(i)]);
- }
- return result;
-}
-function getPixelForGridLine(scale, index, offsetGridLines) {
- const length = scale.ticks.length;
- const validIndex2 = Math.min(index, length - 1);
- const start = scale._startPixel;
- const end = scale._endPixel;
- const epsilon = 1e-6;
- let lineValue = scale.getPixelForTick(validIndex2);
- let offset;
- if (offsetGridLines) {
- if (length === 1) {
- offset = Math.max(lineValue - start, end - lineValue);
- } else if (index === 0) {
- offset = (scale.getPixelForTick(1) - lineValue) / 2;
- } else {
- offset = (lineValue - scale.getPixelForTick(validIndex2 - 1)) / 2;
- }
- lineValue += validIndex2 < index ? offset : -offset;
- if (lineValue < start - epsilon || lineValue > end + epsilon) {
- return;
- }
- }
- return lineValue;
-}
-function garbageCollect(caches, length) {
- each(caches, (cache) => {
- const gc = cache.gc;
- const gcLen = gc.length / 2;
- let i;
- if (gcLen > length) {
- for (i = 0; i < gcLen; ++i) {
- delete cache.data[gc[i]];
- }
- gc.splice(0, gcLen);
- }
- });
-}
-function getTickMarkLength(options) {
- return options.drawTicks ? options.tickLength : 0;
-}
-function getTitleHeight(options, fallback) {
- if (!options.display) {
- return 0;
- }
- const font = toFont(options.font, fallback);
- const padding = toPadding(options.padding);
- const lines = isArray(options.text) ? options.text.length : 1;
- return lines * font.lineHeight + padding.height;
-}
-function createScaleContext(parent, scale) {
- return createContext(parent, {
- scale,
- type: "scale"
- });
-}
-function createTickContext(parent, index, tick) {
- return createContext(parent, {
- tick,
- index,
- type: "tick"
- });
-}
-function titleAlign(align, position, reverse) {
- let ret = _toLeftRightCenter(align);
- if (reverse && position !== "right" || !reverse && position === "right") {
- ret = reverseAlign(ret);
- }
- return ret;
-}
-function titleArgs(scale, offset, position, align) {
- const { top, left, bottom, right, chart } = scale;
- const { chartArea, scales } = chart;
- let rotation = 0;
- let maxWidth, titleX, titleY;
- const height = bottom - top;
- const width = right - left;
- if (scale.isHorizontal()) {
- titleX = _alignStartEnd(align, left, right);
- if (isObject(position)) {
- const positionAxisID = Object.keys(position)[0];
- const value = position[positionAxisID];
- titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;
- } else if (position === "center") {
- titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;
- } else {
- titleY = offsetFromEdge(scale, position, offset);
- }
- maxWidth = right - left;
- } else {
- if (isObject(position)) {
- const positionAxisID = Object.keys(position)[0];
- const value = position[positionAxisID];
- titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;
- } else if (position === "center") {
- titleX = (chartArea.left + chartArea.right) / 2 - width + offset;
- } else {
- titleX = offsetFromEdge(scale, position, offset);
- }
- titleY = _alignStartEnd(align, bottom, top);
- rotation = position === "left" ? -HALF_PI : HALF_PI;
- }
- return {
- titleX,
- titleY,
- maxWidth,
- rotation
- };
-}
-var Scale = class extends Element {
- constructor(cfg) {
- super();
- this.id = cfg.id;
- this.type = cfg.type;
- this.options = void 0;
- this.ctx = cfg.ctx;
- this.chart = cfg.chart;
- this.top = void 0;
- this.bottom = void 0;
- this.left = void 0;
- this.right = void 0;
- this.width = void 0;
- this.height = void 0;
- this._margins = {
- left: 0,
- right: 0,
- top: 0,
- bottom: 0
- };
- this.maxWidth = void 0;
- this.maxHeight = void 0;
- this.paddingTop = void 0;
- this.paddingBottom = void 0;
- this.paddingLeft = void 0;
- this.paddingRight = void 0;
- this.axis = void 0;
- this.labelRotation = void 0;
- this.min = void 0;
- this.max = void 0;
- this._range = void 0;
- this.ticks = [];
- this._gridLineItems = null;
- this._labelItems = null;
- this._labelSizes = null;
- this._length = 0;
- this._maxLength = 0;
- this._longestTextCache = {};
- this._startPixel = void 0;
- this._endPixel = void 0;
- this._reversePixels = false;
- this._userMax = void 0;
- this._userMin = void 0;
- this._suggestedMax = void 0;
- this._suggestedMin = void 0;
- this._ticksLength = 0;
- this._borderValue = 0;
- this._cache = {};
- this._dataLimitsCached = false;
- this.$context = void 0;
- }
- init(options) {
- this.options = options.setContext(this.getContext());
- this.axis = options.axis;
- this._userMin = this.parse(options.min);
- this._userMax = this.parse(options.max);
- this._suggestedMin = this.parse(options.suggestedMin);
- this._suggestedMax = this.parse(options.suggestedMax);
- }
- parse(raw, index) {
- return raw;
- }
- getUserBounds() {
- let { _userMin, _userMax, _suggestedMin, _suggestedMax } = this;
- _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);
- _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);
- _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);
- _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);
- return {
- min: finiteOrDefault(_userMin, _suggestedMin),
- max: finiteOrDefault(_userMax, _suggestedMax),
- minDefined: isNumberFinite(_userMin),
- maxDefined: isNumberFinite(_userMax)
- };
- }
- getMinMax(canStack) {
- let { min, max, minDefined, maxDefined } = this.getUserBounds();
- let range;
- if (minDefined && maxDefined) {
- return {
- min,
- max
- };
- }
- const metas = this.getMatchingVisibleMetas();
- for (let i = 0, ilen = metas.length; i < ilen; ++i) {
- range = metas[i].controller.getMinMax(this, canStack);
- if (!minDefined) {
- min = Math.min(min, range.min);
- }
- if (!maxDefined) {
- max = Math.max(max, range.max);
- }
- }
- min = maxDefined && min > max ? max : min;
- max = minDefined && min > max ? min : max;
- return {
- min: finiteOrDefault(min, finiteOrDefault(max, min)),
- max: finiteOrDefault(max, finiteOrDefault(min, max))
- };
- }
- getPadding() {
- return {
- left: this.paddingLeft || 0,
- top: this.paddingTop || 0,
- right: this.paddingRight || 0,
- bottom: this.paddingBottom || 0
- };
- }
- getTicks() {
- return this.ticks;
- }
- getLabels() {
- const data = this.chart.data;
- return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];
- }
- getLabelItems(chartArea = this.chart.chartArea) {
- const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));
- return items;
- }
- beforeLayout() {
- this._cache = {};
- this._dataLimitsCached = false;
- }
- beforeUpdate() {
- callback(this.options.beforeUpdate, [
- this
- ]);
- }
- update(maxWidth, maxHeight, margins) {
- const { beginAtZero, grace, ticks: tickOpts } = this.options;
- const sampleSize = tickOpts.sampleSize;
- this.beforeUpdate();
- this.maxWidth = maxWidth;
- this.maxHeight = maxHeight;
- this._margins = margins = Object.assign({
- left: 0,
- right: 0,
- top: 0,
- bottom: 0
- }, margins);
- this.ticks = null;
- this._labelSizes = null;
- this._gridLineItems = null;
- this._labelItems = null;
- this.beforeSetDimensions();
- this.setDimensions();
- this.afterSetDimensions();
- this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;
- if (!this._dataLimitsCached) {
- this.beforeDataLimits();
- this.determineDataLimits();
- this.afterDataLimits();
- this._range = _addGrace(this, grace, beginAtZero);
- this._dataLimitsCached = true;
- }
- this.beforeBuildTicks();
- this.ticks = this.buildTicks() || [];
- this.afterBuildTicks();
- const samplingEnabled = sampleSize < this.ticks.length;
- this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);
- this.configure();
- this.beforeCalculateLabelRotation();
- this.calculateLabelRotation();
- this.afterCalculateLabelRotation();
- if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === "auto")) {
- this.ticks = autoSkip(this, this.ticks);
- this._labelSizes = null;
- this.afterAutoSkip();
- }
- if (samplingEnabled) {
- this._convertTicksToLabels(this.ticks);
- }
- this.beforeFit();
- this.fit();
- this.afterFit();
- this.afterUpdate();
- }
- configure() {
- let reversePixels = this.options.reverse;
- let startPixel, endPixel;
- if (this.isHorizontal()) {
- startPixel = this.left;
- endPixel = this.right;
- } else {
- startPixel = this.top;
- endPixel = this.bottom;
- reversePixels = !reversePixels;
- }
- this._startPixel = startPixel;
- this._endPixel = endPixel;
- this._reversePixels = reversePixels;
- this._length = endPixel - startPixel;
- this._alignToPixels = this.options.alignToPixels;
- }
- afterUpdate() {
- callback(this.options.afterUpdate, [
- this
- ]);
- }
- beforeSetDimensions() {
- callback(this.options.beforeSetDimensions, [
- this
- ]);
- }
- setDimensions() {
- if (this.isHorizontal()) {
- this.width = this.maxWidth;
- this.left = 0;
- this.right = this.width;
- } else {
- this.height = this.maxHeight;
- this.top = 0;
- this.bottom = this.height;
- }
- this.paddingLeft = 0;
- this.paddingTop = 0;
- this.paddingRight = 0;
- this.paddingBottom = 0;
- }
- afterSetDimensions() {
- callback(this.options.afterSetDimensions, [
- this
- ]);
- }
- _callHooks(name) {
- this.chart.notifyPlugins(name, this.getContext());
- callback(this.options[name], [
- this
- ]);
- }
- beforeDataLimits() {
- this._callHooks("beforeDataLimits");
- }
- determineDataLimits() {
- }
- afterDataLimits() {
- this._callHooks("afterDataLimits");
- }
- beforeBuildTicks() {
- this._callHooks("beforeBuildTicks");
- }
- buildTicks() {
- return [];
- }
- afterBuildTicks() {
- this._callHooks("afterBuildTicks");
- }
- beforeTickToLabelConversion() {
- callback(this.options.beforeTickToLabelConversion, [
- this
- ]);
- }
- generateTickLabels(ticks) {
- const tickOpts = this.options.ticks;
- let i, ilen, tick;
- for (i = 0, ilen = ticks.length; i < ilen; i++) {
- tick = ticks[i];
- tick.label = callback(tickOpts.callback, [
- tick.value,
- i,
- ticks
- ], this);
- }
- }
- afterTickToLabelConversion() {
- callback(this.options.afterTickToLabelConversion, [
- this
- ]);
- }
- beforeCalculateLabelRotation() {
- callback(this.options.beforeCalculateLabelRotation, [
- this
- ]);
- }
- calculateLabelRotation() {
- const options = this.options;
- const tickOpts = options.ticks;
- const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);
- const minRotation = tickOpts.minRotation || 0;
- const maxRotation = tickOpts.maxRotation;
- let labelRotation = minRotation;
- let tickWidth, maxHeight, maxLabelDiagonal;
- if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {
- this.labelRotation = minRotation;
- return;
- }
- const labelSizes = this._getLabelSizes();
- const maxLabelWidth = labelSizes.widest.width;
- const maxLabelHeight = labelSizes.highest.height;
- const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);
- tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);
- if (maxLabelWidth + 6 > tickWidth) {
- tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));
- maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);
- maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);
- labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));
- labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));
- }
- this.labelRotation = labelRotation;
- }
- afterCalculateLabelRotation() {
- callback(this.options.afterCalculateLabelRotation, [
- this
- ]);
- }
- afterAutoSkip() {
- }
- beforeFit() {
- callback(this.options.beforeFit, [
- this
- ]);
- }
- fit() {
- const minSize = {
- width: 0,
- height: 0
- };
- const { chart, options: { ticks: tickOpts, title: titleOpts, grid: gridOpts } } = this;
- const display = this._isVisible();
- const isHorizontal = this.isHorizontal();
- if (display) {
- const titleHeight = getTitleHeight(titleOpts, chart.options.font);
- if (isHorizontal) {
- minSize.width = this.maxWidth;
- minSize.height = getTickMarkLength(gridOpts) + titleHeight;
- } else {
- minSize.height = this.maxHeight;
- minSize.width = getTickMarkLength(gridOpts) + titleHeight;
- }
- if (tickOpts.display && this.ticks.length) {
- const { first, last, widest, highest } = this._getLabelSizes();
- const tickPadding = tickOpts.padding * 2;
- const angleRadians = toRadians(this.labelRotation);
- const cos = Math.cos(angleRadians);
- const sin = Math.sin(angleRadians);
- if (isHorizontal) {
- const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;
- minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);
- } else {
- const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;
- minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);
- }
- this._calculatePadding(first, last, sin, cos);
- }
- }
- this._handleMargins();
- if (isHorizontal) {
- this.width = this._length = chart.width - this._margins.left - this._margins.right;
- this.height = minSize.height;
- } else {
- this.width = minSize.width;
- this.height = this._length = chart.height - this._margins.top - this._margins.bottom;
- }
- }
- _calculatePadding(first, last, sin, cos) {
- const { ticks: { align, padding }, position } = this.options;
- const isRotated = this.labelRotation !== 0;
- const labelsBelowTicks = position !== "top" && this.axis === "x";
- if (this.isHorizontal()) {
- const offsetLeft = this.getPixelForTick(0) - this.left;
- const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);
- let paddingLeft = 0;
- let paddingRight = 0;
- if (isRotated) {
- if (labelsBelowTicks) {
- paddingLeft = cos * first.width;
- paddingRight = sin * last.height;
- } else {
- paddingLeft = sin * first.height;
- paddingRight = cos * last.width;
- }
- } else if (align === "start") {
- paddingRight = last.width;
- } else if (align === "end") {
- paddingLeft = first.width;
- } else if (align !== "inner") {
- paddingLeft = first.width / 2;
- paddingRight = last.width / 2;
- }
- this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);
- this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);
- } else {
- let paddingTop = last.height / 2;
- let paddingBottom = first.height / 2;
- if (align === "start") {
- paddingTop = 0;
- paddingBottom = first.height;
- } else if (align === "end") {
- paddingTop = last.height;
- paddingBottom = 0;
- }
- this.paddingTop = paddingTop + padding;
- this.paddingBottom = paddingBottom + padding;
- }
- }
- _handleMargins() {
- if (this._margins) {
- this._margins.left = Math.max(this.paddingLeft, this._margins.left);
- this._margins.top = Math.max(this.paddingTop, this._margins.top);
- this._margins.right = Math.max(this.paddingRight, this._margins.right);
- this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);
- }
- }
- afterFit() {
- callback(this.options.afterFit, [
- this
- ]);
- }
- isHorizontal() {
- const { axis, position } = this.options;
- return position === "top" || position === "bottom" || axis === "x";
- }
- isFullSize() {
- return this.options.fullSize;
- }
- _convertTicksToLabels(ticks) {
- this.beforeTickToLabelConversion();
- this.generateTickLabels(ticks);
- let i, ilen;
- for (i = 0, ilen = ticks.length; i < ilen; i++) {
- if (isNullOrUndef(ticks[i].label)) {
- ticks.splice(i, 1);
- ilen--;
- i--;
- }
- }
- this.afterTickToLabelConversion();
- }
- _getLabelSizes() {
- let labelSizes = this._labelSizes;
- if (!labelSizes) {
- const sampleSize = this.options.ticks.sampleSize;
- let ticks = this.ticks;
- if (sampleSize < ticks.length) {
- ticks = sample(ticks, sampleSize);
- }
- this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);
- }
- return labelSizes;
- }
- _computeLabelSizes(ticks, length, maxTicksLimit) {
- const { ctx, _longestTextCache: caches } = this;
- const widths = [];
- const heights = [];
- const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));
- let widestLabelSize = 0;
- let highestLabelSize = 0;
- let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;
- for (i = 0; i < length; i += increment) {
- label = ticks[i].label;
- tickFont = this._resolveTickFontOptions(i);
- ctx.font = fontString = tickFont.string;
- cache = caches[fontString] = caches[fontString] || {
- data: {},
- gc: []
- };
- lineHeight = tickFont.lineHeight;
- width = height = 0;
- if (!isNullOrUndef(label) && !isArray(label)) {
- width = _measureText(ctx, cache.data, cache.gc, width, label);
- height = lineHeight;
- } else if (isArray(label)) {
- for (j = 0, jlen = label.length; j < jlen; ++j) {
- nestedLabel = label[j];
- if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {
- width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);
- height += lineHeight;
- }
- }
- }
- widths.push(width);
- heights.push(height);
- widestLabelSize = Math.max(width, widestLabelSize);
- highestLabelSize = Math.max(height, highestLabelSize);
- }
- garbageCollect(caches, length);
- const widest = widths.indexOf(widestLabelSize);
- const highest = heights.indexOf(highestLabelSize);
- const valueAt = (idx) => ({
- width: widths[idx] || 0,
- height: heights[idx] || 0
- });
- return {
- first: valueAt(0),
- last: valueAt(length - 1),
- widest: valueAt(widest),
- highest: valueAt(highest),
- widths,
- heights
- };
- }
- getLabelForValue(value) {
- return value;
- }
- getPixelForValue(value, index) {
- return NaN;
- }
- getValueForPixel(pixel) {
- }
- getPixelForTick(index) {
- const ticks = this.ticks;
- if (index < 0 || index > ticks.length - 1) {
- return null;
- }
- return this.getPixelForValue(ticks[index].value);
- }
- getPixelForDecimal(decimal) {
- if (this._reversePixels) {
- decimal = 1 - decimal;
- }
- const pixel = this._startPixel + decimal * this._length;
- return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);
- }
- getDecimalForPixel(pixel) {
- const decimal = (pixel - this._startPixel) / this._length;
- return this._reversePixels ? 1 - decimal : decimal;
- }
- getBasePixel() {
- return this.getPixelForValue(this.getBaseValue());
- }
- getBaseValue() {
- const { min, max } = this;
- return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;
- }
- getContext(index) {
- const ticks = this.ticks || [];
- if (index >= 0 && index < ticks.length) {
- const tick = ticks[index];
- return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));
- }
- return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));
- }
- _tickSize() {
- const optionTicks = this.options.ticks;
- const rot = toRadians(this.labelRotation);
- const cos = Math.abs(Math.cos(rot));
- const sin = Math.abs(Math.sin(rot));
- const labelSizes = this._getLabelSizes();
- const padding = optionTicks.autoSkipPadding || 0;
- const w = labelSizes ? labelSizes.widest.width + padding : 0;
- const h4 = labelSizes ? labelSizes.highest.height + padding : 0;
- return this.isHorizontal() ? h4 * cos > w * sin ? w / cos : h4 / sin : h4 * sin < w * cos ? h4 / cos : w / sin;
- }
- _isVisible() {
- const display = this.options.display;
- if (display !== "auto") {
- return !!display;
- }
- return this.getMatchingVisibleMetas().length > 0;
- }
- _computeGridLineItems(chartArea) {
- const axis = this.axis;
- const chart = this.chart;
- const options = this.options;
- const { grid, position, border } = options;
- const offset = grid.offset;
- const isHorizontal = this.isHorizontal();
- const ticks = this.ticks;
- const ticksLength = ticks.length + (offset ? 1 : 0);
- const tl = getTickMarkLength(grid);
- const items = [];
- const borderOpts = border.setContext(this.getContext());
- const axisWidth = borderOpts.display ? borderOpts.width : 0;
- const axisHalfWidth = axisWidth / 2;
- const alignBorderValue = function(pixel) {
- return _alignPixel(chart, pixel, axisWidth);
- };
- let borderValue, i, lineValue, alignedLineValue;
- let tx1, ty1, tx2, ty2, x1, y1, x2, y2;
- if (position === "top") {
- borderValue = alignBorderValue(this.bottom);
- ty1 = this.bottom - tl;
- ty2 = borderValue - axisHalfWidth;
- y1 = alignBorderValue(chartArea.top) + axisHalfWidth;
- y2 = chartArea.bottom;
- } else if (position === "bottom") {
- borderValue = alignBorderValue(this.top);
- y1 = chartArea.top;
- y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;
- ty1 = borderValue + axisHalfWidth;
- ty2 = this.top + tl;
- } else if (position === "left") {
- borderValue = alignBorderValue(this.right);
- tx1 = this.right - tl;
- tx2 = borderValue - axisHalfWidth;
- x1 = alignBorderValue(chartArea.left) + axisHalfWidth;
- x2 = chartArea.right;
- } else if (position === "right") {
- borderValue = alignBorderValue(this.left);
- x1 = chartArea.left;
- x2 = alignBorderValue(chartArea.right) - axisHalfWidth;
- tx1 = borderValue + axisHalfWidth;
- tx2 = this.left + tl;
- } else if (axis === "x") {
- if (position === "center") {
- borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);
- } else if (isObject(position)) {
- const positionAxisID = Object.keys(position)[0];
- const value = position[positionAxisID];
- borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));
- }
- y1 = chartArea.top;
- y2 = chartArea.bottom;
- ty1 = borderValue + axisHalfWidth;
- ty2 = ty1 + tl;
- } else if (axis === "y") {
- if (position === "center") {
- borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);
- } else if (isObject(position)) {
- const positionAxisID = Object.keys(position)[0];
- const value = position[positionAxisID];
- borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));
- }
- tx1 = borderValue - axisHalfWidth;
- tx2 = tx1 - tl;
- x1 = chartArea.left;
- x2 = chartArea.right;
- }
- const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);
- const step = Math.max(1, Math.ceil(ticksLength / limit));
- for (i = 0; i < ticksLength; i += step) {
- const context = this.getContext(i);
- const optsAtIndex = grid.setContext(context);
- const optsAtIndexBorder = border.setContext(context);
- const lineWidth = optsAtIndex.lineWidth;
- const lineColor = optsAtIndex.color;
- const borderDash = optsAtIndexBorder.dash || [];
- const borderDashOffset = optsAtIndexBorder.dashOffset;
- const tickWidth = optsAtIndex.tickWidth;
- const tickColor = optsAtIndex.tickColor;
- const tickBorderDash = optsAtIndex.tickBorderDash || [];
- const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;
- lineValue = getPixelForGridLine(this, i, offset);
- if (lineValue === void 0) {
- continue;
- }
- alignedLineValue = _alignPixel(chart, lineValue, lineWidth);
- if (isHorizontal) {
- tx1 = tx2 = x1 = x2 = alignedLineValue;
- } else {
- ty1 = ty2 = y1 = y2 = alignedLineValue;
- }
- items.push({
- tx1,
- ty1,
- tx2,
- ty2,
- x1,
- y1,
- x2,
- y2,
- width: lineWidth,
- color: lineColor,
- borderDash,
- borderDashOffset,
- tickWidth,
- tickColor,
- tickBorderDash,
- tickBorderDashOffset
- });
- }
- this._ticksLength = ticksLength;
- this._borderValue = borderValue;
- return items;
- }
- _computeLabelItems(chartArea) {
- const axis = this.axis;
- const options = this.options;
- const { position, ticks: optionTicks } = options;
- const isHorizontal = this.isHorizontal();
- const ticks = this.ticks;
- const { align, crossAlign, padding, mirror } = optionTicks;
- const tl = getTickMarkLength(options.grid);
- const tickAndPadding = tl + padding;
- const hTickAndPadding = mirror ? -padding : tickAndPadding;
- const rotation = -toRadians(this.labelRotation);
- const items = [];
- let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;
- let textBaseline = "middle";
- if (position === "top") {
- y = this.bottom - hTickAndPadding;
- textAlign = this._getXAxisLabelAlignment();
- } else if (position === "bottom") {
- y = this.top + hTickAndPadding;
- textAlign = this._getXAxisLabelAlignment();
- } else if (position === "left") {
- const ret = this._getYAxisLabelAlignment(tl);
- textAlign = ret.textAlign;
- x = ret.x;
- } else if (position === "right") {
- const ret = this._getYAxisLabelAlignment(tl);
- textAlign = ret.textAlign;
- x = ret.x;
- } else if (axis === "x") {
- if (position === "center") {
- y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;
- } else if (isObject(position)) {
- const positionAxisID = Object.keys(position)[0];
- const value = position[positionAxisID];
- y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;
- }
- textAlign = this._getXAxisLabelAlignment();
- } else if (axis === "y") {
- if (position === "center") {
- x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;
- } else if (isObject(position)) {
- const positionAxisID = Object.keys(position)[0];
- const value = position[positionAxisID];
- x = this.chart.scales[positionAxisID].getPixelForValue(value);
- }
- textAlign = this._getYAxisLabelAlignment(tl).textAlign;
- }
- if (axis === "y") {
- if (align === "start") {
- textBaseline = "top";
- } else if (align === "end") {
- textBaseline = "bottom";
- }
- }
- const labelSizes = this._getLabelSizes();
- for (i = 0, ilen = ticks.length; i < ilen; ++i) {
- tick = ticks[i];
- label = tick.label;
- const optsAtIndex = optionTicks.setContext(this.getContext(i));
- pixel = this.getPixelForTick(i) + optionTicks.labelOffset;
- font = this._resolveTickFontOptions(i);
- lineHeight = font.lineHeight;
- lineCount = isArray(label) ? label.length : 1;
- const halfCount = lineCount / 2;
- const color2 = optsAtIndex.color;
- const strokeColor = optsAtIndex.textStrokeColor;
- const strokeWidth = optsAtIndex.textStrokeWidth;
- let tickTextAlign = textAlign;
- if (isHorizontal) {
- x = pixel;
- if (textAlign === "inner") {
- if (i === ilen - 1) {
- tickTextAlign = !this.options.reverse ? "right" : "left";
- } else if (i === 0) {
- tickTextAlign = !this.options.reverse ? "left" : "right";
- } else {
- tickTextAlign = "center";
- }
- }
- if (position === "top") {
- if (crossAlign === "near" || rotation !== 0) {
- textOffset = -lineCount * lineHeight + lineHeight / 2;
- } else if (crossAlign === "center") {
- textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;
- } else {
- textOffset = -labelSizes.highest.height + lineHeight / 2;
- }
- } else {
- if (crossAlign === "near" || rotation !== 0) {
- textOffset = lineHeight / 2;
- } else if (crossAlign === "center") {
- textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;
- } else {
- textOffset = labelSizes.highest.height - lineCount * lineHeight;
- }
- }
- if (mirror) {
- textOffset *= -1;
- }
- if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {
- x += lineHeight / 2 * Math.sin(rotation);
- }
- } else {
- y = pixel;
- textOffset = (1 - lineCount) * lineHeight / 2;
- }
- let backdrop;
- if (optsAtIndex.showLabelBackdrop) {
- const labelPadding = toPadding(optsAtIndex.backdropPadding);
- const height = labelSizes.heights[i];
- const width = labelSizes.widths[i];
- let top = textOffset - labelPadding.top;
- let left = 0 - labelPadding.left;
- switch (textBaseline) {
- case "middle":
- top -= height / 2;
- break;
- case "bottom":
- top -= height;
- break;
- }
- switch (textAlign) {
- case "center":
- left -= width / 2;
- break;
- case "right":
- left -= width;
- break;
- }
- backdrop = {
- left,
- top,
- width: width + labelPadding.width,
- height: height + labelPadding.height,
- color: optsAtIndex.backdropColor
- };
- }
- items.push({
- label,
- font,
- textOffset,
- options: {
- rotation,
- color: color2,
- strokeColor,
- strokeWidth,
- textAlign: tickTextAlign,
- textBaseline,
- translation: [
- x,
- y
- ],
- backdrop
- }
- });
- }
- return items;
- }
- _getXAxisLabelAlignment() {
- const { position, ticks } = this.options;
- const rotation = -toRadians(this.labelRotation);
- if (rotation) {
- return position === "top" ? "left" : "right";
- }
- let align = "center";
- if (ticks.align === "start") {
- align = "left";
- } else if (ticks.align === "end") {
- align = "right";
- } else if (ticks.align === "inner") {
- align = "inner";
- }
- return align;
- }
- _getYAxisLabelAlignment(tl) {
- const { position, ticks: { crossAlign, mirror, padding } } = this.options;
- const labelSizes = this._getLabelSizes();
- const tickAndPadding = tl + padding;
- const widest = labelSizes.widest.width;
- let textAlign;
- let x;
- if (position === "left") {
- if (mirror) {
- x = this.right + padding;
- if (crossAlign === "near") {
- textAlign = "left";
- } else if (crossAlign === "center") {
- textAlign = "center";
- x += widest / 2;
- } else {
- textAlign = "right";
- x += widest;
- }
- } else {
- x = this.right - tickAndPadding;
- if (crossAlign === "near") {
- textAlign = "right";
- } else if (crossAlign === "center") {
- textAlign = "center";
- x -= widest / 2;
- } else {
- textAlign = "left";
- x = this.left;
- }
- }
- } else if (position === "right") {
- if (mirror) {
- x = this.left + padding;
- if (crossAlign === "near") {
- textAlign = "right";
- } else if (crossAlign === "center") {
- textAlign = "center";
- x -= widest / 2;
- } else {
- textAlign = "left";
- x -= widest;
- }
- } else {
- x = this.left + tickAndPadding;
- if (crossAlign === "near") {
- textAlign = "left";
- } else if (crossAlign === "center") {
- textAlign = "center";
- x += widest / 2;
- } else {
- textAlign = "right";
- x = this.right;
- }
- }
- } else {
- textAlign = "right";
- }
- return {
- textAlign,
- x
- };
- }
- _computeLabelArea() {
- if (this.options.ticks.mirror) {
- return;
- }
- const chart = this.chart;
- const position = this.options.position;
- if (position === "left" || position === "right") {
- return {
- top: 0,
- left: this.left,
- bottom: chart.height,
- right: this.right
- };
- }
- if (position === "top" || position === "bottom") {
- return {
- top: this.top,
- left: 0,
- bottom: this.bottom,
- right: chart.width
- };
- }
- }
- drawBackground() {
- const { ctx, options: { backgroundColor }, left, top, width, height } = this;
- if (backgroundColor) {
- ctx.save();
- ctx.fillStyle = backgroundColor;
- ctx.fillRect(left, top, width, height);
- ctx.restore();
- }
- }
- getLineWidthForValue(value) {
- const grid = this.options.grid;
- if (!this._isVisible() || !grid.display) {
- return 0;
- }
- const ticks = this.ticks;
- const index = ticks.findIndex((t2) => t2.value === value);
- if (index >= 0) {
- const opts = grid.setContext(this.getContext(index));
- return opts.lineWidth;
- }
- return 0;
- }
- drawGrid(chartArea) {
- const grid = this.options.grid;
- const ctx = this.ctx;
- const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));
- let i, ilen;
- const drawLine = (p1, p2, style) => {
- if (!style.width || !style.color) {
- return;
- }
- ctx.save();
- ctx.lineWidth = style.width;
- ctx.strokeStyle = style.color;
- ctx.setLineDash(style.borderDash || []);
- ctx.lineDashOffset = style.borderDashOffset;
- ctx.beginPath();
- ctx.moveTo(p1.x, p1.y);
- ctx.lineTo(p2.x, p2.y);
- ctx.stroke();
- ctx.restore();
- };
- if (grid.display) {
- for (i = 0, ilen = items.length; i < ilen; ++i) {
- const item = items[i];
- if (grid.drawOnChartArea) {
- drawLine({
- x: item.x1,
- y: item.y1
- }, {
- x: item.x2,
- y: item.y2
- }, item);
- }
- if (grid.drawTicks) {
- drawLine({
- x: item.tx1,
- y: item.ty1
- }, {
- x: item.tx2,
- y: item.ty2
- }, {
- color: item.tickColor,
- width: item.tickWidth,
- borderDash: item.tickBorderDash,
- borderDashOffset: item.tickBorderDashOffset
- });
- }
- }
- }
- }
- drawBorder() {
- const { chart, ctx, options: { border, grid } } = this;
- const borderOpts = border.setContext(this.getContext());
- const axisWidth = border.display ? borderOpts.width : 0;
- if (!axisWidth) {
- return;
- }
- const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;
- const borderValue = this._borderValue;
- let x1, x2, y1, y2;
- if (this.isHorizontal()) {
- x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;
- x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;
- y1 = y2 = borderValue;
- } else {
- y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;
- y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;
- x1 = x2 = borderValue;
- }
- ctx.save();
- ctx.lineWidth = borderOpts.width;
- ctx.strokeStyle = borderOpts.color;
- ctx.beginPath();
- ctx.moveTo(x1, y1);
- ctx.lineTo(x2, y2);
- ctx.stroke();
- ctx.restore();
- }
- drawLabels(chartArea) {
- const optionTicks = this.options.ticks;
- if (!optionTicks.display) {
- return;
- }
- const ctx = this.ctx;
- const area = this._computeLabelArea();
- if (area) {
- clipArea(ctx, area);
- }
- const items = this.getLabelItems(chartArea);
- for (const item of items) {
- const renderTextOptions = item.options;
- const tickFont = item.font;
- const label = item.label;
- const y = item.textOffset;
- renderText(ctx, label, 0, y, tickFont, renderTextOptions);
- }
- if (area) {
- unclipArea(ctx);
- }
- }
- drawTitle() {
- const { ctx, options: { position, title, reverse } } = this;
- if (!title.display) {
- return;
- }
- const font = toFont(title.font);
- const padding = toPadding(title.padding);
- const align = title.align;
- let offset = font.lineHeight / 2;
- if (position === "bottom" || position === "center" || isObject(position)) {
- offset += padding.bottom;
- if (isArray(title.text)) {
- offset += font.lineHeight * (title.text.length - 1);
- }
- } else {
- offset += padding.top;
- }
- const { titleX, titleY, maxWidth, rotation } = titleArgs(this, offset, position, align);
- renderText(ctx, title.text, 0, 0, font, {
- color: title.color,
- maxWidth,
- rotation,
- textAlign: titleAlign(align, position, reverse),
- textBaseline: "middle",
- translation: [
- titleX,
- titleY
- ]
- });
- }
- draw(chartArea) {
- if (!this._isVisible()) {
- return;
- }
- this.drawBackground();
- this.drawGrid(chartArea);
- this.drawBorder();
- this.drawTitle();
- this.drawLabels(chartArea);
- }
- _layers() {
- const opts = this.options;
- const tz = opts.ticks && opts.ticks.z || 0;
- const gz = valueOrDefault(opts.grid && opts.grid.z, -1);
- const bz = valueOrDefault(opts.border && opts.border.z, 0);
- if (!this._isVisible() || this.draw !== Scale.prototype.draw) {
- return [
- {
- z: tz,
- draw: (chartArea) => {
- this.draw(chartArea);
- }
- }
- ];
- }
- return [
- {
- z: gz,
- draw: (chartArea) => {
- this.drawBackground();
- this.drawGrid(chartArea);
- this.drawTitle();
- }
- },
- {
- z: bz,
- draw: () => {
- this.drawBorder();
- }
- },
- {
- z: tz,
- draw: (chartArea) => {
- this.drawLabels(chartArea);
- }
- }
- ];
- }
- getMatchingVisibleMetas(type) {
- const metas = this.chart.getSortedVisibleDatasetMetas();
- const axisID = this.axis + "AxisID";
- const result = [];
- let i, ilen;
- for (i = 0, ilen = metas.length; i < ilen; ++i) {
- const meta = metas[i];
- if (meta[axisID] === this.id && (!type || meta.type === type)) {
- result.push(meta);
- }
- }
- return result;
- }
- _resolveTickFontOptions(index) {
- const opts = this.options.ticks.setContext(this.getContext(index));
- return toFont(opts.font);
- }
- _maxDigits() {
- const fontSize = this._resolveTickFontOptions(0).lineHeight;
- return (this.isHorizontal() ? this.width : this.height) / fontSize;
- }
-};
-var TypedRegistry = class {
- constructor(type, scope, override) {
- this.type = type;
- this.scope = scope;
- this.override = override;
- this.items = /* @__PURE__ */ Object.create(null);
- }
- isForType(type) {
- return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);
- }
- register(item) {
- const proto = Object.getPrototypeOf(item);
- let parentScope;
- if (isIChartComponent(proto)) {
- parentScope = this.register(proto);
- }
- const items = this.items;
- const id = item.id;
- const scope = this.scope + "." + id;
- if (!id) {
- throw new Error("class does not have id: " + item);
- }
- if (id in items) {
- return scope;
- }
- items[id] = item;
- registerDefaults(item, scope, parentScope);
- if (this.override) {
- defaults.override(item.id, item.overrides);
- }
- return scope;
- }
- get(id) {
- return this.items[id];
- }
- unregister(item) {
- const items = this.items;
- const id = item.id;
- const scope = this.scope;
- if (id in items) {
- delete items[id];
- }
- if (scope && id in defaults[scope]) {
- delete defaults[scope][id];
- if (this.override) {
- delete overrides[id];
- }
- }
- }
-};
-function registerDefaults(item, scope, parentScope) {
- const itemDefaults = merge(/* @__PURE__ */ Object.create(null), [
- parentScope ? defaults.get(parentScope) : {},
- defaults.get(scope),
- item.defaults
- ]);
- defaults.set(scope, itemDefaults);
- if (item.defaultRoutes) {
- routeDefaults(scope, item.defaultRoutes);
- }
- if (item.descriptors) {
- defaults.describe(scope, item.descriptors);
- }
-}
-function routeDefaults(scope, routes) {
- Object.keys(routes).forEach((property) => {
- const propertyParts = property.split(".");
- const sourceName = propertyParts.pop();
- const sourceScope = [
- scope
- ].concat(propertyParts).join(".");
- const parts = routes[property].split(".");
- const targetName = parts.pop();
- const targetScope = parts.join(".");
- defaults.route(sourceScope, sourceName, targetScope, targetName);
- });
-}
-function isIChartComponent(proto) {
- return "id" in proto && "defaults" in proto;
-}
-var Registry = class {
- constructor() {
- this.controllers = new TypedRegistry(DatasetController, "datasets", true);
- this.elements = new TypedRegistry(Element, "elements");
- this.plugins = new TypedRegistry(Object, "plugins");
- this.scales = new TypedRegistry(Scale, "scales");
- this._typedRegistries = [
- this.controllers,
- this.scales,
- this.elements
- ];
- }
- add(...args) {
- this._each("register", args);
- }
- remove(...args) {
- this._each("unregister", args);
- }
- addControllers(...args) {
- this._each("register", args, this.controllers);
- }
- addElements(...args) {
- this._each("register", args, this.elements);
- }
- addPlugins(...args) {
- this._each("register", args, this.plugins);
- }
- addScales(...args) {
- this._each("register", args, this.scales);
- }
- getController(id) {
- return this._get(id, this.controllers, "controller");
- }
- getElement(id) {
- return this._get(id, this.elements, "element");
- }
- getPlugin(id) {
- return this._get(id, this.plugins, "plugin");
- }
- getScale(id) {
- return this._get(id, this.scales, "scale");
- }
- removeControllers(...args) {
- this._each("unregister", args, this.controllers);
- }
- removeElements(...args) {
- this._each("unregister", args, this.elements);
- }
- removePlugins(...args) {
- this._each("unregister", args, this.plugins);
- }
- removeScales(...args) {
- this._each("unregister", args, this.scales);
- }
- _each(method, args, typedRegistry) {
- [
- ...args
- ].forEach((arg) => {
- const reg = typedRegistry || this._getRegistryForType(arg);
- if (typedRegistry || reg.isForType(arg) || reg === this.plugins && arg.id) {
- this._exec(method, reg, arg);
- } else {
- each(arg, (item) => {
- const itemReg = typedRegistry || this._getRegistryForType(item);
- this._exec(method, itemReg, item);
- });
- }
- });
- }
- _exec(method, registry2, component) {
- const camelMethod = _capitalize(method);
- callback(component["before" + camelMethod], [], component);
- registry2[method](component);
- callback(component["after" + camelMethod], [], component);
- }
- _getRegistryForType(type) {
- for (let i = 0; i < this._typedRegistries.length; i++) {
- const reg = this._typedRegistries[i];
- if (reg.isForType(type)) {
- return reg;
- }
- }
- return this.plugins;
- }
- _get(id, typedRegistry, type) {
- const item = typedRegistry.get(id);
- if (item === void 0) {
- throw new Error('"' + id + '" is not a registered ' + type + ".");
- }
- return item;
- }
-};
-var registry = /* @__PURE__ */ new Registry();
-var PluginService = class {
- constructor() {
- this._init = [];
- }
- notify(chart, hook, args, filter) {
- if (hook === "beforeInit") {
- this._init = this._createDescriptors(chart, true);
- this._notify(this._init, chart, "install");
- }
- const descriptors2 = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);
- const result = this._notify(descriptors2, chart, hook, args);
- if (hook === "afterDestroy") {
- this._notify(descriptors2, chart, "stop");
- this._notify(this._init, chart, "uninstall");
- }
- return result;
- }
- _notify(descriptors2, chart, hook, args) {
- args = args || {};
- for (const descriptor of descriptors2) {
- const plugin = descriptor.plugin;
- const method = plugin[hook];
- const params = [
- chart,
- args,
- descriptor.options
- ];
- if (callback(method, params, plugin) === false && args.cancelable) {
- return false;
- }
- }
- return true;
- }
- invalidate() {
- if (!isNullOrUndef(this._cache)) {
- this._oldCache = this._cache;
- this._cache = void 0;
- }
- }
- _descriptors(chart) {
- if (this._cache) {
- return this._cache;
- }
- const descriptors2 = this._cache = this._createDescriptors(chart);
- this._notifyStateChanges(chart);
- return descriptors2;
- }
- _createDescriptors(chart, all) {
- const config = chart && chart.config;
- const options = valueOrDefault(config.options && config.options.plugins, {});
- const plugins = allPlugins(config);
- return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);
- }
- _notifyStateChanges(chart) {
- const previousDescriptors = this._oldCache || [];
- const descriptors2 = this._cache;
- const diff = (a, b) => a.filter((x) => !b.some((y) => x.plugin.id === y.plugin.id));
- this._notify(diff(previousDescriptors, descriptors2), chart, "stop");
- this._notify(diff(descriptors2, previousDescriptors), chart, "start");
- }
-};
-function allPlugins(config) {
- const localIds = {};
- const plugins = [];
- const keys = Object.keys(registry.plugins.items);
- for (let i = 0; i < keys.length; i++) {
- plugins.push(registry.getPlugin(keys[i]));
- }
- const local = config.plugins || [];
- for (let i = 0; i < local.length; i++) {
- const plugin = local[i];
- if (plugins.indexOf(plugin) === -1) {
- plugins.push(plugin);
- localIds[plugin.id] = true;
- }
- }
- return {
- plugins,
- localIds
- };
-}
-function getOpts(options, all) {
- if (!all && options === false) {
- return null;
- }
- if (options === true) {
- return {};
- }
- return options;
-}
-function createDescriptors(chart, { plugins, localIds }, options, all) {
- const result = [];
- const context = chart.getContext();
- for (const plugin of plugins) {
- const id = plugin.id;
- const opts = getOpts(options[id], all);
- if (opts === null) {
- continue;
- }
- result.push({
- plugin,
- options: pluginOpts(chart.config, {
- plugin,
- local: localIds[id]
- }, opts, context)
- });
- }
- return result;
-}
-function pluginOpts(config, { plugin, local }, opts, context) {
- const keys = config.pluginScopeKeys(plugin);
- const scopes = config.getOptionScopes(opts, keys);
- if (local && plugin.defaults) {
- scopes.push(plugin.defaults);
- }
- return config.createResolver(scopes, context, [
- ""
- ], {
- scriptable: false,
- indexable: false,
- allKeys: true
- });
-}
-function getIndexAxis(type, options) {
- const datasetDefaults = defaults.datasets[type] || {};
- const datasetOptions = (options.datasets || {})[type] || {};
- return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || "x";
-}
-function getAxisFromDefaultScaleID(id, indexAxis) {
- let axis = id;
- if (id === "_index_") {
- axis = indexAxis;
- } else if (id === "_value_") {
- axis = indexAxis === "x" ? "y" : "x";
- }
- return axis;
-}
-function getDefaultScaleIDFromAxis(axis, indexAxis) {
- return axis === indexAxis ? "_index_" : "_value_";
-}
-function idMatchesAxis(id) {
- if (id === "x" || id === "y" || id === "r") {
- return id;
- }
-}
-function axisFromPosition(position) {
- if (position === "top" || position === "bottom") {
- return "x";
- }
- if (position === "left" || position === "right") {
- return "y";
- }
-}
-function determineAxis(id, ...scaleOptions) {
- if (idMatchesAxis(id)) {
- return id;
- }
- for (const opts of scaleOptions) {
- const axis = opts.axis || axisFromPosition(opts.position) || id.length > 1 && idMatchesAxis(id[0].toLowerCase());
- if (axis) {
- return axis;
- }
- }
- throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);
-}
-function getAxisFromDataset(id, axis, dataset) {
- if (dataset[axis + "AxisID"] === id) {
- return {
- axis
- };
- }
-}
-function retrieveAxisFromDatasets(id, config) {
- if (config.data && config.data.datasets) {
- const boundDs = config.data.datasets.filter((d) => d.xAxisID === id || d.yAxisID === id);
- if (boundDs.length) {
- return getAxisFromDataset(id, "x", boundDs[0]) || getAxisFromDataset(id, "y", boundDs[0]);
- }
- }
- return {};
-}
-function mergeScaleConfig(config, options) {
- const chartDefaults = overrides[config.type] || {
- scales: {}
- };
- const configScales = options.scales || {};
- const chartIndexAxis = getIndexAxis(config.type, options);
- const scales = /* @__PURE__ */ Object.create(null);
- Object.keys(configScales).forEach((id) => {
- const scaleConf = configScales[id];
- if (!isObject(scaleConf)) {
- return console.error(`Invalid scale configuration for scale: ${id}`);
- }
- if (scaleConf._proxy) {
- return console.warn(`Ignoring resolver passed as options for scale: ${id}`);
- }
- const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);
- const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);
- const defaultScaleOptions = chartDefaults.scales || {};
- scales[id] = mergeIf(/* @__PURE__ */ Object.create(null), [
- {
- axis
- },
- scaleConf,
- defaultScaleOptions[axis],
- defaultScaleOptions[defaultId]
- ]);
- });
- config.data.datasets.forEach((dataset) => {
- const type = dataset.type || config.type;
- const indexAxis = dataset.indexAxis || getIndexAxis(type, options);
- const datasetDefaults = overrides[type] || {};
- const defaultScaleOptions = datasetDefaults.scales || {};
- Object.keys(defaultScaleOptions).forEach((defaultID) => {
- const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);
- const id = dataset[axis + "AxisID"] || axis;
- scales[id] = scales[id] || /* @__PURE__ */ Object.create(null);
- mergeIf(scales[id], [
- {
- axis
- },
- configScales[id],
- defaultScaleOptions[defaultID]
- ]);
- });
- });
- Object.keys(scales).forEach((key) => {
- const scale = scales[key];
- mergeIf(scale, [
- defaults.scales[scale.type],
- defaults.scale
- ]);
- });
- return scales;
-}
-function initOptions(config) {
- const options = config.options || (config.options = {});
- options.plugins = valueOrDefault(options.plugins, {});
- options.scales = mergeScaleConfig(config, options);
-}
-function initData(data) {
- data = data || {};
- data.datasets = data.datasets || [];
- data.labels = data.labels || [];
- return data;
-}
-function initConfig(config) {
- config = config || {};
- config.data = initData(config.data);
- initOptions(config);
- return config;
-}
-var keyCache = /* @__PURE__ */ new Map();
-var keysCached = /* @__PURE__ */ new Set();
-function cachedKeys(cacheKey, generate) {
- let keys = keyCache.get(cacheKey);
- if (!keys) {
- keys = generate();
- keyCache.set(cacheKey, keys);
- keysCached.add(keys);
- }
- return keys;
-}
-var addIfFound = (set2, obj, key) => {
- const opts = resolveObjectKey(obj, key);
- if (opts !== void 0) {
- set2.add(opts);
- }
-};
-var Config = class {
- constructor(config) {
- this._config = initConfig(config);
- this._scopeCache = /* @__PURE__ */ new Map();
- this._resolverCache = /* @__PURE__ */ new Map();
- }
- get platform() {
- return this._config.platform;
- }
- get type() {
- return this._config.type;
- }
- set type(type) {
- this._config.type = type;
- }
- get data() {
- return this._config.data;
- }
- set data(data) {
- this._config.data = initData(data);
- }
- get options() {
- return this._config.options;
- }
- set options(options) {
- this._config.options = options;
- }
- get plugins() {
- return this._config.plugins;
- }
- update() {
- const config = this._config;
- this.clearCache();
- initOptions(config);
- }
- clearCache() {
- this._scopeCache.clear();
- this._resolverCache.clear();
- }
- datasetScopeKeys(datasetType) {
- return cachedKeys(datasetType, () => [
- [
- `datasets.${datasetType}`,
- ""
- ]
- ]);
- }
- datasetAnimationScopeKeys(datasetType, transition) {
- return cachedKeys(`${datasetType}.transition.${transition}`, () => [
- [
- `datasets.${datasetType}.transitions.${transition}`,
- `transitions.${transition}`
- ],
- [
- `datasets.${datasetType}`,
- ""
- ]
- ]);
- }
- datasetElementScopeKeys(datasetType, elementType) {
- return cachedKeys(`${datasetType}-${elementType}`, () => [
- [
- `datasets.${datasetType}.elements.${elementType}`,
- `datasets.${datasetType}`,
- `elements.${elementType}`,
- ""
- ]
- ]);
- }
- pluginScopeKeys(plugin) {
- const id = plugin.id;
- const type = this.type;
- return cachedKeys(`${type}-plugin-${id}`, () => [
- [
- `plugins.${id}`,
- ...plugin.additionalOptionScopes || []
- ]
- ]);
- }
- _cachedScopes(mainScope, resetCache) {
- const _scopeCache = this._scopeCache;
- let cache = _scopeCache.get(mainScope);
- if (!cache || resetCache) {
- cache = /* @__PURE__ */ new Map();
- _scopeCache.set(mainScope, cache);
- }
- return cache;
- }
- getOptionScopes(mainScope, keyLists, resetCache) {
- const { options, type } = this;
- const cache = this._cachedScopes(mainScope, resetCache);
- const cached = cache.get(keyLists);
- if (cached) {
- return cached;
- }
- const scopes = /* @__PURE__ */ new Set();
- keyLists.forEach((keys) => {
- if (mainScope) {
- scopes.add(mainScope);
- keys.forEach((key) => addIfFound(scopes, mainScope, key));
- }
- keys.forEach((key) => addIfFound(scopes, options, key));
- keys.forEach((key) => addIfFound(scopes, overrides[type] || {}, key));
- keys.forEach((key) => addIfFound(scopes, defaults, key));
- keys.forEach((key) => addIfFound(scopes, descriptors, key));
- });
- const array = Array.from(scopes);
- if (array.length === 0) {
- array.push(/* @__PURE__ */ Object.create(null));
- }
- if (keysCached.has(keyLists)) {
- cache.set(keyLists, array);
- }
- return array;
- }
- chartOptionScopes() {
- const { options, type } = this;
- return [
- options,
- overrides[type] || {},
- defaults.datasets[type] || {},
- {
- type
- },
- defaults,
- descriptors
- ];
- }
- resolveNamedOptions(scopes, names2, context, prefixes = [
- ""
- ]) {
- const result = {
- $shared: true
- };
- const { resolver, subPrefixes } = getResolver(this._resolverCache, scopes, prefixes);
- let options = resolver;
- if (needContext(resolver, names2)) {
- result.$shared = false;
- context = isFunction(context) ? context() : context;
- const subResolver = this.createResolver(scopes, context, subPrefixes);
- options = _attachContext(resolver, context, subResolver);
- }
- for (const prop of names2) {
- result[prop] = options[prop];
- }
- return result;
- }
- createResolver(scopes, context, prefixes = [
- ""
- ], descriptorDefaults) {
- const { resolver } = getResolver(this._resolverCache, scopes, prefixes);
- return isObject(context) ? _attachContext(resolver, context, void 0, descriptorDefaults) : resolver;
- }
-};
-function getResolver(resolverCache, scopes, prefixes) {
- let cache = resolverCache.get(scopes);
- if (!cache) {
- cache = /* @__PURE__ */ new Map();
- resolverCache.set(scopes, cache);
- }
- const cacheKey = prefixes.join();
- let cached = cache.get(cacheKey);
- if (!cached) {
- const resolver = _createResolver(scopes, prefixes);
- cached = {
- resolver,
- subPrefixes: prefixes.filter((p) => !p.toLowerCase().includes("hover"))
- };
- cache.set(cacheKey, cached);
- }
- return cached;
-}
-var hasFunction = (value) => isObject(value) && Object.getOwnPropertyNames(value).reduce((acc, key) => acc || isFunction(value[key]), false);
-function needContext(proxy, names2) {
- const { isScriptable, isIndexable } = _descriptors(proxy);
- for (const prop of names2) {
- const scriptable = isScriptable(prop);
- const indexable = isIndexable(prop);
- const value = (indexable || scriptable) && proxy[prop];
- if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) {
- return true;
- }
- }
- return false;
-}
-var version = "4.3.0";
-var KNOWN_POSITIONS = [
- "top",
- "bottom",
- "left",
- "right",
- "chartArea"
-];
-function positionIsHorizontal(position, axis) {
- return position === "top" || position === "bottom" || KNOWN_POSITIONS.indexOf(position) === -1 && axis === "x";
-}
-function compare2Level(l1, l2) {
- return function(a, b) {
- return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];
- };
-}
-function onAnimationsComplete(context) {
- const chart = context.chart;
- const animationOptions = chart.options.animation;
- chart.notifyPlugins("afterRender");
- callback(animationOptions && animationOptions.onComplete, [
- context
- ], chart);
-}
-function onAnimationProgress(context) {
- const chart = context.chart;
- const animationOptions = chart.options.animation;
- callback(animationOptions && animationOptions.onProgress, [
- context
- ], chart);
-}
-function getCanvas(item) {
- if (_isDomSupported() && typeof item === "string") {
- item = document.getElementById(item);
- } else if (item && item.length) {
- item = item[0];
- }
- if (item && item.canvas) {
- item = item.canvas;
- }
- return item;
-}
-var instances = {};
-var getChart = (key) => {
- const canvas = getCanvas(key);
- return Object.values(instances).filter((c) => c.canvas === canvas).pop();
-};
-function moveNumericKeys(obj, start, move) {
- const keys = Object.keys(obj);
- for (const key of keys) {
- const intKey = +key;
- if (intKey >= start) {
- const value = obj[key];
- delete obj[key];
- if (move > 0 || intKey > start) {
- obj[intKey + move] = value;
- }
- }
- }
-}
-function determineLastEvent(e, lastEvent, inChartArea, isClick) {
- if (!inChartArea || e.type === "mouseout") {
- return null;
- }
- if (isClick) {
- return lastEvent;
- }
- return e;
-}
-function getDatasetArea(meta) {
- const { xScale, yScale } = meta;
- if (xScale && yScale) {
- return {
- left: xScale.left,
- right: xScale.right,
- top: yScale.top,
- bottom: yScale.bottom
- };
- }
-}
-var Chart = class {
- static register(...items) {
- registry.add(...items);
- invalidatePlugins();
- }
- static unregister(...items) {
- registry.remove(...items);
- invalidatePlugins();
- }
- constructor(item, userConfig) {
- const config = this.config = new Config(userConfig);
- const initialCanvas = getCanvas(item);
- const existingChart = getChart(initialCanvas);
- if (existingChart) {
- throw new Error("Canvas is already in use. Chart with ID '" + existingChart.id + "' must be destroyed before the canvas with ID '" + existingChart.canvas.id + "' can be reused.");
- }
- const options = config.createResolver(config.chartOptionScopes(), this.getContext());
- this.platform = new (config.platform || _detectPlatform(initialCanvas))();
- this.platform.updateConfig(config);
- const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);
- const canvas = context && context.canvas;
- const height = canvas && canvas.height;
- const width = canvas && canvas.width;
- this.id = uid();
- this.ctx = context;
- this.canvas = canvas;
- this.width = width;
- this.height = height;
- this._options = options;
- this._aspectRatio = this.aspectRatio;
- this._layers = [];
- this._metasets = [];
- this._stacks = void 0;
- this.boxes = [];
- this.currentDevicePixelRatio = void 0;
- this.chartArea = void 0;
- this._active = [];
- this._lastEvent = void 0;
- this._listeners = {};
- this._responsiveListeners = void 0;
- this._sortedMetasets = [];
- this.scales = {};
- this._plugins = new PluginService();
- this.$proxies = {};
- this._hiddenIndices = {};
- this.attached = false;
- this._animationsDisabled = void 0;
- this.$context = void 0;
- this._doResize = debounce((mode) => this.update(mode), options.resizeDelay || 0);
- this._dataChanges = [];
- instances[this.id] = this;
- if (!context || !canvas) {
- console.error("Failed to create chart: can't acquire context from the given item");
- return;
- }
- animator.listen(this, "complete", onAnimationsComplete);
- animator.listen(this, "progress", onAnimationProgress);
- this._initialize();
- if (this.attached) {
- this.update();
- }
- }
- get aspectRatio() {
- const { options: { aspectRatio, maintainAspectRatio }, width, height, _aspectRatio } = this;
- if (!isNullOrUndef(aspectRatio)) {
- return aspectRatio;
- }
- if (maintainAspectRatio && _aspectRatio) {
- return _aspectRatio;
- }
- return height ? width / height : null;
- }
- get data() {
- return this.config.data;
- }
- set data(data) {
- this.config.data = data;
- }
- get options() {
- return this._options;
- }
- set options(options) {
- this.config.options = options;
- }
- get registry() {
- return registry;
- }
- _initialize() {
- this.notifyPlugins("beforeInit");
- if (this.options.responsive) {
- this.resize();
- } else {
- retinaScale(this, this.options.devicePixelRatio);
- }
- this.bindEvents();
- this.notifyPlugins("afterInit");
- return this;
- }
- clear() {
- clearCanvas(this.canvas, this.ctx);
- return this;
- }
- stop() {
- animator.stop(this);
- return this;
- }
- resize(width, height) {
- if (!animator.running(this)) {
- this._resize(width, height);
- } else {
- this._resizeBeforeDraw = {
- width,
- height
- };
- }
- }
- _resize(width, height) {
- const options = this.options;
- const canvas = this.canvas;
- const aspectRatio = options.maintainAspectRatio && this.aspectRatio;
- const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);
- const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();
- const mode = this.width ? "resize" : "attach";
- this.width = newSize.width;
- this.height = newSize.height;
- this._aspectRatio = this.aspectRatio;
- if (!retinaScale(this, newRatio, true)) {
- return;
- }
- this.notifyPlugins("resize", {
- size: newSize
- });
- callback(options.onResize, [
- this,
- newSize
- ], this);
- if (this.attached) {
- if (this._doResize(mode)) {
- this.render();
- }
- }
- }
- ensureScalesHaveIDs() {
- const options = this.options;
- const scalesOptions = options.scales || {};
- each(scalesOptions, (axisOptions, axisID) => {
- axisOptions.id = axisID;
- });
- }
- buildOrUpdateScales() {
- const options = this.options;
- const scaleOpts = options.scales;
- const scales = this.scales;
- const updated = Object.keys(scales).reduce((obj, id) => {
- obj[id] = false;
- return obj;
- }, {});
- let items = [];
- if (scaleOpts) {
- items = items.concat(Object.keys(scaleOpts).map((id) => {
- const scaleOptions = scaleOpts[id];
- const axis = determineAxis(id, scaleOptions);
- const isRadial = axis === "r";
- const isHorizontal = axis === "x";
- return {
- options: scaleOptions,
- dposition: isRadial ? "chartArea" : isHorizontal ? "bottom" : "left",
- dtype: isRadial ? "radialLinear" : isHorizontal ? "category" : "linear"
- };
- }));
- }
- each(items, (item) => {
- const scaleOptions = item.options;
- const id = scaleOptions.id;
- const axis = determineAxis(id, scaleOptions);
- const scaleType = valueOrDefault(scaleOptions.type, item.dtype);
- if (scaleOptions.position === void 0 || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {
- scaleOptions.position = item.dposition;
- }
- updated[id] = true;
- let scale = null;
- if (id in scales && scales[id].type === scaleType) {
- scale = scales[id];
- } else {
- const scaleClass = registry.getScale(scaleType);
- scale = new scaleClass({
- id,
- type: scaleType,
- ctx: this.ctx,
- chart: this
- });
- scales[scale.id] = scale;
- }
- scale.init(scaleOptions, options);
- });
- each(updated, (hasUpdated, id) => {
- if (!hasUpdated) {
- delete scales[id];
- }
- });
- each(scales, (scale) => {
- layouts.configure(this, scale, scale.options);
- layouts.addBox(this, scale);
- });
- }
- _updateMetasets() {
- const metasets = this._metasets;
- const numData = this.data.datasets.length;
- const numMeta = metasets.length;
- metasets.sort((a, b) => a.index - b.index);
- if (numMeta > numData) {
- for (let i = numData; i < numMeta; ++i) {
- this._destroyDatasetMeta(i);
- }
- metasets.splice(numData, numMeta - numData);
- }
- this._sortedMetasets = metasets.slice(0).sort(compare2Level("order", "index"));
- }
- _removeUnreferencedMetasets() {
- const { _metasets: metasets, data: { datasets } } = this;
- if (metasets.length > datasets.length) {
- delete this._stacks;
- }
- metasets.forEach((meta, index) => {
- if (datasets.filter((x) => x === meta._dataset).length === 0) {
- this._destroyDatasetMeta(index);
- }
- });
- }
- buildOrUpdateControllers() {
- const newControllers = [];
- const datasets = this.data.datasets;
- let i, ilen;
- this._removeUnreferencedMetasets();
- for (i = 0, ilen = datasets.length; i < ilen; i++) {
- const dataset = datasets[i];
- let meta = this.getDatasetMeta(i);
- const type = dataset.type || this.config.type;
- if (meta.type && meta.type !== type) {
- this._destroyDatasetMeta(i);
- meta = this.getDatasetMeta(i);
- }
- meta.type = type;
- meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);
- meta.order = dataset.order || 0;
- meta.index = i;
- meta.label = "" + dataset.label;
- meta.visible = this.isDatasetVisible(i);
- if (meta.controller) {
- meta.controller.updateIndex(i);
- meta.controller.linkScales();
- } else {
- const ControllerClass = registry.getController(type);
- const { datasetElementType, dataElementType } = defaults.datasets[type];
- Object.assign(ControllerClass, {
- dataElementType: registry.getElement(dataElementType),
- datasetElementType: datasetElementType && registry.getElement(datasetElementType)
- });
- meta.controller = new ControllerClass(this, i);
- newControllers.push(meta.controller);
- }
- }
- this._updateMetasets();
- return newControllers;
- }
- _resetElements() {
- each(this.data.datasets, (dataset, datasetIndex) => {
- this.getDatasetMeta(datasetIndex).controller.reset();
- }, this);
- }
- reset() {
- this._resetElements();
- this.notifyPlugins("reset");
- }
- update(mode) {
- const config = this.config;
- config.update();
- const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());
- const animsDisabled = this._animationsDisabled = !options.animation;
- this._updateScales();
- this._checkEventBindings();
- this._updateHiddenIndices();
- this._plugins.invalidate();
- if (this.notifyPlugins("beforeUpdate", {
- mode,
- cancelable: true
- }) === false) {
- return;
- }
- const newControllers = this.buildOrUpdateControllers();
- this.notifyPlugins("beforeElementsUpdate");
- let minPadding = 0;
- for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {
- const { controller } = this.getDatasetMeta(i);
- const reset2 = !animsDisabled && newControllers.indexOf(controller) === -1;
- controller.buildOrUpdateElements(reset2);
- minPadding = Math.max(+controller.getMaxOverflow(), minPadding);
- }
- minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;
- this._updateLayout(minPadding);
- if (!animsDisabled) {
- each(newControllers, (controller) => {
- controller.reset();
- });
- }
- this._updateDatasets(mode);
- this.notifyPlugins("afterUpdate", {
- mode
- });
- this._layers.sort(compare2Level("z", "_idx"));
- const { _active, _lastEvent } = this;
- if (_lastEvent) {
- this._eventHandler(_lastEvent, true);
- } else if (_active.length) {
- this._updateHoverStyles(_active, _active, true);
- }
- this.render();
- }
- _updateScales() {
- each(this.scales, (scale) => {
- layouts.removeBox(this, scale);
- });
- this.ensureScalesHaveIDs();
- this.buildOrUpdateScales();
- }
- _checkEventBindings() {
- const options = this.options;
- const existingEvents = new Set(Object.keys(this._listeners));
- const newEvents = new Set(options.events);
- if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {
- this.unbindEvents();
- this.bindEvents();
- }
- }
- _updateHiddenIndices() {
- const { _hiddenIndices } = this;
- const changes = this._getUniformDataChanges() || [];
- for (const { method, start, count } of changes) {
- const move = method === "_removeElements" ? -count : count;
- moveNumericKeys(_hiddenIndices, start, move);
- }
- }
- _getUniformDataChanges() {
- const _dataChanges = this._dataChanges;
- if (!_dataChanges || !_dataChanges.length) {
- return;
- }
- this._dataChanges = [];
- const datasetCount = this.data.datasets.length;
- const makeSet = (idx) => new Set(_dataChanges.filter((c) => c[0] === idx).map((c, i) => i + "," + c.splice(1).join(",")));
- const changeSet = makeSet(0);
- for (let i = 1; i < datasetCount; i++) {
- if (!setsEqual(changeSet, makeSet(i))) {
- return;
- }
- }
- return Array.from(changeSet).map((c) => c.split(",")).map((a) => ({
- method: a[1],
- start: +a[2],
- count: +a[3]
- }));
- }
- _updateLayout(minPadding) {
- if (this.notifyPlugins("beforeLayout", {
- cancelable: true
- }) === false) {
- return;
- }
- layouts.update(this, this.width, this.height, minPadding);
- const area = this.chartArea;
- const noArea = area.width <= 0 || area.height <= 0;
- this._layers = [];
- each(this.boxes, (box) => {
- if (noArea && box.position === "chartArea") {
- return;
- }
- if (box.configure) {
- box.configure();
- }
- this._layers.push(...box._layers());
- }, this);
- this._layers.forEach((item, index) => {
- item._idx = index;
- });
- this.notifyPlugins("afterLayout");
- }
- _updateDatasets(mode) {
- if (this.notifyPlugins("beforeDatasetsUpdate", {
- mode,
- cancelable: true
- }) === false) {
- return;
- }
- for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {
- this.getDatasetMeta(i).controller.configure();
- }
- for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {
- this._updateDataset(i, isFunction(mode) ? mode({
- datasetIndex: i
- }) : mode);
- }
- this.notifyPlugins("afterDatasetsUpdate", {
- mode
- });
- }
- _updateDataset(index, mode) {
- const meta = this.getDatasetMeta(index);
- const args = {
- meta,
- index,
- mode,
- cancelable: true
- };
- if (this.notifyPlugins("beforeDatasetUpdate", args) === false) {
- return;
- }
- meta.controller._update(mode);
- args.cancelable = false;
- this.notifyPlugins("afterDatasetUpdate", args);
- }
- render() {
- if (this.notifyPlugins("beforeRender", {
- cancelable: true
- }) === false) {
- return;
- }
- if (animator.has(this)) {
- if (this.attached && !animator.running(this)) {
- animator.start(this);
- }
- } else {
- this.draw();
- onAnimationsComplete({
- chart: this
- });
- }
- }
- draw() {
- let i;
- if (this._resizeBeforeDraw) {
- const { width, height } = this._resizeBeforeDraw;
- this._resize(width, height);
- this._resizeBeforeDraw = null;
- }
- this.clear();
- if (this.width <= 0 || this.height <= 0) {
- return;
- }
- if (this.notifyPlugins("beforeDraw", {
- cancelable: true
- }) === false) {
- return;
- }
- const layers = this._layers;
- for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {
- layers[i].draw(this.chartArea);
- }
- this._drawDatasets();
- for (; i < layers.length; ++i) {
- layers[i].draw(this.chartArea);
- }
- this.notifyPlugins("afterDraw");
- }
- _getSortedDatasetMetas(filterVisible) {
- const metasets = this._sortedMetasets;
- const result = [];
- let i, ilen;
- for (i = 0, ilen = metasets.length; i < ilen; ++i) {
- const meta = metasets[i];
- if (!filterVisible || meta.visible) {
- result.push(meta);
- }
- }
- return result;
- }
- getSortedVisibleDatasetMetas() {
- return this._getSortedDatasetMetas(true);
- }
- _drawDatasets() {
- if (this.notifyPlugins("beforeDatasetsDraw", {
- cancelable: true
- }) === false) {
- return;
- }
- const metasets = this.getSortedVisibleDatasetMetas();
- for (let i = metasets.length - 1; i >= 0; --i) {
- this._drawDataset(metasets[i]);
- }
- this.notifyPlugins("afterDatasetsDraw");
- }
- _drawDataset(meta) {
- const ctx = this.ctx;
- const clip = meta._clip;
- const useClip = !clip.disabled;
- const area = getDatasetArea(meta) || this.chartArea;
- const args = {
- meta,
- index: meta.index,
- cancelable: true
- };
- if (this.notifyPlugins("beforeDatasetDraw", args) === false) {
- return;
- }
- if (useClip) {
- clipArea(ctx, {
- left: clip.left === false ? 0 : area.left - clip.left,
- right: clip.right === false ? this.width : area.right + clip.right,
- top: clip.top === false ? 0 : area.top - clip.top,
- bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom
- });
- }
- meta.controller.draw();
- if (useClip) {
- unclipArea(ctx);
- }
- args.cancelable = false;
- this.notifyPlugins("afterDatasetDraw", args);
- }
- isPointInArea(point) {
- return _isPointInArea(point, this.chartArea, this._minPadding);
- }
- getElementsAtEventForMode(e, mode, options, useFinalPosition) {
- const method = Interaction.modes[mode];
- if (typeof method === "function") {
- return method(this, e, options, useFinalPosition);
- }
- return [];
- }
- getDatasetMeta(datasetIndex) {
- const dataset = this.data.datasets[datasetIndex];
- const metasets = this._metasets;
- let meta = metasets.filter((x) => x && x._dataset === dataset).pop();
- if (!meta) {
- meta = {
- type: null,
- data: [],
- dataset: null,
- controller: null,
- hidden: null,
- xAxisID: null,
- yAxisID: null,
- order: dataset && dataset.order || 0,
- index: datasetIndex,
- _dataset: dataset,
- _parsed: [],
- _sorted: false
- };
- metasets.push(meta);
- }
- return meta;
- }
- getContext() {
- return this.$context || (this.$context = createContext(null, {
- chart: this,
- type: "chart"
- }));
- }
- getVisibleDatasetCount() {
- return this.getSortedVisibleDatasetMetas().length;
- }
- isDatasetVisible(datasetIndex) {
- const dataset = this.data.datasets[datasetIndex];
- if (!dataset) {
- return false;
- }
- const meta = this.getDatasetMeta(datasetIndex);
- return typeof meta.hidden === "boolean" ? !meta.hidden : !dataset.hidden;
- }
- setDatasetVisibility(datasetIndex, visible) {
- const meta = this.getDatasetMeta(datasetIndex);
- meta.hidden = !visible;
- }
- toggleDataVisibility(index) {
- this._hiddenIndices[index] = !this._hiddenIndices[index];
- }
- getDataVisibility(index) {
- return !this._hiddenIndices[index];
- }
- _updateVisibility(datasetIndex, dataIndex, visible) {
- const mode = visible ? "show" : "hide";
- const meta = this.getDatasetMeta(datasetIndex);
- const anims = meta.controller._resolveAnimations(void 0, mode);
- if (defined(dataIndex)) {
- meta.data[dataIndex].hidden = !visible;
- this.update();
- } else {
- this.setDatasetVisibility(datasetIndex, visible);
- anims.update(meta, {
- visible
- });
- this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : void 0);
- }
- }
- hide(datasetIndex, dataIndex) {
- this._updateVisibility(datasetIndex, dataIndex, false);
- }
- show(datasetIndex, dataIndex) {
- this._updateVisibility(datasetIndex, dataIndex, true);
- }
- _destroyDatasetMeta(datasetIndex) {
- const meta = this._metasets[datasetIndex];
- if (meta && meta.controller) {
- meta.controller._destroy();
- }
- delete this._metasets[datasetIndex];
- }
- _stop() {
- let i, ilen;
- this.stop();
- animator.remove(this);
- for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {
- this._destroyDatasetMeta(i);
- }
- }
- destroy() {
- this.notifyPlugins("beforeDestroy");
- const { canvas, ctx } = this;
- this._stop();
- this.config.clearCache();
- if (canvas) {
- this.unbindEvents();
- clearCanvas(canvas, ctx);
- this.platform.releaseContext(ctx);
- this.canvas = null;
- this.ctx = null;
- }
- delete instances[this.id];
- this.notifyPlugins("afterDestroy");
- }
- toBase64Image(...args) {
- return this.canvas.toDataURL(...args);
- }
- bindEvents() {
- this.bindUserEvents();
- if (this.options.responsive) {
- this.bindResponsiveEvents();
- } else {
- this.attached = true;
- }
- }
- bindUserEvents() {
- const listeners = this._listeners;
- const platform = this.platform;
- const _add = (type, listener2) => {
- platform.addEventListener(this, type, listener2);
- listeners[type] = listener2;
- };
- const listener = (e, x, y) => {
- e.offsetX = x;
- e.offsetY = y;
- this._eventHandler(e);
- };
- each(this.options.events, (type) => _add(type, listener));
- }
- bindResponsiveEvents() {
- if (!this._responsiveListeners) {
- this._responsiveListeners = {};
- }
- const listeners = this._responsiveListeners;
- const platform = this.platform;
- const _add = (type, listener2) => {
- platform.addEventListener(this, type, listener2);
- listeners[type] = listener2;
- };
- const _remove = (type, listener2) => {
- if (listeners[type]) {
- platform.removeEventListener(this, type, listener2);
- delete listeners[type];
- }
- };
- const listener = (width, height) => {
- if (this.canvas) {
- this.resize(width, height);
- }
- };
- let detached;
- const attached = () => {
- _remove("attach", attached);
- this.attached = true;
- this.resize();
- _add("resize", listener);
- _add("detach", detached);
- };
- detached = () => {
- this.attached = false;
- _remove("resize", listener);
- this._stop();
- this._resize(0, 0);
- _add("attach", attached);
- };
- if (platform.isAttached(this.canvas)) {
- attached();
- } else {
- detached();
- }
- }
- unbindEvents() {
- each(this._listeners, (listener, type) => {
- this.platform.removeEventListener(this, type, listener);
- });
- this._listeners = {};
- each(this._responsiveListeners, (listener, type) => {
- this.platform.removeEventListener(this, type, listener);
- });
- this._responsiveListeners = void 0;
- }
- updateHoverStyle(items, mode, enabled) {
- const prefix = enabled ? "set" : "remove";
- let meta, item, i, ilen;
- if (mode === "dataset") {
- meta = this.getDatasetMeta(items[0].datasetIndex);
- meta.controller["_" + prefix + "DatasetHoverStyle"]();
- }
- for (i = 0, ilen = items.length; i < ilen; ++i) {
- item = items[i];
- const controller = item && this.getDatasetMeta(item.datasetIndex).controller;
- if (controller) {
- controller[prefix + "HoverStyle"](item.element, item.datasetIndex, item.index);
- }
- }
- }
- getActiveElements() {
- return this._active || [];
- }
- setActiveElements(activeElements) {
- const lastActive = this._active || [];
- const active = activeElements.map(({ datasetIndex, index }) => {
- const meta = this.getDatasetMeta(datasetIndex);
- if (!meta) {
- throw new Error("No dataset found at index " + datasetIndex);
- }
- return {
- datasetIndex,
- element: meta.data[index],
- index
- };
- });
- const changed = !_elementsEqual(active, lastActive);
- if (changed) {
- this._active = active;
- this._lastEvent = null;
- this._updateHoverStyles(active, lastActive);
- }
- }
- notifyPlugins(hook, args, filter) {
- return this._plugins.notify(this, hook, args, filter);
- }
- isPluginEnabled(pluginId) {
- return this._plugins._cache.filter((p) => p.plugin.id === pluginId).length === 1;
- }
- _updateHoverStyles(active, lastActive, replay) {
- const hoverOptions = this.options.hover;
- const diff = (a, b) => a.filter((x) => !b.some((y) => x.datasetIndex === y.datasetIndex && x.index === y.index));
- const deactivated = diff(lastActive, active);
- const activated = replay ? active : diff(active, lastActive);
- if (deactivated.length) {
- this.updateHoverStyle(deactivated, hoverOptions.mode, false);
- }
- if (activated.length && hoverOptions.mode) {
- this.updateHoverStyle(activated, hoverOptions.mode, true);
- }
- }
- _eventHandler(e, replay) {
- const args = {
- event: e,
- replay,
- cancelable: true,
- inChartArea: this.isPointInArea(e)
- };
- const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);
- if (this.notifyPlugins("beforeEvent", args, eventFilter) === false) {
- return;
- }
- const changed = this._handleEvent(e, replay, args.inChartArea);
- args.cancelable = false;
- this.notifyPlugins("afterEvent", args, eventFilter);
- if (changed || args.changed) {
- this.render();
- }
- return this;
- }
- _handleEvent(e, replay, inChartArea) {
- const { _active: lastActive = [], options } = this;
- const useFinalPosition = replay;
- const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);
- const isClick = _isClickEvent(e);
- const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);
- if (inChartArea) {
- this._lastEvent = null;
- callback(options.onHover, [
- e,
- active,
- this
- ], this);
- if (isClick) {
- callback(options.onClick, [
- e,
- active,
- this
- ], this);
- }
- }
- const changed = !_elementsEqual(active, lastActive);
- if (changed || replay) {
- this._active = active;
- this._updateHoverStyles(active, lastActive, replay);
- }
- this._lastEvent = lastEvent;
- return changed;
- }
- _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {
- if (e.type === "mouseout") {
- return [];
- }
- if (!inChartArea) {
- return lastActive;
- }
- const hoverOptions = this.options.hover;
- return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);
- }
-};
-__publicField(Chart, "defaults", defaults);
-__publicField(Chart, "instances", instances);
-__publicField(Chart, "overrides", overrides);
-__publicField(Chart, "registry", registry);
-__publicField(Chart, "version", version);
-__publicField(Chart, "getChart", getChart);
-function invalidatePlugins() {
- return each(Chart.instances, (chart) => chart._plugins.invalidate());
-}
-function clipArc(ctx, element, endAngle) {
- const { startAngle, pixelMargin, x, y, outerRadius, innerRadius } = element;
- let angleMargin = pixelMargin / outerRadius;
- ctx.beginPath();
- ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);
- if (innerRadius > pixelMargin) {
- angleMargin = pixelMargin / innerRadius;
- ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);
- } else {
- ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);
- }
- ctx.closePath();
- ctx.clip();
-}
-function toRadiusCorners(value) {
- return _readValueToProps(value, [
- "outerStart",
- "outerEnd",
- "innerStart",
- "innerEnd"
- ]);
-}
-function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {
- const o = toRadiusCorners(arc.options.borderRadius);
- const halfThickness = (outerRadius - innerRadius) / 2;
- const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);
- const computeOuterLimit = (val) => {
- const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;
- return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));
- };
- return {
- outerStart: computeOuterLimit(o.outerStart),
- outerEnd: computeOuterLimit(o.outerEnd),
- innerStart: _limitValue(o.innerStart, 0, innerLimit),
- innerEnd: _limitValue(o.innerEnd, 0, innerLimit)
- };
-}
-function rThetaToXY(r, theta, x, y) {
- return {
- x: x + r * Math.cos(theta),
- y: y + r * Math.sin(theta)
- };
-}
-function pathArc(ctx, element, offset, spacing, end, circular) {
- const { x, y, startAngle: start, pixelMargin, innerRadius: innerR } = element;
- const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);
- const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;
- let spacingOffset = 0;
- const alpha2 = end - start;
- if (spacing) {
- const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;
- const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;
- const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;
- const adjustedAngle = avNogSpacingRadius !== 0 ? alpha2 * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha2;
- spacingOffset = (alpha2 - adjustedAngle) / 2;
- }
- const beta = Math.max(1e-3, alpha2 * outerRadius - offset / PI) / outerRadius;
- const angleOffset = (alpha2 - beta) / 2;
- const startAngle = start + angleOffset + spacingOffset;
- const endAngle = end - angleOffset - spacingOffset;
- const { outerStart, outerEnd, innerStart, innerEnd } = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);
- const outerStartAdjustedRadius = outerRadius - outerStart;
- const outerEndAdjustedRadius = outerRadius - outerEnd;
- const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;
- const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;
- const innerStartAdjustedRadius = innerRadius + innerStart;
- const innerEndAdjustedRadius = innerRadius + innerEnd;
- const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;
- const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;
- ctx.beginPath();
- if (circular) {
- const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;
- ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);
- ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);
- if (outerEnd > 0) {
- const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);
- ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);
- }
- const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);
- ctx.lineTo(p4.x, p4.y);
- if (innerEnd > 0) {
- const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);
- ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);
- }
- const innerMidAdjustedAngle = (endAngle - innerEnd / innerRadius + (startAngle + innerStart / innerRadius)) / 2;
- ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, innerMidAdjustedAngle, true);
- ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart / innerRadius, true);
- if (innerStart > 0) {
- const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);
- ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);
- }
- const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);
- ctx.lineTo(p8.x, p8.y);
- if (outerStart > 0) {
- const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);
- ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);
- }
- } else {
- ctx.moveTo(x, y);
- const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;
- const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;
- ctx.lineTo(outerStartX, outerStartY);
- const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;
- const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;
- ctx.lineTo(outerEndX, outerEndY);
- }
- ctx.closePath();
-}
-function drawArc(ctx, element, offset, spacing, circular) {
- const { fullCircles, startAngle, circumference } = element;
- let endAngle = element.endAngle;
- if (fullCircles) {
- pathArc(ctx, element, offset, spacing, endAngle, circular);
- for (let i = 0; i < fullCircles; ++i) {
- ctx.fill();
- }
- if (!isNaN(circumference)) {
- endAngle = startAngle + (circumference % TAU || TAU);
- }
- }
- pathArc(ctx, element, offset, spacing, endAngle, circular);
- ctx.fill();
- return endAngle;
-}
-function drawBorder(ctx, element, offset, spacing, circular) {
- const { fullCircles, startAngle, circumference, options } = element;
- const { borderWidth, borderJoinStyle, borderDash, borderDashOffset } = options;
- const inner = options.borderAlign === "inner";
- if (!borderWidth) {
- return;
- }
- ctx.setLineDash(borderDash || []);
- ctx.lineDashOffset = borderDashOffset;
- if (inner) {
- ctx.lineWidth = borderWidth * 2;
- ctx.lineJoin = borderJoinStyle || "round";
- } else {
- ctx.lineWidth = borderWidth;
- ctx.lineJoin = borderJoinStyle || "bevel";
- }
- let endAngle = element.endAngle;
- if (fullCircles) {
- pathArc(ctx, element, offset, spacing, endAngle, circular);
- for (let i = 0; i < fullCircles; ++i) {
- ctx.stroke();
- }
- if (!isNaN(circumference)) {
- endAngle = startAngle + (circumference % TAU || TAU);
- }
- }
- if (inner) {
- clipArc(ctx, element, endAngle);
- }
- if (!fullCircles) {
- pathArc(ctx, element, offset, spacing, endAngle, circular);
- ctx.stroke();
- }
-}
-var ArcElement = class extends Element {
- constructor(cfg) {
- super();
- __publicField(this, "circumference");
- __publicField(this, "endAngle");
- __publicField(this, "fullCircles");
- __publicField(this, "innerRadius");
- __publicField(this, "outerRadius");
- __publicField(this, "pixelMargin");
- __publicField(this, "startAngle");
- this.options = void 0;
- this.circumference = void 0;
- this.startAngle = void 0;
- this.endAngle = void 0;
- this.innerRadius = void 0;
- this.outerRadius = void 0;
- this.pixelMargin = 0;
- this.fullCircles = 0;
- if (cfg) {
- Object.assign(this, cfg);
- }
- }
- inRange(chartX, chartY, useFinalPosition) {
- const point = this.getProps([
- "x",
- "y"
- ], useFinalPosition);
- const { angle, distance } = getAngleFromPoint(point, {
- x: chartX,
- y: chartY
- });
- const { startAngle, endAngle, innerRadius, outerRadius, circumference } = this.getProps([
- "startAngle",
- "endAngle",
- "innerRadius",
- "outerRadius",
- "circumference"
- ], useFinalPosition);
- const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;
- const _circumference = valueOrDefault(circumference, endAngle - startAngle);
- const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);
- const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);
- return betweenAngles && withinRadius;
- }
- getCenterPoint(useFinalPosition) {
- const { x, y, startAngle, endAngle, innerRadius, outerRadius } = this.getProps([
- "x",
- "y",
- "startAngle",
- "endAngle",
- "innerRadius",
- "outerRadius"
- ], useFinalPosition);
- const { offset, spacing } = this.options;
- const halfAngle = (startAngle + endAngle) / 2;
- const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;
- return {
- x: x + Math.cos(halfAngle) * halfRadius,
- y: y + Math.sin(halfAngle) * halfRadius
- };
- }
- tooltipPosition(useFinalPosition) {
- return this.getCenterPoint(useFinalPosition);
- }
- draw(ctx) {
- const { options, circumference } = this;
- const offset = (options.offset || 0) / 4;
- const spacing = (options.spacing || 0) / 2;
- const circular = options.circular;
- this.pixelMargin = options.borderAlign === "inner" ? 0.33 : 0;
- this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;
- if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {
- return;
- }
- ctx.save();
- const halfAngle = (this.startAngle + this.endAngle) / 2;
- ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);
- const fix = 1 - Math.sin(Math.min(PI, circumference || 0));
- const radiusOffset = offset * fix;
- ctx.fillStyle = options.backgroundColor;
- ctx.strokeStyle = options.borderColor;
- drawArc(ctx, this, radiusOffset, spacing, circular);
- drawBorder(ctx, this, radiusOffset, spacing, circular);
- ctx.restore();
- }
-};
-__publicField(ArcElement, "id", "arc");
-__publicField(ArcElement, "defaults", {
- borderAlign: "center",
- borderColor: "#fff",
- borderDash: [],
- borderDashOffset: 0,
- borderJoinStyle: void 0,
- borderRadius: 0,
- borderWidth: 2,
- offset: 0,
- spacing: 0,
- angle: void 0,
- circular: true
-});
-__publicField(ArcElement, "defaultRoutes", {
- backgroundColor: "backgroundColor"
-});
-__publicField(ArcElement, "descriptors", {
- _scriptable: true,
- _indexable: (name) => name !== "borderDash"
-});
-function getBarBounds(bar, useFinalPosition) {
- const { x, y, base, width, height } = bar.getProps([
- "x",
- "y",
- "base",
- "width",
- "height"
- ], useFinalPosition);
- let left, right, top, bottom, half;
- if (bar.horizontal) {
- half = height / 2;
- left = Math.min(x, base);
- right = Math.max(x, base);
- top = y - half;
- bottom = y + half;
- } else {
- half = width / 2;
- left = x - half;
- right = x + half;
- top = Math.min(y, base);
- bottom = Math.max(y, base);
- }
- return {
- left,
- top,
- right,
- bottom
- };
-}
-function skipOrLimit(skip2, value, min, max) {
- return skip2 ? 0 : _limitValue(value, min, max);
-}
-function parseBorderWidth(bar, maxW, maxH) {
- const value = bar.options.borderWidth;
- const skip2 = bar.borderSkipped;
- const o = toTRBL(value);
- return {
- t: skipOrLimit(skip2.top, o.top, 0, maxH),
- r: skipOrLimit(skip2.right, o.right, 0, maxW),
- b: skipOrLimit(skip2.bottom, o.bottom, 0, maxH),
- l: skipOrLimit(skip2.left, o.left, 0, maxW)
- };
-}
-function parseBorderRadius(bar, maxW, maxH) {
- const { enableBorderRadius } = bar.getProps([
- "enableBorderRadius"
- ]);
- const value = bar.options.borderRadius;
- const o = toTRBLCorners(value);
- const maxR = Math.min(maxW, maxH);
- const skip2 = bar.borderSkipped;
- const enableBorder = enableBorderRadius || isObject(value);
- return {
- topLeft: skipOrLimit(!enableBorder || skip2.top || skip2.left, o.topLeft, 0, maxR),
- topRight: skipOrLimit(!enableBorder || skip2.top || skip2.right, o.topRight, 0, maxR),
- bottomLeft: skipOrLimit(!enableBorder || skip2.bottom || skip2.left, o.bottomLeft, 0, maxR),
- bottomRight: skipOrLimit(!enableBorder || skip2.bottom || skip2.right, o.bottomRight, 0, maxR)
- };
-}
-function boundingRects(bar) {
- const bounds = getBarBounds(bar);
- const width = bounds.right - bounds.left;
- const height = bounds.bottom - bounds.top;
- const border = parseBorderWidth(bar, width / 2, height / 2);
- const radius = parseBorderRadius(bar, width / 2, height / 2);
- return {
- outer: {
- x: bounds.left,
- y: bounds.top,
- w: width,
- h: height,
- radius
- },
- inner: {
- x: bounds.left + border.l,
- y: bounds.top + border.t,
- w: width - border.l - border.r,
- h: height - border.t - border.b,
- radius: {
- topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),
- topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),
- bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),
- bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))
- }
- }
- };
-}
-function inRange(bar, x, y, useFinalPosition) {
- const skipX = x === null;
- const skipY = y === null;
- const skipBoth = skipX && skipY;
- const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);
- return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));
-}
-function hasRadius(radius) {
- return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;
-}
-function addNormalRectPath(ctx, rect) {
- ctx.rect(rect.x, rect.y, rect.w, rect.h);
-}
-function inflateRect(rect, amount, refRect = {}) {
- const x = rect.x !== refRect.x ? -amount : 0;
- const y = rect.y !== refRect.y ? -amount : 0;
- const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;
- const h4 = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;
- return {
- x: rect.x + x,
- y: rect.y + y,
- w: rect.w + w,
- h: rect.h + h4,
- radius: rect.radius
- };
-}
-var BarElement = class extends Element {
- constructor(cfg) {
- super();
- this.options = void 0;
- this.horizontal = void 0;
- this.base = void 0;
- this.width = void 0;
- this.height = void 0;
- this.inflateAmount = void 0;
- if (cfg) {
- Object.assign(this, cfg);
- }
- }
- draw(ctx) {
- const { inflateAmount, options: { borderColor, backgroundColor } } = this;
- const { inner, outer } = boundingRects(this);
- const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;
- ctx.save();
- if (outer.w !== inner.w || outer.h !== inner.h) {
- ctx.beginPath();
- addRectPath(ctx, inflateRect(outer, inflateAmount, inner));
- ctx.clip();
- addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));
- ctx.fillStyle = borderColor;
- ctx.fill("evenodd");
- }
- ctx.beginPath();
- addRectPath(ctx, inflateRect(inner, inflateAmount));
- ctx.fillStyle = backgroundColor;
- ctx.fill();
- ctx.restore();
- }
- inRange(mouseX, mouseY, useFinalPosition) {
- return inRange(this, mouseX, mouseY, useFinalPosition);
- }
- inXRange(mouseX, useFinalPosition) {
- return inRange(this, mouseX, null, useFinalPosition);
- }
- inYRange(mouseY, useFinalPosition) {
- return inRange(this, null, mouseY, useFinalPosition);
- }
- getCenterPoint(useFinalPosition) {
- const { x, y, base, horizontal } = this.getProps([
- "x",
- "y",
- "base",
- "horizontal"
- ], useFinalPosition);
- return {
- x: horizontal ? (x + base) / 2 : x,
- y: horizontal ? y : (y + base) / 2
- };
- }
- getRange(axis) {
- return axis === "x" ? this.width / 2 : this.height / 2;
- }
-};
-__publicField(BarElement, "id", "bar");
-__publicField(BarElement, "defaults", {
- borderSkipped: "start",
- borderWidth: 0,
- borderRadius: 0,
- inflateAmount: "auto",
- pointStyle: void 0
-});
-__publicField(BarElement, "defaultRoutes", {
- backgroundColor: "backgroundColor",
- borderColor: "borderColor"
-});
-var getBoxSize = (labelOpts, fontSize) => {
- let { boxHeight = fontSize, boxWidth = fontSize } = labelOpts;
- if (labelOpts.usePointStyle) {
- boxHeight = Math.min(boxHeight, fontSize);
- boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);
- }
- return {
- boxWidth,
- boxHeight,
- itemHeight: Math.max(fontSize, boxHeight)
- };
-};
-var itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;
-var Legend = class extends Element {
- constructor(config) {
- super();
- this._added = false;
- this.legendHitBoxes = [];
- this._hoveredItem = null;
- this.doughnutMode = false;
- this.chart = config.chart;
- this.options = config.options;
- this.ctx = config.ctx;
- this.legendItems = void 0;
- this.columnSizes = void 0;
- this.lineWidths = void 0;
- this.maxHeight = void 0;
- this.maxWidth = void 0;
- this.top = void 0;
- this.bottom = void 0;
- this.left = void 0;
- this.right = void 0;
- this.height = void 0;
- this.width = void 0;
- this._margins = void 0;
- this.position = void 0;
- this.weight = void 0;
- this.fullSize = void 0;
- }
- update(maxWidth, maxHeight, margins) {
- this.maxWidth = maxWidth;
- this.maxHeight = maxHeight;
- this._margins = margins;
- this.setDimensions();
- this.buildLabels();
- this.fit();
- }
- setDimensions() {
- if (this.isHorizontal()) {
- this.width = this.maxWidth;
- this.left = this._margins.left;
- this.right = this.width;
- } else {
- this.height = this.maxHeight;
- this.top = this._margins.top;
- this.bottom = this.height;
- }
- }
- buildLabels() {
- const labelOpts = this.options.labels || {};
- let legendItems = callback(labelOpts.generateLabels, [
- this.chart
- ], this) || [];
- if (labelOpts.filter) {
- legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));
- }
- if (labelOpts.sort) {
- legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));
- }
- if (this.options.reverse) {
- legendItems.reverse();
- }
- this.legendItems = legendItems;
- }
- fit() {
- const { options, ctx } = this;
- if (!options.display) {
- this.width = this.height = 0;
- return;
- }
- const labelOpts = options.labels;
- const labelFont = toFont(labelOpts.font);
- const fontSize = labelFont.size;
- const titleHeight = this._computeTitleHeight();
- const { boxWidth, itemHeight } = getBoxSize(labelOpts, fontSize);
- let width, height;
- ctx.font = labelFont.string;
- if (this.isHorizontal()) {
- width = this.maxWidth;
- height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;
- } else {
- height = this.maxHeight;
- width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;
- }
- this.width = Math.min(width, options.maxWidth || this.maxWidth);
- this.height = Math.min(height, options.maxHeight || this.maxHeight);
- }
- _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {
- const { ctx, maxWidth, options: { labels: { padding } } } = this;
- const hitboxes = this.legendHitBoxes = [];
- const lineWidths = this.lineWidths = [
- 0
- ];
- const lineHeight = itemHeight + padding;
- let totalHeight = titleHeight;
- ctx.textAlign = "left";
- ctx.textBaseline = "middle";
- let row = -1;
- let top = -lineHeight;
- this.legendItems.forEach((legendItem, i) => {
- const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;
- if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {
- totalHeight += lineHeight;
- lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;
- top += lineHeight;
- row++;
- }
- hitboxes[i] = {
- left: 0,
- top,
- row,
- width: itemWidth,
- height: itemHeight
- };
- lineWidths[lineWidths.length - 1] += itemWidth + padding;
- });
- return totalHeight;
- }
- _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {
- const { ctx, maxHeight, options: { labels: { padding } } } = this;
- const hitboxes = this.legendHitBoxes = [];
- const columnSizes = this.columnSizes = [];
- const heightLimit = maxHeight - titleHeight;
- let totalWidth = padding;
- let currentColWidth = 0;
- let currentColHeight = 0;
- let left = 0;
- let col = 0;
- this.legendItems.forEach((legendItem, i) => {
- const { itemWidth, itemHeight } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);
- if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {
- totalWidth += currentColWidth + padding;
- columnSizes.push({
- width: currentColWidth,
- height: currentColHeight
- });
- left += currentColWidth + padding;
- col++;
- currentColWidth = currentColHeight = 0;
- }
- hitboxes[i] = {
- left,
- top: currentColHeight,
- col,
- width: itemWidth,
- height: itemHeight
- };
- currentColWidth = Math.max(currentColWidth, itemWidth);
- currentColHeight += itemHeight + padding;
- });
- totalWidth += currentColWidth;
- columnSizes.push({
- width: currentColWidth,
- height: currentColHeight
- });
- return totalWidth;
- }
- adjustHitBoxes() {
- if (!this.options.display) {
- return;
- }
- const titleHeight = this._computeTitleHeight();
- const { legendHitBoxes: hitboxes, options: { align, labels: { padding }, rtl } } = this;
- const rtlHelper = getRtlAdapter(rtl, this.left, this.width);
- if (this.isHorizontal()) {
- let row = 0;
- let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);
- for (const hitbox of hitboxes) {
- if (row !== hitbox.row) {
- row = hitbox.row;
- left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);
- }
- hitbox.top += this.top + titleHeight + padding;
- hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);
- left += hitbox.width + padding;
- }
- } else {
- let col = 0;
- let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);
- for (const hitbox of hitboxes) {
- if (hitbox.col !== col) {
- col = hitbox.col;
- top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);
- }
- hitbox.top = top;
- hitbox.left += this.left + padding;
- hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);
- top += hitbox.height + padding;
- }
- }
- }
- isHorizontal() {
- return this.options.position === "top" || this.options.position === "bottom";
- }
- draw() {
- if (this.options.display) {
- const ctx = this.ctx;
- clipArea(ctx, this);
- this._draw();
- unclipArea(ctx);
- }
- }
- _draw() {
- const { options: opts, columnSizes, lineWidths, ctx } = this;
- const { align, labels: labelOpts } = opts;
- const defaultColor = defaults.color;
- const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);
- const labelFont = toFont(labelOpts.font);
- const { padding } = labelOpts;
- const fontSize = labelFont.size;
- const halfFontSize = fontSize / 2;
- let cursor;
- this.drawTitle();
- ctx.textAlign = rtlHelper.textAlign("left");
- ctx.textBaseline = "middle";
- ctx.lineWidth = 0.5;
- ctx.font = labelFont.string;
- const { boxWidth, boxHeight, itemHeight } = getBoxSize(labelOpts, fontSize);
- const drawLegendBox = function(x, y, legendItem) {
- if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {
- return;
- }
- ctx.save();
- const lineWidth = valueOrDefault(legendItem.lineWidth, 1);
- ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);
- ctx.lineCap = valueOrDefault(legendItem.lineCap, "butt");
- ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);
- ctx.lineJoin = valueOrDefault(legendItem.lineJoin, "miter");
- ctx.lineWidth = lineWidth;
- ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);
- ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));
- if (labelOpts.usePointStyle) {
- const drawOptions = {
- radius: boxHeight * Math.SQRT2 / 2,
- pointStyle: legendItem.pointStyle,
- rotation: legendItem.rotation,
- borderWidth: lineWidth
- };
- const centerX = rtlHelper.xPlus(x, boxWidth / 2);
- const centerY = y + halfFontSize;
- drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);
- } else {
- const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);
- const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);
- const borderRadius = toTRBLCorners(legendItem.borderRadius);
- ctx.beginPath();
- if (Object.values(borderRadius).some((v) => v !== 0)) {
- addRoundedRectPath(ctx, {
- x: xBoxLeft,
- y: yBoxTop,
- w: boxWidth,
- h: boxHeight,
- radius: borderRadius
- });
- } else {
- ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);
- }
- ctx.fill();
- if (lineWidth !== 0) {
- ctx.stroke();
- }
- }
- ctx.restore();
- };
- const fillText = function(x, y, legendItem) {
- renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {
- strikethrough: legendItem.hidden,
- textAlign: rtlHelper.textAlign(legendItem.textAlign)
- });
- };
- const isHorizontal = this.isHorizontal();
- const titleHeight = this._computeTitleHeight();
- if (isHorizontal) {
- cursor = {
- x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),
- y: this.top + padding + titleHeight,
- line: 0
- };
- } else {
- cursor = {
- x: this.left + padding,
- y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),
- line: 0
- };
- }
- overrideTextDirection(this.ctx, opts.textDirection);
- const lineHeight = itemHeight + padding;
- this.legendItems.forEach((legendItem, i) => {
- ctx.strokeStyle = legendItem.fontColor;
- ctx.fillStyle = legendItem.fontColor;
- const textWidth = ctx.measureText(legendItem.text).width;
- const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));
- const width = boxWidth + halfFontSize + textWidth;
- let x = cursor.x;
- let y = cursor.y;
- rtlHelper.setWidth(this.width);
- if (isHorizontal) {
- if (i > 0 && x + width + padding > this.right) {
- y = cursor.y += lineHeight;
- cursor.line++;
- x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);
- }
- } else if (i > 0 && y + lineHeight > this.bottom) {
- x = cursor.x = x + columnSizes[cursor.line].width + padding;
- cursor.line++;
- y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);
- }
- const realX = rtlHelper.x(x);
- drawLegendBox(realX, y, legendItem);
- x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);
- fillText(rtlHelper.x(x), y, legendItem);
- if (isHorizontal) {
- cursor.x += width + padding;
- } else if (typeof legendItem.text !== "string") {
- const fontLineHeight = labelFont.lineHeight;
- cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight);
- } else {
- cursor.y += lineHeight;
- }
- });
- restoreTextDirection(this.ctx, opts.textDirection);
- }
- drawTitle() {
- const opts = this.options;
- const titleOpts = opts.title;
- const titleFont = toFont(titleOpts.font);
- const titlePadding = toPadding(titleOpts.padding);
- if (!titleOpts.display) {
- return;
- }
- const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);
- const ctx = this.ctx;
- const position = titleOpts.position;
- const halfFontSize = titleFont.size / 2;
- const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;
- let y;
- let left = this.left;
- let maxWidth = this.width;
- if (this.isHorizontal()) {
- maxWidth = Math.max(...this.lineWidths);
- y = this.top + topPaddingPlusHalfFontSize;
- left = _alignStartEnd(opts.align, left, this.right - maxWidth);
- } else {
- const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);
- y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());
- }
- const x = _alignStartEnd(position, left, left + maxWidth);
- ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));
- ctx.textBaseline = "middle";
- ctx.strokeStyle = titleOpts.color;
- ctx.fillStyle = titleOpts.color;
- ctx.font = titleFont.string;
- renderText(ctx, titleOpts.text, x, y, titleFont);
- }
- _computeTitleHeight() {
- const titleOpts = this.options.title;
- const titleFont = toFont(titleOpts.font);
- const titlePadding = toPadding(titleOpts.padding);
- return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;
- }
- _getLegendItemAt(x, y) {
- let i, hitBox, lh;
- if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {
- lh = this.legendHitBoxes;
- for (i = 0; i < lh.length; ++i) {
- hitBox = lh[i];
- if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {
- return this.legendItems[i];
- }
- }
- }
- return null;
- }
- handleEvent(e) {
- const opts = this.options;
- if (!isListened(e.type, opts)) {
- return;
- }
- const hoveredItem = this._getLegendItemAt(e.x, e.y);
- if (e.type === "mousemove" || e.type === "mouseout") {
- const previous = this._hoveredItem;
- const sameItem = itemsEqual(previous, hoveredItem);
- if (previous && !sameItem) {
- callback(opts.onLeave, [
- e,
- previous,
- this
- ], this);
- }
- this._hoveredItem = hoveredItem;
- if (hoveredItem && !sameItem) {
- callback(opts.onHover, [
- e,
- hoveredItem,
- this
- ], this);
- }
- } else if (hoveredItem) {
- callback(opts.onClick, [
- e,
- hoveredItem,
- this
- ], this);
- }
- }
-};
-function calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {
- const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);
- const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);
- return {
- itemWidth,
- itemHeight
- };
-}
-function calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {
- let legendItemText = legendItem.text;
- if (legendItemText && typeof legendItemText !== "string") {
- legendItemText = legendItemText.reduce((a, b) => a.length > b.length ? a : b);
- }
- return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width;
-}
-function calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {
- let itemHeight = _itemHeight;
- if (typeof legendItem.text !== "string") {
- itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);
- }
- return itemHeight;
-}
-function calculateLegendItemHeight(legendItem, fontLineHeight) {
- const labelHeight = legendItem.text ? legendItem.text.length + 0.5 : 0;
- return fontLineHeight * labelHeight;
-}
-function isListened(type, opts) {
- if ((type === "mousemove" || type === "mouseout") && (opts.onHover || opts.onLeave)) {
- return true;
- }
- if (opts.onClick && (type === "click" || type === "mouseup")) {
- return true;
- }
- return false;
-}
-var plugin_legend = {
- id: "legend",
- _element: Legend,
- start(chart, _args, options) {
- const legend = chart.legend = new Legend({
- ctx: chart.ctx,
- options,
- chart
- });
- layouts.configure(chart, legend, options);
- layouts.addBox(chart, legend);
- },
- stop(chart) {
- layouts.removeBox(chart, chart.legend);
- delete chart.legend;
- },
- beforeUpdate(chart, _args, options) {
- const legend = chart.legend;
- layouts.configure(chart, legend, options);
- legend.options = options;
- },
- afterUpdate(chart) {
- const legend = chart.legend;
- legend.buildLabels();
- legend.adjustHitBoxes();
- },
- afterEvent(chart, args) {
- if (!args.replay) {
- chart.legend.handleEvent(args.event);
- }
- },
- defaults: {
- display: true,
- position: "top",
- align: "center",
- fullSize: true,
- reverse: false,
- weight: 1e3,
- onClick(e, legendItem, legend) {
- const index = legendItem.datasetIndex;
- const ci = legend.chart;
- if (ci.isDatasetVisible(index)) {
- ci.hide(index);
- legendItem.hidden = true;
- } else {
- ci.show(index);
- legendItem.hidden = false;
- }
- },
- onHover: null,
- onLeave: null,
- labels: {
- color: (ctx) => ctx.chart.options.color,
- boxWidth: 40,
- padding: 10,
- generateLabels(chart) {
- const datasets = chart.data.datasets;
- const { labels: { usePointStyle, pointStyle, textAlign, color: color2, useBorderRadius, borderRadius } } = chart.legend.options;
- return chart._getSortedDatasetMetas().map((meta) => {
- const style = meta.controller.getStyle(usePointStyle ? 0 : void 0);
- const borderWidth = toPadding(style.borderWidth);
- return {
- text: datasets[meta.index].label,
- fillStyle: style.backgroundColor,
- fontColor: color2,
- hidden: !meta.visible,
- lineCap: style.borderCapStyle,
- lineDash: style.borderDash,
- lineDashOffset: style.borderDashOffset,
- lineJoin: style.borderJoinStyle,
- lineWidth: (borderWidth.width + borderWidth.height) / 4,
- strokeStyle: style.borderColor,
- pointStyle: pointStyle || style.pointStyle,
- rotation: style.rotation,
- textAlign: textAlign || style.textAlign,
- borderRadius: useBorderRadius && (borderRadius || style.borderRadius),
- datasetIndex: meta.index
- };
- }, this);
- }
- },
- title: {
- color: (ctx) => ctx.chart.options.color,
- display: false,
- position: "center",
- text: ""
- }
- },
- descriptors: {
- _scriptable: (name) => !name.startsWith("on"),
- labels: {
- _scriptable: (name) => ![
- "generateLabels",
- "filter",
- "sort"
- ].includes(name)
- }
- }
-};
-var Title = class extends Element {
- constructor(config) {
- super();
- this.chart = config.chart;
- this.options = config.options;
- this.ctx = config.ctx;
- this._padding = void 0;
- this.top = void 0;
- this.bottom = void 0;
- this.left = void 0;
- this.right = void 0;
- this.width = void 0;
- this.height = void 0;
- this.position = void 0;
- this.weight = void 0;
- this.fullSize = void 0;
- }
- update(maxWidth, maxHeight) {
- const opts = this.options;
- this.left = 0;
- this.top = 0;
- if (!opts.display) {
- this.width = this.height = this.right = this.bottom = 0;
- return;
- }
- this.width = this.right = maxWidth;
- this.height = this.bottom = maxHeight;
- const lineCount = isArray(opts.text) ? opts.text.length : 1;
- this._padding = toPadding(opts.padding);
- const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;
- if (this.isHorizontal()) {
- this.height = textSize;
- } else {
- this.width = textSize;
- }
- }
- isHorizontal() {
- const pos = this.options.position;
- return pos === "top" || pos === "bottom";
- }
- _drawArgs(offset) {
- const { top, left, bottom, right, options } = this;
- const align = options.align;
- let rotation = 0;
- let maxWidth, titleX, titleY;
- if (this.isHorizontal()) {
- titleX = _alignStartEnd(align, left, right);
- titleY = top + offset;
- maxWidth = right - left;
- } else {
- if (options.position === "left") {
- titleX = left + offset;
- titleY = _alignStartEnd(align, bottom, top);
- rotation = PI * -0.5;
- } else {
- titleX = right - offset;
- titleY = _alignStartEnd(align, top, bottom);
- rotation = PI * 0.5;
- }
- maxWidth = bottom - top;
- }
- return {
- titleX,
- titleY,
- maxWidth,
- rotation
- };
- }
- draw() {
- const ctx = this.ctx;
- const opts = this.options;
- if (!opts.display) {
- return;
- }
- const fontOpts = toFont(opts.font);
- const lineHeight = fontOpts.lineHeight;
- const offset = lineHeight / 2 + this._padding.top;
- const { titleX, titleY, maxWidth, rotation } = this._drawArgs(offset);
- renderText(ctx, opts.text, 0, 0, fontOpts, {
- color: opts.color,
- maxWidth,
- rotation,
- textAlign: _toLeftRightCenter(opts.align),
- textBaseline: "middle",
- translation: [
- titleX,
- titleY
- ]
- });
- }
-};
-function createTitle(chart, titleOpts) {
- const title = new Title({
- ctx: chart.ctx,
- options: titleOpts,
- chart
- });
- layouts.configure(chart, title, titleOpts);
- layouts.addBox(chart, title);
- chart.titleBlock = title;
-}
-var plugin_title = {
- id: "title",
- _element: Title,
- start(chart, _args, options) {
- createTitle(chart, options);
- },
- stop(chart) {
- const titleBlock = chart.titleBlock;
- layouts.removeBox(chart, titleBlock);
- delete chart.titleBlock;
- },
- beforeUpdate(chart, _args, options) {
- const title = chart.titleBlock;
- layouts.configure(chart, title, options);
- title.options = options;
- },
- defaults: {
- align: "center",
- display: false,
- font: {
- weight: "bold"
- },
- fullSize: true,
- padding: 10,
- position: "top",
- text: "",
- weight: 2e3
- },
- defaultRoutes: {
- color: "color"
- },
- descriptors: {
- _scriptable: true,
- _indexable: false
- }
-};
-var map2 = /* @__PURE__ */ new WeakMap();
-var plugin_subtitle = {
- id: "subtitle",
- start(chart, _args, options) {
- const title = new Title({
- ctx: chart.ctx,
- options,
- chart
- });
- layouts.configure(chart, title, options);
- layouts.addBox(chart, title);
- map2.set(chart, title);
- },
- stop(chart) {
- layouts.removeBox(chart, map2.get(chart));
- map2.delete(chart);
- },
- beforeUpdate(chart, _args, options) {
- const title = map2.get(chart);
- layouts.configure(chart, title, options);
- title.options = options;
- },
- defaults: {
- align: "center",
- display: false,
- font: {
- weight: "normal"
- },
- fullSize: true,
- padding: 0,
- position: "top",
- text: "",
- weight: 1500
- },
- defaultRoutes: {
- color: "color"
- },
- descriptors: {
- _scriptable: true,
- _indexable: false
- }
-};
-var positioners = {
- average(items) {
- if (!items.length) {
- return false;
- }
- let i, len;
- let x = 0;
- let y = 0;
- let count = 0;
- for (i = 0, len = items.length; i < len; ++i) {
- const el = items[i].element;
- if (el && el.hasValue()) {
- const pos = el.tooltipPosition();
- x += pos.x;
- y += pos.y;
- ++count;
- }
- }
- return {
- x: x / count,
- y: y / count
- };
- },
- nearest(items, eventPosition) {
- if (!items.length) {
- return false;
- }
- let x = eventPosition.x;
- let y = eventPosition.y;
- let minDistance = Number.POSITIVE_INFINITY;
- let i, len, nearestElement;
- for (i = 0, len = items.length; i < len; ++i) {
- const el = items[i].element;
- if (el && el.hasValue()) {
- const center = el.getCenterPoint();
- const d = distanceBetweenPoints(eventPosition, center);
- if (d < minDistance) {
- minDistance = d;
- nearestElement = el;
- }
- }
- }
- if (nearestElement) {
- const tp = nearestElement.tooltipPosition();
- x = tp.x;
- y = tp.y;
- }
- return {
- x,
- y
- };
- }
-};
-function pushOrConcat(base, toPush) {
- if (toPush) {
- if (isArray(toPush)) {
- Array.prototype.push.apply(base, toPush);
- } else {
- base.push(toPush);
- }
- }
- return base;
-}
-function splitNewlines(str) {
- if ((typeof str === "string" || str instanceof String) && str.indexOf("\n") > -1) {
- return str.split("\n");
- }
- return str;
-}
-function createTooltipItem(chart, item) {
- const { element, datasetIndex, index } = item;
- const controller = chart.getDatasetMeta(datasetIndex).controller;
- const { label, value } = controller.getLabelAndValue(index);
- return {
- chart,
- label,
- parsed: controller.getParsed(index),
- raw: chart.data.datasets[datasetIndex].data[index],
- formattedValue: value,
- dataset: controller.getDataset(),
- dataIndex: index,
- datasetIndex,
- element
- };
-}
-function getTooltipSize(tooltip, options) {
- const ctx = tooltip.chart.ctx;
- const { body, footer, title } = tooltip;
- const { boxWidth, boxHeight } = options;
- const bodyFont = toFont(options.bodyFont);
- const titleFont = toFont(options.titleFont);
- const footerFont = toFont(options.footerFont);
- const titleLineCount = title.length;
- const footerLineCount = footer.length;
- const bodyLineItemCount = body.length;
- const padding = toPadding(options.padding);
- let height = padding.height;
- let width = 0;
- let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);
- combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;
- if (titleLineCount) {
- height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;
- }
- if (combinedBodyLength) {
- const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;
- height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;
- }
- if (footerLineCount) {
- height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;
- }
- let widthPadding = 0;
- const maxLineWidth = function(line) {
- width = Math.max(width, ctx.measureText(line).width + widthPadding);
- };
- ctx.save();
- ctx.font = titleFont.string;
- each(tooltip.title, maxLineWidth);
- ctx.font = bodyFont.string;
- each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);
- widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0;
- each(body, (bodyItem) => {
- each(bodyItem.before, maxLineWidth);
- each(bodyItem.lines, maxLineWidth);
- each(bodyItem.after, maxLineWidth);
- });
- widthPadding = 0;
- ctx.font = footerFont.string;
- each(tooltip.footer, maxLineWidth);
- ctx.restore();
- width += padding.width;
- return {
- width,
- height
- };
-}
-function determineYAlign(chart, size) {
- const { y, height } = size;
- if (y < height / 2) {
- return "top";
- } else if (y > chart.height - height / 2) {
- return "bottom";
- }
- return "center";
-}
-function doesNotFitWithAlign(xAlign, chart, options, size) {
- const { x, width } = size;
- const caret = options.caretSize + options.caretPadding;
- if (xAlign === "left" && x + width + caret > chart.width) {
- return true;
- }
- if (xAlign === "right" && x - width - caret < 0) {
- return true;
- }
-}
-function determineXAlign(chart, options, size, yAlign) {
- const { x, width } = size;
- const { width: chartWidth, chartArea: { left, right } } = chart;
- let xAlign = "center";
- if (yAlign === "center") {
- xAlign = x <= (left + right) / 2 ? "left" : "right";
- } else if (x <= width / 2) {
- xAlign = "left";
- } else if (x >= chartWidth - width / 2) {
- xAlign = "right";
- }
- if (doesNotFitWithAlign(xAlign, chart, options, size)) {
- xAlign = "center";
- }
- return xAlign;
-}
-function determineAlignment(chart, options, size) {
- const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);
- return {
- xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),
- yAlign
- };
-}
-function alignX(size, xAlign) {
- let { x, width } = size;
- if (xAlign === "right") {
- x -= width;
- } else if (xAlign === "center") {
- x -= width / 2;
- }
- return x;
-}
-function alignY(size, yAlign, paddingAndSize) {
- let { y, height } = size;
- if (yAlign === "top") {
- y += paddingAndSize;
- } else if (yAlign === "bottom") {
- y -= height + paddingAndSize;
- } else {
- y -= height / 2;
- }
- return y;
-}
-function getBackgroundPoint(options, size, alignment, chart) {
- const { caretSize, caretPadding, cornerRadius } = options;
- const { xAlign, yAlign } = alignment;
- const paddingAndSize = caretSize + caretPadding;
- const { topLeft, topRight, bottomLeft, bottomRight } = toTRBLCorners(cornerRadius);
- let x = alignX(size, xAlign);
- const y = alignY(size, yAlign, paddingAndSize);
- if (yAlign === "center") {
- if (xAlign === "left") {
- x += paddingAndSize;
- } else if (xAlign === "right") {
- x -= paddingAndSize;
- }
- } else if (xAlign === "left") {
- x -= Math.max(topLeft, bottomLeft) + caretSize;
- } else if (xAlign === "right") {
- x += Math.max(topRight, bottomRight) + caretSize;
- }
- return {
- x: _limitValue(x, 0, chart.width - size.width),
- y: _limitValue(y, 0, chart.height - size.height)
- };
-}
-function getAlignedX(tooltip, align, options) {
- const padding = toPadding(options.padding);
- return align === "center" ? tooltip.x + tooltip.width / 2 : align === "right" ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;
-}
-function getBeforeAfterBodyLines(callback2) {
- return pushOrConcat([], splitNewlines(callback2));
-}
-function createTooltipContext(parent, tooltip, tooltipItems) {
- return createContext(parent, {
- tooltip,
- tooltipItems,
- type: "tooltip"
- });
-}
-function overrideCallbacks(callbacks, context) {
- const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;
- return override ? callbacks.override(override) : callbacks;
-}
-var defaultCallbacks = {
- beforeTitle: noop,
- title(tooltipItems) {
- if (tooltipItems.length > 0) {
- const item = tooltipItems[0];
- const labels = item.chart.data.labels;
- const labelCount = labels ? labels.length : 0;
- if (this && this.options && this.options.mode === "dataset") {
- return item.dataset.label || "";
- } else if (item.label) {
- return item.label;
- } else if (labelCount > 0 && item.dataIndex < labelCount) {
- return labels[item.dataIndex];
- }
- }
- return "";
- },
- afterTitle: noop,
- beforeBody: noop,
- beforeLabel: noop,
- label(tooltipItem) {
- if (this && this.options && this.options.mode === "dataset") {
- return tooltipItem.label + ": " + tooltipItem.formattedValue || tooltipItem.formattedValue;
- }
- let label = tooltipItem.dataset.label || "";
- if (label) {
- label += ": ";
- }
- const value = tooltipItem.formattedValue;
- if (!isNullOrUndef(value)) {
- label += value;
- }
- return label;
- },
- labelColor(tooltipItem) {
- const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);
- const options = meta.controller.getStyle(tooltipItem.dataIndex);
- return {
- borderColor: options.borderColor,
- backgroundColor: options.backgroundColor,
- borderWidth: options.borderWidth,
- borderDash: options.borderDash,
- borderDashOffset: options.borderDashOffset,
- borderRadius: 0
- };
- },
- labelTextColor() {
- return this.options.bodyColor;
- },
- labelPointStyle(tooltipItem) {
- const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);
- const options = meta.controller.getStyle(tooltipItem.dataIndex);
- return {
- pointStyle: options.pointStyle,
- rotation: options.rotation
- };
- },
- afterLabel: noop,
- afterBody: noop,
- beforeFooter: noop,
- footer: noop,
- afterFooter: noop
-};
-function invokeCallbackWithFallback(callbacks, name, ctx, arg) {
- const result = callbacks[name].call(ctx, arg);
- if (typeof result === "undefined") {
- return defaultCallbacks[name].call(ctx, arg);
- }
- return result;
-}
-var Tooltip = class extends Element {
- constructor(config) {
- super();
- this.opacity = 0;
- this._active = [];
- this._eventPosition = void 0;
- this._size = void 0;
- this._cachedAnimations = void 0;
- this._tooltipItems = [];
- this.$animations = void 0;
- this.$context = void 0;
- this.chart = config.chart;
- this.options = config.options;
- this.dataPoints = void 0;
- this.title = void 0;
- this.beforeBody = void 0;
- this.body = void 0;
- this.afterBody = void 0;
- this.footer = void 0;
- this.xAlign = void 0;
- this.yAlign = void 0;
- this.x = void 0;
- this.y = void 0;
- this.height = void 0;
- this.width = void 0;
- this.caretX = void 0;
- this.caretY = void 0;
- this.labelColors = void 0;
- this.labelPointStyles = void 0;
- this.labelTextColors = void 0;
- }
- initialize(options) {
- this.options = options;
- this._cachedAnimations = void 0;
- this.$context = void 0;
- }
- _resolveAnimations() {
- const cached = this._cachedAnimations;
- if (cached) {
- return cached;
- }
- const chart = this.chart;
- const options = this.options.setContext(this.getContext());
- const opts = options.enabled && chart.options.animation && options.animations;
- const animations = new Animations(this.chart, opts);
- if (opts._cacheable) {
- this._cachedAnimations = Object.freeze(animations);
- }
- return animations;
- }
- getContext() {
- return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));
- }
- getTitle(context, options) {
- const { callbacks } = options;
- const beforeTitle = invokeCallbackWithFallback(callbacks, "beforeTitle", this, context);
- const title = invokeCallbackWithFallback(callbacks, "title", this, context);
- const afterTitle = invokeCallbackWithFallback(callbacks, "afterTitle", this, context);
- let lines = [];
- lines = pushOrConcat(lines, splitNewlines(beforeTitle));
- lines = pushOrConcat(lines, splitNewlines(title));
- lines = pushOrConcat(lines, splitNewlines(afterTitle));
- return lines;
- }
- getBeforeBody(tooltipItems, options) {
- return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, "beforeBody", this, tooltipItems));
- }
- getBody(tooltipItems, options) {
- const { callbacks } = options;
- const bodyItems = [];
- each(tooltipItems, (context) => {
- const bodyItem = {
- before: [],
- lines: [],
- after: []
- };
- const scoped = overrideCallbacks(callbacks, context);
- pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, "beforeLabel", this, context)));
- pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, "label", this, context));
- pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, "afterLabel", this, context)));
- bodyItems.push(bodyItem);
- });
- return bodyItems;
- }
- getAfterBody(tooltipItems, options) {
- return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, "afterBody", this, tooltipItems));
- }
- getFooter(tooltipItems, options) {
- const { callbacks } = options;
- const beforeFooter = invokeCallbackWithFallback(callbacks, "beforeFooter", this, tooltipItems);
- const footer = invokeCallbackWithFallback(callbacks, "footer", this, tooltipItems);
- const afterFooter = invokeCallbackWithFallback(callbacks, "afterFooter", this, tooltipItems);
- let lines = [];
- lines = pushOrConcat(lines, splitNewlines(beforeFooter));
- lines = pushOrConcat(lines, splitNewlines(footer));
- lines = pushOrConcat(lines, splitNewlines(afterFooter));
- return lines;
- }
- _createItems(options) {
- const active = this._active;
- const data = this.chart.data;
- const labelColors = [];
- const labelPointStyles = [];
- const labelTextColors = [];
- let tooltipItems = [];
- let i, len;
- for (i = 0, len = active.length; i < len; ++i) {
- tooltipItems.push(createTooltipItem(this.chart, active[i]));
- }
- if (options.filter) {
- tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));
- }
- if (options.itemSort) {
- tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));
- }
- each(tooltipItems, (context) => {
- const scoped = overrideCallbacks(options.callbacks, context);
- labelColors.push(invokeCallbackWithFallback(scoped, "labelColor", this, context));
- labelPointStyles.push(invokeCallbackWithFallback(scoped, "labelPointStyle", this, context));
- labelTextColors.push(invokeCallbackWithFallback(scoped, "labelTextColor", this, context));
- });
- this.labelColors = labelColors;
- this.labelPointStyles = labelPointStyles;
- this.labelTextColors = labelTextColors;
- this.dataPoints = tooltipItems;
- return tooltipItems;
- }
- update(changed, replay) {
- const options = this.options.setContext(this.getContext());
- const active = this._active;
- let properties;
- let tooltipItems = [];
- if (!active.length) {
- if (this.opacity !== 0) {
- properties = {
- opacity: 0
- };
- }
- } else {
- const position = positioners[options.position].call(this, active, this._eventPosition);
- tooltipItems = this._createItems(options);
- this.title = this.getTitle(tooltipItems, options);
- this.beforeBody = this.getBeforeBody(tooltipItems, options);
- this.body = this.getBody(tooltipItems, options);
- this.afterBody = this.getAfterBody(tooltipItems, options);
- this.footer = this.getFooter(tooltipItems, options);
- const size = this._size = getTooltipSize(this, options);
- const positionAndSize = Object.assign({}, position, size);
- const alignment = determineAlignment(this.chart, options, positionAndSize);
- const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);
- this.xAlign = alignment.xAlign;
- this.yAlign = alignment.yAlign;
- properties = {
- opacity: 1,
- x: backgroundPoint.x,
- y: backgroundPoint.y,
- width: size.width,
- height: size.height,
- caretX: position.x,
- caretY: position.y
- };
- }
- this._tooltipItems = tooltipItems;
- this.$context = void 0;
- if (properties) {
- this._resolveAnimations().update(this, properties);
- }
- if (changed && options.external) {
- options.external.call(this, {
- chart: this.chart,
- tooltip: this,
- replay
- });
- }
- }
- drawCaret(tooltipPoint, ctx, size, options) {
- const caretPosition = this.getCaretPosition(tooltipPoint, size, options);
- ctx.lineTo(caretPosition.x1, caretPosition.y1);
- ctx.lineTo(caretPosition.x2, caretPosition.y2);
- ctx.lineTo(caretPosition.x3, caretPosition.y3);
- }
- getCaretPosition(tooltipPoint, size, options) {
- const { xAlign, yAlign } = this;
- const { caretSize, cornerRadius } = options;
- const { topLeft, topRight, bottomLeft, bottomRight } = toTRBLCorners(cornerRadius);
- const { x: ptX, y: ptY } = tooltipPoint;
- const { width, height } = size;
- let x1, x2, x3, y1, y2, y3;
- if (yAlign === "center") {
- y2 = ptY + height / 2;
- if (xAlign === "left") {
- x1 = ptX;
- x2 = x1 - caretSize;
- y1 = y2 + caretSize;
- y3 = y2 - caretSize;
- } else {
- x1 = ptX + width;
- x2 = x1 + caretSize;
- y1 = y2 - caretSize;
- y3 = y2 + caretSize;
- }
- x3 = x1;
- } else {
- if (xAlign === "left") {
- x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize;
- } else if (xAlign === "right") {
- x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;
- } else {
- x2 = this.caretX;
- }
- if (yAlign === "top") {
- y1 = ptY;
- y2 = y1 - caretSize;
- x1 = x2 - caretSize;
- x3 = x2 + caretSize;
- } else {
- y1 = ptY + height;
- y2 = y1 + caretSize;
- x1 = x2 + caretSize;
- x3 = x2 - caretSize;
- }
- y3 = y1;
- }
- return {
- x1,
- x2,
- x3,
- y1,
- y2,
- y3
- };
- }
- drawTitle(pt, ctx, options) {
- const title = this.title;
- const length = title.length;
- let titleFont, titleSpacing, i;
- if (length) {
- const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);
- pt.x = getAlignedX(this, options.titleAlign, options);
- ctx.textAlign = rtlHelper.textAlign(options.titleAlign);
- ctx.textBaseline = "middle";
- titleFont = toFont(options.titleFont);
- titleSpacing = options.titleSpacing;
- ctx.fillStyle = options.titleColor;
- ctx.font = titleFont.string;
- for (i = 0; i < length; ++i) {
- ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);
- pt.y += titleFont.lineHeight + titleSpacing;
- if (i + 1 === length) {
- pt.y += options.titleMarginBottom - titleSpacing;
- }
- }
- }
- }
- _drawColorBox(ctx, pt, i, rtlHelper, options) {
- const labelColor = this.labelColors[i];
- const labelPointStyle = this.labelPointStyles[i];
- const { boxHeight, boxWidth } = options;
- const bodyFont = toFont(options.bodyFont);
- const colorX = getAlignedX(this, "left", options);
- const rtlColorX = rtlHelper.x(colorX);
- const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;
- const colorY = pt.y + yOffSet;
- if (options.usePointStyle) {
- const drawOptions = {
- radius: Math.min(boxWidth, boxHeight) / 2,
- pointStyle: labelPointStyle.pointStyle,
- rotation: labelPointStyle.rotation,
- borderWidth: 1
- };
- const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;
- const centerY = colorY + boxHeight / 2;
- ctx.strokeStyle = options.multiKeyBackground;
- ctx.fillStyle = options.multiKeyBackground;
- drawPoint(ctx, drawOptions, centerX, centerY);
- ctx.strokeStyle = labelColor.borderColor;
- ctx.fillStyle = labelColor.backgroundColor;
- drawPoint(ctx, drawOptions, centerX, centerY);
- } else {
- ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : labelColor.borderWidth || 1;
- ctx.strokeStyle = labelColor.borderColor;
- ctx.setLineDash(labelColor.borderDash || []);
- ctx.lineDashOffset = labelColor.borderDashOffset || 0;
- const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);
- const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);
- const borderRadius = toTRBLCorners(labelColor.borderRadius);
- if (Object.values(borderRadius).some((v) => v !== 0)) {
- ctx.beginPath();
- ctx.fillStyle = options.multiKeyBackground;
- addRoundedRectPath(ctx, {
- x: outerX,
- y: colorY,
- w: boxWidth,
- h: boxHeight,
- radius: borderRadius
- });
- ctx.fill();
- ctx.stroke();
- ctx.fillStyle = labelColor.backgroundColor;
- ctx.beginPath();
- addRoundedRectPath(ctx, {
- x: innerX,
- y: colorY + 1,
- w: boxWidth - 2,
- h: boxHeight - 2,
- radius: borderRadius
- });
- ctx.fill();
- } else {
- ctx.fillStyle = options.multiKeyBackground;
- ctx.fillRect(outerX, colorY, boxWidth, boxHeight);
- ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);
- ctx.fillStyle = labelColor.backgroundColor;
- ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);
- }
- }
- ctx.fillStyle = this.labelTextColors[i];
- }
- drawBody(pt, ctx, options) {
- const { body } = this;
- const { bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding } = options;
- const bodyFont = toFont(options.bodyFont);
- let bodyLineHeight = bodyFont.lineHeight;
- let xLinePadding = 0;
- const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);
- const fillLineOfText = function(line) {
- ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);
- pt.y += bodyLineHeight + bodySpacing;
- };
- const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);
- let bodyItem, textColor, lines, i, j, ilen, jlen;
- ctx.textAlign = bodyAlign;
- ctx.textBaseline = "middle";
- ctx.font = bodyFont.string;
- pt.x = getAlignedX(this, bodyAlignForCalculation, options);
- ctx.fillStyle = options.bodyColor;
- each(this.beforeBody, fillLineOfText);
- xLinePadding = displayColors && bodyAlignForCalculation !== "right" ? bodyAlign === "center" ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;
- for (i = 0, ilen = body.length; i < ilen; ++i) {
- bodyItem = body[i];
- textColor = this.labelTextColors[i];
- ctx.fillStyle = textColor;
- each(bodyItem.before, fillLineOfText);
- lines = bodyItem.lines;
- if (displayColors && lines.length) {
- this._drawColorBox(ctx, pt, i, rtlHelper, options);
- bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);
- }
- for (j = 0, jlen = lines.length; j < jlen; ++j) {
- fillLineOfText(lines[j]);
- bodyLineHeight = bodyFont.lineHeight;
- }
- each(bodyItem.after, fillLineOfText);
- }
- xLinePadding = 0;
- bodyLineHeight = bodyFont.lineHeight;
- each(this.afterBody, fillLineOfText);
- pt.y -= bodySpacing;
- }
- drawFooter(pt, ctx, options) {
- const footer = this.footer;
- const length = footer.length;
- let footerFont, i;
- if (length) {
- const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);
- pt.x = getAlignedX(this, options.footerAlign, options);
- pt.y += options.footerMarginTop;
- ctx.textAlign = rtlHelper.textAlign(options.footerAlign);
- ctx.textBaseline = "middle";
- footerFont = toFont(options.footerFont);
- ctx.fillStyle = options.footerColor;
- ctx.font = footerFont.string;
- for (i = 0; i < length; ++i) {
- ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);
- pt.y += footerFont.lineHeight + options.footerSpacing;
- }
- }
- }
- drawBackground(pt, ctx, tooltipSize, options) {
- const { xAlign, yAlign } = this;
- const { x, y } = pt;
- const { width, height } = tooltipSize;
- const { topLeft, topRight, bottomLeft, bottomRight } = toTRBLCorners(options.cornerRadius);
- ctx.fillStyle = options.backgroundColor;
- ctx.strokeStyle = options.borderColor;
- ctx.lineWidth = options.borderWidth;
- ctx.beginPath();
- ctx.moveTo(x + topLeft, y);
- if (yAlign === "top") {
- this.drawCaret(pt, ctx, tooltipSize, options);
- }
- ctx.lineTo(x + width - topRight, y);
- ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);
- if (yAlign === "center" && xAlign === "right") {
- this.drawCaret(pt, ctx, tooltipSize, options);
- }
- ctx.lineTo(x + width, y + height - bottomRight);
- ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);
- if (yAlign === "bottom") {
- this.drawCaret(pt, ctx, tooltipSize, options);
- }
- ctx.lineTo(x + bottomLeft, y + height);
- ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);
- if (yAlign === "center" && xAlign === "left") {
- this.drawCaret(pt, ctx, tooltipSize, options);
- }
- ctx.lineTo(x, y + topLeft);
- ctx.quadraticCurveTo(x, y, x + topLeft, y);
- ctx.closePath();
- ctx.fill();
- if (options.borderWidth > 0) {
- ctx.stroke();
- }
- }
- _updateAnimationTarget(options) {
- const chart = this.chart;
- const anims = this.$animations;
- const animX = anims && anims.x;
- const animY = anims && anims.y;
- if (animX || animY) {
- const position = positioners[options.position].call(this, this._active, this._eventPosition);
- if (!position) {
- return;
- }
- const size = this._size = getTooltipSize(this, options);
- const positionAndSize = Object.assign({}, position, this._size);
- const alignment = determineAlignment(chart, options, positionAndSize);
- const point = getBackgroundPoint(options, positionAndSize, alignment, chart);
- if (animX._to !== point.x || animY._to !== point.y) {
- this.xAlign = alignment.xAlign;
- this.yAlign = alignment.yAlign;
- this.width = size.width;
- this.height = size.height;
- this.caretX = position.x;
- this.caretY = position.y;
- this._resolveAnimations().update(this, point);
- }
- }
- }
- _willRender() {
- return !!this.opacity;
- }
- draw(ctx) {
- const options = this.options.setContext(this.getContext());
- let opacity = this.opacity;
- if (!opacity) {
- return;
- }
- this._updateAnimationTarget(options);
- const tooltipSize = {
- width: this.width,
- height: this.height
- };
- const pt = {
- x: this.x,
- y: this.y
- };
- opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;
- const padding = toPadding(options.padding);
- const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;
- if (options.enabled && hasTooltipContent) {
- ctx.save();
- ctx.globalAlpha = opacity;
- this.drawBackground(pt, ctx, tooltipSize, options);
- overrideTextDirection(ctx, options.textDirection);
- pt.y += padding.top;
- this.drawTitle(pt, ctx, options);
- this.drawBody(pt, ctx, options);
- this.drawFooter(pt, ctx, options);
- restoreTextDirection(ctx, options.textDirection);
- ctx.restore();
- }
- }
- getActiveElements() {
- return this._active || [];
- }
- setActiveElements(activeElements, eventPosition) {
- const lastActive = this._active;
- const active = activeElements.map(({ datasetIndex, index }) => {
- const meta = this.chart.getDatasetMeta(datasetIndex);
- if (!meta) {
- throw new Error("Cannot find a dataset at index " + datasetIndex);
- }
- return {
- datasetIndex,
- element: meta.data[index],
- index
- };
- });
- const changed = !_elementsEqual(lastActive, active);
- const positionChanged = this._positionChanged(active, eventPosition);
- if (changed || positionChanged) {
- this._active = active;
- this._eventPosition = eventPosition;
- this._ignoreReplayEvents = true;
- this.update(true);
- }
- }
- handleEvent(e, replay, inChartArea = true) {
- if (replay && this._ignoreReplayEvents) {
- return false;
- }
- this._ignoreReplayEvents = false;
- const options = this.options;
- const lastActive = this._active || [];
- const active = this._getActiveElements(e, lastActive, replay, inChartArea);
- const positionChanged = this._positionChanged(active, e);
- const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;
- if (changed) {
- this._active = active;
- if (options.enabled || options.external) {
- this._eventPosition = {
- x: e.x,
- y: e.y
- };
- this.update(true, replay);
- }
- }
- return changed;
- }
- _getActiveElements(e, lastActive, replay, inChartArea) {
- const options = this.options;
- if (e.type === "mouseout") {
- return [];
- }
- if (!inChartArea) {
- return lastActive;
- }
- const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);
- if (options.reverse) {
- active.reverse();
- }
- return active;
- }
- _positionChanged(active, e) {
- const { caretX, caretY, options } = this;
- const position = positioners[options.position].call(this, active, e);
- return position !== false && (caretX !== position.x || caretY !== position.y);
- }
-};
-__publicField(Tooltip, "positioners", positioners);
-var plugin_tooltip = {
- id: "tooltip",
- _element: Tooltip,
- positioners,
- afterInit(chart, _args, options) {
- if (options) {
- chart.tooltip = new Tooltip({
- chart,
- options
- });
- }
- },
- beforeUpdate(chart, _args, options) {
- if (chart.tooltip) {
- chart.tooltip.initialize(options);
- }
- },
- reset(chart, _args, options) {
- if (chart.tooltip) {
- chart.tooltip.initialize(options);
- }
- },
- afterDraw(chart) {
- const tooltip = chart.tooltip;
- if (tooltip && tooltip._willRender()) {
- const args = {
- tooltip
- };
- if (chart.notifyPlugins("beforeTooltipDraw", {
- ...args,
- cancelable: true
- }) === false) {
- return;
- }
- tooltip.draw(chart.ctx);
- chart.notifyPlugins("afterTooltipDraw", args);
- }
- },
- afterEvent(chart, args) {
- if (chart.tooltip) {
- const useFinalPosition = args.replay;
- if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {
- args.changed = true;
- }
- }
- },
- defaults: {
- enabled: true,
- external: null,
- position: "average",
- backgroundColor: "rgba(0,0,0,0.8)",
- titleColor: "#fff",
- titleFont: {
- weight: "bold"
- },
- titleSpacing: 2,
- titleMarginBottom: 6,
- titleAlign: "left",
- bodyColor: "#fff",
- bodySpacing: 2,
- bodyFont: {},
- bodyAlign: "left",
- footerColor: "#fff",
- footerSpacing: 2,
- footerMarginTop: 6,
- footerFont: {
- weight: "bold"
- },
- footerAlign: "left",
- padding: 6,
- caretPadding: 2,
- caretSize: 5,
- cornerRadius: 6,
- boxHeight: (ctx, opts) => opts.bodyFont.size,
- boxWidth: (ctx, opts) => opts.bodyFont.size,
- multiKeyBackground: "#fff",
- displayColors: true,
- boxPadding: 0,
- borderColor: "rgba(0,0,0,0)",
- borderWidth: 0,
- animation: {
- duration: 400,
- easing: "easeOutQuart"
- },
- animations: {
- numbers: {
- type: "number",
- properties: [
- "x",
- "y",
- "width",
- "height",
- "caretX",
- "caretY"
- ]
- },
- opacity: {
- easing: "linear",
- duration: 200
- }
- },
- callbacks: defaultCallbacks
- },
- defaultRoutes: {
- bodyFont: "font",
- footerFont: "font",
- titleFont: "font"
- },
- descriptors: {
- _scriptable: (name) => name !== "filter" && name !== "itemSort" && name !== "external",
- _indexable: false,
- callbacks: {
- _scriptable: false,
- _indexable: false
- },
- animation: {
- _fallback: false
- },
- animations: {
- _fallback: "animation"
- }
- },
- additionalOptionScopes: [
- "interaction"
- ]
-};
-var addIfString = (labels, raw, index, addedLabels) => {
- if (typeof raw === "string") {
- index = labels.push(raw) - 1;
- addedLabels.unshift({
- index,
- label: raw
- });
- } else if (isNaN(raw)) {
- index = null;
- }
- return index;
-};
-function findOrAddLabel(labels, raw, index, addedLabels) {
- const first = labels.indexOf(raw);
- if (first === -1) {
- return addIfString(labels, raw, index, addedLabels);
- }
- const last = labels.lastIndexOf(raw);
- return first !== last ? index : first;
-}
-var validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);
-function _getLabelForValue(value) {
- const labels = this.getLabels();
- if (value >= 0 && value < labels.length) {
- return labels[value];
- }
- return value;
-}
-var CategoryScale = class extends Scale {
- constructor(cfg) {
- super(cfg);
- this._startValue = void 0;
- this._valueRange = 0;
- this._addedLabels = [];
- }
- init(scaleOptions) {
- const added = this._addedLabels;
- if (added.length) {
- const labels = this.getLabels();
- for (const { index, label } of added) {
- if (labels[index] === label) {
- labels.splice(index, 1);
- }
- }
- this._addedLabels = [];
- }
- super.init(scaleOptions);
- }
- parse(raw, index) {
- if (isNullOrUndef(raw)) {
- return null;
- }
- const labels = this.getLabels();
- index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);
- return validIndex(index, labels.length - 1);
- }
- determineDataLimits() {
- const { minDefined, maxDefined } = this.getUserBounds();
- let { min, max } = this.getMinMax(true);
- if (this.options.bounds === "ticks") {
- if (!minDefined) {
- min = 0;
- }
- if (!maxDefined) {
- max = this.getLabels().length - 1;
- }
- }
- this.min = min;
- this.max = max;
- }
- buildTicks() {
- const min = this.min;
- const max = this.max;
- const offset = this.options.offset;
- const ticks = [];
- let labels = this.getLabels();
- labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);
- this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);
- this._startValue = this.min - (offset ? 0.5 : 0);
- for (let value = min; value <= max; value++) {
- ticks.push({
- value
- });
- }
- return ticks;
- }
- getLabelForValue(value) {
- return _getLabelForValue.call(this, value);
- }
- configure() {
- super.configure();
- if (!this.isHorizontal()) {
- this._reversePixels = !this._reversePixels;
- }
- }
- getPixelForValue(value) {
- if (typeof value !== "number") {
- value = this.parse(value);
- }
- return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);
- }
- getPixelForTick(index) {
- const ticks = this.ticks;
- if (index < 0 || index > ticks.length - 1) {
- return null;
- }
- return this.getPixelForValue(ticks[index].value);
- }
- getValueForPixel(pixel) {
- return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);
- }
- getBasePixel() {
- return this.bottom;
- }
-};
-__publicField(CategoryScale, "id", "category");
-__publicField(CategoryScale, "defaults", {
- ticks: {
- callback: _getLabelForValue
- }
-});
-function generateTicks$1(generationOptions, dataRange) {
- const ticks = [];
- const MIN_SPACING = 1e-14;
- const { bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds } = generationOptions;
- const unit = step || 1;
- const maxSpaces = maxTicks - 1;
- const { min: rmin, max: rmax } = dataRange;
- const minDefined = !isNullOrUndef(min);
- const maxDefined = !isNullOrUndef(max);
- const countDefined = !isNullOrUndef(count);
- const minSpacing = (rmax - rmin) / (maxDigits + 1);
- let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;
- let factor, niceMin, niceMax, numSpaces;
- if (spacing < MIN_SPACING && !minDefined && !maxDefined) {
- return [
- {
- value: rmin
- },
- {
- value: rmax
- }
- ];
- }
- numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);
- if (numSpaces > maxSpaces) {
- spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;
- }
- if (!isNullOrUndef(precision)) {
- factor = Math.pow(10, precision);
- spacing = Math.ceil(spacing * factor) / factor;
- }
- if (bounds === "ticks") {
- niceMin = Math.floor(rmin / spacing) * spacing;
- niceMax = Math.ceil(rmax / spacing) * spacing;
- } else {
- niceMin = rmin;
- niceMax = rmax;
- }
- if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1e3)) {
- numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));
- spacing = (max - min) / numSpaces;
- niceMin = min;
- niceMax = max;
- } else if (countDefined) {
- niceMin = minDefined ? min : niceMin;
- niceMax = maxDefined ? max : niceMax;
- numSpaces = count - 1;
- spacing = (niceMax - niceMin) / numSpaces;
- } else {
- numSpaces = (niceMax - niceMin) / spacing;
- if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1e3)) {
- numSpaces = Math.round(numSpaces);
- } else {
- numSpaces = Math.ceil(numSpaces);
- }
- }
- const decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin));
- factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);
- niceMin = Math.round(niceMin * factor) / factor;
- niceMax = Math.round(niceMax * factor) / factor;
- let j = 0;
- if (minDefined) {
- if (includeBounds && niceMin !== min) {
- ticks.push({
- value: min
- });
- if (niceMin < min) {
- j++;
- }
- if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {
- j++;
- }
- } else if (niceMin < min) {
- j++;
- }
- }
- for (; j < numSpaces; ++j) {
- const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;
- if (maxDefined && tickValue > max) {
- break;
- }
- ticks.push({
- value: tickValue
- });
- }
- if (maxDefined && includeBounds && niceMax !== max) {
- if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {
- ticks[ticks.length - 1].value = max;
- } else {
- ticks.push({
- value: max
- });
- }
- } else if (!maxDefined || niceMax === max) {
- ticks.push({
- value: niceMax
- });
- }
- return ticks;
-}
-function relativeLabelSize(value, minSpacing, { horizontal, minRotation }) {
- const rad = toRadians(minRotation);
- const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 1e-3;
- const length = 0.75 * minSpacing * ("" + value).length;
- return Math.min(minSpacing / ratio, length);
-}
-var LinearScaleBase = class extends Scale {
- constructor(cfg) {
- super(cfg);
- this.start = void 0;
- this.end = void 0;
- this._startValue = void 0;
- this._endValue = void 0;
- this._valueRange = 0;
- }
- parse(raw, index) {
- if (isNullOrUndef(raw)) {
- return null;
- }
- if ((typeof raw === "number" || raw instanceof Number) && !isFinite(+raw)) {
- return null;
- }
- return +raw;
- }
- handleTickRangeOptions() {
- const { beginAtZero } = this.options;
- const { minDefined, maxDefined } = this.getUserBounds();
- let { min, max } = this;
- const setMin = (v) => min = minDefined ? min : v;
- const setMax = (v) => max = maxDefined ? max : v;
- if (beginAtZero) {
- const minSign = sign(min);
- const maxSign = sign(max);
- if (minSign < 0 && maxSign < 0) {
- setMax(0);
- } else if (minSign > 0 && maxSign > 0) {
- setMin(0);
- }
- }
- if (min === max) {
- let offset = max === 0 ? 1 : Math.abs(max * 0.05);
- setMax(max + offset);
- if (!beginAtZero) {
- setMin(min - offset);
- }
- }
- this.min = min;
- this.max = max;
- }
- getTickLimit() {
- const tickOpts = this.options.ticks;
- let { maxTicksLimit, stepSize } = tickOpts;
- let maxTicks;
- if (stepSize) {
- maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;
- if (maxTicks > 1e3) {
- console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);
- maxTicks = 1e3;
- }
- } else {
- maxTicks = this.computeTickLimit();
- maxTicksLimit = maxTicksLimit || 11;
- }
- if (maxTicksLimit) {
- maxTicks = Math.min(maxTicksLimit, maxTicks);
- }
- return maxTicks;
- }
- computeTickLimit() {
- return Number.POSITIVE_INFINITY;
- }
- buildTicks() {
- const opts = this.options;
- const tickOpts = opts.ticks;
- let maxTicks = this.getTickLimit();
- maxTicks = Math.max(2, maxTicks);
- const numericGeneratorOptions = {
- maxTicks,
- bounds: opts.bounds,
- min: opts.min,
- max: opts.max,
- precision: tickOpts.precision,
- step: tickOpts.stepSize,
- count: tickOpts.count,
- maxDigits: this._maxDigits(),
- horizontal: this.isHorizontal(),
- minRotation: tickOpts.minRotation || 0,
- includeBounds: tickOpts.includeBounds !== false
- };
- const dataRange = this._range || this;
- const ticks = generateTicks$1(numericGeneratorOptions, dataRange);
- if (opts.bounds === "ticks") {
- _setMinAndMaxByKey(ticks, this, "value");
- }
- if (opts.reverse) {
- ticks.reverse();
- this.start = this.max;
- this.end = this.min;
- } else {
- this.start = this.min;
- this.end = this.max;
- }
- return ticks;
- }
- configure() {
- const ticks = this.ticks;
- let start = this.min;
- let end = this.max;
- super.configure();
- if (this.options.offset && ticks.length) {
- const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;
- start -= offset;
- end += offset;
- }
- this._startValue = start;
- this._endValue = end;
- this._valueRange = end - start;
- }
- getLabelForValue(value) {
- return formatNumber(value, this.chart.options.locale, this.options.ticks.format);
- }
-};
-var LinearScale = class extends LinearScaleBase {
- determineDataLimits() {
- const { min, max } = this.getMinMax(true);
- this.min = isNumberFinite(min) ? min : 0;
- this.max = isNumberFinite(max) ? max : 1;
- this.handleTickRangeOptions();
- }
- computeTickLimit() {
- const horizontal = this.isHorizontal();
- const length = horizontal ? this.width : this.height;
- const minRotation = toRadians(this.options.ticks.minRotation);
- const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 1e-3;
- const tickFont = this._resolveTickFontOptions(0);
- return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));
- }
- getPixelForValue(value) {
- return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);
- }
- getValueForPixel(pixel) {
- return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;
- }
-};
-__publicField(LinearScale, "id", "linear");
-__publicField(LinearScale, "defaults", {
- ticks: {
- callback: Ticks.formatters.numeric
- }
-});
-var log10Floor = (v) => Math.floor(log10(v));
-var changeExponent = (v, m) => Math.pow(10, log10Floor(v) + m);
-function isMajor(tickVal) {
- const remain = tickVal / Math.pow(10, log10Floor(tickVal));
- return remain === 1;
-}
-function steps(min, max, rangeExp) {
- const rangeStep = Math.pow(10, rangeExp);
- const start = Math.floor(min / rangeStep);
- const end = Math.ceil(max / rangeStep);
- return end - start;
-}
-function startExp(min, max) {
- const range = max - min;
- let rangeExp = log10Floor(range);
- while (steps(min, max, rangeExp) > 10) {
- rangeExp++;
- }
- while (steps(min, max, rangeExp) < 10) {
- rangeExp--;
- }
- return Math.min(rangeExp, log10Floor(min));
-}
-function generateTicks(generationOptions, { min, max }) {
- min = finiteOrDefault(generationOptions.min, min);
- const ticks = [];
- const minExp = log10Floor(min);
- let exp = startExp(min, max);
- let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;
- const stepSize = Math.pow(10, exp);
- const base = minExp > exp ? Math.pow(10, minExp) : 0;
- const start = Math.round((min - base) * precision) / precision;
- const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;
- let significand = Math.floor((start - offset) / Math.pow(10, exp));
- let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);
- while (value < max) {
- ticks.push({
- value,
- major: isMajor(value),
- significand
- });
- if (significand >= 10) {
- significand = significand < 15 ? 15 : 20;
- } else {
- significand++;
- }
- if (significand >= 20) {
- exp++;
- significand = 2;
- precision = exp >= 0 ? 1 : precision;
- }
- value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;
- }
- const lastTick = finiteOrDefault(generationOptions.max, value);
- ticks.push({
- value: lastTick,
- major: isMajor(lastTick),
- significand
- });
- return ticks;
-}
-var LogarithmicScale = class extends Scale {
- constructor(cfg) {
- super(cfg);
- this.start = void 0;
- this.end = void 0;
- this._startValue = void 0;
- this._valueRange = 0;
- }
- parse(raw, index) {
- const value = LinearScaleBase.prototype.parse.apply(this, [
- raw,
- index
- ]);
- if (value === 0) {
- this._zero = true;
- return void 0;
- }
- return isNumberFinite(value) && value > 0 ? value : null;
- }
- determineDataLimits() {
- const { min, max } = this.getMinMax(true);
- this.min = isNumberFinite(min) ? Math.max(0, min) : null;
- this.max = isNumberFinite(max) ? Math.max(0, max) : null;
- if (this.options.beginAtZero) {
- this._zero = true;
- }
- if (this._zero && this.min !== this._suggestedMin && !isNumberFinite(this._userMin)) {
- this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);
- }
- this.handleTickRangeOptions();
- }
- handleTickRangeOptions() {
- const { minDefined, maxDefined } = this.getUserBounds();
- let min = this.min;
- let max = this.max;
- const setMin = (v) => min = minDefined ? min : v;
- const setMax = (v) => max = maxDefined ? max : v;
- if (min === max) {
- if (min <= 0) {
- setMin(1);
- setMax(10);
- } else {
- setMin(changeExponent(min, -1));
- setMax(changeExponent(max, 1));
- }
- }
- if (min <= 0) {
- setMin(changeExponent(max, -1));
- }
- if (max <= 0) {
- setMax(changeExponent(min, 1));
- }
- this.min = min;
- this.max = max;
- }
- buildTicks() {
- const opts = this.options;
- const generationOptions = {
- min: this._userMin,
- max: this._userMax
- };
- const ticks = generateTicks(generationOptions, this);
- if (opts.bounds === "ticks") {
- _setMinAndMaxByKey(ticks, this, "value");
- }
- if (opts.reverse) {
- ticks.reverse();
- this.start = this.max;
- this.end = this.min;
- } else {
- this.start = this.min;
- this.end = this.max;
- }
- return ticks;
- }
- getLabelForValue(value) {
- return value === void 0 ? "0" : formatNumber(value, this.chart.options.locale, this.options.ticks.format);
- }
- configure() {
- const start = this.min;
- super.configure();
- this._startValue = log10(start);
- this._valueRange = log10(this.max) - log10(start);
- }
- getPixelForValue(value) {
- if (value === void 0 || value === 0) {
- value = this.min;
- }
- if (value === null || isNaN(value)) {
- return NaN;
- }
- return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange);
- }
- getValueForPixel(pixel) {
- const decimal = this.getDecimalForPixel(pixel);
- return Math.pow(10, this._startValue + decimal * this._valueRange);
- }
-};
-__publicField(LogarithmicScale, "id", "logarithmic");
-__publicField(LogarithmicScale, "defaults", {
- ticks: {
- callback: Ticks.formatters.logarithmic,
- major: {
- enabled: true
- }
- }
-});
-function getTickBackdropHeight(opts) {
- const tickOpts = opts.ticks;
- if (tickOpts.display && opts.display) {
- const padding = toPadding(tickOpts.backdropPadding);
- return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;
- }
- return 0;
-}
-function measureLabelSize(ctx, font, label) {
- label = isArray(label) ? label : [
- label
- ];
- return {
- w: _longestText(ctx, font.string, label),
- h: label.length * font.lineHeight
- };
-}
-function determineLimits(angle, pos, size, min, max) {
- if (angle === min || angle === max) {
- return {
- start: pos - size / 2,
- end: pos + size / 2
- };
- } else if (angle < min || angle > max) {
- return {
- start: pos - size,
- end: pos
- };
- }
- return {
- start: pos,
- end: pos + size
- };
-}
-function fitWithPointLabels(scale) {
- const orig = {
- l: scale.left + scale._padding.left,
- r: scale.right - scale._padding.right,
- t: scale.top + scale._padding.top,
- b: scale.bottom - scale._padding.bottom
- };
- const limits = Object.assign({}, orig);
- const labelSizes = [];
- const padding = [];
- const valueCount = scale._pointLabels.length;
- const pointLabelOpts = scale.options.pointLabels;
- const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;
- for (let i = 0; i < valueCount; i++) {
- const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));
- padding[i] = opts.padding;
- const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);
- const plFont = toFont(opts.font);
- const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);
- labelSizes[i] = textSize;
- const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);
- const angle = Math.round(toDegrees(angleRadians));
- const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);
- const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);
- updateLimits(limits, orig, angleRadians, hLimits, vLimits);
- }
- scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);
- scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);
-}
-function updateLimits(limits, orig, angle, hLimits, vLimits) {
- const sin = Math.abs(Math.sin(angle));
- const cos = Math.abs(Math.cos(angle));
- let x = 0;
- let y = 0;
- if (hLimits.start < orig.l) {
- x = (orig.l - hLimits.start) / sin;
- limits.l = Math.min(limits.l, orig.l - x);
- } else if (hLimits.end > orig.r) {
- x = (hLimits.end - orig.r) / sin;
- limits.r = Math.max(limits.r, orig.r + x);
- }
- if (vLimits.start < orig.t) {
- y = (orig.t - vLimits.start) / cos;
- limits.t = Math.min(limits.t, orig.t - y);
- } else if (vLimits.end > orig.b) {
- y = (vLimits.end - orig.b) / cos;
- limits.b = Math.max(limits.b, orig.b + y);
- }
-}
-function createPointLabelItem(scale, index, itemOpts) {
- const outerDistance = scale.drawingArea;
- const { extra, additionalAngle, padding, size } = itemOpts;
- const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);
- const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));
- const y = yForAngle(pointLabelPosition.y, size.h, angle);
- const textAlign = getTextAlignForAngle(angle);
- const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);
- return {
- visible: true,
- x: pointLabelPosition.x,
- y,
- textAlign,
- left,
- top: y,
- right: left + size.w,
- bottom: y + size.h
- };
-}
-function isNotOverlapped(item, area) {
- if (!area) {
- return true;
- }
- const { left, top, right, bottom } = item;
- const apexesInArea = _isPointInArea({
- x: left,
- y: top
- }, area) || _isPointInArea({
- x: left,
- y: bottom
- }, area) || _isPointInArea({
- x: right,
- y: top
- }, area) || _isPointInArea({
- x: right,
- y: bottom
- }, area);
- return !apexesInArea;
-}
-function buildPointLabelItems(scale, labelSizes, padding) {
- const items = [];
- const valueCount = scale._pointLabels.length;
- const opts = scale.options;
- const { centerPointLabels, display } = opts.pointLabels;
- const itemOpts = {
- extra: getTickBackdropHeight(opts) / 2,
- additionalAngle: centerPointLabels ? PI / valueCount : 0
- };
- let area;
- for (let i = 0; i < valueCount; i++) {
- itemOpts.padding = padding[i];
- itemOpts.size = labelSizes[i];
- const item = createPointLabelItem(scale, i, itemOpts);
- items.push(item);
- if (display === "auto") {
- item.visible = isNotOverlapped(item, area);
- if (item.visible) {
- area = item;
- }
- }
- }
- return items;
-}
-function getTextAlignForAngle(angle) {
- if (angle === 0 || angle === 180) {
- return "center";
- } else if (angle < 180) {
- return "left";
- }
- return "right";
-}
-function leftForTextAlign(x, w, align) {
- if (align === "right") {
- x -= w;
- } else if (align === "center") {
- x -= w / 2;
- }
- return x;
-}
-function yForAngle(y, h4, angle) {
- if (angle === 90 || angle === 270) {
- y -= h4 / 2;
- } else if (angle > 270 || angle < 90) {
- y -= h4;
- }
- return y;
-}
-function drawPointLabelBox(ctx, opts, item) {
- const { left, top, right, bottom } = item;
- const { backdropColor } = opts;
- if (!isNullOrUndef(backdropColor)) {
- const borderRadius = toTRBLCorners(opts.borderRadius);
- const padding = toPadding(opts.backdropPadding);
- ctx.fillStyle = backdropColor;
- const backdropLeft = left - padding.left;
- const backdropTop = top - padding.top;
- const backdropWidth = right - left + padding.width;
- const backdropHeight = bottom - top + padding.height;
- if (Object.values(borderRadius).some((v) => v !== 0)) {
- ctx.beginPath();
- addRoundedRectPath(ctx, {
- x: backdropLeft,
- y: backdropTop,
- w: backdropWidth,
- h: backdropHeight,
- radius: borderRadius
- });
- ctx.fill();
- } else {
- ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);
- }
- }
-}
-function drawPointLabels(scale, labelCount) {
- const { ctx, options: { pointLabels } } = scale;
- for (let i = labelCount - 1; i >= 0; i--) {
- const item = scale._pointLabelItems[i];
- if (!item.visible) {
- continue;
- }
- const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));
- drawPointLabelBox(ctx, optsAtIndex, item);
- const plFont = toFont(optsAtIndex.font);
- const { x, y, textAlign } = item;
- renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {
- color: optsAtIndex.color,
- textAlign,
- textBaseline: "middle"
- });
- }
-}
-function pathRadiusLine(scale, radius, circular, labelCount) {
- const { ctx } = scale;
- if (circular) {
- ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);
- } else {
- let pointPosition = scale.getPointPosition(0, radius);
- ctx.moveTo(pointPosition.x, pointPosition.y);
- for (let i = 1; i < labelCount; i++) {
- pointPosition = scale.getPointPosition(i, radius);
- ctx.lineTo(pointPosition.x, pointPosition.y);
- }
- }
-}
-function drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {
- const ctx = scale.ctx;
- const circular = gridLineOpts.circular;
- const { color: color2, lineWidth } = gridLineOpts;
- if (!circular && !labelCount || !color2 || !lineWidth || radius < 0) {
- return;
- }
- ctx.save();
- ctx.strokeStyle = color2;
- ctx.lineWidth = lineWidth;
- ctx.setLineDash(borderOpts.dash);
- ctx.lineDashOffset = borderOpts.dashOffset;
- ctx.beginPath();
- pathRadiusLine(scale, radius, circular, labelCount);
- ctx.closePath();
- ctx.stroke();
- ctx.restore();
-}
-function createPointLabelContext(parent, index, label) {
- return createContext(parent, {
- label,
- index,
- type: "pointLabel"
- });
-}
-var RadialLinearScale = class extends LinearScaleBase {
- constructor(cfg) {
- super(cfg);
- this.xCenter = void 0;
- this.yCenter = void 0;
- this.drawingArea = void 0;
- this._pointLabels = [];
- this._pointLabelItems = [];
- }
- setDimensions() {
- const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);
- const w = this.width = this.maxWidth - padding.width;
- const h4 = this.height = this.maxHeight - padding.height;
- this.xCenter = Math.floor(this.left + w / 2 + padding.left);
- this.yCenter = Math.floor(this.top + h4 / 2 + padding.top);
- this.drawingArea = Math.floor(Math.min(w, h4) / 2);
- }
- determineDataLimits() {
- const { min, max } = this.getMinMax(false);
- this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;
- this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;
- this.handleTickRangeOptions();
- }
- computeTickLimit() {
- return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));
- }
- generateTickLabels(ticks) {
- LinearScaleBase.prototype.generateTickLabels.call(this, ticks);
- this._pointLabels = this.getLabels().map((value, index) => {
- const label = callback(this.options.pointLabels.callback, [
- value,
- index
- ], this);
- return label || label === 0 ? label : "";
- }).filter((v, i) => this.chart.getDataVisibility(i));
- }
- fit() {
- const opts = this.options;
- if (opts.display && opts.pointLabels.display) {
- fitWithPointLabels(this);
- } else {
- this.setCenterPoint(0, 0, 0, 0);
- }
- }
- setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {
- this.xCenter += Math.floor((leftMovement - rightMovement) / 2);
- this.yCenter += Math.floor((topMovement - bottomMovement) / 2);
- this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));
- }
- getIndexAngle(index) {
- const angleMultiplier = TAU / (this._pointLabels.length || 1);
- const startAngle = this.options.startAngle || 0;
- return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));
- }
- getDistanceFromCenterForValue(value) {
- if (isNullOrUndef(value)) {
- return NaN;
- }
- const scalingFactor = this.drawingArea / (this.max - this.min);
- if (this.options.reverse) {
- return (this.max - value) * scalingFactor;
- }
- return (value - this.min) * scalingFactor;
- }
- getValueForDistanceFromCenter(distance) {
- if (isNullOrUndef(distance)) {
- return NaN;
- }
- const scaledDistance = distance / (this.drawingArea / (this.max - this.min));
- return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;
- }
- getPointLabelContext(index) {
- const pointLabels = this._pointLabels || [];
- if (index >= 0 && index < pointLabels.length) {
- const pointLabel = pointLabels[index];
- return createPointLabelContext(this.getContext(), index, pointLabel);
- }
- }
- getPointPosition(index, distanceFromCenter, additionalAngle = 0) {
- const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;
- return {
- x: Math.cos(angle) * distanceFromCenter + this.xCenter,
- y: Math.sin(angle) * distanceFromCenter + this.yCenter,
- angle
- };
- }
- getPointPositionForValue(index, value) {
- return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));
- }
- getBasePosition(index) {
- return this.getPointPositionForValue(index || 0, this.getBaseValue());
- }
- getPointLabelPosition(index) {
- const { left, top, right, bottom } = this._pointLabelItems[index];
- return {
- left,
- top,
- right,
- bottom
- };
- }
- drawBackground() {
- const { backgroundColor, grid: { circular } } = this.options;
- if (backgroundColor) {
- const ctx = this.ctx;
- ctx.save();
- ctx.beginPath();
- pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);
- ctx.closePath();
- ctx.fillStyle = backgroundColor;
- ctx.fill();
- ctx.restore();
- }
- }
- drawGrid() {
- const ctx = this.ctx;
- const opts = this.options;
- const { angleLines, grid, border } = opts;
- const labelCount = this._pointLabels.length;
- let i, offset, position;
- if (opts.pointLabels.display) {
- drawPointLabels(this, labelCount);
- }
- if (grid.display) {
- this.ticks.forEach((tick, index) => {
- if (index !== 0) {
- offset = this.getDistanceFromCenterForValue(tick.value);
- const context = this.getContext(index);
- const optsAtIndex = grid.setContext(context);
- const optsAtIndexBorder = border.setContext(context);
- drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);
- }
- });
- }
- if (angleLines.display) {
- ctx.save();
- for (i = labelCount - 1; i >= 0; i--) {
- const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));
- const { color: color2, lineWidth } = optsAtIndex;
- if (!lineWidth || !color2) {
- continue;
- }
- ctx.lineWidth = lineWidth;
- ctx.strokeStyle = color2;
- ctx.setLineDash(optsAtIndex.borderDash);
- ctx.lineDashOffset = optsAtIndex.borderDashOffset;
- offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);
- position = this.getPointPosition(i, offset);
- ctx.beginPath();
- ctx.moveTo(this.xCenter, this.yCenter);
- ctx.lineTo(position.x, position.y);
- ctx.stroke();
- }
- ctx.restore();
- }
- }
- drawBorder() {
- }
- drawLabels() {
- const ctx = this.ctx;
- const opts = this.options;
- const tickOpts = opts.ticks;
- if (!tickOpts.display) {
- return;
- }
- const startAngle = this.getIndexAngle(0);
- let offset, width;
- ctx.save();
- ctx.translate(this.xCenter, this.yCenter);
- ctx.rotate(startAngle);
- ctx.textAlign = "center";
- ctx.textBaseline = "middle";
- this.ticks.forEach((tick, index) => {
- if (index === 0 && !opts.reverse) {
- return;
- }
- const optsAtIndex = tickOpts.setContext(this.getContext(index));
- const tickFont = toFont(optsAtIndex.font);
- offset = this.getDistanceFromCenterForValue(this.ticks[index].value);
- if (optsAtIndex.showLabelBackdrop) {
- ctx.font = tickFont.string;
- width = ctx.measureText(tick.label).width;
- ctx.fillStyle = optsAtIndex.backdropColor;
- const padding = toPadding(optsAtIndex.backdropPadding);
- ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);
- }
- renderText(ctx, tick.label, 0, -offset, tickFont, {
- color: optsAtIndex.color
- });
- });
- ctx.restore();
- }
- drawTitle() {
- }
-};
-__publicField(RadialLinearScale, "id", "radialLinear");
-__publicField(RadialLinearScale, "defaults", {
- display: true,
- animate: true,
- position: "chartArea",
- angleLines: {
- display: true,
- lineWidth: 1,
- borderDash: [],
- borderDashOffset: 0
- },
- grid: {
- circular: false
- },
- startAngle: 0,
- ticks: {
- showLabelBackdrop: true,
- callback: Ticks.formatters.numeric
- },
- pointLabels: {
- backdropColor: void 0,
- backdropPadding: 2,
- display: true,
- font: {
- size: 10
- },
- callback(label) {
- return label;
- },
- padding: 5,
- centerPointLabels: false
- }
-});
-__publicField(RadialLinearScale, "defaultRoutes", {
- "angleLines.color": "borderColor",
- "pointLabels.color": "color",
- "ticks.color": "color"
-});
-__publicField(RadialLinearScale, "descriptors", {
- angleLines: {
- _fallback: "grid"
- }
-});
-var INTERVALS = {
- millisecond: {
- common: true,
- size: 1,
- steps: 1e3
- },
- second: {
- common: true,
- size: 1e3,
- steps: 60
- },
- minute: {
- common: true,
- size: 6e4,
- steps: 60
- },
- hour: {
- common: true,
- size: 36e5,
- steps: 24
- },
- day: {
- common: true,
- size: 864e5,
- steps: 30
- },
- week: {
- common: false,
- size: 6048e5,
- steps: 4
- },
- month: {
- common: true,
- size: 2628e6,
- steps: 12
- },
- quarter: {
- common: false,
- size: 7884e6,
- steps: 4
- },
- year: {
- common: true,
- size: 3154e7
- }
-};
-var UNITS = /* @__PURE__ */ Object.keys(INTERVALS);
-function sorter(a, b) {
- return a - b;
-}
-function parse(scale, input) {
- if (isNullOrUndef(input)) {
- return null;
- }
- const adapter = scale._adapter;
- const { parser, round: round2, isoWeekday } = scale._parseOpts;
- let value = input;
- if (typeof parser === "function") {
- value = parser(value);
- }
- if (!isNumberFinite(value)) {
- value = typeof parser === "string" ? adapter.parse(value, parser) : adapter.parse(value);
- }
- if (value === null) {
- return null;
- }
- if (round2) {
- value = round2 === "week" && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, "isoWeek", isoWeekday) : adapter.startOf(value, round2);
- }
- return +value;
-}
-function determineUnitForAutoTicks(minUnit, min, max, capacity) {
- const ilen = UNITS.length;
- for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {
- const interval = INTERVALS[UNITS[i]];
- const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;
- if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {
- return UNITS[i];
- }
- }
- return UNITS[ilen - 1];
-}
-function determineUnitForFormatting(scale, numTicks, minUnit, min, max) {
- for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {
- const unit = UNITS[i];
- if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {
- return unit;
- }
- }
- return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];
-}
-function determineMajorUnit(unit) {
- for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {
- if (INTERVALS[UNITS[i]].common) {
- return UNITS[i];
- }
- }
-}
-function addTick(ticks, time, timestamps) {
- if (!timestamps) {
- ticks[time] = true;
- } else if (timestamps.length) {
- const { lo, hi } = _lookup(timestamps, time);
- const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];
- ticks[timestamp] = true;
- }
-}
-function setMajorTicks(scale, ticks, map3, majorUnit) {
- const adapter = scale._adapter;
- const first = +adapter.startOf(ticks[0].value, majorUnit);
- const last = ticks[ticks.length - 1].value;
- let major, index;
- for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {
- index = map3[major];
- if (index >= 0) {
- ticks[index].major = true;
- }
- }
- return ticks;
-}
-function ticksFromTimestamps(scale, values, majorUnit) {
- const ticks = [];
- const map3 = {};
- const ilen = values.length;
- let i, value;
- for (i = 0; i < ilen; ++i) {
- value = values[i];
- map3[value] = i;
- ticks.push({
- value,
- major: false
- });
- }
- return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map3, majorUnit);
-}
-var TimeScale = class extends Scale {
- constructor(props) {
- super(props);
- this._cache = {
- data: [],
- labels: [],
- all: []
- };
- this._unit = "day";
- this._majorUnit = void 0;
- this._offsets = {};
- this._normalized = false;
- this._parseOpts = void 0;
- }
- init(scaleOpts, opts = {}) {
- const time = scaleOpts.time || (scaleOpts.time = {});
- const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);
- adapter.init(opts);
- mergeIf(time.displayFormats, adapter.formats());
- this._parseOpts = {
- parser: time.parser,
- round: time.round,
- isoWeekday: time.isoWeekday
- };
- super.init(scaleOpts);
- this._normalized = opts.normalized;
- }
- parse(raw, index) {
- if (raw === void 0) {
- return null;
- }
- return parse(this, raw);
- }
- beforeLayout() {
- super.beforeLayout();
- this._cache = {
- data: [],
- labels: [],
- all: []
- };
- }
- determineDataLimits() {
- const options = this.options;
- const adapter = this._adapter;
- const unit = options.time.unit || "day";
- let { min, max, minDefined, maxDefined } = this.getUserBounds();
- function _applyBounds(bounds) {
- if (!minDefined && !isNaN(bounds.min)) {
- min = Math.min(min, bounds.min);
- }
- if (!maxDefined && !isNaN(bounds.max)) {
- max = Math.max(max, bounds.max);
- }
- }
- if (!minDefined || !maxDefined) {
- _applyBounds(this._getLabelBounds());
- if (options.bounds !== "ticks" || options.ticks.source !== "labels") {
- _applyBounds(this.getMinMax(false));
- }
- }
- min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);
- max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;
- this.min = Math.min(min, max - 1);
- this.max = Math.max(min + 1, max);
- }
- _getLabelBounds() {
- const arr = this.getLabelTimestamps();
- let min = Number.POSITIVE_INFINITY;
- let max = Number.NEGATIVE_INFINITY;
- if (arr.length) {
- min = arr[0];
- max = arr[arr.length - 1];
- }
- return {
- min,
- max
- };
- }
- buildTicks() {
- const options = this.options;
- const timeOpts = options.time;
- const tickOpts = options.ticks;
- const timestamps = tickOpts.source === "labels" ? this.getLabelTimestamps() : this._generate();
- if (options.bounds === "ticks" && timestamps.length) {
- this.min = this._userMin || timestamps[0];
- this.max = this._userMax || timestamps[timestamps.length - 1];
- }
- const min = this.min;
- const max = this.max;
- const ticks = _filterBetween(timestamps, min, max);
- this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));
- this._majorUnit = !tickOpts.major.enabled || this._unit === "year" ? void 0 : determineMajorUnit(this._unit);
- this.initOffsets(timestamps);
- if (options.reverse) {
- ticks.reverse();
- }
- return ticksFromTimestamps(this, ticks, this._majorUnit);
- }
- afterAutoSkip() {
- if (this.options.offsetAfterAutoskip) {
- this.initOffsets(this.ticks.map((tick) => +tick.value));
- }
- }
- initOffsets(timestamps = []) {
- let start = 0;
- let end = 0;
- let first, last;
- if (this.options.offset && timestamps.length) {
- first = this.getDecimalForValue(timestamps[0]);
- if (timestamps.length === 1) {
- start = 1 - first;
- } else {
- start = (this.getDecimalForValue(timestamps[1]) - first) / 2;
- }
- last = this.getDecimalForValue(timestamps[timestamps.length - 1]);
- if (timestamps.length === 1) {
- end = last;
- } else {
- end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;
- }
- }
- const limit = timestamps.length < 3 ? 0.5 : 0.25;
- start = _limitValue(start, 0, limit);
- end = _limitValue(end, 0, limit);
- this._offsets = {
- start,
- end,
- factor: 1 / (start + 1 + end)
- };
- }
- _generate() {
- const adapter = this._adapter;
- const min = this.min;
- const max = this.max;
- const options = this.options;
- const timeOpts = options.time;
- const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));
- const stepSize = valueOrDefault(options.ticks.stepSize, 1);
- const weekday = minor === "week" ? timeOpts.isoWeekday : false;
- const hasWeekday = isNumber(weekday) || weekday === true;
- const ticks = {};
- let first = min;
- let time, count;
- if (hasWeekday) {
- first = +adapter.startOf(first, "isoWeek", weekday);
- }
- first = +adapter.startOf(first, hasWeekday ? "day" : minor);
- if (adapter.diff(max, min, minor) > 1e5 * stepSize) {
- throw new Error(min + " and " + max + " are too far apart with stepSize of " + stepSize + " " + minor);
- }
- const timestamps = options.ticks.source === "data" && this.getDataTimestamps();
- for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {
- addTick(ticks, time, timestamps);
- }
- if (time === max || options.bounds === "ticks" || count === 1) {
- addTick(ticks, time, timestamps);
- }
- return Object.keys(ticks).sort((a, b) => a - b).map((x) => +x);
- }
- getLabelForValue(value) {
- const adapter = this._adapter;
- const timeOpts = this.options.time;
- if (timeOpts.tooltipFormat) {
- return adapter.format(value, timeOpts.tooltipFormat);
- }
- return adapter.format(value, timeOpts.displayFormats.datetime);
- }
- format(value, format) {
- const options = this.options;
- const formats = options.time.displayFormats;
- const unit = this._unit;
- const fmt = format || formats[unit];
- return this._adapter.format(value, fmt);
- }
- _tickFormatFunction(time, index, ticks, format) {
- const options = this.options;
- const formatter = options.ticks.callback;
- if (formatter) {
- return callback(formatter, [
- time,
- index,
- ticks
- ], this);
- }
- const formats = options.time.displayFormats;
- const unit = this._unit;
- const majorUnit = this._majorUnit;
- const minorFormat = unit && formats[unit];
- const majorFormat = majorUnit && formats[majorUnit];
- const tick = ticks[index];
- const major = majorUnit && majorFormat && tick && tick.major;
- return this._adapter.format(time, format || (major ? majorFormat : minorFormat));
- }
- generateTickLabels(ticks) {
- let i, ilen, tick;
- for (i = 0, ilen = ticks.length; i < ilen; ++i) {
- tick = ticks[i];
- tick.label = this._tickFormatFunction(tick.value, i, ticks);
- }
- }
- getDecimalForValue(value) {
- return value === null ? NaN : (value - this.min) / (this.max - this.min);
- }
- getPixelForValue(value) {
- const offsets = this._offsets;
- const pos = this.getDecimalForValue(value);
- return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);
- }
- getValueForPixel(pixel) {
- const offsets = this._offsets;
- const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;
- return this.min + pos * (this.max - this.min);
- }
- _getLabelSize(label) {
- const ticksOpts = this.options.ticks;
- const tickLabelWidth = this.ctx.measureText(label).width;
- const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);
- const cosRotation = Math.cos(angle);
- const sinRotation = Math.sin(angle);
- const tickFontSize = this._resolveTickFontOptions(0).size;
- return {
- w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,
- h: tickLabelWidth * sinRotation + tickFontSize * cosRotation
- };
- }
- _getLabelCapacity(exampleTime) {
- const timeOpts = this.options.time;
- const displayFormats = timeOpts.displayFormats;
- const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;
- const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [
- exampleTime
- ], this._majorUnit), format);
- const size = this._getLabelSize(exampleLabel);
- const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;
- return capacity > 0 ? capacity : 1;
- }
- getDataTimestamps() {
- let timestamps = this._cache.data || [];
- let i, ilen;
- if (timestamps.length) {
- return timestamps;
- }
- const metas = this.getMatchingVisibleMetas();
- if (this._normalized && metas.length) {
- return this._cache.data = metas[0].controller.getAllParsedValues(this);
- }
- for (i = 0, ilen = metas.length; i < ilen; ++i) {
- timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));
- }
- return this._cache.data = this.normalize(timestamps);
- }
- getLabelTimestamps() {
- const timestamps = this._cache.labels || [];
- let i, ilen;
- if (timestamps.length) {
- return timestamps;
- }
- const labels = this.getLabels();
- for (i = 0, ilen = labels.length; i < ilen; ++i) {
- timestamps.push(parse(this, labels[i]));
- }
- return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);
- }
- normalize(values) {
- return _arrayUnique(values.sort(sorter));
- }
-};
-__publicField(TimeScale, "id", "time");
-__publicField(TimeScale, "defaults", {
- bounds: "data",
- adapters: {},
- time: {
- parser: false,
- unit: false,
- round: false,
- isoWeekday: false,
- minUnit: "millisecond",
- displayFormats: {}
- },
- ticks: {
- source: "auto",
- callback: false,
- major: {
- enabled: false
- }
- }
-});
-function interpolate3(table, val, reverse) {
- let lo = 0;
- let hi = table.length - 1;
- let prevSource, nextSource, prevTarget, nextTarget;
- if (reverse) {
- if (val >= table[lo].pos && val <= table[hi].pos) {
- ({ lo, hi } = _lookupByKey(table, "pos", val));
- }
- ({ pos: prevSource, time: prevTarget } = table[lo]);
- ({ pos: nextSource, time: nextTarget } = table[hi]);
- } else {
- if (val >= table[lo].time && val <= table[hi].time) {
- ({ lo, hi } = _lookupByKey(table, "time", val));
- }
- ({ time: prevSource, pos: prevTarget } = table[lo]);
- ({ time: nextSource, pos: nextTarget } = table[hi]);
- }
- const span = nextSource - prevSource;
- return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;
-}
-var TimeSeriesScale = class extends TimeScale {
- constructor(props) {
- super(props);
- this._table = [];
- this._minPos = void 0;
- this._tableRange = void 0;
- }
- initOffsets() {
- const timestamps = this._getTimestampsForTable();
- const table = this._table = this.buildLookupTable(timestamps);
- this._minPos = interpolate3(table, this.min);
- this._tableRange = interpolate3(table, this.max) - this._minPos;
- super.initOffsets(timestamps);
- }
- buildLookupTable(timestamps) {
- const { min, max } = this;
- const items = [];
- const table = [];
- let i, ilen, prev, curr, next;
- for (i = 0, ilen = timestamps.length; i < ilen; ++i) {
- curr = timestamps[i];
- if (curr >= min && curr <= max) {
- items.push(curr);
- }
- }
- if (items.length < 2) {
- return [
- {
- time: min,
- pos: 0
- },
- {
- time: max,
- pos: 1
- }
- ];
- }
- for (i = 0, ilen = items.length; i < ilen; ++i) {
- next = items[i + 1];
- prev = items[i - 1];
- curr = items[i];
- if (Math.round((next + prev) / 2) !== curr) {
- table.push({
- time: curr,
- pos: i / (ilen - 1)
- });
- }
- }
- return table;
- }
- _getTimestampsForTable() {
- let timestamps = this._cache.all || [];
- if (timestamps.length) {
- return timestamps;
- }
- const data = this.getDataTimestamps();
- const label = this.getLabelTimestamps();
- if (data.length && label.length) {
- timestamps = this.normalize(data.concat(label));
- } else {
- timestamps = data.length ? data : label;
- }
- timestamps = this._cache.all = timestamps;
- return timestamps;
- }
- getDecimalForValue(value) {
- return (interpolate3(this._table, value) - this._minPos) / this._tableRange;
- }
- getValueForPixel(pixel) {
- const offsets = this._offsets;
- const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;
- return interpolate3(this._table, decimal * this._tableRange + this._minPos, true);
- }
-};
-__publicField(TimeSeriesScale, "id", "timeseries");
-__publicField(TimeSeriesScale, "defaults", TimeScale.defaults);
-
-// src/stats-modal.tsx
-Chart.register(
- BarElement,
- BarController,
- plugin_legend,
- plugin_title,
- plugin_tooltip,
- plugin_subtitle,
- CategoryScale,
- LinearScale,
- PieController,
- ArcElement
-);
-var StatsModal = class extends import_obsidian4.Modal {
- constructor(app2, plugin) {
- super(app2);
- this.plugin = plugin;
- this.titleEl.setText(`${t("STATS_TITLE")} `);
- this.titleEl.addClass("sr-centered");
- this.titleEl.innerHTML += /* @__PURE__ */ (0, import_vhtml2.default)("select", { id: "sr-chart-period" }, /* @__PURE__ */ (0, import_vhtml2.default)("option", { value: "month", selected: true }, t("MONTH")), /* @__PURE__ */ (0, import_vhtml2.default)("option", { value: "quarter" }, t("QUARTER")), /* @__PURE__ */ (0, import_vhtml2.default)("option", { value: "year" }, t("YEAR")), /* @__PURE__ */ (0, import_vhtml2.default)("option", { value: "lifetime" }, t("LIFETIME")));
- this.modalEl.style.height = "100%";
- this.modalEl.style.width = "100%";
- if (import_obsidian4.Platform.isMobile) {
- this.contentEl.style.display = "block";
- }
- }
- onOpen() {
- const { contentEl } = this;
- contentEl.style.textAlign = "center";
- let maxN = Math.max(...getKeysPreserveType(this.plugin.dueDatesFlashcards));
- for (let dueOffset = 0; dueOffset <= maxN; dueOffset++) {
- if (!Object.prototype.hasOwnProperty.call(this.plugin.dueDatesFlashcards, dueOffset)) {
- this.plugin.dueDatesFlashcards[dueOffset] = 0;
- }
- }
- const dueDatesFlashcardsCopy = { 0: 0 };
- for (const [dueOffset, dueCount] of getTypedObjectEntries(this.plugin.dueDatesFlashcards)) {
- if (dueOffset <= 0) {
- dueDatesFlashcardsCopy[0] += dueCount;
- } else {
- dueDatesFlashcardsCopy[dueOffset] = dueCount;
- }
- }
- const cardStats = this.plugin.cardStats;
- const scheduledCount = cardStats.youngCount + cardStats.matureCount;
- maxN = Math.max(maxN, 1);
- contentEl.innerHTML += /* @__PURE__ */ (0, import_vhtml2.default)("div", null, /* @__PURE__ */ (0, import_vhtml2.default)("canvas", { id: "forecastChart" }), /* @__PURE__ */ (0, import_vhtml2.default)("span", { id: "forecastChartSummary" }), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("canvas", { id: "intervalsChart" }), /* @__PURE__ */ (0, import_vhtml2.default)("span", { id: "intervalsChartSummary" }), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("canvas", { id: "easesChart" }), /* @__PURE__ */ (0, import_vhtml2.default)("span", { id: "easesChartSummary" }), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("canvas", { id: "cardTypesChart" }), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("span", { id: "cardTypesChartSummary" }));
- createStatsChart(
- "bar",
- "forecastChart",
- t("FORECAST"),
- t("FORECAST_DESC"),
- Object.keys(dueDatesFlashcardsCopy),
- Object.values(dueDatesFlashcardsCopy),
- t("REVIEWS_PER_DAY", { avg: (scheduledCount / maxN).toFixed(1) }),
- t("SCHEDULED"),
- t("DAYS"),
- t("NUMBER_OF_CARDS")
- );
- maxN = Math.max(...getKeysPreserveType(cardStats.intervals));
- for (let interval = 0; interval <= maxN; interval++) {
- if (!Object.prototype.hasOwnProperty.call(cardStats.intervals, interval)) {
- cardStats.intervals[interval] = 0;
- }
- }
- const average_interval = textInterval(
- Math.round(
- getTypedObjectEntries(cardStats.intervals).map(([interval, count]) => interval * count).reduce((a, b) => a + b, 0) / scheduledCount * 10
- ) / 10 || 0,
- false
- ), longest_interval = textInterval(
- Math.max(...getKeysPreserveType(cardStats.intervals)) || 0,
- false
- );
- createStatsChart(
- "bar",
- "intervalsChart",
- t("INTERVALS"),
- t("INTERVALS_DESC"),
- Object.keys(cardStats.intervals),
- Object.values(cardStats.intervals),
- t("INTERVALS_SUMMARY", { avg: average_interval, longest: longest_interval }),
- t("COUNT"),
- t("DAYS"),
- t("NUMBER_OF_CARDS")
- );
- const eases = getKeysPreserveType(cardStats.eases);
- for (let ease = Math.min(...eases); ease <= Math.max(...eases); ease++) {
- if (!Object.prototype.hasOwnProperty.call(cardStats.eases, ease)) {
- cardStats.eases[ease] = 0;
- }
- }
- const average_ease = Math.round(
- getTypedObjectEntries(cardStats.eases).map(([ease, count]) => ease * count).reduce((a, b) => a + b, 0) / scheduledCount
- ) || 0;
- createStatsChart(
- "bar",
- "easesChart",
- t("EASES"),
- "",
- Object.keys(cardStats.eases),
- Object.values(cardStats.eases),
- t("EASES_SUMMARY", { avgEase: average_ease }),
- t("COUNT"),
- t("EASES"),
- t("NUMBER_OF_CARDS")
- );
- const totalCardsCount = this.plugin.deckTree.totalFlashcards;
- createStatsChart(
- "pie",
- "cardTypesChart",
- t("CARD_TYPES"),
- t("CARD_TYPES_DESC"),
- [
- `${t("CARD_TYPE_NEW")} - ${Math.round(
- cardStats.newCount / totalCardsCount * 100
- )}%`,
- `${t("CARD_TYPE_YOUNG")} - ${Math.round(
- cardStats.youngCount / totalCardsCount * 100
- )}%`,
- `${t("CARD_TYPE_MATURE")} - ${Math.round(
- cardStats.matureCount / totalCardsCount * 100
- )}%`
- ],
- [cardStats.newCount, cardStats.youngCount, cardStats.matureCount],
- t("CARD_TYPES_SUMMARY", { totalCardsCount })
- );
- }
- onClose() {
- const { contentEl } = this;
- contentEl.empty();
- }
-};
-function createStatsChart(type, canvasId, title, subtitle, labels, data, summary, seriesTitle = "", xAxisTitle = "", yAxisTitle = "") {
- const style = getComputedStyle(document.body);
- const textColor = style.getPropertyValue("--text-normal");
- let scales = {}, backgroundColor = ["#2196f3"];
- if (type !== "pie") {
- scales = {
- x: {
- title: {
- display: true,
- text: xAxisTitle,
- color: textColor
- }
- },
- y: {
- title: {
- display: true,
- text: yAxisTitle,
- color: textColor
- }
- }
- };
- } else {
- backgroundColor = ["#2196f3", "#4caf50", "green"];
- }
- const shouldFilter = canvasId === "forecastChart" || canvasId === "intervalsChart";
- const statsChart = new Chart(document.getElementById(canvasId), {
- type,
- data: {
- labels: shouldFilter ? labels.slice(0, 31) : labels,
- datasets: [
- {
- label: seriesTitle,
- backgroundColor,
- data: shouldFilter ? data.slice(0, 31) : data
- }
- ]
- },
- options: {
- scales,
- plugins: {
- title: {
- display: true,
- text: title,
- font: {
- size: 22
- },
- color: textColor
- },
- subtitle: {
- display: true,
- text: subtitle,
- font: {
- size: 16,
- style: "italic"
- },
- color: textColor
- },
- legend: {
- display: false
- }
- },
- aspectRatio: 2
- }
- });
- if (shouldFilter) {
- const chartPeriodEl = document.getElementById("sr-chart-period");
- chartPeriodEl.addEventListener("click", () => {
- let filteredLabels, filteredData;
- const chartPeriod = chartPeriodEl.value;
- if (chartPeriod === "month") {
- filteredLabels = labels.slice(0, 31);
- filteredData = data.slice(0, 31);
- } else if (chartPeriod === "quarter") {
- filteredLabels = labels.slice(0, 91);
- filteredData = data.slice(0, 91);
- } else if (chartPeriod === "year") {
- filteredLabels = labels.slice(0, 366);
- filteredData = data.slice(0, 366);
- } else {
- filteredLabels = labels;
- filteredData = data;
- }
- statsChart.data.labels = filteredLabels;
- statsChart.data.datasets[0] = {
- label: seriesTitle,
- backgroundColor,
- data: filteredData
- };
- statsChart.update();
- });
- }
- document.getElementById(`${canvasId}Summary`).innerText = summary;
-}
-
-// src/sidebar.ts
-var import_obsidian5 = require("obsidian");
-var REVIEW_QUEUE_VIEW_TYPE = "review-queue-list-view";
-var ReviewQueueListView = class extends import_obsidian5.ItemView {
- constructor(leaf, plugin) {
- super(leaf);
- this.plugin = plugin;
- this.registerEvent(this.app.workspace.on("file-open", () => this.redraw()));
- this.registerEvent(this.app.vault.on("rename", () => this.redraw()));
- }
- getViewType() {
- return REVIEW_QUEUE_VIEW_TYPE;
- }
- getDisplayText() {
- return t("NOTES_REVIEW_QUEUE");
- }
- getIcon() {
- return "SpacedRepIcon";
- }
- onHeaderMenu(menu) {
- menu.addItem((item) => {
- item.setTitle(t("CLOSE")).setIcon("cross").onClick(() => {
- this.app.workspace.detachLeavesOfType(REVIEW_QUEUE_VIEW_TYPE);
- });
- });
- }
- redraw() {
- const activeFile = this.app.workspace.getActiveFile();
- const rootEl = createDiv("nav-folder mod-root");
- const childrenEl = rootEl.createDiv("nav-folder-children");
- for (const deckKey in this.plugin.reviewDecks) {
- const deck = this.plugin.reviewDecks[deckKey];
- const deckCollapsed = !deck.activeFolders.has(deck.deckName);
- const deckFolderEl = this.createRightPaneFolder(
- childrenEl,
- deckKey,
- deckCollapsed,
- false,
- deck
- ).getElementsByClassName("nav-folder-children")[0];
- if (deck.newNotes.length > 0) {
- const newNotesFolderEl = this.createRightPaneFolder(
- deckFolderEl,
- t("NEW"),
- !deck.activeFolders.has(t("NEW")),
- deckCollapsed,
- deck
- );
- for (const newFile of deck.newNotes) {
- const fileIsOpen = activeFile && newFile.path === activeFile.path;
- if (fileIsOpen) {
- deck.activeFolders.add(deck.deckName);
- deck.activeFolders.add(t("NEW"));
- this.changeFolderIconToExpanded(newNotesFolderEl);
- this.changeFolderIconToExpanded(deckFolderEl);
- }
- this.createRightPaneFile(
- newNotesFolderEl,
- newFile,
- fileIsOpen,
- !deck.activeFolders.has(t("NEW")),
- deck,
- this.plugin
- );
- }
- }
- if (deck.scheduledNotes.length > 0) {
- const now = Date.now();
- let currUnix = -1;
- let schedFolderEl = null, folderTitle = "";
- const maxDaysToRender = this.plugin.data.settings.maxNDaysNotesReviewQueue;
- for (const sNote of deck.scheduledNotes) {
- if (sNote.dueUnix != currUnix) {
- const nDays = Math.ceil((sNote.dueUnix - now) / (24 * 3600 * 1e3));
- if (nDays > maxDaysToRender) {
- break;
- }
- if (nDays === -1) {
- folderTitle = t("YESTERDAY");
- } else if (nDays === 0) {
- folderTitle = t("TODAY");
- } else if (nDays === 1) {
- folderTitle = t("TOMORROW");
- } else {
- folderTitle = new Date(sNote.dueUnix).toDateString();
- }
- schedFolderEl = this.createRightPaneFolder(
- deckFolderEl,
- folderTitle,
- !deck.activeFolders.has(folderTitle),
- deckCollapsed,
- deck
- );
- currUnix = sNote.dueUnix;
- }
- const fileIsOpen = activeFile && sNote.note.path === activeFile.path;
- if (fileIsOpen) {
- deck.activeFolders.add(deck.deckName);
- deck.activeFolders.add(folderTitle);
- this.changeFolderIconToExpanded(schedFolderEl);
- this.changeFolderIconToExpanded(deckFolderEl);
- }
- this.createRightPaneFile(
- schedFolderEl,
- sNote.note,
- fileIsOpen,
- !deck.activeFolders.has(folderTitle),
- deck,
- this.plugin
- );
- }
- }
- }
- const contentEl = this.containerEl.children[1];
- contentEl.empty();
- contentEl.appendChild(rootEl);
- }
- createRightPaneFolder(parentEl, folderTitle, collapsed, hidden, deck) {
- const folderEl = parentEl.createDiv("nav-folder");
- const folderTitleEl = folderEl.createDiv("nav-folder-title");
- const childrenEl = folderEl.createDiv("nav-folder-children");
- const collapseIconEl = folderTitleEl.createDiv(
- "nav-folder-collapse-indicator collapse-icon"
- );
- collapseIconEl.innerHTML = COLLAPSE_ICON;
- if (collapsed) {
- collapseIconEl.childNodes[0].style.transform = "rotate(-90deg)";
- }
- folderTitleEl.createDiv("nav-folder-title-content").setText(folderTitle);
- if (hidden) {
- folderEl.style.display = "none";
- }
- folderTitleEl.onClickEvent(() => {
- for (const child of childrenEl.childNodes) {
- if (child.style.display === "block" || child.style.display === "") {
- child.style.display = "none";
- collapseIconEl.childNodes[0].style.transform = "rotate(-90deg)";
- deck.activeFolders.delete(folderTitle);
- } else {
- child.style.display = "block";
- collapseIconEl.childNodes[0].style.transform = "";
- deck.activeFolders.add(folderTitle);
- }
- }
- });
- return folderEl;
- }
- createRightPaneFile(folderEl, file, fileElActive, hidden, deck, plugin) {
- const navFileEl = folderEl.getElementsByClassName("nav-folder-children")[0].createDiv("nav-file");
- if (hidden) {
- navFileEl.style.display = "none";
- }
- const navFileTitle = navFileEl.createDiv("nav-file-title");
- if (fileElActive) {
- navFileTitle.addClass("is-active");
- }
- navFileTitle.createDiv("nav-file-title-content").setText(file.basename);
- navFileTitle.addEventListener(
- "click",
- async (event) => {
- event.preventDefault();
- plugin.lastSelectedReviewDeck = deck.deckName;
- await this.app.workspace.getLeaf().openFile(file);
- return false;
- },
- false
- );
- navFileTitle.addEventListener(
- "contextmenu",
- (event) => {
- event.preventDefault();
- const fileMenu = new import_obsidian5.Menu();
- this.app.workspace.trigger("file-menu", fileMenu, file, "my-context-menu", null);
- fileMenu.showAtPosition({
- x: event.pageX,
- y: event.pageY
- });
- return false;
- },
- false
- );
- }
- changeFolderIconToExpanded(folderEl) {
- const collapseIconEl = folderEl.find("div.nav-folder-collapse-indicator");
- collapseIconEl.childNodes[0].style.transform = "";
- }
-};
-
-// src/review-deck.ts
-var import_obsidian6 = require("obsidian");
-var ReviewDeck = class {
- constructor(name) {
- this.newNotes = [];
- this.scheduledNotes = [];
- this.dueNotesCount = 0;
- this.deckName = name;
- this.activeFolders = /* @__PURE__ */ new Set([this.deckName, t("TODAY")]);
- }
- sortNotes(pageranks) {
- this.newNotes = this.newNotes.sort(
- (a, b) => (pageranks[b.path] || 0) - (pageranks[a.path] || 0)
- );
- this.scheduledNotes = this.scheduledNotes.sort((a, b) => {
- const result = a.dueUnix - b.dueUnix;
- if (result != 0) {
- return result;
- }
- return (pageranks[b.note.path] || 0) - (pageranks[a.note.path] || 0);
- });
- }
-};
-var ReviewDeckSelectionModal = class extends import_obsidian6.FuzzySuggestModal {
- constructor(app2, deckKeys) {
- super(app2);
- this.deckKeys = [];
- this.deckKeys = deckKeys;
- }
- getItems() {
- return this.deckKeys;
- }
- getItemText(item) {
- return item;
- }
- onChooseItem(deckKey, _) {
- this.close();
- this.submitCallback(deckKey);
- }
-};
-
-// src/parser.ts
-function parse2(text, singlelineCardSeparator, singlelineReversedCardSeparator, multilineCardSeparator, multilineReversedCardSeparator, convertHighlightsToClozes, convertBoldTextToClozes, convertCurlyBracketsToClozes) {
- let cardText = "";
- const cards = [];
- let cardType = null;
- let lineNo = 0;
- const lines = text.replaceAll("\r\n", "\n").split("\n");
- for (let i = 0; i < lines.length; i++) {
- if (lines[i].length === 0) {
- if (cardType) {
- cards.push([cardType, cardText, lineNo]);
- cardType = null;
- }
- cardText = "";
- continue;
- } else if (lines[i].startsWith(""))
- i++;
- i++;
- continue;
- }
- if (cardText.length > 0) {
- cardText += "\n";
- }
- cardText += lines[i];
- if (lines[i].includes(singlelineReversedCardSeparator) || lines[i].includes(singlelineCardSeparator)) {
- cardType = lines[i].includes(singlelineReversedCardSeparator) ? 1 /* SingleLineReversed */ : 0 /* SingleLineBasic */;
- cardText = lines[i];
- lineNo = i;
- if (i + 1 < lines.length && lines[i + 1].startsWith("";
- const replacementRegex = new RegExp(escapeRegexString(cardText), "gm");
- fileText = fileText.replace(replacementRegex, () => newCardText);
- fileChanged = true;
- }
- const context = settings.showContextInCards ? getCardContext(lineNo, headings, note.basename) : "";
- const siblings = [];
- for (let i = 0; i < siblingMatches.length; i++) {
- const front = siblingMatches[i][0].trim(), back = siblingMatches[i][1].trim();
- const cardObj = {
- isDue: i < scheduling.length,
- isReDue: false,
- note,
- lineNo,
- front,
- back,
- cardText,
- context,
- cardType,
- siblingIdx: i,
- siblings,
- editLater: false
- };
- if (ignoreStats) {
- this.cardStats.newCount++;
- cardObj.isDue = true;
- this.deckTree.insertFlashcard([...deckPath], cardObj);
- } else if (i < scheduling.length) {
- const dueUnix = window.moment(scheduling[i][1], ["YYYY-MM-DD", "DD-MM-YYYY", t("DATE_SCHED_FMT")]).valueOf();
- const nDays = Math.ceil((dueUnix - now) / (24 * 3600 * 1e3));
- if (!Object.prototype.hasOwnProperty.call(this.dueDatesFlashcards, nDays)) {
- this.dueDatesFlashcards[nDays] = 0;
- }
- this.dueDatesFlashcards[nDays]++;
- const interval = parseInt(scheduling[i][2]), ease = parseInt(scheduling[i][3]);
- if (!Object.prototype.hasOwnProperty.call(this.cardStats.intervals, interval)) {
- this.cardStats.intervals[interval] = 0;
- }
- this.cardStats.intervals[interval]++;
- if (!Object.prototype.hasOwnProperty.call(this.cardStats.eases, ease)) {
- this.cardStats.eases[ease] = 0;
- }
- this.cardStats.eases[ease]++;
- totalNoteEase += ease;
- scheduledCount++;
- if (interval >= 32) {
- this.cardStats.matureCount++;
- } else {
- this.cardStats.youngCount++;
- }
- if (this.data.buryList.includes(cardTextHash)) {
- this.deckTree.countFlashcard([...deckPath]);
- continue;
- }
- if (dueUnix <= now) {
- cardObj.interval = interval;
- cardObj.ease = ease;
- cardObj.delayBeforeReview = now - dueUnix;
- this.deckTree.insertFlashcard([...deckPath], cardObj);
- } else {
- this.deckTree.countFlashcard([...deckPath]);
- continue;
- }
- } else {
- this.cardStats.newCount++;
- if (this.data.buryList.includes(cyrb53(cardText))) {
- this.deckTree.countFlashcard([...deckPath]);
- continue;
- }
- this.deckTree.insertFlashcard([...deckPath], cardObj);
- }
- siblings.push(cardObj);
- }
- }
- if (fileChanged) {
- await this.app.vault.modify(note, fileText);
- }
- if (scheduledCount > 0) {
- const flashcardsInNoteAvgEase = totalNoteEase / scheduledCount;
- const flashcardContribution = Math.min(
- 1,
- Math.log(scheduledCount + 0.5) / Math.log(64)
- );
- return flashcardsInNoteAvgEase * flashcardContribution + settings.baseEase * (1 - flashcardContribution);
- }
- return 0;
- }
- async loadPluginData() {
- this.data = Object.assign({}, DEFAULT_DATA, await this.loadData());
- this.data.settings = Object.assign({}, DEFAULT_SETTINGS, this.data.settings);
- }
- async savePluginData() {
- await this.saveData(this.data);
- }
- initView() {
- this.registerView(
- REVIEW_QUEUE_VIEW_TYPE,
- (leaf) => this.reviewQueueView = new ReviewQueueListView(leaf, this)
- );
- if (this.data.settings.enableNoteReviewPaneOnStartup && app.workspace.getLeavesOfType(REVIEW_QUEUE_VIEW_TYPE).length == 0) {
- this.app.workspace.getRightLeaf(false).setViewState({
- type: REVIEW_QUEUE_VIEW_TYPE,
- active: true
- });
- }
- }
-};
-function getCardContext(cardLine, headings, note_title) {
- const stack = [];
- for (const heading of headings) {
- if (heading.position.start.line > cardLine) {
- break;
- }
- while (stack.length > 0 && stack[stack.length - 1].level >= heading.level) {
- stack.pop();
- }
- stack.push(heading);
- }
- let context = `${note_title} > `;
- for (const headingObj of stack) {
- headingObj.heading = headingObj.heading.replace(/\[\^\d+\]/gm, "").trim();
- context += `${headingObj.heading} > `;
- }
- return context.slice(0, -3);
-}
-/*! Bundled license information:
-
-@kurkle/color/dist/color.esm.js:
- (*!
- * @kurkle/color v0.3.1
- * https://github.com/kurkle/color#readme
- * (c) 2022 Jukka Kurkela
- * Released under the MIT License
- *)
-
-chart.js/dist/chunks/helpers.segment.js:
- (*!
- * Chart.js v4.3.0
- * https://www.chartjs.org
- * (c) 2023 Chart.js Contributors
- * Released under the MIT License
- *)
-
-chart.js/dist/chart.js:
- (*!
- * Chart.js v4.3.0
- * https://www.chartjs.org
- * (c) 2023 Chart.js Contributors
- * Released under the MIT License
- *)
-*/
-//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzL3BhZ2VyYW5rLmpzL2xpYi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvdmh0bWwvc3JjL2VtcHR5LXRhZ3MuanMiLCAibm9kZV9tb2R1bGVzL3ZodG1sL3NyYy92aHRtbC5qcyIsICJub2RlX21vZHVsZXMvaGVhcC9saWIvaGVhcC5qcyIsICJub2RlX21vZHVsZXMvaGVhcC9pbmRleC5qcyIsICJzcmMvbWFpbi50cyIsICJzcmMvc2V0dGluZ3MudHMiLCAic3JjL2xhbmcvaGVscGVycy50cyIsICJzcmMvbGFuZy9sb2NhbGUvYWYudHMiLCAic3JjL2xhbmcvbG9jYWxlL2FyLnRzIiwgInNyYy9sYW5nL2xvY2FsZS9jei50cyIsICJzcmMvbGFuZy9sb2NhbGUvYm4udHMiLCAic3JjL2xhbmcvbG9jYWxlL2RhLnRzIiwgInNyYy9sYW5nL2xvY2FsZS9kZS50cyIsICJzcmMvbGFuZy9sb2NhbGUvZW4udHMiLCAic3JjL2xhbmcvbG9jYWxlL2VuLWdiLnRzIiwgInNyYy9sYW5nL2xvY2FsZS9lcy50cyIsICJzcmMvbGFuZy9sb2NhbGUvZnIudHMiLCAic3JjL2xhbmcvbG9jYWxlL2hpLnRzIiwgInNyYy9sYW5nL2xvY2FsZS9pZC50cyIsICJzcmMvbGFuZy9sb2NhbGUvaXQudHMiLCAic3JjL2xhbmcvbG9jYWxlL2phLnRzIiwgInNyYy9sYW5nL2xvY2FsZS9rby50cyIsICJzcmMvbGFuZy9sb2NhbGUvbXIudHMiLCAic3JjL2xhbmcvbG9jYWxlL25sLnRzIiwgInNyYy9sYW5nL2xvY2FsZS9uby50cyIsICJzcmMvbGFuZy9sb2NhbGUvcGwudHMiLCAic3JjL2xhbmcvbG9jYWxlL3B0LnRzIiwgInNyYy9sYW5nL2xvY2FsZS9wdC1ici50cyIsICJzcmMvbGFuZy9sb2NhbGUvcm8udHMiLCAic3JjL2xhbmcvbG9jYWxlL3J1LnRzIiwgInNyYy9sYW5nL2xvY2FsZS90YS50cyIsICJzcmMvbGFuZy9sb2NhbGUvdGUudHMiLCAic3JjL2xhbmcvbG9jYWxlL3RoLnRzIiwgInNyYy9sYW5nL2xvY2FsZS90ci50cyIsICJzcmMvbGFuZy9sb2NhbGUvdWsudHMiLCAic3JjL2xhbmcvbG9jYWxlL3VyLnRzIiwgInNyYy9sYW5nL2xvY2FsZS92aS50cyIsICJzcmMvbGFuZy9sb2NhbGUvemgtY24udHMiLCAic3JjL2xhbmcvbG9jYWxlL3poLXR3LnRzIiwgInNyYy9mbGFzaGNhcmQtbW9kYWwudHN4IiwgInNyYy9jb25zdGFudHMudHMiLCAic3JjL3NjaGVkdWxpbmcudHMiLCAic3JjL3V0aWxzLnRzIiwgInNyYy9zdGF0cy1tb2RhbC50c3giLCAibm9kZV9tb2R1bGVzL0BrdXJrbGUvY29sb3IvZGlzdC9jb2xvci5lc20uanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMuY29yZS50cyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2hlbHBlcnMvaGVscGVycy5tYXRoLnRzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLmNvbGxlY3Rpb24udHMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMuZXh0cmFzLnRzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLmVhc2luZy50cyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2hlbHBlcnMvaGVscGVycy5jb2xvci50cyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5hbmltYXRpb25zLmRlZmF1bHRzLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLmxheW91dHMuZGVmYXVsdHMuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMuaW50bC50cyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS50aWNrcy5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5zY2FsZS5kZWZhdWx0cy5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5kZWZhdWx0cy5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2hlbHBlcnMvaGVscGVycy5jYW52YXMudHMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMub3B0aW9ucy50cyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2hlbHBlcnMvaGVscGVycy5jb25maWcudHMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMuY3VydmUudHMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMuZG9tLnRzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLmludGVycG9sYXRpb24udHMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMucnRsLnRzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLnNlZ21lbnQuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuYW5pbWF0b3IuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuYW5pbWF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLmFuaW1hdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuZGF0YXNldENvbnRyb2xsZXIuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb250cm9sbGVycy9jb250cm9sbGVyLmJhci5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvbnRyb2xsZXJzL2NvbnRyb2xsZXIuYnViYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29udHJvbGxlcnMvY29udHJvbGxlci5kb3VnaG51dC5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvbnRyb2xsZXJzL2NvbnRyb2xsZXIubGluZS5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvbnRyb2xsZXJzL2NvbnRyb2xsZXIucG9sYXJBcmVhLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29udHJvbGxlcnMvY29udHJvbGxlci5waWUuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb250cm9sbGVycy9jb250cm9sbGVyLnJhZGFyLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29udHJvbGxlcnMvY29udHJvbGxlci5zY2F0dGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLmFkYXB0ZXJzLnRzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLmludGVyYWN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLmxheW91dHMuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbGF0Zm9ybS9wbGF0Zm9ybS5iYXNlLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGxhdGZvcm0vcGxhdGZvcm0uYmFzaWMuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbGF0Zm9ybS9wbGF0Zm9ybS5kb20uanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbGF0Zm9ybS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5lbGVtZW50LnRzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLnNjYWxlLmF1dG9za2lwLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLnNjYWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLnR5cGVkUmVnaXN0cnkuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUucmVnaXN0cnkuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUucGx1Z2lucy5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5jb25maWcuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuY29udHJvbGxlci5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2VsZW1lbnRzL2VsZW1lbnQuYXJjLnRzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvZWxlbWVudHMvZWxlbWVudC5saW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvZWxlbWVudHMvZWxlbWVudC5wb2ludC50cyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2VsZW1lbnRzL2VsZW1lbnQuYmFyLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGx1Z2lucy9wbHVnaW4uY29sb3JzLnRzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGx1Z2lucy9wbHVnaW4uZGVjaW1hdGlvbi5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3BsdWdpbnMvcGx1Z2luLmZpbGxlci9maWxsZXIuc2VnbWVudC5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3BsdWdpbnMvcGx1Z2luLmZpbGxlci9maWxsZXIuaGVscGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGx1Z2lucy9wbHVnaW4uZmlsbGVyL2ZpbGxlci5vcHRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGx1Z2lucy9wbHVnaW4uZmlsbGVyL2ZpbGxlci50YXJnZXQuc3RhY2suanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi5maWxsZXIvc2ltcGxlQXJjLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGx1Z2lucy9wbHVnaW4uZmlsbGVyL2ZpbGxlci50YXJnZXQuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi5maWxsZXIvZmlsbGVyLmRyYXdpbmcuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi5maWxsZXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi5sZWdlbmQuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi50aXRsZS5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3BsdWdpbnMvcGx1Z2luLnN1YnRpdGxlLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGx1Z2lucy9wbHVnaW4udG9vbHRpcC5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3NjYWxlcy9zY2FsZS5jYXRlZ29yeS5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3NjYWxlcy9zY2FsZS5saW5lYXJiYXNlLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvc2NhbGVzL3NjYWxlLmxpbmVhci5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3NjYWxlcy9zY2FsZS5sb2dhcml0aG1pYy5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3NjYWxlcy9zY2FsZS5yYWRpYWxMaW5lYXIuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9zY2FsZXMvc2NhbGUudGltZS5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3NjYWxlcy9zY2FsZS50aW1lc2VyaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaW5kZXgudHMiLCAic3JjL3NpZGViYXIudHMiLCAic3JjL3Jldmlldy1kZWNrLnRzIiwgInNyYy9wYXJzZXIudHMiLCAic3JjL2ljb25z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QUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxjQUFjO0FBQUEsRUFDZCxJQUFJO0FBQUEsRUFDSixTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixXQUFXO0FBQUEsRUFDWCxRQUFRO0FBQUEsRUFDUixVQUFVO0FBQUEsRUFDVixTQUFTO0FBQUEsRUFDVCxLQUFLO0FBQUEsRUFDTCxhQUFhO0FBQUEsRUFDYixTQUFTO0FBQUEsRUFDVCxTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixLQUFLO0FBQUEsRUFDTCxPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixTQUFTO0FBQUEsRUFDVCxVQUFVO0FBQUEsRUFDVixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxLQUFLO0FBQUEsRUFDTCxRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxLQUFLO0FBQUEsRUFDTCxRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixVQUFVO0FBQUEsRUFDVixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixVQUFVO0FBQUEsRUFDVixVQUFVO0FBQUEsRUFDVixVQUFVO0FBQUEsRUFDVixVQUFVO0FBQUEsRUFDVixRQUFRO0FBQUEsRUFDUixTQUFTO0FBQUEsRUFDVCxXQUFXO0FBQUEsRUFDWCxLQUFLO0FBQUEsRUFDTCxRQUFRO0FBQUEsRUFDUixLQUFLO0FBQUEsRUFDTCxLQUFLO0FBQUEsRUFDTCxPQUFPO0FBQUEsRUFDUCxLQUFLO0FBQUEsRUFDTCxTQUFTO0FBQUEsRUFDVCxRQUFRO0FBQUEsRUFDUixTQUFTO0FBQUEsRUFDVCxPQUFPO0FBQUEsRUFDUCxNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixXQUFXO0FBQUEsRUFDWCxTQUFTO0FBQUEsRUFDVCxZQUFZO0FBQUEsRUFDWixLQUFLO0FBQUEsRUFDTCxNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxXQUFXO0FBQUEsRUFDWCxNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxLQUFLO0FBQUEsRUFDTCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQUEsRUFDVCxLQUFLO0FBQUEsRUFDTCxRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxZQUFZO0FBQUEsRUFDWixLQUFLO0FBQUEsRUFDTCxPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixNQUFNO0FBQUEsRUFDTixXQUFXO0FBQUEsRUFDWCxLQUFLO0FBQUEsRUFDTCxVQUFVO0FBQUEsRUFDVixZQUFZO0FBQUEsRUFDWixTQUFTO0FBQUEsRUFDVCxVQUFVO0FBQUEsRUFDVixTQUFTO0FBQUEsRUFDVCxZQUFZO0FBQUEsRUFDWixNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixNQUFNO0FBQUEsRUFDTixTQUFTO0FBQUEsRUFDVCxPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixXQUFXO0FBQUEsRUFDWCxRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxZQUFZO0FBQUEsRUFDWixXQUFXO0FBQUEsRUFDWCxTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixLQUFLO0FBQUEsRUFDTCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQUEsRUFDVCxPQUFPO0FBQUEsRUFDUCxhQUFhO0FBQUEsRUFDYixJQUFJO0FBQUEsRUFDSixVQUFVO0FBQUEsRUFDVixPQUFPO0FBQUEsRUFDUCxXQUFXO0FBQUEsRUFDWCxPQUFPO0FBQUEsRUFDUCxXQUFXO0FBQUEsRUFDWCxP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QU0sT0FBTyxVQUFVO0FBQ3hDO0FBQUEsSUFDSjtBQUVBLFdBQU8sTUFBTSxTQUFTLEtBQUssTUFBTSxNQUFNLFNBQVMsQ0FBQyxFQUFFLFNBQVMsUUFBUSxPQUFPO0FBQ3ZFLFlBQU0sSUFBSTtBQUFBLElBQ2Q7QUFFQSxVQUFNLEtBQUssT0FBTztBQUFBLEVBQ3RCO0FBRUEsTUFBSSxVQUFVLEdBQUc7QUFDakIsYUFBVyxjQUFjLE9BQU87QUFDNUIsZUFBVyxVQUFVLFdBQVcsUUFBUSxRQUFRLGVBQWUsRUFBRSxFQUFFLEtBQUs7QUFDeEUsZUFBVyxHQUFHLFdBQVc7QUFBQSxFQUM3QjtBQUNBLFNBQU8sUUFBUSxNQUFNLEdBQUcsRUFBRTtBQUM5QjsiLAogICJuYW1lcyI6IFsibW9kdWxlIiwgImNhbGxiYWNrIiwgImFscGhhIiwgImVzYyIsICJTdHJpbmciLCAic3RyIiwgInJlcGxhY2UiLCAibWFwIiwgInMiLCAic2V0SW5uZXJIVE1MQXR0ciIsICJET01BdHRyaWJ1dGVOYW1lcyIsICJzYW5pdGl6ZWQiLCAiaCIsICJuYW1lIiwgImF0dHJzIiwgInN0YWNrIiwgImkiLCAiYXJndW1lbnRzIiwgImxlbmd0aCIsICJwdXNoIiwgImNoaWxkcmVuIiwgInJldmVyc2UiLCAiZW1wdHlUYWdzIiwgImluZGV4T2YiLCAiX19odG1sIiwgImNoaWxkIiwgInBvcCIsICJtb2R1bGUiLCAiSGVhcCIsICJfaiIsICJfcmVmIiwgInJlcXVpcmVfaGVhcCIsICJtb2R1bGUiLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJuYW1lcyIsICJjYWxsYmFjayIsICJhcHAiLCAiaW1wb3J0X29ic2lkaWFuIiwgImgxIiwgImgyIiwgImFwcCIsICJyZXNvbHZlIiwgImNhbGxiYWNrIiwgInZhbHVlIiwgImgiLCAibGluayIsICJkZWNrIiwgIkhlYXAiLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF92aHRtbCIsICJoIiwgImgiLCAiaW50ZXJwb2xhdGUiLCAidCIsICJjb2xvciIsICJub29wIiwgInVpZCIsICJpZCIsICJpc051bGxPclVuZGVmIiwgInZhbHVlIiwgImlzQXJyYXkiLCAiQXJyYXkiLCAidHlwZSIsICJPYmplY3QiLCAicHJvdG90eXBlIiwgInRvU3RyaW5nIiwgImNhbGwiLCAic2xpY2UiLCAiaXNPYmplY3QiLCAiaXNOdW1iZXJGaW5pdGUiLCAiTnVtYmVyIiwgImlzRmluaXRlIiwgImZpbml0ZU9yRGVmYXVsdCIsICJkZWZhdWx0VmFsdWUiLCAidmFsdWVPckRlZmF1bHQiLCAidG9QZXJjZW50YWdlIiwgImRpbWVuc2lvbiIsICJlbmRzV2l0aCIsICJwYXJzZUZsb2F0IiwgInRvRGltZW5zaW9uIiwgImNhbGxiYWNrIiwgImZuIiwgImFyZ3MiLCAidGhpc0FyZyIsICJhcHBseSIsICJlYWNoIiwgImxvb3BhYmxlIiwgInJldmVyc2UiLCAiaSIsICJsZW4iLCAia2V5cyIsICJsZW5ndGgiLCAiX2VsZW1lbnRzRXF1YWwiLCAiYTAiLCAiYTEiLCAiaWxlbiIsICJ2MCIsICJ2MSIsICJkYXRhc2V0SW5kZXgiLCAiaW5kZXgiLCAiY2xvbmUiLCAic291cmNlIiwgIm1hcCIsICJ0YXJnZXQiLCAiY3JlYXRlIiwgImtsZW4iLCAiayIsICJpc1ZhbGlkS2V5IiwgImtleSIsICJpbmRleE9mIiwgIl9tZXJnZXIiLCAib3B0aW9ucyIsICJ0dmFsIiwgInN2YWwiLCAibWVyZ2UiLCAic291cmNlcyIsICJtZXJnZXIiLCAiY3VycmVudCIsICJtZXJnZUlmIiwgIl9tZXJnZXJJZiIsICJoYXNPd25Qcm9wZXJ0eSIsICJrZXlSZXNvbHZlcnMiLCAidiIsICJ4IiwgIm8iLCAieSIsICJfc3BsaXRLZXkiLCAia2V5IiwgInBhcnRzIiwgInNwbGl0IiwgImtleXMiLCAidG1wIiwgInBhcnQiLCAiZW5kc1dpdGgiLCAic2xpY2UiLCAicHVzaCIsICJfZ2V0S2V5UmVzb2x2ZXIiLCAib2JqIiwgImsiLCAicmVzb2x2ZU9iamVjdEtleSIsICJyZXNvbHZlciIsICJfY2FwaXRhbGl6ZSIsICJzdHIiLCAiY2hhckF0IiwgInRvVXBwZXJDYXNlIiwgImRlZmluZWQiLCAidmFsdWUiLCAiaXNGdW5jdGlvbiIsICJzZXRzRXF1YWwiLCAiYSIsICJiIiwgInNpemUiLCAiaXRlbSIsICJoYXMiLCAiX2lzQ2xpY2tFdmVudCIsICJlIiwgInR5cGUiLCAiUEkiLCAiTWF0aCIsICJUQVUiLCAiUElUQVUiLCAiSU5GSU5JVFkiLCAiTnVtYmVyIiwgIlBPU0lUSVZFX0lORklOSVRZIiwgIlJBRF9QRVJfREVHIiwgIkhBTEZfUEkiLCAiUVVBUlRFUl9QSSIsICJUV09fVEhJUkRTX1BJIiwgImxvZzEwIiwgInNpZ24iLCAiYWxtb3N0RXF1YWxzIiwgImVwc2lsb24iLCAiYWJzIiwgIm5pY2VOdW0iLCAicmFuZ2UiLCAicm91bmRlZFJhbmdlIiwgInJvdW5kIiwgIm5pY2VSYW5nZSIsICJwb3ciLCAiZmxvb3IiLCAiZnJhY3Rpb24iLCAibmljZUZyYWN0aW9uIiwgIl9mYWN0b3JpemUiLCAicmVzdWx0IiwgInNxcnQiLCAiaSIsICJzb3J0IiwgInBvcCIsICJpc051bWJlciIsICJuIiwgImlzTmFOIiwgInBhcnNlRmxvYXQiLCAiaXNGaW5pdGUiLCAiYWxtb3N0V2hvbGUiLCAicm91bmRlZCIsICJfc2V0TWluQW5kTWF4QnlLZXkiLCAiYXJyYXkiLCAidGFyZ2V0IiwgInByb3BlcnR5IiwgImlsZW4iLCAibGVuZ3RoIiwgIm1pbiIsICJtYXgiLCAidG9SYWRpYW5zIiwgImRlZ3JlZXMiLCAidG9EZWdyZWVzIiwgInJhZGlhbnMiLCAiX2RlY2ltYWxQbGFjZXMiLCAiaXNGaW5pdGVOdW1iZXIiLCAicCIsICJnZXRBbmdsZUZyb21Qb2ludCIsICJjZW50cmVQb2ludCIsICJhbmdsZVBvaW50IiwgImRpc3RhbmNlRnJvbVhDZW50ZXIiLCAiZGlzdGFuY2VGcm9tWUNlbnRlciIsICJyYWRpYWxEaXN0YW5jZUZyb21DZW50ZXIiLCAiYW5nbGUiLCAiYXRhbjIiLCAiZGlzdGFuY2UiLCAiZGlzdGFuY2VCZXR3ZWVuUG9pbnRzIiwgInB0MSIsICJwdDIiLCAiX25vcm1hbGl6ZUFuZ2xlIiwgImEiLCAiVEFVIiwgIl9hbmdsZUJldHdlZW4iLCAiYW5nbGUiLCAic3RhcnQiLCAiZW5kIiwgInNhbWVBbmdsZUlzRnVsbENpcmNsZSIsICJzIiwgImUiLCAiYW5nbGVUb1N0YXJ0IiwgImFuZ2xlVG9FbmQiLCAic3RhcnRUb0FuZ2xlIiwgImVuZFRvQW5nbGUiLCAiX2xpbWl0VmFsdWUiLCAidmFsdWUiLCAibWluIiwgIm1heCIsICJNYXRoIiwgIl9pbnQxNlJhbmdlIiwgIl9pc0JldHdlZW4iLCAiZXBzaWxvbiIsICJfbG9va3VwIiwgInRhYmxlIiwgImNtcCIsICJpbmRleCIsICJoaSIsICJsZW5ndGgiLCAibG8iLCAibWlkIiwgIl9sb29rdXBCeUtleSIsICJrZXkiLCAibGFzdCIsICJ0aSIsICJfcmxvb2t1cEJ5S2V5IiwgIl9maWx0ZXJCZXR3ZWVuIiwgInZhbHVlcyIsICJzbGljZSIsICJhcnJheUV2ZW50cyIsICJsaXN0ZW5BcnJheUV2ZW50cyIsICJhcnJheSIsICJsaXN0ZW5lciIsICJfY2hhcnRqcyIsICJsaXN0ZW5lcnMiLCAicHVzaCIsICJPYmplY3QiLCAiZGVmaW5lUHJvcGVydHkiLCAiY29uZmlndXJhYmxlIiwgImVudW1lcmFibGUiLCAiZm9yRWFjaCIsICJtZXRob2QiLCAiX2NhcGl0YWxpemUiLCAiYmFzZSIsICJhcmdzIiwgInJlcyIsICJhcHBseSIsICJvYmplY3QiLCAidW5saXN0ZW5BcnJheUV2ZW50cyIsICJzdHViIiwgImluZGV4T2YiLCAic3BsaWNlIiwgIl9hcnJheVVuaXF1ZSIsICJpdGVtcyIsICJzZXQiLCAiU2V0IiwgInNpemUiLCAiQXJyYXkiLCAiZnJvbSIsICJyZXF1ZXN0QW5pbUZyYW1lIiwgIndpbmRvdyIsICJjYWxsYmFjayIsICJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCAidGhyb3R0bGVkIiwgImZuIiwgInRoaXNBcmciLCAiYXJnc1RvVXNlIiwgInRpY2tpbmciLCAiYXJncyIsICJjYWxsIiwgImFwcGx5IiwgImRlYm91bmNlIiwgImRlbGF5IiwgInRpbWVvdXQiLCAiY2xlYXJUaW1lb3V0IiwgInNldFRpbWVvdXQiLCAiX3RvTGVmdFJpZ2h0Q2VudGVyIiwgImFsaWduIiwgIl9hbGlnblN0YXJ0RW5kIiwgInN0YXJ0IiwgImVuZCIsICJfdGV4dFgiLCAibGVmdCIsICJyaWdodCIsICJydGwiLCAiY2hlY2siLCAiYXRFZGdlIiwgInQiLCAiZWxhc3RpY0luIiwgInMiLCAicCIsICJNYXRoIiwgInBvdyIsICJzaW4iLCAiVEFVIiwgImVsYXN0aWNPdXQiLCAiZWZmZWN0cyIsICJsaW5lYXIiLCAiZWFzZUluUXVhZCIsICJlYXNlT3V0UXVhZCIsICJlYXNlSW5PdXRRdWFkIiwgImVhc2VJbkN1YmljIiwgImVhc2VPdXRDdWJpYyIsICJlYXNlSW5PdXRDdWJpYyIsICJlYXNlSW5RdWFydCIsICJlYXNlT3V0UXVhcnQiLCAiZWFzZUluT3V0UXVhcnQiLCAiZWFzZUluUXVpbnQiLCAiZWFzZU91dFF1aW50IiwgImVhc2VJbk91dFF1aW50IiwgImVhc2VJblNpbmUiLCAiY29zIiwgIkhBTEZfUEkiLCAiZWFzZU91dFNpbmUiLCAiZWFzZUluT3V0U2luZSIsICJQSSIsICJlYXNlSW5FeHBvIiwgImVhc2VPdXRFeHBvIiwgImVhc2VJbk91dEV4cG8iLCAiZWFzZUluQ2lyYyIsICJzcXJ0IiwgImVhc2VPdXRDaXJjIiwgImVhc2VJbk91dENpcmMiLCAiZWFzZUluRWxhc3RpYyIsICJlYXNlT3V0RWxhc3RpYyIsICJlYXNlSW5PdXRFbGFzdGljIiwgImVhc2VJbkJhY2siLCAiZWFzZU91dEJhY2siLCAiZWFzZUluT3V0QmFjayIsICJlYXNlSW5Cb3VuY2UiLCAiZWFzZU91dEJvdW5jZSIsICJtIiwgImQiLCAiZWFzZUluT3V0Qm91bmNlIiwgImlzUGF0dGVybk9yR3JhZGllbnQiLCAidmFsdWUiLCAidHlwZSIsICJ0b1N0cmluZyIsICJjb2xvciIsICJDb2xvciIsICJnZXRIb3ZlckNvbG9yIiwgInNhdHVyYXRlIiwgImRhcmtlbiIsICJoZXhTdHJpbmciLCAibnVtYmVycyIsICJjb2xvcnMiLCAiYXBwbHlBbmltYXRpb25zRGVmYXVsdHMiLCAiZGVmYXVsdHMiLCAic2V0IiwgImRlbGF5IiwgInVuZGVmaW5lZCIsICJkdXJhdGlvbiIsICJlYXNpbmciLCAiZm4iLCAiZnJvbSIsICJsb29wIiwgInRvIiwgImRlc2NyaWJlIiwgIl9mYWxsYmFjayIsICJfaW5kZXhhYmxlIiwgIl9zY3JpcHRhYmxlIiwgIm5hbWUiLCAicHJvcGVydGllcyIsICJhY3RpdmUiLCAiYW5pbWF0aW9uIiwgInJlc2l6ZSIsICJzaG93IiwgImFuaW1hdGlvbnMiLCAidmlzaWJsZSIsICJoaWRlIiwgInYiLCAiYXBwbHlMYXlvdXRzRGVmYXVsdHMiLCAiYXV0b1BhZGRpbmciLCAicGFkZGluZyIsICJ0b3AiLCAicmlnaHQiLCAiYm90dG9tIiwgImxlZnQiLCAiaW50bENhY2hlIiwgIk1hcCIsICJnZXROdW1iZXJGb3JtYXQiLCAibG9jYWxlIiwgIm9wdGlvbnMiLCAiY2FjaGVLZXkiLCAiSlNPTiIsICJzdHJpbmdpZnkiLCAiZm9ybWF0dGVyIiwgImdldCIsICJJbnRsIiwgIk51bWJlckZvcm1hdCIsICJmb3JtYXROdW1iZXIiLCAibnVtIiwgImZvcm1hdCIsICJmb3JtYXR0ZXJzIiwgInZhbHVlcyIsICJpc0FycmF5IiwgIm51bWVyaWMiLCAidGlja1ZhbHVlIiwgImluZGV4IiwgInRpY2tzIiwgImNoYXJ0IiwgIm5vdGF0aW9uIiwgImRlbHRhIiwgImxlbmd0aCIsICJtYXhUaWNrIiwgIm1heCIsICJhYnMiLCAiY2FsY3VsYXRlRGVsdGEiLCAibG9nRGVsdGEiLCAibG9nMTAiLCAibnVtRGVjaW1hbCIsICJpc05hTiIsICJtaW4iLCAiZmxvb3IiLCAibWluaW11bUZyYWN0aW9uRGlnaXRzIiwgIm1heGltdW1GcmFjdGlvbkRpZ2l0cyIsICJPYmplY3QiLCAiYXNzaWduIiwgImxvZ2FyaXRobWljIiwgInJlbWFpbiIsICJzaWduaWZpY2FuZCIsICJpbmNsdWRlcyIsICJjYWxsIiwgImFwcGx5U2NhbGVEZWZhdWx0cyIsICJkaXNwbGF5IiwgIm9mZnNldCIsICJyZXZlcnNlIiwgImJlZ2luQXRaZXJvIiwgImJvdW5kcyIsICJncmFjZSIsICJncmlkIiwgImxpbmVXaWR0aCIsICJkcmF3T25DaGFydEFyZWEiLCAiZHJhd1RpY2tzIiwgInRpY2tMZW5ndGgiLCAidGlja1dpZHRoIiwgIl9jdHgiLCAidGlja0NvbG9yIiwgImJvcmRlciIsICJkYXNoIiwgImRhc2hPZmZzZXQiLCAid2lkdGgiLCAidGl0bGUiLCAidGV4dCIsICJtaW5Sb3RhdGlvbiIsICJtYXhSb3RhdGlvbiIsICJtaXJyb3IiLCAidGV4dFN0cm9rZVdpZHRoIiwgInRleHRTdHJva2VDb2xvciIsICJhdXRvU2tpcCIsICJhdXRvU2tpcFBhZGRpbmciLCAibGFiZWxPZmZzZXQiLCAiY2FsbGJhY2siLCAiVGlja3MiLCAibWlub3IiLCAibWFqb3IiLCAiYWxpZ24iLCAiY3Jvc3NBbGlnbiIsICJzaG93TGFiZWxCYWNrZHJvcCIsICJiYWNrZHJvcENvbG9yIiwgImJhY2tkcm9wUGFkZGluZyIsICJyb3V0ZSIsICJzdGFydHNXaXRoIiwgIm92ZXJyaWRlcyIsICJjcmVhdGUiLCAiZGVzY3JpcHRvcnMiLCAiZ2V0U2NvcGUiLCAibm9kZSIsICJrZXkiLCAia2V5cyIsICJzcGxpdCIsICJpIiwgIm4iLCAiayIsICJyb290IiwgInNjb3BlIiwgIm1lcmdlIiwgIkRlZmF1bHRzIiwgImNvbnN0cnVjdG9yIiwgIl9kZXNjcmlwdG9ycyIsICJfYXBwbGllcnMiLCAiYmFja2dyb3VuZENvbG9yIiwgImJvcmRlckNvbG9yIiwgImRhdGFzZXRzIiwgImRldmljZVBpeGVsUmF0aW8iLCAiY29udGV4dCIsICJwbGF0Zm9ybSIsICJnZXREZXZpY2VQaXhlbFJhdGlvIiwgImVsZW1lbnRzIiwgImV2ZW50cyIsICJmb250IiwgImZhbWlseSIsICJzaXplIiwgInN0eWxlIiwgImxpbmVIZWlnaHQiLCAid2VpZ2h0IiwgImhvdmVyIiwgImhvdmVyQmFja2dyb3VuZENvbG9yIiwgImN0eCIsICJob3ZlckJvcmRlckNvbG9yIiwgImhvdmVyQ29sb3IiLCAiaW5kZXhBeGlzIiwgImludGVyYWN0aW9uIiwgIm1vZGUiLCAiaW50ZXJzZWN0IiwgImluY2x1ZGVJbnZpc2libGUiLCAibWFpbnRhaW5Bc3BlY3RSYXRpbyIsICJvbkhvdmVyIiwgIm9uQ2xpY2siLCAicGFyc2luZyIsICJwbHVnaW5zIiwgInJlc3BvbnNpdmUiLCAic2NhbGUiLCAic2NhbGVzIiwgInNob3dMaW5lIiwgImRyYXdBY3RpdmVFbGVtZW50c09uVG9wIiwgImFwcGx5IiwgIm92ZXJyaWRlIiwgInRhcmdldFNjb3BlIiwgInRhcmdldE5hbWUiLCAic2NvcGVPYmplY3QiLCAidGFyZ2V0U2NvcGVPYmplY3QiLCAicHJpdmF0ZU5hbWUiLCAiZGVmaW5lUHJvcGVydGllcyIsICJ3cml0YWJsZSIsICJlbnVtZXJhYmxlIiwgImxvY2FsIiwgInRhcmdldCIsICJpc09iamVjdCIsICJ2YWx1ZU9yRGVmYXVsdCIsICJhcHBsaWVycyIsICJmb3JFYWNoIiwgInRvRm9udFN0cmluZyIsICJpc051bGxPclVuZGVmIiwgIl9tZWFzdXJlVGV4dCIsICJkYXRhIiwgImdjIiwgImxvbmdlc3QiLCAic3RyaW5nIiwgInRleHRXaWR0aCIsICJtZWFzdXJlVGV4dCIsICJwdXNoIiwgIl9sb25nZXN0VGV4dCIsICJhcnJheU9mVGhpbmdzIiwgImNhY2hlIiwgImdhcmJhZ2VDb2xsZWN0IiwgInNhdmUiLCAiaWxlbiIsICJqIiwgImpsZW4iLCAidGhpbmciLCAibmVzdGVkVGhpbmciLCAicmVzdG9yZSIsICJnY0xlbiIsICJzcGxpY2UiLCAiX2FsaWduUGl4ZWwiLCAicGl4ZWwiLCAiY3VycmVudERldmljZVBpeGVsUmF0aW8iLCAiaGFsZldpZHRoIiwgInJvdW5kIiwgImNsZWFyQ2FudmFzIiwgImNhbnZhcyIsICJnZXRDb250ZXh0IiwgInJlc2V0VHJhbnNmb3JtIiwgImNsZWFyUmVjdCIsICJoZWlnaHQiLCAiZHJhd1BvaW50IiwgIngiLCAieSIsICJkcmF3UG9pbnRMZWdlbmQiLCAidyIsICJ4T2Zmc2V0IiwgInlPZmZzZXQiLCAiY29ybmVyUmFkaXVzIiwgInhPZmZzZXRXIiwgInlPZmZzZXRXIiwgInBvaW50U3R5bGUiLCAicm90YXRpb24iLCAicmFkaXVzIiwgInJhZCIsICJSQURfUEVSX0RFRyIsICJ0cmFuc2xhdGUiLCAicm90YXRlIiwgImRyYXdJbWFnZSIsICJiZWdpblBhdGgiLCAiZWxsaXBzZSIsICJhcmMiLCAiY2xvc2VQYXRoIiwgIm1vdmVUbyIsICJUV09fVEhJUkRTX1BJIiwgImxpbmVUbyIsICJRVUFSVEVSX1BJIiwgIlNRUlQxXzIiLCAicmVjdCIsICJmaWxsIiwgImJvcmRlcldpZHRoIiwgInN0cm9rZSIsICJfaXNQb2ludEluQXJlYSIsICJwb2ludCIsICJhcmVhIiwgIm1hcmdpbiIsICJjbGlwQXJlYSIsICJjbGlwIiwgInVuY2xpcEFyZWEiLCAic2V0UmVuZGVyT3B0cyIsICJjdHgiLCAib3B0cyIsICJ0cmFuc2xhdGlvbiIsICJ0cmFuc2xhdGUiLCAiaXNOdWxsT3JVbmRlZiIsICJyb3RhdGlvbiIsICJyb3RhdGUiLCAiY29sb3IiLCAiZmlsbFN0eWxlIiwgInRleHRBbGlnbiIsICJ0ZXh0QmFzZWxpbmUiLCAiZGVjb3JhdGVUZXh0IiwgIngiLCAieSIsICJsaW5lIiwgInN0cmlrZXRocm91Z2giLCAidW5kZXJsaW5lIiwgIm1ldHJpY3MiLCAibWVhc3VyZVRleHQiLCAibGVmdCIsICJhY3R1YWxCb3VuZGluZ0JveExlZnQiLCAicmlnaHQiLCAiYWN0dWFsQm91bmRpbmdCb3hSaWdodCIsICJ0b3AiLCAiYWN0dWFsQm91bmRpbmdCb3hBc2NlbnQiLCAiYm90dG9tIiwgImFjdHVhbEJvdW5kaW5nQm94RGVzY2VudCIsICJ5RGVjb3JhdGlvbiIsICJzdHJva2VTdHlsZSIsICJiZWdpblBhdGgiLCAibGluZVdpZHRoIiwgImRlY29yYXRpb25XaWR0aCIsICJtb3ZlVG8iLCAibGluZVRvIiwgInN0cm9rZSIsICJkcmF3QmFja2Ryb3AiLCAib2xkQ29sb3IiLCAiZmlsbFJlY3QiLCAid2lkdGgiLCAiaGVpZ2h0IiwgInJlbmRlclRleHQiLCAidGV4dCIsICJmb250IiwgImxpbmVzIiwgImlzQXJyYXkiLCAic3Ryb2tlV2lkdGgiLCAic3Ryb2tlQ29sb3IiLCAiaSIsICJzYXZlIiwgInN0cmluZyIsICJsZW5ndGgiLCAiYmFja2Ryb3AiLCAic3Ryb2tlVGV4dCIsICJtYXhXaWR0aCIsICJmaWxsVGV4dCIsICJOdW1iZXIiLCAibGluZUhlaWdodCIsICJyZXN0b3JlIiwgImFkZFJvdW5kZWRSZWN0UGF0aCIsICJyZWN0IiwgInciLCAiaCIsICJyYWRpdXMiLCAiYXJjIiwgInRvcExlZnQiLCAiSEFMRl9QSSIsICJQSSIsICJib3R0b21MZWZ0IiwgImJvdHRvbVJpZ2h0IiwgInRvcFJpZ2h0IiwgIkxJTkVfSEVJR0hUIiwgIkZPTlRfU1RZTEUiLCAidG9MaW5lSGVpZ2h0IiwgInZhbHVlIiwgInNpemUiLCAibWF0Y2hlcyIsICJtYXRjaCIsICJudW1iZXJPclplcm8iLCAidiIsICJfcmVhZFZhbHVlVG9Qcm9wcyIsICJwcm9wcyIsICJyZXQiLCAib2JqUHJvcHMiLCAiaXNPYmplY3QiLCAia2V5cyIsICJPYmplY3QiLCAicmVhZCIsICJwcm9wIiwgInZhbHVlT3JEZWZhdWx0IiwgInRvVFJCTCIsICJ0b1RSQkxDb3JuZXJzIiwgInRvUGFkZGluZyIsICJvYmoiLCAidG9Gb250IiwgIm9wdGlvbnMiLCAiZmFsbGJhY2siLCAiZGVmYXVsdHMiLCAicGFyc2VJbnQiLCAic3R5bGUiLCAiY29uc29sZSIsICJ3YXJuIiwgInVuZGVmaW5lZCIsICJmYW1pbHkiLCAid2VpZ2h0IiwgInRvRm9udFN0cmluZyIsICJyZXNvbHZlIiwgImlucHV0cyIsICJjb250ZXh0IiwgImluZGV4IiwgImluZm8iLCAiY2FjaGVhYmxlIiwgImlsZW4iLCAiX2FkZEdyYWNlIiwgIm1pbm1heCIsICJncmFjZSIsICJiZWdpbkF0WmVybyIsICJtaW4iLCAibWF4IiwgImNoYW5nZSIsICJ0b0RpbWVuc2lvbiIsICJrZWVwWmVybyIsICJhZGQiLCAiTWF0aCIsICJhYnMiLCAiY3JlYXRlQ29udGV4dCIsICJwYXJlbnRDb250ZXh0IiwgImFzc2lnbiIsICJjcmVhdGUiLCAiX2NyZWF0ZVJlc29sdmVyIiwgInNjb3BlcyIsICJwcmVmaXhlcyIsICJyb290U2NvcGVzIiwgImdldFRhcmdldCIsICJmaW5hbFJvb3RTY29wZXMiLCAiX3Jlc29sdmUiLCAiY2FjaGUiLCAiU3ltYm9sIiwgInRvU3RyaW5nVGFnIiwgIl9jYWNoZWFibGUiLCAiX3Njb3BlcyIsICJfcm9vdFNjb3BlcyIsICJfZmFsbGJhY2siLCAiX2dldFRhcmdldCIsICJvdmVycmlkZSIsICJzY29wZSIsICJQcm94eSIsICJkZWxldGVQcm9wZXJ0eSIsICJ0YXJnZXQiLCAiX2tleXMiLCAiZ2V0IiwgIl9jYWNoZWQiLCAiX3Jlc29sdmVXaXRoUHJlZml4ZXMiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwgIlJlZmxlY3QiLCAiZ2V0UHJvdG90eXBlT2YiLCAiaGFzIiwgImdldEtleXNGcm9tQWxsU2NvcGVzIiwgImluY2x1ZGVzIiwgIm93bktleXMiLCAic2V0IiwgInN0b3JhZ2UiLCAiX3N0b3JhZ2UiLCAiX2F0dGFjaENvbnRleHQiLCAicHJveHkiLCAic3ViUHJveHkiLCAiZGVzY3JpcHRvckRlZmF1bHRzIiwgIl9wcm94eSIsICJfY29udGV4dCIsICJfc3ViUHJveHkiLCAiX3N0YWNrIiwgIlNldCIsICJfZGVzY3JpcHRvcnMiLCAic2V0Q29udGV4dCIsICJyZWNlaXZlciIsICJfcmVzb2x2ZVdpdGhDb250ZXh0IiwgImFsbEtleXMiLCAiZW51bWVyYWJsZSIsICJjb25maWd1cmFibGUiLCAic2NyaXB0YWJsZSIsICJpbmRleGFibGUiLCAiX3NjcmlwdGFibGUiLCAiX2luZGV4YWJsZSIsICJfYWxsS2V5cyIsICJpc1NjcmlwdGFibGUiLCAiaXNGdW5jdGlvbiIsICJpc0luZGV4YWJsZSIsICJyZWFkS2V5IiwgInByZWZpeCIsICJuYW1lIiwgIl9jYXBpdGFsaXplIiwgIm5lZWRzU3ViUmVzb2x2ZXIiLCAiY29uc3RydWN0b3IiLCAicHJvdG90eXBlIiwgImhhc093blByb3BlcnR5IiwgImNhbGwiLCAiZGVzY3JpcHRvcnMiLCAiX3Jlc29sdmVTY3JpcHRhYmxlIiwgIl9yZXNvbHZlQXJyYXkiLCAiZ2V0VmFsdWUiLCAiRXJyb3IiLCAiQXJyYXkiLCAiZnJvbSIsICJqb2luIiwgImRlbGV0ZSIsICJjcmVhdGVTdWJSZXNvbHZlciIsICJhcnIiLCAiZmlsdGVyIiwgInMiLCAiaXRlbSIsICJyZXNvbHZlciIsICJwdXNoIiwgInJlc29sdmVGYWxsYmFjayIsICJnZXRTY29wZSIsICJrZXkiLCAicGFyZW50IiwgInJlc29sdmVPYmplY3RLZXkiLCAiYWRkU2NvcGVzIiwgInBhcmVudFNjb3BlcyIsICJwYXJlbnRGYWxsYmFjayIsICJhbGxTY29wZXMiLCAiYWRkU2NvcGVzRnJvbUtleSIsICJzdWJHZXRUYXJnZXQiLCAicmVzb2x2ZUtleXNGcm9tQWxsU2NvcGVzIiwgImsiLCAic3RhcnRzV2l0aCIsICJFUFNJTE9OIiwgIk51bWJlciIsICJfaXNEb21TdXBwb3J0ZWQiLCAid2luZG93IiwgImRvY3VtZW50IiwgIl9nZXRQYXJlbnROb2RlIiwgImRvbU5vZGUiLCAicGFyZW50IiwgInBhcmVudE5vZGUiLCAidG9TdHJpbmciLCAiaG9zdCIsICJwYXJzZU1heFN0eWxlIiwgInN0eWxlVmFsdWUiLCAibm9kZSIsICJwYXJlbnRQcm9wZXJ0eSIsICJ2YWx1ZUluUGl4ZWxzIiwgInBhcnNlSW50IiwgImluZGV4T2YiLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJlbGVtZW50IiwgIm93bmVyRG9jdW1lbnQiLCAiZGVmYXVsdFZpZXciLCAiZ2V0U3R5bGUiLCAiZWwiLCAicHJvcGVydHkiLCAiZ2V0UHJvcGVydHlWYWx1ZSIsICJwb3NpdGlvbnMiLCAiZ2V0UG9zaXRpb25lZFN0eWxlIiwgInN0eWxlcyIsICJzdHlsZSIsICJzdWZmaXgiLCAicmVzdWx0IiwgImkiLCAicG9zIiwgInBhcnNlRmxvYXQiLCAid2lkdGgiLCAibGVmdCIsICJyaWdodCIsICJoZWlnaHQiLCAidG9wIiwgImJvdHRvbSIsICJ1c2VPZmZzZXRQb3MiLCAieCIsICJ5IiwgInRhcmdldCIsICJzaGFkb3dSb290IiwgImdldENhbnZhc1Bvc2l0aW9uIiwgImUiLCAiY2FudmFzIiwgInRvdWNoZXMiLCAic291cmNlIiwgImxlbmd0aCIsICJvZmZzZXRYIiwgIm9mZnNldFkiLCAiYm94IiwgInJlY3QiLCAiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwgImNsaWVudFgiLCAiY2xpZW50WSIsICJnZXRSZWxhdGl2ZVBvc2l0aW9uIiwgImV2ZW50IiwgImNoYXJ0IiwgImN1cnJlbnREZXZpY2VQaXhlbFJhdGlvIiwgImJvcmRlckJveCIsICJib3hTaXppbmciLCAicGFkZGluZ3MiLCAiYm9yZGVycyIsICJ4T2Zmc2V0IiwgInlPZmZzZXQiLCAiTWF0aCIsICJyb3VuZCIsICJnZXRDb250YWluZXJTaXplIiwgIm1heFdpZHRoIiwgIm1heEhlaWdodCIsICJ1bmRlZmluZWQiLCAiY29udGFpbmVyIiwgImNsaWVudFdpZHRoIiwgImNsaWVudEhlaWdodCIsICJjb250YWluZXJTdHlsZSIsICJjb250YWluZXJCb3JkZXIiLCAiY29udGFpbmVyUGFkZGluZyIsICJJTkZJTklUWSIsICJyb3VuZDEiLCAidiIsICJnZXRNYXhpbXVtU2l6ZSIsICJiYldpZHRoIiwgImJiSGVpZ2h0IiwgImFzcGVjdFJhdGlvIiwgIm1hcmdpbnMiLCAiY29udGFpbmVyU2l6ZSIsICJtYXgiLCAibWluIiwgIm1haW50YWluSGVpZ2h0IiwgImZsb29yIiwgInJldGluYVNjYWxlIiwgImZvcmNlUmF0aW8iLCAiZm9yY2VTdHlsZSIsICJwaXhlbFJhdGlvIiwgImRldmljZUhlaWdodCIsICJkZXZpY2VXaWR0aCIsICJjdHgiLCAic2V0VHJhbnNmb3JtIiwgInN1cHBvcnRzRXZlbnRMaXN0ZW5lck9wdGlvbnMiLCAicGFzc2l2ZVN1cHBvcnRlZCIsICJvcHRpb25zIiwgInBhc3NpdmUiLCAiYWRkRXZlbnRMaXN0ZW5lciIsICJyZW1vdmVFdmVudExpc3RlbmVyIiwgInJlYWRVc2VkU2l6ZSIsICJ2YWx1ZSIsICJtYXRjaGVzIiwgIm1hdGNoIiwgImdldFJpZ2h0VG9MZWZ0QWRhcHRlciIsICJyZWN0WCIsICJ3aWR0aCIsICJ4IiwgInNldFdpZHRoIiwgInciLCAidGV4dEFsaWduIiwgImFsaWduIiwgInhQbHVzIiwgInZhbHVlIiwgImxlZnRGb3JMdHIiLCAiaXRlbVdpZHRoIiwgImdldExlZnRUb1JpZ2h0QWRhcHRlciIsICJfaXRlbVdpZHRoIiwgImdldFJ0bEFkYXB0ZXIiLCAicnRsIiwgIm92ZXJyaWRlVGV4dERpcmVjdGlvbiIsICJjdHgiLCAiZGlyZWN0aW9uIiwgInN0eWxlIiwgIm9yaWdpbmFsIiwgImNhbnZhcyIsICJnZXRQcm9wZXJ0eVZhbHVlIiwgImdldFByb3BlcnR5UHJpb3JpdHkiLCAic2V0UHJvcGVydHkiLCAicHJldlRleHREaXJlY3Rpb24iLCAicmVzdG9yZVRleHREaXJlY3Rpb24iLCAidW5kZWZpbmVkIiwgIkFuaW1hdG9yIiwgImNvbnN0cnVjdG9yIiwgIl9yZXF1ZXN0IiwgIl9jaGFydHMiLCAiTWFwIiwgIl9ydW5uaW5nIiwgIl9sYXN0RGF0ZSIsICJ1bmRlZmluZWQiLCAiX25vdGlmeSIsICJjaGFydCIsICJhbmltcyIsICJkYXRlIiwgInR5cGUiLCAiY2FsbGJhY2tzIiwgImxpc3RlbmVycyIsICJudW1TdGVwcyIsICJkdXJhdGlvbiIsICJmb3JFYWNoIiwgImZuIiwgImluaXRpYWwiLCAiY3VycmVudFN0ZXAiLCAiTWF0aCIsICJtaW4iLCAic3RhcnQiLCAiX3JlZnJlc2giLCAicmVxdWVzdEFuaW1GcmFtZSIsICJjYWxsIiwgIndpbmRvdyIsICJfdXBkYXRlIiwgIkRhdGUiLCAibm93IiwgInJlbWFpbmluZyIsICJydW5uaW5nIiwgIml0ZW1zIiwgImxlbmd0aCIsICJpIiwgImRyYXciLCAiaXRlbSIsICJfYWN0aXZlIiwgIl90b3RhbCIsICJ0aWNrIiwgInBvcCIsICJfZ2V0QW5pbXMiLCAiY2hhcnRzIiwgImdldCIsICJjb21wbGV0ZSIsICJwcm9ncmVzcyIsICJzZXQiLCAibGlzdGVuIiwgImV2ZW50IiwgImNiIiwgInB1c2giLCAiYWRkIiwgImhhcyIsICJyZWR1Y2UiLCAiYWNjIiwgImN1ciIsICJtYXgiLCAiX2R1cmF0aW9uIiwgInN0b3AiLCAiY2FuY2VsIiwgInJlbW92ZSIsICJkZWxldGUiLCAidHJhbnNwYXJlbnQiLCAiaW50ZXJwb2xhdG9ycyIsICJib29sZWFuIiwgImZyb20iLCAidG8iLCAiZmFjdG9yIiwgImNvbG9yIiwgImMwIiwgImhlbHBlcnNDb2xvciIsICJjMSIsICJ2YWxpZCIsICJtaXgiLCAiaGV4U3RyaW5nIiwgIm51bWJlciIsICJBbmltYXRpb24iLCAiY2ZnIiwgInRhcmdldCIsICJwcm9wIiwgImN1cnJlbnRWYWx1ZSIsICJyZXNvbHZlIiwgIl9mbiIsICJfZWFzaW5nIiwgImVmZmVjdHMiLCAiZWFzaW5nIiwgImxpbmVhciIsICJfc3RhcnQiLCAiZmxvb3IiLCAiZGVsYXkiLCAiX2xvb3AiLCAibG9vcCIsICJfdGFyZ2V0IiwgIl9wcm9wIiwgIl9mcm9tIiwgIl90byIsICJfcHJvbWlzZXMiLCAiYWN0aXZlIiwgInVwZGF0ZSIsICJlbGFwc2VkIiwgInJlbWFpbiIsICJ3YWl0IiwgInByb21pc2VzIiwgIlByb21pc2UiLCAicmVzIiwgInJlaiIsICJyZXNvbHZlZCIsICJtZXRob2QiLCAiQW5pbWF0aW9ucyIsICJjb25maWciLCAiX2NoYXJ0IiwgIl9wcm9wZXJ0aWVzIiwgImNvbmZpZ3VyZSIsICJpc09iamVjdCIsICJhbmltYXRpb25PcHRpb25zIiwgIk9iamVjdCIsICJrZXlzIiwgImRlZmF1bHRzIiwgImFuaW1hdGlvbiIsICJhbmltYXRlZFByb3BzIiwgImdldE93blByb3BlcnR5TmFtZXMiLCAia2V5IiwgIm9wdGlvbiIsICJpc0FycmF5IiwgInByb3BlcnRpZXMiLCAiX2FuaW1hdGVPcHRpb25zIiwgInZhbHVlcyIsICJuZXdPcHRpb25zIiwgIm9wdGlvbnMiLCAicmVzb2x2ZVRhcmdldE9wdGlvbnMiLCAiYW5pbWF0aW9ucyIsICJfY3JlYXRlQW5pbWF0aW9ucyIsICIkc2hhcmVkIiwgImF3YWl0QWxsIiwgIiRhbmltYXRpb25zIiwgInRoZW4iLCAicHJvcHMiLCAiY2hhckF0IiwgInZhbHVlIiwgInNpemUiLCAiYXNzaWduIiwgImFuaW1hdG9yIiwgImFuaW0iLCAiYWxsIiwgInNjYWxlQ2xpcCIsICJzY2FsZSIsICJhbGxvd2VkT3ZlcmZsb3ciLCAib3B0cyIsICJyZXZlcnNlIiwgImVuZCIsICJkZWZhdWx0Q2xpcCIsICJ4U2NhbGUiLCAieVNjYWxlIiwgIngiLCAieSIsICJ0b3AiLCAicmlnaHQiLCAiYm90dG9tIiwgImxlZnQiLCAidG9DbGlwIiwgInQiLCAiciIsICJiIiwgImwiLCAiZGlzYWJsZWQiLCAiZ2V0U29ydGVkRGF0YXNldEluZGljZXMiLCAiZmlsdGVyVmlzaWJsZSIsICJtZXRhc2V0cyIsICJfZ2V0U29ydGVkRGF0YXNldE1ldGFzIiwgImlsZW4iLCAiaW5kZXgiLCAiYXBwbHlTdGFjayIsICJzdGFjayIsICJkc0luZGV4IiwgInNpbmdsZU1vZGUiLCAibW9kZSIsICJkYXRhc2V0SW5kZXgiLCAib3RoZXJWYWx1ZSIsICJpc0Zpbml0ZSIsICJzaWduIiwgImNvbnZlcnRPYmplY3REYXRhVG9BcnJheSIsICJkYXRhIiwgImFkYXRhIiwgIkFycmF5IiwgImlzU3RhY2tlZCIsICJtZXRhIiwgInN0YWNrZWQiLCAiZ2V0U3RhY2tLZXkiLCAiaW5kZXhTY2FsZSIsICJ2YWx1ZVNjYWxlIiwgImlkIiwgImdldFVzZXJCb3VuZHMiLCAibWluRGVmaW5lZCIsICJtYXhEZWZpbmVkIiwgIk51bWJlciIsICJORUdBVElWRV9JTkZJTklUWSIsICJQT1NJVElWRV9JTkZJTklUWSIsICJnZXRPckNyZWF0ZVN0YWNrIiwgInN0YWNrcyIsICJzdGFja0tleSIsICJpbmRleFZhbHVlIiwgInN1YlN0YWNrIiwgImdldExhc3RJbmRleEluU3RhY2siLCAidlNjYWxlIiwgInBvc2l0aXZlIiwgImdldE1hdGNoaW5nVmlzaWJsZU1ldGFzIiwgInVwZGF0ZVN0YWNrcyIsICJjb250cm9sbGVyIiwgInBhcnNlZCIsICJfY2FjaGVkTWV0YSIsICJfc3RhY2tzIiwgImlTY2FsZSIsICJpQXhpcyIsICJheGlzIiwgInZBeGlzIiwgIml0ZW1TdGFja3MiLCAiX3RvcCIsICJfYm90dG9tIiwgInZpc3VhbFZhbHVlcyIsICJfdmlzdWFsVmFsdWVzIiwgImdldEZpcnN0U2NhbGVJZCIsICJzY2FsZXMiLCAiZmlsdGVyIiwgInNoaWZ0IiwgImNyZWF0ZURhdGFzZXRDb250ZXh0IiwgInBhcmVudCIsICJjcmVhdGVDb250ZXh0IiwgImRhdGFzZXQiLCAiY3JlYXRlRGF0YUNvbnRleHQiLCAiZWxlbWVudCIsICJkYXRhSW5kZXgiLCAicmF3IiwgImNsZWFyU3RhY2tzIiwgIl9wYXJzZWQiLCAiaXNEaXJlY3RVcGRhdGVNb2RlIiwgImNsb25lSWZOb3RTaGFyZWQiLCAiY2FjaGVkIiwgInNoYXJlZCIsICJjcmVhdGVTdGFjayIsICJjYW5TdGFjayIsICJoaWRkZW4iLCAiX3N0YWNrZWQiLCAiRGF0YXNldENvbnRyb2xsZXIiLCAiX2N0eCIsICJjdHgiLCAiX2NhY2hlZERhdGFPcHRzIiwgImdldE1ldGEiLCAiX3R5cGUiLCAiX3BhcnNpbmciLCAiX2RhdGEiLCAiX29iamVjdERhdGEiLCAiX3NoYXJlZE9wdGlvbnMiLCAiX2RyYXdTdGFydCIsICJfZHJhd0NvdW50IiwgImVuYWJsZU9wdGlvblNoYXJpbmciLCAic3VwcG9ydHNEZWNpbWF0aW9uIiwgIiRjb250ZXh0IiwgIl9zeW5jTGlzdCIsICJkYXRhc2V0RWxlbWVudFR5cGUiLCAiZGF0YUVsZW1lbnRUeXBlIiwgImluaXRpYWxpemUiLCAibGlua1NjYWxlcyIsICJhZGRFbGVtZW50cyIsICJmaWxsIiwgImlzUGx1Z2luRW5hYmxlZCIsICJjb25zb2xlIiwgIndhcm4iLCAidXBkYXRlSW5kZXgiLCAiZ2V0RGF0YXNldCIsICJjaG9vc2VJZCIsICJ4aWQiLCAieEF4aXNJRCIsICJ2YWx1ZU9yRGVmYXVsdCIsICJ5aWQiLCAieUF4aXNJRCIsICJyaWQiLCAickF4aXNJRCIsICJpbmRleEF4aXMiLCAiaWlkIiwgImlBeGlzSUQiLCAidmlkIiwgInZBeGlzSUQiLCAiZ2V0U2NhbGVGb3JJZCIsICJyU2NhbGUiLCAiZGF0YXNldHMiLCAiZ2V0RGF0YXNldE1ldGEiLCAic2NhbGVJRCIsICJfZ2V0T3RoZXJTY2FsZSIsICJyZXNldCIsICJfZGVzdHJveSIsICJ1bmxpc3RlbkFycmF5RXZlbnRzIiwgIl9kYXRhQ2hlY2siLCAiaXNFeHRlbnNpYmxlIiwgImxpc3RlbkFycmF5RXZlbnRzIiwgImJ1aWxkT3JVcGRhdGVFbGVtZW50cyIsICJyZXNldE5ld0VsZW1lbnRzIiwgInN0YWNrQ2hhbmdlZCIsICJvbGRTdGFja2VkIiwgIl9yZXN5bmNFbGVtZW50cyIsICJzY29wZUtleXMiLCAiZGF0YXNldFNjb3BlS2V5cyIsICJzY29wZXMiLCAiZ2V0T3B0aW9uU2NvcGVzIiwgImNyZWF0ZVJlc29sdmVyIiwgImdldENvbnRleHQiLCAicGFyc2luZyIsICJwYXJzZSIsICJjb3VudCIsICJzb3J0ZWQiLCAiX3NvcnRlZCIsICJwcmV2IiwgInBhcnNlQXJyYXlEYXRhIiwgInBhcnNlT2JqZWN0RGF0YSIsICJwYXJzZVByaW1pdGl2ZURhdGEiLCAiaXNOb3RJbk9yZGVyQ29tcGFyZWRUb1ByZXYiLCAibGFiZWxzIiwgImdldExhYmVscyIsICJzaW5nbGVTY2FsZSIsICJ4QXhpc0tleSIsICJ5QXhpc0tleSIsICJyZXNvbHZlT2JqZWN0S2V5IiwgImdldFBhcnNlZCIsICJnZXREYXRhRWxlbWVudCIsICJ1cGRhdGVSYW5nZUZyb21QYXJzZWQiLCAicmFuZ2UiLCAicGFyc2VkVmFsdWUiLCAiTmFOIiwgImdldE1pbk1heCIsICJvdGhlclNjYWxlIiwgIm90aGVyTWluIiwgIm90aGVyTWF4IiwgIl9za2lwIiwgImdldEFsbFBhcnNlZFZhbHVlcyIsICJnZXRNYXhPdmVyZmxvdyIsICJnZXRMYWJlbEFuZFZhbHVlIiwgImxhYmVsIiwgImdldExhYmVsRm9yVmFsdWUiLCAiX2NsaXAiLCAiY2xpcCIsICJlbGVtZW50cyIsICJhcmVhIiwgImNoYXJ0QXJlYSIsICJkcmF3QWN0aXZlRWxlbWVudHNPblRvcCIsICJnZXRTdHlsZSIsICJyZXNvbHZlRGF0YXNldEVsZW1lbnRPcHRpb25zIiwgInJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMiLCAiY29udGV4dCIsICJfcmVzb2x2ZUVsZW1lbnRPcHRpb25zIiwgImVsZW1lbnRUeXBlIiwgImNhY2hlIiwgImNhY2hlS2V5IiwgInNoYXJpbmciLCAiZGVmaW5lZCIsICJkYXRhc2V0RWxlbWVudFNjb3BlS2V5cyIsICJwcmVmaXhlcyIsICJuYW1lcyIsICJyZXNvbHZlTmFtZWRPcHRpb25zIiwgImZyZWV6ZSIsICJfcmVzb2x2ZUFuaW1hdGlvbnMiLCAidHJhbnNpdGlvbiIsICJkYXRhc2V0QW5pbWF0aW9uU2NvcGVLZXlzIiwgIl9jYWNoZWFibGUiLCAiZ2V0U2hhcmVkT3B0aW9ucyIsICJpbmNsdWRlT3B0aW9ucyIsICJzaGFyZWRPcHRpb25zIiwgIl9hbmltYXRpb25zRGlzYWJsZWQiLCAiX2dldFNoYXJlZE9wdGlvbnMiLCAiZmlyc3RPcHRzIiwgInByZXZpb3VzbHlTaGFyZWRPcHRpb25zIiwgInVwZGF0ZVNoYXJlZE9wdGlvbnMiLCAidXBkYXRlRWxlbWVudCIsICJfc2V0U3R5bGUiLCAicmVtb3ZlSG92ZXJTdHlsZSIsICJzZXRIb3ZlclN0eWxlIiwgIl9yZW1vdmVEYXRhc2V0SG92ZXJTdHlsZSIsICJfc2V0RGF0YXNldEhvdmVyU3R5bGUiLCAiYXJnMSIsICJhcmcyIiwgIm51bU1ldGEiLCAibnVtRGF0YSIsICJfaW5zZXJ0RWxlbWVudHMiLCAiX3JlbW92ZUVsZW1lbnRzIiwgIm1vdmUiLCAiYXJyIiwgInVwZGF0ZUVsZW1lbnRzIiwgInJlbW92ZWQiLCAic3BsaWNlIiwgIl9zeW5jIiwgImFyZ3MiLCAiX2RhdGFDaGFuZ2VzIiwgIl9vbkRhdGFQdXNoIiwgImFyZ3VtZW50cyIsICJfb25EYXRhUG9wIiwgIl9vbkRhdGFTaGlmdCIsICJfb25EYXRhU3BsaWNlIiwgIm5ld0NvdW50IiwgIl9vbkRhdGFVbnNoaWZ0IiwgImdldEFsbFNjYWxlVmFsdWVzIiwgIl9jYWNoZSIsICIkYmFyIiwgInZpc2libGVNZXRhcyIsICJjb25jYXQiLCAiX2FycmF5VW5pcXVlIiwgInNvcnQiLCAiYSIsICJjb21wdXRlTWluU2FtcGxlU2l6ZSIsICJfbGVuZ3RoIiwgImN1cnIiLCAidXBkYXRlTWluQW5kUHJldiIsICJhYnMiLCAiZ2V0UGl4ZWxGb3JWYWx1ZSIsICJ0aWNrcyIsICJnZXRQaXhlbEZvclRpY2siLCAiY29tcHV0ZUZpdENhdGVnb3J5VHJhaXRzIiwgInJ1bGVyIiwgInN0YWNrQ291bnQiLCAidGhpY2tuZXNzIiwgImJhclRoaWNrbmVzcyIsICJyYXRpbyIsICJpc051bGxPclVuZGVmIiwgImNhdGVnb3J5UGVyY2VudGFnZSIsICJiYXJQZXJjZW50YWdlIiwgImNodW5rIiwgInBpeGVscyIsICJjb21wdXRlRmxleENhdGVnb3J5VHJhaXRzIiwgIm5leHQiLCAicGVyY2VudCIsICJwYXJzZUZsb2F0QmFyIiwgImVudHJ5IiwgInN0YXJ0VmFsdWUiLCAiZW5kVmFsdWUiLCAiYmFyU3RhcnQiLCAiYmFyRW5kIiwgIl9jdXN0b20iLCAicGFyc2VWYWx1ZSIsICJwYXJzZUFycmF5T3JQcmltaXRpdmUiLCAiaXNGbG9hdEJhciIsICJjdXN0b20iLCAiYmFyU2lnbiIsICJhY3R1YWxCYXNlIiwgImlzSG9yaXpvbnRhbCIsICJib3JkZXJQcm9wcyIsICJob3Jpem9udGFsIiwgImJhc2UiLCAic2V0Qm9yZGVyU2tpcHBlZCIsICJlZGdlIiwgImJvcmRlclNraXBwZWQiLCAiZW5hYmxlQm9yZGVyUmFkaXVzIiwgInBhcnNlRWRnZSIsICJzd2FwIiwgInN0YXJ0RW5kIiwgIm9yaWciLCAidjEiLCAidjIiLCAidiIsICJzZXRJbmZsYXRlQW1vdW50IiwgImluZmxhdGVBbW91bnQiLCAiQmFyQ29udHJvbGxlciIsICJpQXhpc0tleSIsICJ2QXhpc0tleSIsICJvYmoiLCAiYmFycyIsICJnZXRCYXNlUGl4ZWwiLCAiX2dldFJ1bGVyIiwgInZwaXhlbHMiLCAiaGVhZCIsICJfY2FsY3VsYXRlQmFyVmFsdWVQaXhlbHMiLCAiaXBpeGVscyIsICJfY2FsY3VsYXRlQmFySW5kZXhQaXhlbHMiLCAiY2VudGVyIiwgImhlaWdodCIsICJ3aWR0aCIsICJfZ2V0U3RhY2tzIiwgImxhc3QiLCAiZ3JvdXBlZCIsICJza2lwTnVsbCIsICJ2YWwiLCAiaXNOYU4iLCAiaW5kZXhPZiIsICJfZ2V0U3RhY2tDb3VudCIsICJfZ2V0U3RhY2tJbmRleCIsICJuYW1lIiwgIl9zdGFydFBpeGVsIiwgIl9lbmRQaXhlbCIsICJiYXNlVmFsdWUiLCAibWluQmFyTGVuZ3RoIiwgImZsb2F0aW5nIiwgImdldERhdGFWaXNpYmlsaXR5IiwgInN0YXJ0UGl4ZWwiLCAiZ2V0UGl4ZWxGb3JEZWNpbWFsIiwgImVuZFBpeGVsIiwgImdldFZhbHVlRm9yUGl4ZWwiLCAiaGFsZkdyaWQiLCAiZ2V0TGluZVdpZHRoRm9yVmFsdWUiLCAibWF4QmFyVGhpY2tuZXNzIiwgIkluZmluaXR5IiwgInN0YWNrSW5kZXgiLCAicmVjdHMiLCAibnVtYmVycyIsICJvdmVycmlkZXMiLCAiX2luZGV4XyIsICJvZmZzZXQiLCAiZ3JpZCIsICJfdmFsdWVfIiwgImJlZ2luQXRaZXJvIiwgImdldFJhdGlvQW5kT2Zmc2V0IiwgInJvdGF0aW9uIiwgImNpcmN1bWZlcmVuY2UiLCAiY3V0b3V0IiwgInJhdGlvWCIsICJyYXRpb1kiLCAib2Zmc2V0WCIsICJvZmZzZXRZIiwgIlRBVSIsICJzdGFydEFuZ2xlIiwgImVuZEFuZ2xlIiwgInN0YXJ0WCIsICJNYXRoIiwgImNvcyIsICJzdGFydFkiLCAic2luIiwgImVuZFgiLCAiZW5kWSIsICJjYWxjTWF4IiwgImFuZ2xlIiwgImEiLCAiYiIsICJfYW5nbGVCZXR3ZWVuIiwgIm1heCIsICJjYWxjTWluIiwgIm1pbiIsICJtYXhYIiwgIm1heFkiLCAiSEFMRl9QSSIsICJtaW5YIiwgIlBJIiwgIm1pblkiLCAiRG91Z2hudXRDb250cm9sbGVyIiwgIkRhdGFzZXRDb250cm9sbGVyIiwgImNvbnN0cnVjdG9yIiwgImNoYXJ0IiwgImRhdGFzZXRJbmRleCIsICJlbmFibGVPcHRpb25TaGFyaW5nIiwgImlubmVyUmFkaXVzIiwgInVuZGVmaW5lZCIsICJvdXRlclJhZGl1cyIsICJsaW5rU2NhbGVzIiwgInBhcnNlIiwgInN0YXJ0IiwgImNvdW50IiwgImRhdGEiLCAiZ2V0RGF0YXNldCIsICJtZXRhIiwgIl9jYWNoZWRNZXRhIiwgIl9wYXJzaW5nIiwgIl9wYXJzZWQiLCAiZ2V0dGVyIiwgImkiLCAiaXNPYmplY3QiLCAia2V5IiwgInJlc29sdmVPYmplY3RLZXkiLCAiaWxlbiIsICJfZ2V0Um90YXRpb24iLCAidG9SYWRpYW5zIiwgIm9wdGlvbnMiLCAiX2dldENpcmN1bWZlcmVuY2UiLCAiX2dldFJvdGF0aW9uRXh0ZW50cyIsICJkYXRhc2V0cyIsICJsZW5ndGgiLCAiaXNEYXRhc2V0VmlzaWJsZSIsICJnZXREYXRhc2V0TWV0YSIsICJ0eXBlIiwgIl90eXBlIiwgImNvbnRyb2xsZXIiLCAidXBkYXRlIiwgIm1vZGUiLCAiY2hhcnRBcmVhIiwgImFyY3MiLCAic3BhY2luZyIsICJnZXRNYXhCb3JkZXJXaWR0aCIsICJnZXRNYXhPZmZzZXQiLCAibWF4U2l6ZSIsICJ3aWR0aCIsICJoZWlnaHQiLCAidG9QZXJjZW50YWdlIiwgImNoYXJ0V2VpZ2h0IiwgIl9nZXRSaW5nV2VpZ2h0IiwgImluZGV4IiwgIm1heFdpZHRoIiwgIm1heEhlaWdodCIsICJtYXhSYWRpdXMiLCAidG9EaW1lbnNpb24iLCAicmFkaXVzIiwgInJhZGl1c0xlbmd0aCIsICJfZ2V0VmlzaWJsZURhdGFzZXRXZWlnaHRUb3RhbCIsICJ0b3RhbCIsICJjYWxjdWxhdGVUb3RhbCIsICJfZ2V0UmluZ1dlaWdodE9mZnNldCIsICJ1cGRhdGVFbGVtZW50cyIsICJfY2lyY3VtZmVyZW5jZSIsICJyZXNldCIsICJvcHRzIiwgImFuaW1hdGlvbiIsICJhbmltYXRlUm90YXRlIiwgImdldERhdGFWaXNpYmlsaXR5IiwgImhpZGRlbiIsICJjYWxjdWxhdGVDaXJjdW1mZXJlbmNlIiwgImFuaW1hdGlvbk9wdHMiLCAiY2VudGVyWCIsICJsZWZ0IiwgInJpZ2h0IiwgImNlbnRlclkiLCAidG9wIiwgImJvdHRvbSIsICJhbmltYXRlU2NhbGUiLCAic2hhcmVkT3B0aW9ucyIsICJpbmNsdWRlT3B0aW9ucyIsICJfZ2V0U2hhcmVkT3B0aW9ucyIsICJhcmMiLCAicHJvcGVydGllcyIsICJ4IiwgInkiLCAicmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyIsICJhY3RpdmUiLCAidXBkYXRlRWxlbWVudCIsICJtZXRhRGF0YSIsICJ2YWx1ZSIsICJpc05hTiIsICJhYnMiLCAiZ2V0TGFiZWxBbmRWYWx1ZSIsICJsYWJlbHMiLCAiZm9ybWF0TnVtYmVyIiwgImxvY2FsZSIsICJsYWJlbCIsICJib3JkZXJBbGlnbiIsICJib3JkZXJXaWR0aCIsICJob3ZlckJvcmRlcldpZHRoIiwgIm9mZnNldCIsICJob3Zlck9mZnNldCIsICJyaW5nV2VpZ2h0T2Zmc2V0IiwgInZhbHVlT3JEZWZhdWx0IiwgIndlaWdodCIsICJpZCIsICJkZWZhdWx0cyIsICJkYXRhc2V0RWxlbWVudFR5cGUiLCAiZGF0YUVsZW1lbnRUeXBlIiwgImFuaW1hdGlvbnMiLCAibnVtYmVycyIsICJpbmRleEF4aXMiLCAiZGVzY3JpcHRvcnMiLCAiX3NjcmlwdGFibGUiLCAibmFtZSIsICJfaW5kZXhhYmxlIiwgInN0YXJ0c1dpdGgiLCAib3ZlcnJpZGVzIiwgImFzcGVjdFJhdGlvIiwgInBsdWdpbnMiLCAibGVnZW5kIiwgImdlbmVyYXRlTGFiZWxzIiwgInBvaW50U3R5bGUiLCAiY29sb3IiLCAibWFwIiwgInN0eWxlIiwgImdldFN0eWxlIiwgInRleHQiLCAiZmlsbFN0eWxlIiwgImJhY2tncm91bmRDb2xvciIsICJzdHJva2VTdHlsZSIsICJib3JkZXJDb2xvciIsICJmb250Q29sb3IiLCAibGluZVdpZHRoIiwgIm9uQ2xpY2siLCAiZSIsICJsZWdlbmRJdGVtIiwgInRvZ2dsZURhdGFWaXNpYmlsaXR5IiwgIlBpZUNvbnRyb2xsZXIiLCAiRG91Z2hudXRDb250cm9sbGVyIiwgImlkIiwgImRlZmF1bHRzIiwgImN1dG91dCIsICJyb3RhdGlvbiIsICJjaXJjdW1mZXJlbmNlIiwgInJhZGl1cyIsICJhYnN0cmFjdCIsICJFcnJvciIsICJEYXRlQWRhcHRlckJhc2UiLCAiY29uc3RydWN0b3IiLCAib3B0aW9ucyIsICJvdmVycmlkZSIsICJtZW1iZXJzIiwgIk9iamVjdCIsICJhc3NpZ24iLCAicHJvdG90eXBlIiwgImluaXQiLCAiZm9ybWF0cyIsICJwYXJzZSIsICJmb3JtYXQiLCAiYWRkIiwgImRpZmYiLCAic3RhcnRPZiIsICJlbmRPZiIsICJfZGF0ZSIsICJiaW5hcnlTZWFyY2giLCAibWV0YXNldCIsICJheGlzIiwgInZhbHVlIiwgImludGVyc2VjdCIsICJjb250cm9sbGVyIiwgImRhdGEiLCAiX3NvcnRlZCIsICJpU2NhbGUiLCAiX2NhY2hlZE1ldGEiLCAibGVuZ3RoIiwgImxvb2t1cE1ldGhvZCIsICJfcmV2ZXJzZVBpeGVscyIsICJfcmxvb2t1cEJ5S2V5IiwgIl9sb29rdXBCeUtleSIsICJfc2hhcmVkT3B0aW9ucyIsICJlbCIsICJyYW5nZSIsICJnZXRSYW5nZSIsICJzdGFydCIsICJlbmQiLCAibG8iLCAiaGkiLCAiZXZhbHVhdGVJbnRlcmFjdGlvbkl0ZW1zIiwgImNoYXJ0IiwgInBvc2l0aW9uIiwgImhhbmRsZXIiLCAibWV0YXNldHMiLCAiZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcyIsICJpIiwgImlsZW4iLCAiaW5kZXgiLCAiaiIsICJlbGVtZW50IiwgInNraXAiLCAiZ2V0RGlzdGFuY2VNZXRyaWNGb3JBeGlzIiwgInVzZVgiLCAiaW5kZXhPZiIsICJ1c2VZIiwgInB0MSIsICJwdDIiLCAiZGVsdGFYIiwgIk1hdGgiLCAiYWJzIiwgIngiLCAiZGVsdGFZIiwgInkiLCAic3FydCIsICJwb3ciLCAiZ2V0SW50ZXJzZWN0SXRlbXMiLCAidXNlRmluYWxQb3NpdGlvbiIsICJpbmNsdWRlSW52aXNpYmxlIiwgIml0ZW1zIiwgImlzUG9pbnRJbkFyZWEiLCAiZXZhbHVhdGlvbkZ1bmMiLCAiZGF0YXNldEluZGV4IiwgIl9pc1BvaW50SW5BcmVhIiwgImNoYXJ0QXJlYSIsICJpblJhbmdlIiwgInB1c2giLCAiZ2V0TmVhcmVzdFJhZGlhbEl0ZW1zIiwgInN0YXJ0QW5nbGUiLCAiZW5kQW5nbGUiLCAiZ2V0UHJvcHMiLCAiYW5nbGUiLCAiZ2V0QW5nbGVGcm9tUG9pbnQiLCAiX2FuZ2xlQmV0d2VlbiIsICJnZXROZWFyZXN0Q2FydGVzaWFuSXRlbXMiLCAiZGlzdGFuY2VNZXRyaWMiLCAibWluRGlzdGFuY2UiLCAiTnVtYmVyIiwgIlBPU0lUSVZFX0lORklOSVRZIiwgImNlbnRlciIsICJnZXRDZW50ZXJQb2ludCIsICJwb2ludEluQXJlYSIsICJkaXN0YW5jZSIsICJnZXROZWFyZXN0SXRlbXMiLCAiZ2V0QXhpc0l0ZW1zIiwgInJhbmdlTWV0aG9kIiwgImludGVyc2VjdHNJdGVtIiwgIm1vZGVzIiwgImUiLCAiZ2V0UmVsYXRpdmVQb3NpdGlvbiIsICJlbGVtZW50cyIsICJmb3JFYWNoIiwgIm1ldGEiLCAiZGF0YXNldCIsICJnZXREYXRhc2V0TWV0YSIsICJwb2ludCIsICJuZWFyZXN0IiwgIlNUQVRJQ19QT1NJVElPTlMiLCAiZmlsdGVyQnlQb3NpdGlvbiIsICJhcnJheSIsICJmaWx0ZXIiLCAidiIsICJwb3MiLCAiZmlsdGVyRHluYW1pY1Bvc2l0aW9uQnlBeGlzIiwgImJveCIsICJzb3J0QnlXZWlnaHQiLCAicmV2ZXJzZSIsICJzb3J0IiwgImEiLCAiYiIsICJ2MCIsICJ2MSIsICJ3ZWlnaHQiLCAid3JhcEJveGVzIiwgImJveGVzIiwgImxheW91dEJveGVzIiwgInN0YWNrIiwgInN0YWNrV2VpZ2h0IiwgImhvcml6b250YWwiLCAiaXNIb3Jpem9udGFsIiwgImJ1aWxkU3RhY2tzIiwgImxheW91dHMiLCAic3RhY2tzIiwgIndyYXAiLCAiaW5jbHVkZXMiLCAiX3N0YWNrIiwgImNvdW50IiwgInBsYWNlZCIsICJzaXplIiwgInNldExheW91dERpbXMiLCAicGFyYW1zIiwgInZCb3hNYXhXaWR0aCIsICJoQm94TWF4SGVpZ2h0IiwgImxheW91dCIsICJmdWxsU2l6ZSIsICJmYWN0b3IiLCAid2lkdGgiLCAiYXZhaWxhYmxlV2lkdGgiLCAiaGVpZ2h0IiwgImF2YWlsYWJsZUhlaWdodCIsICJidWlsZExheW91dEJveGVzIiwgImxlZnQiLCAicmlnaHQiLCAidG9wIiwgImJvdHRvbSIsICJjZW50ZXJIb3Jpem9udGFsIiwgImNlbnRlclZlcnRpY2FsIiwgImxlZnRBbmRUb3AiLCAiY29uY2F0IiwgInJpZ2h0QW5kQm90dG9tIiwgInZlcnRpY2FsIiwgImdldENvbWJpbmVkTWF4IiwgIm1heFBhZGRpbmciLCAibWF4IiwgInVwZGF0ZU1heFBhZGRpbmciLCAiYm94UGFkZGluZyIsICJ1cGRhdGVEaW1zIiwgImlzT2JqZWN0IiwgImdldFBhZGRpbmciLCAibmV3V2lkdGgiLCAib3V0ZXJXaWR0aCIsICJuZXdIZWlnaHQiLCAib3V0ZXJIZWlnaHQiLCAid2lkdGhDaGFuZ2VkIiwgInciLCAiaGVpZ2h0Q2hhbmdlZCIsICJoIiwgInNhbWUiLCAib3RoZXIiLCAiaGFuZGxlTWF4UGFkZGluZyIsICJ1cGRhdGVQb3MiLCAiY2hhbmdlIiwgImdldE1hcmdpbnMiLCAibWFyZ2luRm9yUG9zaXRpb25zIiwgInBvc2l0aW9ucyIsICJtYXJnaW4iLCAiZml0Qm94ZXMiLCAicmVmaXRCb3hlcyIsICJyZWZpdCIsICJjaGFuZ2VkIiwgInVwZGF0ZSIsICJzZXRCb3hEaW1zIiwgInBsYWNlQm94ZXMiLCAidXNlclBhZGRpbmciLCAicGFkZGluZyIsICJkZWZpbmVkIiwgImFkZEJveCIsICJpdGVtIiwgIl9sYXllcnMiLCAieiIsICJkcmF3IiwgInJlbW92ZUJveCIsICJsYXlvdXRJdGVtIiwgInNwbGljZSIsICJjb25maWd1cmUiLCAibWluUGFkZGluZyIsICJ0b1BhZGRpbmciLCAidmVydGljYWxCb3hlcyIsICJob3Jpem9udGFsQm94ZXMiLCAiZWFjaCIsICJiZWZvcmVMYXlvdXQiLCAidmlzaWJsZVZlcnRpY2FsQm94Q291bnQiLCAicmVkdWNlIiwgInRvdGFsIiwgImRpc3BsYXkiLCAiZnJlZXplIiwgIkJhc2VQbGF0Zm9ybSIsICJhY3F1aXJlQ29udGV4dCIsICJjYW52YXMiLCAiYXNwZWN0UmF0aW8iLCAicmVsZWFzZUNvbnRleHQiLCAiY29udGV4dCIsICJhZGRFdmVudExpc3RlbmVyIiwgInR5cGUiLCAibGlzdGVuZXIiLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciIsICJnZXREZXZpY2VQaXhlbFJhdGlvIiwgImdldE1heGltdW1TaXplIiwgImZsb29yIiwgImlzQXR0YWNoZWQiLCAidXBkYXRlQ29uZmlnIiwgImNvbmZpZyIsICJCYXNpY1BsYXRmb3JtIiwgImdldENvbnRleHQiLCAiYW5pbWF0aW9uIiwgIkVYUEFORE9fS0VZIiwgIkVWRU5UX1RZUEVTIiwgInRvdWNoc3RhcnQiLCAidG91Y2htb3ZlIiwgInRvdWNoZW5kIiwgInBvaW50ZXJlbnRlciIsICJwb2ludGVyZG93biIsICJwb2ludGVybW92ZSIsICJwb2ludGVydXAiLCAicG9pbnRlcmxlYXZlIiwgInBvaW50ZXJvdXQiLCAiaXNOdWxsT3JFbXB0eSIsICJpbml0Q2FudmFzIiwgInN0eWxlIiwgInJlbmRlckhlaWdodCIsICJnZXRBdHRyaWJ1dGUiLCAicmVuZGVyV2lkdGgiLCAiaW5pdGlhbCIsICJib3hTaXppbmciLCAiZGlzcGxheVdpZHRoIiwgInJlYWRVc2VkU2l6ZSIsICJ1bmRlZmluZWQiLCAiZGlzcGxheUhlaWdodCIsICJldmVudExpc3RlbmVyT3B0aW9ucyIsICJzdXBwb3J0c0V2ZW50TGlzdGVuZXJPcHRpb25zIiwgInBhc3NpdmUiLCAiYWRkTGlzdGVuZXIiLCAibm9kZSIsICJyZW1vdmVMaXN0ZW5lciIsICJmcm9tTmF0aXZlRXZlbnQiLCAiZXZlbnQiLCAibmF0aXZlIiwgIm5vZGVMaXN0Q29udGFpbnMiLCAibm9kZUxpc3QiLCAiY29udGFpbnMiLCAiY3JlYXRlQXR0YWNoT2JzZXJ2ZXIiLCAib2JzZXJ2ZXIiLCAiTXV0YXRpb25PYnNlcnZlciIsICJlbnRyaWVzIiwgInRyaWdnZXIiLCAiZW50cnkiLCAiYWRkZWROb2RlcyIsICJyZW1vdmVkTm9kZXMiLCAib2JzZXJ2ZSIsICJkb2N1bWVudCIsICJjaGlsZExpc3QiLCAic3VidHJlZSIsICJjcmVhdGVEZXRhY2hPYnNlcnZlciIsICJkcnBMaXN0ZW5pbmdDaGFydHMiLCAiTWFwIiwgIm9sZERldmljZVBpeGVsUmF0aW8iLCAib25XaW5kb3dSZXNpemUiLCAiZHByIiwgIndpbmRvdyIsICJkZXZpY2VQaXhlbFJhdGlvIiwgInJlc2l6ZSIsICJjdXJyZW50RGV2aWNlUGl4ZWxSYXRpbyIsICJsaXN0ZW5EZXZpY2VQaXhlbFJhdGlvQ2hhbmdlcyIsICJzZXQiLCAidW5saXN0ZW5EZXZpY2VQaXhlbFJhdGlvQ2hhbmdlcyIsICJkZWxldGUiLCAiY3JlYXRlUmVzaXplT2JzZXJ2ZXIiLCAiY29udGFpbmVyIiwgIl9nZXRQYXJlbnROb2RlIiwgInRocm90dGxlZCIsICJjbGllbnRXaWR0aCIsICJSZXNpemVPYnNlcnZlciIsICJjb250ZW50UmVjdCIsICJyZWxlYXNlT2JzZXJ2ZXIiLCAiZGlzY29ubmVjdCIsICJjcmVhdGVQcm94eUFuZExpc3RlbiIsICJwcm94eSIsICJjdHgiLCAiRG9tUGxhdGZvcm0iLCAicHJvcCIsICJpc051bGxPclVuZGVmIiwgInJlbW92ZUF0dHJpYnV0ZSIsICJzZXRBdHRyaWJ1dGUiLCAia2V5cyIsICJrZXkiLCAicHJveGllcyIsICIkcHJveGllcyIsICJoYW5kbGVycyIsICJhdHRhY2giLCAiZGV0YWNoIiwgImlzQ29ubmVjdGVkIiwgIl9kZXRlY3RQbGF0Zm9ybSIsICJfaXNEb21TdXBwb3J0ZWQiLCAiT2Zmc2NyZWVuQ2FudmFzIiwgIkVsZW1lbnQiLCAiYWN0aXZlIiwgIiRhbmltYXRpb25zIiwgInRvb2x0aXBQb3NpdGlvbiIsICJoYXNWYWx1ZSIsICJpc051bWJlciIsICJwcm9wcyIsICJmaW5hbCIsICJhbmltcyIsICJyZXQiLCAiX3RvIiwgImRlZmF1bHRzIiwgImRlZmF1bHRSb3V0ZXMiLCAiYXV0b1NraXAiLCAic2NhbGUiLCAidGlja3MiLCAidGlja09wdHMiLCAiZGV0ZXJtaW5lZE1heFRpY2tzIiwgImRldGVybWluZU1heFRpY2tzIiwgInRpY2tzTGltaXQiLCAibWluIiwgIm1heFRpY2tzTGltaXQiLCAibWFqb3JJbmRpY2VzIiwgIm1ham9yIiwgImVuYWJsZWQiLCAiZ2V0TWFqb3JJbmRpY2VzIiwgIm51bU1ham9ySW5kaWNlcyIsICJmaXJzdCIsICJsYXN0IiwgIm5ld1RpY2tzIiwgInNraXBNYWpvcnMiLCAic3BhY2luZyIsICJjYWxjdWxhdGVTcGFjaW5nIiwgImF2Z01ham9yU3BhY2luZyIsICJyb3VuZCIsICJvZmZzZXQiLCAidGlja0xlbmd0aCIsICJfdGlja1NpemUiLCAibWF4U2NhbGUiLCAiX2xlbmd0aCIsICJtYXhDaGFydCIsICJfbWF4TGVuZ3RoIiwgImV2ZW5NYWpvclNwYWNpbmciLCAiZ2V0RXZlblNwYWNpbmciLCAiZmFjdG9ycyIsICJfZmFjdG9yaXplIiwgInJlc3VsdCIsICJuZXh0IiwgImNlaWwiLCAibWFqb3JTdGFydCIsICJtYWpvckVuZCIsICJ2YWx1ZU9yRGVmYXVsdCIsICJhcnIiLCAibGVuIiwgInJldmVyc2VBbGlnbiIsICJhbGlnbiIsICJvZmZzZXRGcm9tRWRnZSIsICJlZGdlIiwgImdldFRpY2tzTGltaXQiLCAidGlja3NMZW5ndGgiLCAic2FtcGxlIiwgIm51bUl0ZW1zIiwgImluY3JlbWVudCIsICJnZXRQaXhlbEZvckdyaWRMaW5lIiwgIm9mZnNldEdyaWRMaW5lcyIsICJ2YWxpZEluZGV4IiwgIl9zdGFydFBpeGVsIiwgIl9lbmRQaXhlbCIsICJlcHNpbG9uIiwgImxpbmVWYWx1ZSIsICJnZXRQaXhlbEZvclRpY2siLCAiZ2FyYmFnZUNvbGxlY3QiLCAiY2FjaGVzIiwgImNhY2hlIiwgImdjIiwgImdjTGVuIiwgImdldFRpY2tNYXJrTGVuZ3RoIiwgImRyYXdUaWNrcyIsICJnZXRUaXRsZUhlaWdodCIsICJmYWxsYmFjayIsICJmb250IiwgInRvRm9udCIsICJsaW5lcyIsICJpc0FycmF5IiwgInRleHQiLCAibGluZUhlaWdodCIsICJjcmVhdGVTY2FsZUNvbnRleHQiLCAicGFyZW50IiwgImNyZWF0ZUNvbnRleHQiLCAiY3JlYXRlVGlja0NvbnRleHQiLCAidGljayIsICJ0aXRsZUFsaWduIiwgIl90b0xlZnRSaWdodENlbnRlciIsICJ0aXRsZUFyZ3MiLCAic2NhbGVzIiwgInJvdGF0aW9uIiwgIm1heFdpZHRoIiwgInRpdGxlWCIsICJ0aXRsZVkiLCAiX2FsaWduU3RhcnRFbmQiLCAicG9zaXRpb25BeGlzSUQiLCAiZ2V0UGl4ZWxGb3JWYWx1ZSIsICJIQUxGX1BJIiwgIlNjYWxlIiwgImNmZyIsICJpZCIsICJfbWFyZ2lucyIsICJtYXhIZWlnaHQiLCAicGFkZGluZ1RvcCIsICJwYWRkaW5nQm90dG9tIiwgInBhZGRpbmdMZWZ0IiwgInBhZGRpbmdSaWdodCIsICJsYWJlbFJvdGF0aW9uIiwgIl9yYW5nZSIsICJfZ3JpZExpbmVJdGVtcyIsICJfbGFiZWxJdGVtcyIsICJfbGFiZWxTaXplcyIsICJfbG9uZ2VzdFRleHRDYWNoZSIsICJfdXNlck1heCIsICJfdXNlck1pbiIsICJfc3VnZ2VzdGVkTWF4IiwgIl9zdWdnZXN0ZWRNaW4iLCAiX3RpY2tzTGVuZ3RoIiwgIl9ib3JkZXJWYWx1ZSIsICJfY2FjaGUiLCAiX2RhdGFMaW1pdHNDYWNoZWQiLCAiJGNvbnRleHQiLCAic2V0Q29udGV4dCIsICJzdWdnZXN0ZWRNaW4iLCAic3VnZ2VzdGVkTWF4IiwgInJhdyIsICJnZXRVc2VyQm91bmRzIiwgImZpbml0ZU9yRGVmYXVsdCIsICJORUdBVElWRV9JTkZJTklUWSIsICJtaW5EZWZpbmVkIiwgImlzRmluaXRlIiwgIm1heERlZmluZWQiLCAiZ2V0TWluTWF4IiwgImNhblN0YWNrIiwgIm1ldGFzIiwgImdldE1hdGNoaW5nVmlzaWJsZU1ldGFzIiwgImdldFRpY2tzIiwgImdldExhYmVscyIsICJsYWJlbHMiLCAieExhYmVscyIsICJ5TGFiZWxzIiwgImdldExhYmVsSXRlbXMiLCAiX2NvbXB1dGVMYWJlbEl0ZW1zIiwgImJlZm9yZVVwZGF0ZSIsICJjYWxsIiwgIm1hcmdpbnMiLCAiYmVnaW5BdFplcm8iLCAiZ3JhY2UiLCAic2FtcGxlU2l6ZSIsICJiZWZvcmVTZXREaW1lbnNpb25zIiwgInNldERpbWVuc2lvbnMiLCAiYWZ0ZXJTZXREaW1lbnNpb25zIiwgImJlZm9yZURhdGFMaW1pdHMiLCAiZGV0ZXJtaW5lRGF0YUxpbWl0cyIsICJhZnRlckRhdGFMaW1pdHMiLCAiX2FkZEdyYWNlIiwgImJlZm9yZUJ1aWxkVGlja3MiLCAiYnVpbGRUaWNrcyIsICJhZnRlckJ1aWxkVGlja3MiLCAic2FtcGxpbmdFbmFibGVkIiwgIl9jb252ZXJ0VGlja3NUb0xhYmVscyIsICJiZWZvcmVDYWxjdWxhdGVMYWJlbFJvdGF0aW9uIiwgImNhbGN1bGF0ZUxhYmVsUm90YXRpb24iLCAiYWZ0ZXJDYWxjdWxhdGVMYWJlbFJvdGF0aW9uIiwgInNvdXJjZSIsICJhZnRlckF1dG9Ta2lwIiwgImJlZm9yZUZpdCIsICJmaXQiLCAiYWZ0ZXJGaXQiLCAiYWZ0ZXJVcGRhdGUiLCAicmV2ZXJzZVBpeGVscyIsICJzdGFydFBpeGVsIiwgImVuZFBpeGVsIiwgIl9hbGlnblRvUGl4ZWxzIiwgImFsaWduVG9QaXhlbHMiLCAiX2NhbGxIb29rcyIsICJuYW1lIiwgIm5vdGlmeVBsdWdpbnMiLCAiYmVmb3JlVGlja1RvTGFiZWxDb252ZXJzaW9uIiwgImdlbmVyYXRlVGlja0xhYmVscyIsICJsYWJlbCIsICJjYWxsYmFjayIsICJhZnRlclRpY2tUb0xhYmVsQ29udmVyc2lvbiIsICJudW1UaWNrcyIsICJtaW5Sb3RhdGlvbiIsICJtYXhSb3RhdGlvbiIsICJ0aWNrV2lkdGgiLCAibWF4TGFiZWxEaWFnb25hbCIsICJfaXNWaXNpYmxlIiwgImxhYmVsU2l6ZXMiLCAiX2dldExhYmVsU2l6ZXMiLCAibWF4TGFiZWxXaWR0aCIsICJ3aWRlc3QiLCAibWF4TGFiZWxIZWlnaHQiLCAiaGlnaGVzdCIsICJfbGltaXRWYWx1ZSIsICJncmlkIiwgInRpdGxlIiwgInRvRGVncmVlcyIsICJhc2luIiwgIm1pblNpemUiLCAidGl0bGVPcHRzIiwgImdyaWRPcHRzIiwgInRpdGxlSGVpZ2h0IiwgInRpY2tQYWRkaW5nIiwgImFuZ2xlUmFkaWFucyIsICJ0b1JhZGlhbnMiLCAiY29zIiwgInNpbiIsICJsYWJlbEhlaWdodCIsICJtaXJyb3IiLCAibGFiZWxXaWR0aCIsICJfY2FsY3VsYXRlUGFkZGluZyIsICJfaGFuZGxlTWFyZ2lucyIsICJpc1JvdGF0ZWQiLCAibGFiZWxzQmVsb3dUaWNrcyIsICJvZmZzZXRMZWZ0IiwgIm9mZnNldFJpZ2h0IiwgImlzRnVsbFNpemUiLCAiX2NvbXB1dGVMYWJlbFNpemVzIiwgIndpZHRocyIsICJoZWlnaHRzIiwgIndpZGVzdExhYmVsU2l6ZSIsICJoaWdoZXN0TGFiZWxTaXplIiwgImpsZW4iLCAidGlja0ZvbnQiLCAiZm9udFN0cmluZyIsICJuZXN0ZWRMYWJlbCIsICJfcmVzb2x2ZVRpY2tGb250T3B0aW9ucyIsICJzdHJpbmciLCAiX21lYXN1cmVUZXh0IiwgInZhbHVlQXQiLCAiaWR4IiwgImdldExhYmVsRm9yVmFsdWUiLCAiTmFOIiwgImdldFZhbHVlRm9yUGl4ZWwiLCAicGl4ZWwiLCAiZ2V0UGl4ZWxGb3JEZWNpbWFsIiwgImRlY2ltYWwiLCAiX2ludDE2UmFuZ2UiLCAiX2FsaWduUGl4ZWwiLCAiZ2V0RGVjaW1hbEZvclBpeGVsIiwgImdldEJhc2VQaXhlbCIsICJnZXRCYXNlVmFsdWUiLCAib3B0aW9uVGlja3MiLCAicm90IiwgImF1dG9Ta2lwUGFkZGluZyIsICJfY29tcHV0ZUdyaWRMaW5lSXRlbXMiLCAiYm9yZGVyIiwgInRsIiwgImJvcmRlck9wdHMiLCAiYXhpc1dpZHRoIiwgImF4aXNIYWxmV2lkdGgiLCAiYWxpZ25Cb3JkZXJWYWx1ZSIsICJib3JkZXJWYWx1ZSIsICJhbGlnbmVkTGluZVZhbHVlIiwgInR4MSIsICJ0eTEiLCAidHgyIiwgInR5MiIsICJ4MSIsICJ5MSIsICJ4MiIsICJ5MiIsICJsaW1pdCIsICJzdGVwIiwgIm9wdHNBdEluZGV4IiwgIm9wdHNBdEluZGV4Qm9yZGVyIiwgImxpbmVXaWR0aCIsICJsaW5lQ29sb3IiLCAiY29sb3IiLCAiYm9yZGVyRGFzaCIsICJkYXNoIiwgImJvcmRlckRhc2hPZmZzZXQiLCAiZGFzaE9mZnNldCIsICJ0aWNrQ29sb3IiLCAidGlja0JvcmRlckRhc2giLCAidGlja0JvcmRlckRhc2hPZmZzZXQiLCAiY3Jvc3NBbGlnbiIsICJ0aWNrQW5kUGFkZGluZyIsICJoVGlja0FuZFBhZGRpbmciLCAidGV4dEFsaWduIiwgImxpbmVDb3VudCIsICJ0ZXh0T2Zmc2V0IiwgInRleHRCYXNlbGluZSIsICJfZ2V0WEF4aXNMYWJlbEFsaWdubWVudCIsICJfZ2V0WUF4aXNMYWJlbEFsaWdubWVudCIsICJsYWJlbE9mZnNldCIsICJoYWxmQ291bnQiLCAic3Ryb2tlQ29sb3IiLCAidGV4dFN0cm9rZUNvbG9yIiwgInN0cm9rZVdpZHRoIiwgInRleHRTdHJva2VXaWR0aCIsICJ0aWNrVGV4dEFsaWduIiwgInNob3dMYWJlbEJhY2tkcm9wIiwgImJhY2tkcm9wIiwgImxhYmVsUGFkZGluZyIsICJiYWNrZHJvcFBhZGRpbmciLCAiYmFja2Ryb3BDb2xvciIsICJ0cmFuc2xhdGlvbiIsICJfY29tcHV0ZUxhYmVsQXJlYSIsICJkcmF3QmFja2dyb3VuZCIsICJiYWNrZ3JvdW5kQ29sb3IiLCAic2F2ZSIsICJmaWxsU3R5bGUiLCAiZmlsbFJlY3QiLCAicmVzdG9yZSIsICJnZXRMaW5lV2lkdGhGb3JWYWx1ZSIsICJmaW5kSW5kZXgiLCAidCIsICJvcHRzIiwgImRyYXdHcmlkIiwgImRyYXdMaW5lIiwgInAxIiwgInAyIiwgInN0cm9rZVN0eWxlIiwgInNldExpbmVEYXNoIiwgImxpbmVEYXNoT2Zmc2V0IiwgImJlZ2luUGF0aCIsICJtb3ZlVG8iLCAibGluZVRvIiwgInN0cm9rZSIsICJkcmF3T25DaGFydEFyZWEiLCAiZHJhd0JvcmRlciIsICJsYXN0TGluZVdpZHRoIiwgImRyYXdMYWJlbHMiLCAiYXJlYSIsICJjbGlwQXJlYSIsICJyZW5kZXJUZXh0T3B0aW9ucyIsICJyZW5kZXJUZXh0IiwgInVuY2xpcEFyZWEiLCAiZHJhd1RpdGxlIiwgInR6IiwgImd6IiwgImJ6IiwgImF4aXNJRCIsICJfbWF4RGlnaXRzIiwgImZvbnRTaXplIiwgIlR5cGVkUmVnaXN0cnkiLCAic2NvcGUiLCAiY3JlYXRlIiwgImlzRm9yVHlwZSIsICJpc1Byb3RvdHlwZU9mIiwgInJlZ2lzdGVyIiwgInByb3RvIiwgImdldFByb3RvdHlwZU9mIiwgInBhcmVudFNjb3BlIiwgImlzSUNoYXJ0Q29tcG9uZW50IiwgInJlZ2lzdGVyRGVmYXVsdHMiLCAib3ZlcnJpZGVzIiwgImdldCIsICJ1bnJlZ2lzdGVyIiwgIml0ZW1EZWZhdWx0cyIsICJtZXJnZSIsICJyb3V0ZURlZmF1bHRzIiwgImRlc2NyaXB0b3JzIiwgImRlc2NyaWJlIiwgInJvdXRlcyIsICJwcm9wZXJ0eSIsICJwcm9wZXJ0eVBhcnRzIiwgInNwbGl0IiwgInNvdXJjZU5hbWUiLCAicG9wIiwgInNvdXJjZVNjb3BlIiwgImpvaW4iLCAicGFydHMiLCAidGFyZ2V0TmFtZSIsICJ0YXJnZXRTY29wZSIsICJyb3V0ZSIsICJSZWdpc3RyeSIsICJjb250cm9sbGVycyIsICJEYXRhc2V0Q29udHJvbGxlciIsICJwbHVnaW5zIiwgIl90eXBlZFJlZ2lzdHJpZXMiLCAiYXJncyIsICJfZWFjaCIsICJyZW1vdmUiLCAiYWRkQ29udHJvbGxlcnMiLCAiYWRkRWxlbWVudHMiLCAiYWRkUGx1Z2lucyIsICJhZGRTY2FsZXMiLCAiZ2V0Q29udHJvbGxlciIsICJfZ2V0IiwgImdldEVsZW1lbnQiLCAiZ2V0UGx1Z2luIiwgImdldFNjYWxlIiwgInJlbW92ZUNvbnRyb2xsZXJzIiwgInJlbW92ZUVsZW1lbnRzIiwgInJlbW92ZVBsdWdpbnMiLCAicmVtb3ZlU2NhbGVzIiwgIm1ldGhvZCIsICJ0eXBlZFJlZ2lzdHJ5IiwgImFyZyIsICJyZWciLCAiX2dldFJlZ2lzdHJ5Rm9yVHlwZSIsICJfZXhlYyIsICJpdGVtUmVnIiwgInJlZ2lzdHJ5IiwgImNvbXBvbmVudCIsICJjYW1lbE1ldGhvZCIsICJfY2FwaXRhbGl6ZSIsICJQbHVnaW5TZXJ2aWNlIiwgIl9pbml0IiwgIm5vdGlmeSIsICJob29rIiwgIl9jcmVhdGVEZXNjcmlwdG9ycyIsICJfbm90aWZ5IiwgIl9kZXNjcmlwdG9ycyIsICJkZXNjcmlwdG9yIiwgInBsdWdpbiIsICJjYWxsQ2FsbGJhY2siLCAiY2FuY2VsYWJsZSIsICJpbnZhbGlkYXRlIiwgIl9vbGRDYWNoZSIsICJfbm90aWZ5U3RhdGVDaGFuZ2VzIiwgImFsbCIsICJhbGxQbHVnaW5zIiwgImNyZWF0ZURlc2NyaXB0b3JzIiwgInByZXZpb3VzRGVzY3JpcHRvcnMiLCAic29tZSIsICJsb2NhbElkcyIsICJsb2NhbCIsICJnZXRPcHRzIiwgInBsdWdpbk9wdHMiLCAicGx1Z2luU2NvcGVLZXlzIiwgInNjb3BlcyIsICJnZXRPcHRpb25TY29wZXMiLCAiY3JlYXRlUmVzb2x2ZXIiLCAic2NyaXB0YWJsZSIsICJpbmRleGFibGUiLCAiYWxsS2V5cyIsICJnZXRJbmRleEF4aXMiLCAiZGF0YXNldERlZmF1bHRzIiwgImRhdGFzZXRzIiwgImRhdGFzZXRPcHRpb25zIiwgImluZGV4QXhpcyIsICJnZXRBeGlzRnJvbURlZmF1bHRTY2FsZUlEIiwgImdldERlZmF1bHRTY2FsZUlERnJvbUF4aXMiLCAiaWRNYXRjaGVzQXhpcyIsICJheGlzRnJvbVBvc2l0aW9uIiwgImRldGVybWluZUF4aXMiLCAic2NhbGVPcHRpb25zIiwgInRvTG93ZXJDYXNlIiwgImdldEF4aXNGcm9tRGF0YXNldCIsICJyZXRyaWV2ZUF4aXNGcm9tRGF0YXNldHMiLCAiYm91bmREcyIsICJkIiwgInhBeGlzSUQiLCAieUF4aXNJRCIsICJtZXJnZVNjYWxlQ29uZmlnIiwgImNoYXJ0RGVmYXVsdHMiLCAiY29uZmlnU2NhbGVzIiwgImNoYXJ0SW5kZXhBeGlzIiwgInNjYWxlQ29uZiIsICJjb25zb2xlIiwgImVycm9yIiwgIl9wcm94eSIsICJ3YXJuIiwgImRlZmF1bHRJZCIsICJkZWZhdWx0U2NhbGVPcHRpb25zIiwgIm1lcmdlSWYiLCAiZGVmYXVsdElEIiwgImluaXRPcHRpb25zIiwgImluaXREYXRhIiwgImluaXRDb25maWciLCAia2V5Q2FjaGUiLCAia2V5c0NhY2hlZCIsICJTZXQiLCAiY2FjaGVkS2V5cyIsICJjYWNoZUtleSIsICJnZW5lcmF0ZSIsICJhZGRJZkZvdW5kIiwgIm9iaiIsICJyZXNvbHZlT2JqZWN0S2V5IiwgIkNvbmZpZyIsICJfY29uZmlnIiwgIl9zY29wZUNhY2hlIiwgIl9yZXNvbHZlckNhY2hlIiwgInBsYXRmb3JtIiwgImNsZWFyQ2FjaGUiLCAiY2xlYXIiLCAiZGF0YXNldFNjb3BlS2V5cyIsICJkYXRhc2V0VHlwZSIsICJkYXRhc2V0QW5pbWF0aW9uU2NvcGVLZXlzIiwgInRyYW5zaXRpb24iLCAiZGF0YXNldEVsZW1lbnRTY29wZUtleXMiLCAiZWxlbWVudFR5cGUiLCAiYWRkaXRpb25hbE9wdGlvblNjb3BlcyIsICJfY2FjaGVkU2NvcGVzIiwgIm1haW5TY29wZSIsICJyZXNldENhY2hlIiwgImtleUxpc3RzIiwgImNhY2hlZCIsICJBcnJheSIsICJmcm9tIiwgImhhcyIsICJjaGFydE9wdGlvblNjb3BlcyIsICJyZXNvbHZlTmFtZWRPcHRpb25zIiwgIm5hbWVzIiwgInByZWZpeGVzIiwgIiRzaGFyZWQiLCAicmVzb2x2ZXIiLCAic3ViUHJlZml4ZXMiLCAiZ2V0UmVzb2x2ZXIiLCAibmVlZENvbnRleHQiLCAiaXNGdW5jdGlvbiIsICJzdWJSZXNvbHZlciIsICJfYXR0YWNoQ29udGV4dCIsICJkZXNjcmlwdG9yRGVmYXVsdHMiLCAicmVzb2x2ZXJDYWNoZSIsICJfY3JlYXRlUmVzb2x2ZXIiLCAicCIsICJoYXNGdW5jdGlvbiIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwgImFjYyIsICJpc1NjcmlwdGFibGUiLCAiaXNJbmRleGFibGUiLCAiS05PV05fUE9TSVRJT05TIiwgInBvc2l0aW9uSXNIb3Jpem9udGFsIiwgImNvbXBhcmUyTGV2ZWwiLCAibDEiLCAibDIiLCAib25BbmltYXRpb25zQ29tcGxldGUiLCAiYW5pbWF0aW9uT3B0aW9ucyIsICJvbkNvbXBsZXRlIiwgIm9uQW5pbWF0aW9uUHJvZ3Jlc3MiLCAib25Qcm9ncmVzcyIsICJnZXRDYW52YXMiLCAiZ2V0RWxlbWVudEJ5SWQiLCAiaW5zdGFuY2VzIiwgImdldENoYXJ0IiwgInZhbHVlcyIsICJjIiwgIm1vdmVOdW1lcmljS2V5cyIsICJtb3ZlIiwgImludEtleSIsICJkZXRlcm1pbmVMYXN0RXZlbnQiLCAibGFzdEV2ZW50IiwgImluQ2hhcnRBcmVhIiwgImlzQ2xpY2siLCAiZ2V0RGF0YXNldEFyZWEiLCAieFNjYWxlIiwgInlTY2FsZSIsICJDaGFydCIsICJpbnZhbGlkYXRlUGx1Z2lucyIsICJ1c2VyQ29uZmlnIiwgImluaXRpYWxDYW52YXMiLCAiZXhpc3RpbmdDaGFydCIsICJ1aWQiLCAiX29wdGlvbnMiLCAiX2FzcGVjdFJhdGlvIiwgIl9tZXRhc2V0cyIsICJfc3RhY2tzIiwgIl9hY3RpdmUiLCAiX2xhc3RFdmVudCIsICJfbGlzdGVuZXJzIiwgIl9yZXNwb25zaXZlTGlzdGVuZXJzIiwgIl9zb3J0ZWRNZXRhc2V0cyIsICJfcGx1Z2lucyIsICJfaGlkZGVuSW5kaWNlcyIsICJhdHRhY2hlZCIsICJfYW5pbWF0aW9uc0Rpc2FibGVkIiwgIl9kb1Jlc2l6ZSIsICJkZWJvdW5jZSIsICJtb2RlIiwgInJlc2l6ZURlbGF5IiwgIl9kYXRhQ2hhbmdlcyIsICJhbmltYXRvciIsICJsaXN0ZW4iLCAiX2luaXRpYWxpemUiLCAibWFpbnRhaW5Bc3BlY3RSYXRpbyIsICJyZXNwb25zaXZlIiwgInJldGluYVNjYWxlIiwgImJpbmRFdmVudHMiLCAiY2xlYXJDYW52YXMiLCAic3RvcCIsICJydW5uaW5nIiwgIl9yZXNpemUiLCAiX3Jlc2l6ZUJlZm9yZURyYXciLCAibmV3U2l6ZSIsICJuZXdSYXRpbyIsICJvblJlc2l6ZSIsICJyZW5kZXIiLCAiZW5zdXJlU2NhbGVzSGF2ZUlEcyIsICJzY2FsZXNPcHRpb25zIiwgImF4aXNPcHRpb25zIiwgImJ1aWxkT3JVcGRhdGVTY2FsZXMiLCAic2NhbGVPcHRzIiwgInVwZGF0ZWQiLCAibWFwIiwgImlzUmFkaWFsIiwgImRwb3NpdGlvbiIsICJkdHlwZSIsICJzY2FsZVR5cGUiLCAic2NhbGVDbGFzcyIsICJoYXNVcGRhdGVkIiwgIl91cGRhdGVNZXRhc2V0cyIsICJudW1EYXRhIiwgIm51bU1ldGEiLCAiX2Rlc3Ryb3lEYXRhc2V0TWV0YSIsICJzbGljZSIsICJfcmVtb3ZlVW5yZWZlcmVuY2VkTWV0YXNldHMiLCAiX2RhdGFzZXQiLCAiYnVpbGRPclVwZGF0ZUNvbnRyb2xsZXJzIiwgIm5ld0NvbnRyb2xsZXJzIiwgIm9yZGVyIiwgInZpc2libGUiLCAiaXNEYXRhc2V0VmlzaWJsZSIsICJ1cGRhdGVJbmRleCIsICJsaW5rU2NhbGVzIiwgIkNvbnRyb2xsZXJDbGFzcyIsICJkYXRhc2V0RWxlbWVudFR5cGUiLCAiZGF0YUVsZW1lbnRUeXBlIiwgIl9yZXNldEVsZW1lbnRzIiwgInJlc2V0IiwgImFuaW1zRGlzYWJsZWQiLCAiX3VwZGF0ZVNjYWxlcyIsICJfY2hlY2tFdmVudEJpbmRpbmdzIiwgIl91cGRhdGVIaWRkZW5JbmRpY2VzIiwgImJ1aWxkT3JVcGRhdGVFbGVtZW50cyIsICJnZXRNYXhPdmVyZmxvdyIsICJfbWluUGFkZGluZyIsICJhdXRvUGFkZGluZyIsICJfdXBkYXRlTGF5b3V0IiwgIl91cGRhdGVEYXRhc2V0cyIsICJfZXZlbnRIYW5kbGVyIiwgIl91cGRhdGVIb3ZlclN0eWxlcyIsICJleGlzdGluZ0V2ZW50cyIsICJuZXdFdmVudHMiLCAiZXZlbnRzIiwgInNldHNFcXVhbCIsICJ1bmJpbmRFdmVudHMiLCAiY2hhbmdlcyIsICJfZ2V0VW5pZm9ybURhdGFDaGFuZ2VzIiwgImRhdGFzZXRDb3VudCIsICJtYWtlU2V0IiwgImNoYW5nZVNldCIsICJub0FyZWEiLCAiX2lkeCIsICJfdXBkYXRlRGF0YXNldCIsICJfdXBkYXRlIiwgImxheWVycyIsICJfZHJhd0RhdGFzZXRzIiwgIl9nZXRTb3J0ZWREYXRhc2V0TWV0YXMiLCAiZmlsdGVyVmlzaWJsZSIsICJfZHJhd0RhdGFzZXQiLCAiY2xpcCIsICJfY2xpcCIsICJ1c2VDbGlwIiwgImRpc2FibGVkIiwgImdldEVsZW1lbnRzQXRFdmVudEZvck1vZGUiLCAiSW50ZXJhY3Rpb24iLCAiaGlkZGVuIiwgIl9wYXJzZWQiLCAiZ2V0VmlzaWJsZURhdGFzZXRDb3VudCIsICJzZXREYXRhc2V0VmlzaWJpbGl0eSIsICJ0b2dnbGVEYXRhVmlzaWJpbGl0eSIsICJnZXREYXRhVmlzaWJpbGl0eSIsICJfdXBkYXRlVmlzaWJpbGl0eSIsICJkYXRhSW5kZXgiLCAiX3Jlc29sdmVBbmltYXRpb25zIiwgImhpZGUiLCAic2hvdyIsICJfZGVzdHJveSIsICJfc3RvcCIsICJkZXN0cm95IiwgInRvQmFzZTY0SW1hZ2UiLCAidG9EYXRhVVJMIiwgImJpbmRVc2VyRXZlbnRzIiwgImJpbmRSZXNwb25zaXZlRXZlbnRzIiwgImxpc3RlbmVycyIsICJfYWRkIiwgIm9mZnNldFgiLCAib2Zmc2V0WSIsICJfcmVtb3ZlIiwgImRldGFjaGVkIiwgInVwZGF0ZUhvdmVyU3R5bGUiLCAicHJlZml4IiwgImdldEFjdGl2ZUVsZW1lbnRzIiwgInNldEFjdGl2ZUVsZW1lbnRzIiwgImFjdGl2ZUVsZW1lbnRzIiwgImxhc3RBY3RpdmUiLCAiX2VsZW1lbnRzRXF1YWwiLCAiaXNQbHVnaW5FbmFibGVkIiwgInBsdWdpbklkIiwgInJlcGxheSIsICJob3Zlck9wdGlvbnMiLCAiaG92ZXIiLCAiZGVhY3RpdmF0ZWQiLCAiYWN0aXZhdGVkIiwgImV2ZW50RmlsdGVyIiwgIl9oYW5kbGVFdmVudCIsICJfZ2V0QWN0aXZlRWxlbWVudHMiLCAiX2lzQ2xpY2tFdmVudCIsICJvbkhvdmVyIiwgIm9uQ2xpY2siLCAidmVyc2lvbiIsICJjbGlwQXJjIiwgInBpeGVsTWFyZ2luIiwgIm91dGVyUmFkaXVzIiwgImlubmVyUmFkaXVzIiwgImFuZ2xlTWFyZ2luIiwgImFyYyIsICJjbG9zZVBhdGgiLCAidG9SYWRpdXNDb3JuZXJzIiwgIl9yZWFkVmFsdWVUb1Byb3BzIiwgInBhcnNlQm9yZGVyUmFkaXVzIiwgImFuZ2xlRGVsdGEiLCAibyIsICJib3JkZXJSYWRpdXMiLCAiaGFsZlRoaWNrbmVzcyIsICJpbm5lckxpbWl0IiwgImNvbXB1dGVPdXRlckxpbWl0IiwgInZhbCIsICJvdXRlckFyY0xpbWl0IiwgIm91dGVyU3RhcnQiLCAib3V0ZXJFbmQiLCAiaW5uZXJTdGFydCIsICJpbm5lckVuZCIsICJyVGhldGFUb1hZIiwgInIiLCAidGhldGEiLCAicGF0aEFyYyIsICJjaXJjdWxhciIsICJpbm5lclIiLCAic3BhY2luZ09mZnNldCIsICJhbHBoYSIsICJub1NwYWNpbmdJbm5lclJhZGl1cyIsICJub1NwYWNpbmdPdXRlclJhZGl1cyIsICJhdk5vZ1NwYWNpbmdSYWRpdXMiLCAiYWRqdXN0ZWRBbmdsZSIsICJiZXRhIiwgIlBJIiwgImFuZ2xlT2Zmc2V0IiwgIm91dGVyU3RhcnRBZGp1c3RlZFJhZGl1cyIsICJvdXRlckVuZEFkanVzdGVkUmFkaXVzIiwgIm91dGVyU3RhcnRBZGp1c3RlZEFuZ2xlIiwgIm91dGVyRW5kQWRqdXN0ZWRBbmdsZSIsICJpbm5lclN0YXJ0QWRqdXN0ZWRSYWRpdXMiLCAiaW5uZXJFbmRBZGp1c3RlZFJhZGl1cyIsICJpbm5lclN0YXJ0QWRqdXN0ZWRBbmdsZSIsICJpbm5lckVuZEFkanVzdGVkQW5nbGUiLCAib3V0ZXJNaWRBZGp1c3RlZEFuZ2xlIiwgInBDZW50ZXIiLCAicDQiLCAiaW5uZXJNaWRBZGp1c3RlZEFuZ2xlIiwgInA4IiwgIm91dGVyU3RhcnRYIiwgIm91dGVyU3RhcnRZIiwgIm91dGVyRW5kWCIsICJvdXRlckVuZFkiLCAiZHJhd0FyYyIsICJmdWxsQ2lyY2xlcyIsICJjaXJjdW1mZXJlbmNlIiwgImZpbGwiLCAiaXNOYU4iLCAiVEFVIiwgImJvcmRlcldpZHRoIiwgImJvcmRlckpvaW5TdHlsZSIsICJpbm5lciIsICJib3JkZXJBbGlnbiIsICJsaW5lSm9pbiIsICJBcmNFbGVtZW50IiwgImNoYXJ0WCIsICJjaGFydFkiLCAickFkanVzdCIsICJfY2lyY3VtZmVyZW5jZSIsICJiZXR3ZWVuQW5nbGVzIiwgIndpdGhpblJhZGl1cyIsICJfaXNCZXR3ZWVuIiwgImhhbGZBbmdsZSIsICJoYWxmUmFkaXVzIiwgInRyYW5zbGF0ZSIsICJmaXgiLCAicmFkaXVzT2Zmc2V0IiwgImJvcmRlckNvbG9yIiwgIl9zY3JpcHRhYmxlIiwgIl9pbmRleGFibGUiLCAiZ2V0QmFyQm91bmRzIiwgImJhciIsICJ1c2VGaW5hbFBvc2l0aW9uIiwgIngiLCAieSIsICJiYXNlIiwgIndpZHRoIiwgImhlaWdodCIsICJnZXRQcm9wcyIsICJsZWZ0IiwgInJpZ2h0IiwgInRvcCIsICJib3R0b20iLCAiaGFsZiIsICJob3Jpem9udGFsIiwgIk1hdGgiLCAibWluIiwgIm1heCIsICJza2lwT3JMaW1pdCIsICJza2lwIiwgInZhbHVlIiwgIl9saW1pdFZhbHVlIiwgInBhcnNlQm9yZGVyV2lkdGgiLCAibWF4VyIsICJtYXhIIiwgIm9wdGlvbnMiLCAiYm9yZGVyV2lkdGgiLCAiYm9yZGVyU2tpcHBlZCIsICJvIiwgInRvVFJCTCIsICJ0IiwgInIiLCAiYiIsICJsIiwgInBhcnNlQm9yZGVyUmFkaXVzIiwgImVuYWJsZUJvcmRlclJhZGl1cyIsICJib3JkZXJSYWRpdXMiLCAidG9UUkJMQ29ybmVycyIsICJtYXhSIiwgImVuYWJsZUJvcmRlciIsICJpc09iamVjdCIsICJ0b3BMZWZ0IiwgInRvcFJpZ2h0IiwgImJvdHRvbUxlZnQiLCAiYm90dG9tUmlnaHQiLCAiYm91bmRpbmdSZWN0cyIsICJib3VuZHMiLCAiYm9yZGVyIiwgInJhZGl1cyIsICJvdXRlciIsICJ3IiwgImgiLCAiaW5uZXIiLCAiaW5SYW5nZSIsICJza2lwWCIsICJza2lwWSIsICJza2lwQm90aCIsICJfaXNCZXR3ZWVuIiwgImhhc1JhZGl1cyIsICJhZGROb3JtYWxSZWN0UGF0aCIsICJjdHgiLCAicmVjdCIsICJpbmZsYXRlUmVjdCIsICJhbW91bnQiLCAicmVmUmVjdCIsICJCYXJFbGVtZW50IiwgIkVsZW1lbnQiLCAiY29uc3RydWN0b3IiLCAiY2ZnIiwgInVuZGVmaW5lZCIsICJpbmZsYXRlQW1vdW50IiwgIk9iamVjdCIsICJhc3NpZ24iLCAiZHJhdyIsICJib3JkZXJDb2xvciIsICJiYWNrZ3JvdW5kQ29sb3IiLCAiYWRkUmVjdFBhdGgiLCAiYWRkUm91bmRlZFJlY3RQYXRoIiwgInNhdmUiLCAiYmVnaW5QYXRoIiwgImNsaXAiLCAiZmlsbFN0eWxlIiwgImZpbGwiLCAicmVzdG9yZSIsICJtb3VzZVgiLCAibW91c2VZIiwgImluWFJhbmdlIiwgImluWVJhbmdlIiwgImdldENlbnRlclBvaW50IiwgImdldFJhbmdlIiwgImF4aXMiLCAiaWQiLCAiZGVmYXVsdHMiLCAicG9pbnRTdHlsZSIsICJkZWZhdWx0Um91dGVzIiwgImdldEJveFNpemUiLCAibGFiZWxPcHRzIiwgImZvbnRTaXplIiwgImJveEhlaWdodCIsICJib3hXaWR0aCIsICJ1c2VQb2ludFN0eWxlIiwgIk1hdGgiLCAibWluIiwgInBvaW50U3R5bGVXaWR0aCIsICJpdGVtSGVpZ2h0IiwgIm1heCIsICJpdGVtc0VxdWFsIiwgImEiLCAiYiIsICJkYXRhc2V0SW5kZXgiLCAiaW5kZXgiLCAiTGVnZW5kIiwgIkVsZW1lbnQiLCAiY29uc3RydWN0b3IiLCAiY29uZmlnIiwgIl9hZGRlZCIsICJsZWdlbmRIaXRCb3hlcyIsICJfaG92ZXJlZEl0ZW0iLCAiZG91Z2hudXRNb2RlIiwgImNoYXJ0IiwgIm9wdGlvbnMiLCAiY3R4IiwgImxlZ2VuZEl0ZW1zIiwgInVuZGVmaW5lZCIsICJjb2x1bW5TaXplcyIsICJsaW5lV2lkdGhzIiwgIm1heEhlaWdodCIsICJtYXhXaWR0aCIsICJ0b3AiLCAiYm90dG9tIiwgImxlZnQiLCAicmlnaHQiLCAiaGVpZ2h0IiwgIndpZHRoIiwgIl9tYXJnaW5zIiwgInBvc2l0aW9uIiwgIndlaWdodCIsICJmdWxsU2l6ZSIsICJ1cGRhdGUiLCAibWFyZ2lucyIsICJzZXREaW1lbnNpb25zIiwgImJ1aWxkTGFiZWxzIiwgImZpdCIsICJpc0hvcml6b250YWwiLCAibGFiZWxzIiwgImNhbGwiLCAiZ2VuZXJhdGVMYWJlbHMiLCAiZmlsdGVyIiwgIml0ZW0iLCAiZGF0YSIsICJzb3J0IiwgInJldmVyc2UiLCAiZGlzcGxheSIsICJsYWJlbEZvbnQiLCAidG9Gb250IiwgImZvbnQiLCAic2l6ZSIsICJ0aXRsZUhlaWdodCIsICJfY29tcHV0ZVRpdGxlSGVpZ2h0IiwgInN0cmluZyIsICJfZml0Um93cyIsICJfZml0Q29scyIsICJwYWRkaW5nIiwgImhpdGJveGVzIiwgImxpbmVIZWlnaHQiLCAidG90YWxIZWlnaHQiLCAidGV4dEFsaWduIiwgInRleHRCYXNlbGluZSIsICJyb3ciLCAiZm9yRWFjaCIsICJsZWdlbmRJdGVtIiwgImkiLCAiaXRlbVdpZHRoIiwgIm1lYXN1cmVUZXh0IiwgInRleHQiLCAibGVuZ3RoIiwgIl9pdGVtSGVpZ2h0IiwgImhlaWdodExpbWl0IiwgInRvdGFsV2lkdGgiLCAiY3VycmVudENvbFdpZHRoIiwgImN1cnJlbnRDb2xIZWlnaHQiLCAiY29sIiwgImNhbGN1bGF0ZUl0ZW1TaXplIiwgInB1c2giLCAiYWRqdXN0SGl0Qm94ZXMiLCAiYWxpZ24iLCAicnRsIiwgInJ0bEhlbHBlciIsICJnZXRSdGxBZGFwdGVyIiwgIl9hbGlnblN0YXJ0RW5kIiwgImhpdGJveCIsICJsZWZ0Rm9yTHRyIiwgIngiLCAiZHJhdyIsICJjbGlwQXJlYSIsICJfZHJhdyIsICJ1bmNsaXBBcmVhIiwgIm9wdHMiLCAiZGVmYXVsdENvbG9yIiwgImRlZmF1bHRzIiwgImNvbG9yIiwgImhhbGZGb250U2l6ZSIsICJjdXJzb3IiLCAiZHJhd1RpdGxlIiwgImxpbmVXaWR0aCIsICJkcmF3TGVnZW5kQm94IiwgInkiLCAiaXNOYU4iLCAic2F2ZSIsICJ2YWx1ZU9yRGVmYXVsdCIsICJmaWxsU3R5bGUiLCAibGluZUNhcCIsICJsaW5lRGFzaE9mZnNldCIsICJsaW5lSm9pbiIsICJzdHJva2VTdHlsZSIsICJzZXRMaW5lRGFzaCIsICJsaW5lRGFzaCIsICJkcmF3T3B0aW9ucyIsICJyYWRpdXMiLCAiU1FSVDIiLCAicG9pbnRTdHlsZSIsICJyb3RhdGlvbiIsICJib3JkZXJXaWR0aCIsICJjZW50ZXJYIiwgInhQbHVzIiwgImNlbnRlclkiLCAiZHJhd1BvaW50TGVnZW5kIiwgInlCb3hUb3AiLCAieEJveExlZnQiLCAiYm9yZGVyUmFkaXVzIiwgInRvVFJCTENvcm5lcnMiLCAiYmVnaW5QYXRoIiwgIk9iamVjdCIsICJ2YWx1ZXMiLCAic29tZSIsICJ2IiwgImFkZFJvdW5kZWRSZWN0UGF0aCIsICJ3IiwgImgiLCAicmVjdCIsICJmaWxsIiwgInN0cm9rZSIsICJyZXN0b3JlIiwgImZpbGxUZXh0IiwgInJlbmRlclRleHQiLCAic3RyaWtldGhyb3VnaCIsICJoaWRkZW4iLCAibGluZSIsICJvdmVycmlkZVRleHREaXJlY3Rpb24iLCAidGV4dERpcmVjdGlvbiIsICJmb250Q29sb3IiLCAidGV4dFdpZHRoIiwgInNldFdpZHRoIiwgInJlYWxYIiwgIl90ZXh0WCIsICJmb250TGluZUhlaWdodCIsICJjYWxjdWxhdGVMZWdlbmRJdGVtSGVpZ2h0IiwgInJlc3RvcmVUZXh0RGlyZWN0aW9uIiwgInRpdGxlT3B0cyIsICJ0aXRsZSIsICJ0aXRsZUZvbnQiLCAidGl0bGVQYWRkaW5nIiwgInRvUGFkZGluZyIsICJ0b3BQYWRkaW5nUGx1c0hhbGZGb250U2l6ZSIsICJyZWR1Y2UiLCAiYWNjIiwgIl90b0xlZnRSaWdodENlbnRlciIsICJfZ2V0TGVnZW5kSXRlbUF0IiwgImhpdEJveCIsICJsaCIsICJfaXNCZXR3ZWVuIiwgImhhbmRsZUV2ZW50IiwgImUiLCAiaXNMaXN0ZW5lZCIsICJ0eXBlIiwgImhvdmVyZWRJdGVtIiwgInByZXZpb3VzIiwgInNhbWVJdGVtIiwgIm9uTGVhdmUiLCAib25Ib3ZlciIsICJvbkNsaWNrIiwgImNhbGN1bGF0ZUl0ZW1XaWR0aCIsICJjYWxjdWxhdGVJdGVtSGVpZ2h0IiwgImxlZ2VuZEl0ZW1UZXh0IiwgImxhYmVsSGVpZ2h0IiwgImlkIiwgIl9lbGVtZW50IiwgInN0YXJ0IiwgIl9hcmdzIiwgImxlZ2VuZCIsICJsYXlvdXRzIiwgImNvbmZpZ3VyZSIsICJhZGRCb3giLCAic3RvcCIsICJyZW1vdmVCb3giLCAiYmVmb3JlVXBkYXRlIiwgImFmdGVyVXBkYXRlIiwgImFmdGVyRXZlbnQiLCAiYXJncyIsICJyZXBsYXkiLCAiZXZlbnQiLCAiY2kiLCAiaXNEYXRhc2V0VmlzaWJsZSIsICJoaWRlIiwgInNob3ciLCAiZGF0YXNldHMiLCAidXNlQm9yZGVyUmFkaXVzIiwgIl9nZXRTb3J0ZWREYXRhc2V0TWV0YXMiLCAibWFwIiwgIm1ldGEiLCAic3R5bGUiLCAiY29udHJvbGxlciIsICJnZXRTdHlsZSIsICJsYWJlbCIsICJiYWNrZ3JvdW5kQ29sb3IiLCAidmlzaWJsZSIsICJib3JkZXJDYXBTdHlsZSIsICJib3JkZXJEYXNoIiwgImJvcmRlckRhc2hPZmZzZXQiLCAiYm9yZGVySm9pblN0eWxlIiwgImJvcmRlckNvbG9yIiwgImRlc2NyaXB0b3JzIiwgIl9zY3JpcHRhYmxlIiwgIm5hbWUiLCAic3RhcnRzV2l0aCIsICJpbmNsdWRlcyIsICJUaXRsZSIsICJfcGFkZGluZyIsICJsaW5lQ291bnQiLCAiaXNBcnJheSIsICJ0ZXh0U2l6ZSIsICJwb3MiLCAiX2RyYXdBcmdzIiwgIm9mZnNldCIsICJ0aXRsZVgiLCAidGl0bGVZIiwgIlBJIiwgImZvbnRPcHRzIiwgInRyYW5zbGF0aW9uIiwgImNyZWF0ZVRpdGxlIiwgInRpdGxlQmxvY2siLCAiZGVmYXVsdFJvdXRlcyIsICJfaW5kZXhhYmxlIiwgIldlYWtNYXAiLCAic2V0IiwgImdldCIsICJkZWxldGUiLCAicG9zaXRpb25lcnMiLCAiYXZlcmFnZSIsICJpdGVtcyIsICJsZW4iLCAiY291bnQiLCAiZWwiLCAiZWxlbWVudCIsICJoYXNWYWx1ZSIsICJ0b29sdGlwUG9zaXRpb24iLCAibmVhcmVzdCIsICJldmVudFBvc2l0aW9uIiwgIm1pbkRpc3RhbmNlIiwgIk51bWJlciIsICJQT1NJVElWRV9JTkZJTklUWSIsICJuZWFyZXN0RWxlbWVudCIsICJjZW50ZXIiLCAiZ2V0Q2VudGVyUG9pbnQiLCAiZCIsICJkaXN0YW5jZUJldHdlZW5Qb2ludHMiLCAidHAiLCAicHVzaE9yQ29uY2F0IiwgImJhc2UiLCAidG9QdXNoIiwgIkFycmF5IiwgInByb3RvdHlwZSIsICJhcHBseSIsICJzcGxpdE5ld2xpbmVzIiwgInN0ciIsICJTdHJpbmciLCAiaW5kZXhPZiIsICJzcGxpdCIsICJjcmVhdGVUb29sdGlwSXRlbSIsICJnZXREYXRhc2V0TWV0YSIsICJ2YWx1ZSIsICJnZXRMYWJlbEFuZFZhbHVlIiwgInBhcnNlZCIsICJnZXRQYXJzZWQiLCAicmF3IiwgImZvcm1hdHRlZFZhbHVlIiwgImRhdGFzZXQiLCAiZ2V0RGF0YXNldCIsICJkYXRhSW5kZXgiLCAiZ2V0VG9vbHRpcFNpemUiLCAidG9vbHRpcCIsICJib2R5IiwgImZvb3RlciIsICJib2R5Rm9udCIsICJmb290ZXJGb250IiwgInRpdGxlTGluZUNvdW50IiwgImZvb3RlckxpbmVDb3VudCIsICJib2R5TGluZUl0ZW1Db3VudCIsICJjb21iaW5lZEJvZHlMZW5ndGgiLCAiYm9keUl0ZW0iLCAiYmVmb3JlIiwgImxpbmVzIiwgImFmdGVyIiwgImJlZm9yZUJvZHkiLCAiYWZ0ZXJCb2R5IiwgInRpdGxlU3BhY2luZyIsICJ0aXRsZU1hcmdpbkJvdHRvbSIsICJib2R5TGluZUhlaWdodCIsICJkaXNwbGF5Q29sb3JzIiwgImJvZHlTcGFjaW5nIiwgImZvb3Rlck1hcmdpblRvcCIsICJmb290ZXJTcGFjaW5nIiwgIndpZHRoUGFkZGluZyIsICJtYXhMaW5lV2lkdGgiLCAiZWFjaCIsICJjb25jYXQiLCAiYm94UGFkZGluZyIsICJkZXRlcm1pbmVZQWxpZ24iLCAiZG9lc05vdEZpdFdpdGhBbGlnbiIsICJ4QWxpZ24iLCAiY2FyZXQiLCAiY2FyZXRTaXplIiwgImNhcmV0UGFkZGluZyIsICJkZXRlcm1pbmVYQWxpZ24iLCAieUFsaWduIiwgImNoYXJ0V2lkdGgiLCAiY2hhcnRBcmVhIiwgImRldGVybWluZUFsaWdubWVudCIsICJhbGlnblgiLCAiYWxpZ25ZIiwgInBhZGRpbmdBbmRTaXplIiwgImdldEJhY2tncm91bmRQb2ludCIsICJhbGlnbm1lbnQiLCAiY29ybmVyUmFkaXVzIiwgInRvcExlZnQiLCAidG9wUmlnaHQiLCAiYm90dG9tTGVmdCIsICJib3R0b21SaWdodCIsICJfbGltaXRWYWx1ZSIsICJnZXRBbGlnbmVkWCIsICJnZXRCZWZvcmVBZnRlckJvZHlMaW5lcyIsICJjYWxsYmFjayIsICJjcmVhdGVUb29sdGlwQ29udGV4dCIsICJwYXJlbnQiLCAidG9vbHRpcEl0ZW1zIiwgImNyZWF0ZUNvbnRleHQiLCAib3ZlcnJpZGVDYWxsYmFja3MiLCAiY2FsbGJhY2tzIiwgImNvbnRleHQiLCAib3ZlcnJpZGUiLCAiZGVmYXVsdENhbGxiYWNrcyIsICJiZWZvcmVUaXRsZSIsICJub29wIiwgImxhYmVsQ291bnQiLCAibW9kZSIsICJhZnRlclRpdGxlIiwgImJlZm9yZUxhYmVsIiwgInRvb2x0aXBJdGVtIiwgImlzTnVsbE9yVW5kZWYiLCAibGFiZWxDb2xvciIsICJsYWJlbFRleHRDb2xvciIsICJib2R5Q29sb3IiLCAibGFiZWxQb2ludFN0eWxlIiwgImFmdGVyTGFiZWwiLCAiYmVmb3JlRm9vdGVyIiwgImFmdGVyRm9vdGVyIiwgImludm9rZUNhbGxiYWNrV2l0aEZhbGxiYWNrIiwgImFyZyIsICJyZXN1bHQiLCAiVG9vbHRpcCIsICJvcGFjaXR5IiwgIl9hY3RpdmUiLCAiX2V2ZW50UG9zaXRpb24iLCAiX3NpemUiLCAiX2NhY2hlZEFuaW1hdGlvbnMiLCAiX3Rvb2x0aXBJdGVtcyIsICIkYW5pbWF0aW9ucyIsICIkY29udGV4dCIsICJkYXRhUG9pbnRzIiwgImNhcmV0WCIsICJjYXJldFkiLCAibGFiZWxDb2xvcnMiLCAibGFiZWxQb2ludFN0eWxlcyIsICJsYWJlbFRleHRDb2xvcnMiLCAiaW5pdGlhbGl6ZSIsICJfcmVzb2x2ZUFuaW1hdGlvbnMiLCAiY2FjaGVkIiwgInNldENvbnRleHQiLCAiZ2V0Q29udGV4dCIsICJlbmFibGVkIiwgImFuaW1hdGlvbiIsICJhbmltYXRpb25zIiwgIkFuaW1hdGlvbnMiLCAiX2NhY2hlYWJsZSIsICJmcmVlemUiLCAiZ2V0VGl0bGUiLCAiZ2V0QmVmb3JlQm9keSIsICJnZXRCb2R5IiwgImJvZHlJdGVtcyIsICJzY29wZWQiLCAiZ2V0QWZ0ZXJCb2R5IiwgImdldEZvb3RlciIsICJfY3JlYXRlSXRlbXMiLCAiYWN0aXZlIiwgImFycmF5IiwgIml0ZW1Tb3J0IiwgImNoYW5nZWQiLCAicHJvcGVydGllcyIsICJwb3NpdGlvbkFuZFNpemUiLCAiYXNzaWduIiwgImJhY2tncm91bmRQb2ludCIsICJleHRlcm5hbCIsICJkcmF3Q2FyZXQiLCAidG9vbHRpcFBvaW50IiwgImNhcmV0UG9zaXRpb24iLCAiZ2V0Q2FyZXRQb3NpdGlvbiIsICJsaW5lVG8iLCAieDEiLCAieTEiLCAieDIiLCAieTIiLCAieDMiLCAieTMiLCAicHRYIiwgInB0WSIsICJwdCIsICJ0aXRsZUFsaWduIiwgInRpdGxlQ29sb3IiLCAiX2RyYXdDb2xvckJveCIsICJjb2xvclgiLCAicnRsQ29sb3JYIiwgInlPZmZTZXQiLCAiY29sb3JZIiwgIm11bHRpS2V5QmFja2dyb3VuZCIsICJkcmF3UG9pbnQiLCAiaXNPYmplY3QiLCAib3V0ZXJYIiwgImlubmVyWCIsICJmaWxsUmVjdCIsICJzdHJva2VSZWN0IiwgImRyYXdCb2R5IiwgImJvZHlBbGlnbiIsICJ4TGluZVBhZGRpbmciLCAiZmlsbExpbmVPZlRleHQiLCAiYm9keUFsaWduRm9yQ2FsY3VsYXRpb24iLCAidGV4dENvbG9yIiwgImoiLCAiaWxlbiIsICJqbGVuIiwgImRyYXdGb290ZXIiLCAiZm9vdGVyQWxpZ24iLCAiZm9vdGVyQ29sb3IiLCAiZHJhd0JhY2tncm91bmQiLCAidG9vbHRpcFNpemUiLCAibW92ZVRvIiwgInF1YWRyYXRpY0N1cnZlVG8iLCAiY2xvc2VQYXRoIiwgIl91cGRhdGVBbmltYXRpb25UYXJnZXQiLCAiYW5pbXMiLCAiYW5pbVgiLCAiYW5pbVkiLCAicG9pbnQiLCAiX3RvIiwgIl93aWxsUmVuZGVyIiwgImFicyIsICJoYXNUb29sdGlwQ29udGVudCIsICJnbG9iYWxBbHBoYSIsICJnZXRBY3RpdmVFbGVtZW50cyIsICJzZXRBY3RpdmVFbGVtZW50cyIsICJhY3RpdmVFbGVtZW50cyIsICJsYXN0QWN0aXZlIiwgIkVycm9yIiwgIl9lbGVtZW50c0VxdWFsIiwgInBvc2l0aW9uQ2hhbmdlZCIsICJfcG9zaXRpb25DaGFuZ2VkIiwgIl9pZ25vcmVSZXBsYXlFdmVudHMiLCAiaW5DaGFydEFyZWEiLCAiX2dldEFjdGl2ZUVsZW1lbnRzIiwgImdldEVsZW1lbnRzQXRFdmVudEZvck1vZGUiLCAiYWZ0ZXJJbml0IiwgInJlc2V0IiwgImFmdGVyRHJhdyIsICJub3RpZnlQbHVnaW5zIiwgImNhbmNlbGFibGUiLCAidXNlRmluYWxQb3NpdGlvbiIsICJkdXJhdGlvbiIsICJlYXNpbmciLCAibnVtYmVycyIsICJfZmFsbGJhY2siLCAiYWRkaXRpb25hbE9wdGlvblNjb3BlcyIsICJhZGRJZlN0cmluZyIsICJsYWJlbHMiLCAicmF3IiwgImluZGV4IiwgImFkZGVkTGFiZWxzIiwgInB1c2giLCAidW5zaGlmdCIsICJsYWJlbCIsICJpc05hTiIsICJmaW5kT3JBZGRMYWJlbCIsICJmaXJzdCIsICJpbmRleE9mIiwgImxhc3QiLCAibGFzdEluZGV4T2YiLCAidmFsaWRJbmRleCIsICJtYXgiLCAiX2xpbWl0VmFsdWUiLCAiTWF0aCIsICJyb3VuZCIsICJfZ2V0TGFiZWxGb3JWYWx1ZSIsICJ2YWx1ZSIsICJnZXRMYWJlbHMiLCAibGVuZ3RoIiwgIkNhdGVnb3J5U2NhbGUiLCAiU2NhbGUiLCAiY29uc3RydWN0b3IiLCAiY2ZnIiwgIl9zdGFydFZhbHVlIiwgInVuZGVmaW5lZCIsICJfdmFsdWVSYW5nZSIsICJfYWRkZWRMYWJlbHMiLCAiaW5pdCIsICJzY2FsZU9wdGlvbnMiLCAiYWRkZWQiLCAic3BsaWNlIiwgInBhcnNlIiwgImlzTnVsbE9yVW5kZWYiLCAiaXNGaW5pdGUiLCAidmFsdWVPckRlZmF1bHQiLCAiZGV0ZXJtaW5lRGF0YUxpbWl0cyIsICJtaW5EZWZpbmVkIiwgIm1heERlZmluZWQiLCAiZ2V0VXNlckJvdW5kcyIsICJtaW4iLCAiZ2V0TWluTWF4IiwgIm9wdGlvbnMiLCAiYm91bmRzIiwgImJ1aWxkVGlja3MiLCAib2Zmc2V0IiwgInRpY2tzIiwgInNsaWNlIiwgImdldExhYmVsRm9yVmFsdWUiLCAiY2FsbCIsICJjb25maWd1cmUiLCAiaXNIb3Jpem9udGFsIiwgIl9yZXZlcnNlUGl4ZWxzIiwgImdldFBpeGVsRm9yVmFsdWUiLCAiTmFOIiwgImdldFBpeGVsRm9yRGVjaW1hbCIsICJnZXRQaXhlbEZvclRpY2siLCAiZ2V0VmFsdWVGb3JQaXhlbCIsICJwaXhlbCIsICJnZXREZWNpbWFsRm9yUGl4ZWwiLCAiZ2V0QmFzZVBpeGVsIiwgImJvdHRvbSIsICJpZCIsICJkZWZhdWx0cyIsICJjYWxsYmFjayIsICJnZW5lcmF0ZVRpY2tzIiwgImdlbmVyYXRpb25PcHRpb25zIiwgImRhdGFSYW5nZSIsICJNSU5fU1BBQ0lORyIsICJzdGVwIiwgInByZWNpc2lvbiIsICJjb3VudCIsICJtYXhUaWNrcyIsICJtYXhEaWdpdHMiLCAiaW5jbHVkZUJvdW5kcyIsICJ1bml0IiwgIm1heFNwYWNlcyIsICJybWluIiwgInJtYXgiLCAiY291bnREZWZpbmVkIiwgIm1pblNwYWNpbmciLCAic3BhY2luZyIsICJuaWNlTnVtIiwgImZhY3RvciIsICJuaWNlTWluIiwgIm5pY2VNYXgiLCAibnVtU3BhY2VzIiwgImNlaWwiLCAiZmxvb3IiLCAicG93IiwgImFsbW9zdFdob2xlIiwgImFsbW9zdEVxdWFscyIsICJkZWNpbWFsUGxhY2VzIiwgIl9kZWNpbWFsUGxhY2VzIiwgImoiLCAicmVsYXRpdmVMYWJlbFNpemUiLCAidGlja1ZhbHVlIiwgImhvcml6b250YWwiLCAibWluUm90YXRpb24iLCAicmFkIiwgInRvUmFkaWFucyIsICJyYXRpbyIsICJzaW4iLCAiY29zIiwgIkxpbmVhclNjYWxlQmFzZSIsICJzdGFydCIsICJlbmQiLCAiX2VuZFZhbHVlIiwgIk51bWJlciIsICJoYW5kbGVUaWNrUmFuZ2VPcHRpb25zIiwgImJlZ2luQXRaZXJvIiwgInNldE1pbiIsICJ2IiwgInNldE1heCIsICJtaW5TaWduIiwgInNpZ24iLCAibWF4U2lnbiIsICJhYnMiLCAiZ2V0VGlja0xpbWl0IiwgInRpY2tPcHRzIiwgIm1heFRpY2tzTGltaXQiLCAic3RlcFNpemUiLCAiY29uc29sZSIsICJ3YXJuIiwgImNvbXB1dGVUaWNrTGltaXQiLCAiUE9TSVRJVkVfSU5GSU5JVFkiLCAib3B0cyIsICJudW1lcmljR2VuZXJhdG9yT3B0aW9ucyIsICJfbWF4RGlnaXRzIiwgIl9yYW5nZSIsICJfc2V0TWluQW5kTWF4QnlLZXkiLCAicmV2ZXJzZSIsICJmb3JtYXROdW1iZXIiLCAiY2hhcnQiLCAibG9jYWxlIiwgImZvcm1hdCIsICJMaW5lYXJTY2FsZSIsICJ3aWR0aCIsICJoZWlnaHQiLCAidGlja0ZvbnQiLCAiX3Jlc29sdmVUaWNrRm9udE9wdGlvbnMiLCAibGluZUhlaWdodCIsICJUaWNrcyIsICJmb3JtYXR0ZXJzIiwgIm51bWVyaWMiLCAibG9nMTBGbG9vciIsICJsb2cxMCIsICJjaGFuZ2VFeHBvbmVudCIsICJtIiwgImlzTWFqb3IiLCAidGlja1ZhbCIsICJyZW1haW4iLCAic3RlcHMiLCAicmFuZ2VFeHAiLCAicmFuZ2VTdGVwIiwgInN0YXJ0RXhwIiwgInJhbmdlIiwgImZpbml0ZU9yRGVmYXVsdCIsICJtaW5FeHAiLCAiZXhwIiwgImJhc2UiLCAic2lnbmlmaWNhbmQiLCAibWFqb3IiLCAibGFzdFRpY2siLCAiTG9nYXJpdGhtaWNTY2FsZSIsICJwcm90b3R5cGUiLCAiYXBwbHkiLCAiX3plcm8iLCAiX3N1Z2dlc3RlZE1pbiIsICJfdXNlck1pbiIsICJfdXNlck1heCIsICJkZWNpbWFsIiwgImxvZ2FyaXRobWljIiwgImVuYWJsZWQiLCAiZ2V0VGlja0JhY2tkcm9wSGVpZ2h0IiwgImRpc3BsYXkiLCAicGFkZGluZyIsICJ0b1BhZGRpbmciLCAiYmFja2Ryb3BQYWRkaW5nIiwgImZvbnQiLCAic2l6ZSIsICJtZWFzdXJlTGFiZWxTaXplIiwgImN0eCIsICJpc0FycmF5IiwgInciLCAiX2xvbmdlc3RUZXh0IiwgInN0cmluZyIsICJoIiwgImRldGVybWluZUxpbWl0cyIsICJhbmdsZSIsICJwb3MiLCAiZml0V2l0aFBvaW50TGFiZWxzIiwgInNjYWxlIiwgIm9yaWciLCAibCIsICJsZWZ0IiwgIl9wYWRkaW5nIiwgInIiLCAicmlnaHQiLCAidCIsICJ0b3AiLCAiYiIsICJsaW1pdHMiLCAiT2JqZWN0IiwgImFzc2lnbiIsICJsYWJlbFNpemVzIiwgInZhbHVlQ291bnQiLCAiX3BvaW50TGFiZWxzIiwgInBvaW50TGFiZWxPcHRzIiwgInBvaW50TGFiZWxzIiwgImFkZGl0aW9uYWxBbmdsZSIsICJjZW50ZXJQb2ludExhYmVscyIsICJQSSIsICJpIiwgInNldENvbnRleHQiLCAiZ2V0UG9pbnRMYWJlbENvbnRleHQiLCAicG9pbnRQb3NpdGlvbiIsICJnZXRQb2ludFBvc2l0aW9uIiwgImRyYXdpbmdBcmVhIiwgInBsRm9udCIsICJ0b0ZvbnQiLCAidGV4dFNpemUiLCAiYW5nbGVSYWRpYW5zIiwgIl9ub3JtYWxpemVBbmdsZSIsICJnZXRJbmRleEFuZ2xlIiwgInRvRGVncmVlcyIsICJoTGltaXRzIiwgIngiLCAidkxpbWl0cyIsICJ5IiwgInVwZGF0ZUxpbWl0cyIsICJzZXRDZW50ZXJQb2ludCIsICJfcG9pbnRMYWJlbEl0ZW1zIiwgImJ1aWxkUG9pbnRMYWJlbEl0ZW1zIiwgImNyZWF0ZVBvaW50TGFiZWxJdGVtIiwgIml0ZW1PcHRzIiwgIm91dGVyRGlzdGFuY2UiLCAiZXh0cmEiLCAicG9pbnRMYWJlbFBvc2l0aW9uIiwgIkhBTEZfUEkiLCAieUZvckFuZ2xlIiwgInRleHRBbGlnbiIsICJnZXRUZXh0QWxpZ25Gb3JBbmdsZSIsICJsZWZ0Rm9yVGV4dEFsaWduIiwgInZpc2libGUiLCAiaXNOb3RPdmVybGFwcGVkIiwgIml0ZW0iLCAiYXJlYSIsICJhcGV4ZXNJbkFyZWEiLCAiX2lzUG9pbnRJbkFyZWEiLCAiaXRlbXMiLCAiYWxpZ24iLCAiZHJhd1BvaW50TGFiZWxCb3giLCAiYmFja2Ryb3BDb2xvciIsICJib3JkZXJSYWRpdXMiLCAidG9UUkJMQ29ybmVycyIsICJmaWxsU3R5bGUiLCAiYmFja2Ryb3BMZWZ0IiwgImJhY2tkcm9wVG9wIiwgImJhY2tkcm9wV2lkdGgiLCAiYmFja2Ryb3BIZWlnaHQiLCAidmFsdWVzIiwgInNvbWUiLCAiYmVnaW5QYXRoIiwgImFkZFJvdW5kZWRSZWN0UGF0aCIsICJyYWRpdXMiLCAiZmlsbCIsICJmaWxsUmVjdCIsICJkcmF3UG9pbnRMYWJlbHMiLCAibGFiZWxDb3VudCIsICJvcHRzQXRJbmRleCIsICJyZW5kZXJUZXh0IiwgImNvbG9yIiwgInRleHRCYXNlbGluZSIsICJwYXRoUmFkaXVzTGluZSIsICJjaXJjdWxhciIsICJhcmMiLCAieENlbnRlciIsICJ5Q2VudGVyIiwgIlRBVSIsICJtb3ZlVG8iLCAibGluZVRvIiwgImRyYXdSYWRpdXNMaW5lIiwgImdyaWRMaW5lT3B0cyIsICJib3JkZXJPcHRzIiwgImxpbmVXaWR0aCIsICJzYXZlIiwgInN0cm9rZVN0eWxlIiwgInNldExpbmVEYXNoIiwgImRhc2giLCAibGluZURhc2hPZmZzZXQiLCAiZGFzaE9mZnNldCIsICJjbG9zZVBhdGgiLCAic3Ryb2tlIiwgInJlc3RvcmUiLCAiY3JlYXRlUG9pbnRMYWJlbENvbnRleHQiLCAicGFyZW50IiwgImNyZWF0ZUNvbnRleHQiLCAidHlwZSIsICJSYWRpYWxMaW5lYXJTY2FsZSIsICJzZXREaW1lbnNpb25zIiwgIm1heFdpZHRoIiwgIm1heEhlaWdodCIsICJnZW5lcmF0ZVRpY2tMYWJlbHMiLCAibWFwIiwgImNhbGxDYWxsYmFjayIsICJmaWx0ZXIiLCAiZ2V0RGF0YVZpc2liaWxpdHkiLCAiZml0IiwgImxlZnRNb3ZlbWVudCIsICJyaWdodE1vdmVtZW50IiwgInRvcE1vdmVtZW50IiwgImJvdHRvbU1vdmVtZW50IiwgImFuZ2xlTXVsdGlwbGllciIsICJzdGFydEFuZ2xlIiwgImdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlIiwgInNjYWxpbmdGYWN0b3IiLCAiZ2V0VmFsdWVGb3JEaXN0YW5jZUZyb21DZW50ZXIiLCAiZGlzdGFuY2UiLCAic2NhbGVkRGlzdGFuY2UiLCAicG9pbnRMYWJlbCIsICJnZXRDb250ZXh0IiwgImRpc3RhbmNlRnJvbUNlbnRlciIsICJnZXRQb2ludFBvc2l0aW9uRm9yVmFsdWUiLCAiZ2V0QmFzZVBvc2l0aW9uIiwgImdldEJhc2VWYWx1ZSIsICJnZXRQb2ludExhYmVsUG9zaXRpb24iLCAiZHJhd0JhY2tncm91bmQiLCAiYmFja2dyb3VuZENvbG9yIiwgImdyaWQiLCAiZHJhd0dyaWQiLCAiYW5nbGVMaW5lcyIsICJib3JkZXIiLCAicG9zaXRpb24iLCAiZm9yRWFjaCIsICJ0aWNrIiwgImNvbnRleHQiLCAib3B0c0F0SW5kZXhCb3JkZXIiLCAiYm9yZGVyRGFzaCIsICJib3JkZXJEYXNoT2Zmc2V0IiwgImRyYXdCb3JkZXIiLCAiZHJhd0xhYmVscyIsICJ0cmFuc2xhdGUiLCAicm90YXRlIiwgInNob3dMYWJlbEJhY2tkcm9wIiwgIm1lYXN1cmVUZXh0IiwgImRyYXdUaXRsZSIsICJhbmltYXRlIiwgImRlZmF1bHRSb3V0ZXMiLCAiZGVzY3JpcHRvcnMiLCAiX2ZhbGxiYWNrIiwgIklOVEVSVkFMUyIsICJtaWxsaXNlY29uZCIsICJjb21tb24iLCAic2Vjb25kIiwgIm1pbnV0ZSIsICJob3VyIiwgImRheSIsICJ3ZWVrIiwgIm1vbnRoIiwgInF1YXJ0ZXIiLCAieWVhciIsICJVTklUUyIsICJrZXlzIiwgInNvcnRlciIsICJhIiwgImlucHV0IiwgImFkYXB0ZXIiLCAiX2FkYXB0ZXIiLCAicGFyc2VyIiwgImlzb1dlZWtkYXkiLCAiX3BhcnNlT3B0cyIsICJpc051bWJlciIsICJzdGFydE9mIiwgImRldGVybWluZVVuaXRGb3JBdXRvVGlja3MiLCAibWluVW5pdCIsICJjYXBhY2l0eSIsICJpbGVuIiwgImludGVydmFsIiwgIk1BWF9TQUZFX0lOVEVHRVIiLCAiZGV0ZXJtaW5lVW5pdEZvckZvcm1hdHRpbmciLCAibnVtVGlja3MiLCAiZGlmZiIsICJkZXRlcm1pbmVNYWpvclVuaXQiLCAiYWRkVGljayIsICJ0aW1lIiwgInRpbWVzdGFtcHMiLCAibG8iLCAiaGkiLCAiX2xvb2t1cCIsICJ0aW1lc3RhbXAiLCAic2V0TWFqb3JUaWNrcyIsICJtYWpvclVuaXQiLCAiYWRkIiwgInRpY2tzRnJvbVRpbWVzdGFtcHMiLCAiVGltZVNjYWxlIiwgInByb3BzIiwgIl9jYWNoZSIsICJkYXRhIiwgImFsbCIsICJfdW5pdCIsICJfbWFqb3JVbml0IiwgIl9vZmZzZXRzIiwgIl9ub3JtYWxpemVkIiwgInNjYWxlT3B0cyIsICJhZGFwdGVycyIsICJfZGF0ZSIsICJkYXRlIiwgIm1lcmdlSWYiLCAiZGlzcGxheUZvcm1hdHMiLCAiZm9ybWF0cyIsICJub3JtYWxpemVkIiwgImJlZm9yZUxheW91dCIsICJfYXBwbHlCb3VuZHMiLCAiX2dldExhYmVsQm91bmRzIiwgInNvdXJjZSIsICJEYXRlIiwgIm5vdyIsICJlbmRPZiIsICJhcnIiLCAiZ2V0TGFiZWxUaW1lc3RhbXBzIiwgIk5FR0FUSVZFX0lORklOSVRZIiwgInRpbWVPcHRzIiwgIl9nZW5lcmF0ZSIsICJfZmlsdGVyQmV0d2VlbiIsICJhdXRvU2tpcCIsICJfZ2V0TGFiZWxDYXBhY2l0eSIsICJpbml0T2Zmc2V0cyIsICJhZnRlckF1dG9Ta2lwIiwgIm9mZnNldEFmdGVyQXV0b3NraXAiLCAiZ2V0RGVjaW1hbEZvclZhbHVlIiwgImxpbWl0IiwgIm1pbm9yIiwgIndlZWtkYXkiLCAiaGFzV2Vla2RheSIsICJFcnJvciIsICJnZXREYXRhVGltZXN0YW1wcyIsICJzb3J0IiwgInRvb2x0aXBGb3JtYXQiLCAiZGF0ZXRpbWUiLCAiZm10IiwgIl90aWNrRm9ybWF0RnVuY3Rpb24iLCAiZm9ybWF0dGVyIiwgIm1pbm9yRm9ybWF0IiwgIm1ham9yRm9ybWF0IiwgIm9mZnNldHMiLCAiX2dldExhYmVsU2l6ZSIsICJ0aWNrc09wdHMiLCAidGlja0xhYmVsV2lkdGgiLCAibWF4Um90YXRpb24iLCAiY29zUm90YXRpb24iLCAic2luUm90YXRpb24iLCAidGlja0ZvbnRTaXplIiwgImV4YW1wbGVUaW1lIiwgImV4YW1wbGVMYWJlbCIsICJtZXRhcyIsICJnZXRNYXRjaGluZ1Zpc2libGVNZXRhcyIsICJjb250cm9sbGVyIiwgImdldEFsbFBhcnNlZFZhbHVlcyIsICJjb25jYXQiLCAibm9ybWFsaXplIiwgIl9hcnJheVVuaXF1ZSIsICJpbnRlcnBvbGF0ZSIsICJ0YWJsZSIsICJ2YWwiLCAicHJldlNvdXJjZSIsICJuZXh0U291cmNlIiwgInByZXZUYXJnZXQiLCAibmV4dFRhcmdldCIsICJfbG9va3VwQnlLZXkiLCAic3BhbiIsICJUaW1lU2VyaWVzU2NhbGUiLCAiX3RhYmxlIiwgIl9taW5Qb3MiLCAiX3RhYmxlUmFuZ2UiLCAiX2dldFRpbWVzdGFtcHNGb3JUYWJsZSIsICJidWlsZExvb2t1cFRhYmxlIiwgInByZXYiLCAiY3VyciIsICJuZXh0IiwgImFwcCIsICJoIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiYXBwIiwgInBhcnNlIiwgImltcG9ydF9vYnNpZGlhbiIsICJyYW5rIiwgImVhc2UiLCAicGFyc2UiLCAic2libGluZ3MiXQp9Cg==