|
|
/*
|
|
|
THIS IS A GENERATED/BUNDLED FILE BY ROLLUP
|
|
|
if you want to view the source visit the plugins github repository
|
|
|
https://github.com/joethei/obsidian-rss
|
|
|
*/
|
|
|
|
|
|
'use strict';
|
|
|
|
|
|
var obsidian = require('obsidian');
|
|
|
|
|
|
/*! *****************************************************************************
|
|
|
Copyright (c) Microsoft Corporation.
|
|
|
|
|
|
Permission to use, copy, modify, and/or distribute this software for any
|
|
|
purpose with or without fee is hereby granted.
|
|
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
|
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
|
PERFORMANCE OF THIS SOFTWARE.
|
|
|
***************************************************************************** */
|
|
|
|
|
|
function __awaiter(thisArg, _arguments, P, generator) {
|
|
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* : to get namespaced element
|
|
|
* . to get nested element
|
|
|
* @param element
|
|
|
* @param name
|
|
|
*/
|
|
|
function getElementByName(element, name) {
|
|
|
let value;
|
|
|
if (typeof element.getElementsByTagName !== 'function') {
|
|
|
return;
|
|
|
}
|
|
|
if (name.contains(":")) {
|
|
|
const [namespace, tag] = name.split(":");
|
|
|
const namespaceUri = element.lookupNamespaceURI(namespace);
|
|
|
if (element.getElementsByTagNameNS(namespaceUri, tag).length > 0) {
|
|
|
value = element.getElementsByTagNameNS(namespaceUri, tag)[0].childNodes[0];
|
|
|
}
|
|
|
}
|
|
|
else if (name.contains(".")) {
|
|
|
const [prefix, tag] = name.split(".");
|
|
|
if (element.getElementsByTagName(prefix).length > 0) {
|
|
|
const nodes = Array.from(element.getElementsByTagName(prefix)[0].childNodes);
|
|
|
nodes.forEach((node) => {
|
|
|
if (node.nodeName == tag) {
|
|
|
value = node;
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
if (element.getElementsByTagName(name).length > 0) {
|
|
|
if (element.getElementsByTagName(name)[0].childNodes.length == 0) {
|
|
|
value = element.getElementsByTagName(name)[0];
|
|
|
}
|
|
|
else {
|
|
|
const node = element.getElementsByTagName(name)[0].childNodes[0];
|
|
|
if (node !== undefined)
|
|
|
value = node;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return value;
|
|
|
}
|
|
|
/**
|
|
|
* # to get attribute
|
|
|
* @param element
|
|
|
* @param names possible names
|
|
|
*/
|
|
|
function getContent(element, names) {
|
|
|
let value;
|
|
|
names.forEach((name) => {
|
|
|
if (name.contains("#")) {
|
|
|
const [elementName, attr] = name.split("#");
|
|
|
const data = getElementByName(element, elementName);
|
|
|
if (data) {
|
|
|
if (data.nodeName == elementName) {
|
|
|
//@ts-ignore
|
|
|
value = data.getAttr(attr);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
const data = getElementByName(element, name);
|
|
|
if (data) {
|
|
|
//@ts-ignore
|
|
|
if (data.nodeValue) {
|
|
|
value = data.nodeValue;
|
|
|
}
|
|
|
//@ts-ignore
|
|
|
if (data.innerHTML) {
|
|
|
//@ts-ignore
|
|
|
value = data.innerHTML;
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
if (value === undefined) {
|
|
|
return "";
|
|
|
}
|
|
|
return value;
|
|
|
}
|
|
|
function buildItem(element) {
|
|
|
return {
|
|
|
title: getContent(element, ["title"]),
|
|
|
description: getContent(element, ["description"]),
|
|
|
content: getContent(element, ["description", "content", "content:encoded", "summary"]),
|
|
|
category: getContent(element, ["category"]),
|
|
|
link: getContent(element, ["link", "link#href"]),
|
|
|
creator: getContent(element, ["creator", "dc:creator", "author", "author.name"]),
|
|
|
pubDate: getContent(element, ["pubDate", "published", "updated", "dc:date"]),
|
|
|
folder: null,
|
|
|
feed: null,
|
|
|
read: null,
|
|
|
favorite: null,
|
|
|
created: null,
|
|
|
tags: [],
|
|
|
};
|
|
|
}
|
|
|
function getAllItems(doc) {
|
|
|
const items = [];
|
|
|
if (doc.getElementsByTagName("item")) {
|
|
|
for (const elementsByTagNameKey in doc.getElementsByTagName("item")) {
|
|
|
const entry = doc.getElementsByTagName("item")[elementsByTagNameKey];
|
|
|
items.push(entry);
|
|
|
}
|
|
|
}
|
|
|
if (doc.getElementsByTagName("entry")) {
|
|
|
for (const elementsByTagNameKey in doc.getElementsByTagName("entry")) {
|
|
|
const entry = doc.getElementsByTagName("entry")[elementsByTagNameKey];
|
|
|
items.push(entry);
|
|
|
}
|
|
|
}
|
|
|
return items;
|
|
|
}
|
|
|
function getFeedItems(feed) {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
const rawData = yield obsidian.request({ url: feed.url });
|
|
|
const data = new window.DOMParser().parseFromString(rawData, "text/xml");
|
|
|
const items = [];
|
|
|
const rawItems = getAllItems(data);
|
|
|
rawItems.forEach((rawItem) => {
|
|
|
const item = buildItem(rawItem);
|
|
|
if (item.title !== undefined && item.title.length !== 0) {
|
|
|
item.folder = feed.folder;
|
|
|
item.feed = feed.name;
|
|
|
item.read = false;
|
|
|
item.favorite = false;
|
|
|
item.created = false;
|
|
|
items.push(item);
|
|
|
}
|
|
|
});
|
|
|
const image = getContent(data, ["image", "image.url", "icon"]);
|
|
|
const content = {
|
|
|
title: getContent(data, ["title"]),
|
|
|
subtitle: getContent(data, ["subtitle"]),
|
|
|
link: getContent(data, ["link"]),
|
|
|
//we don't want any leading or trailing slashes in image urls(i.e. reddit does that)
|
|
|
image: image ? image.replace(/^\/|\/$/g, '') : null,
|
|
|
description: getContent(data, ["description"]),
|
|
|
items: items,
|
|
|
folder: feed.folder,
|
|
|
name: feed.name
|
|
|
};
|
|
|
return Promise.resolve(content);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
const VIEW_ID = "RSS_FEED";
|
|
|
const FILE_NAME_REGEX = /["\/<>:|?]/gm;
|
|
|
const TAG_REGEX = /([\p{Letter}\p{Emoji_Presentation}\p{Number}\/_-]+)/u;
|
|
|
const NUMBER_REGEX = /^[0-9]*$/gm;
|
|
|
//TODO: remove once api definition has been updated
|
|
|
/**
|
|
|
* taken from @licat(https://discord.com/channels/686053708261228577/840286264964022302/899037833552093184)
|
|
|
* @param html
|
|
|
*/
|
|
|
function sanitizeHTMLToDom(html) {
|
|
|
// @ts-ignore
|
|
|
return window.DOMPurify.sanitize(html, {
|
|
|
ALLOW_UNKNOWN_PROTOCOLS: true,
|
|
|
RETURN_DOM_FRAGMENT: true,
|
|
|
RETURN_DOM_IMPORT: true,
|
|
|
FORBID_TAGS: ['style'],
|
|
|
ADD_TAGS: ['iframe'],
|
|
|
ADD_ATTR: ['frameborder', 'allowfullscreen', 'allow', 'aria-label-position'],
|
|
|
});
|
|
|
}
|
|
|
//taken from: https://stackoverflow.com/a/43467144/5589264
|
|
|
function isValidHttpUrl(string) {
|
|
|
let url;
|
|
|
try {
|
|
|
url = new URL(string);
|
|
|
}
|
|
|
catch (_) {
|
|
|
return false;
|
|
|
}
|
|
|
return url.protocol === "http:" || url.protocol === "https:";
|
|
|
}
|
|
|
|
|
|
class BaseModal extends obsidian.Modal {
|
|
|
//taken from github.com/valentine195/obsidian-admonition
|
|
|
setValidationError(textInput, message) {
|
|
|
textInput.inputEl.addClass("is-invalid");
|
|
|
if (message) {
|
|
|
textInput.inputEl.parentElement.addClasses([
|
|
|
"has-invalid-message",
|
|
|
"unset-align-items"
|
|
|
]);
|
|
|
textInput.inputEl.parentElement.parentElement.addClass(".unset-align-items");
|
|
|
let mDiv = textInput.inputEl.parentElement.querySelector(".invalid-feedback");
|
|
|
if (!mDiv) {
|
|
|
mDiv = createDiv({ cls: "invalid-feedback" });
|
|
|
}
|
|
|
mDiv.innerText = message;
|
|
|
mDiv.insertAfter(textInput.inputEl);
|
|
|
}
|
|
|
}
|
|
|
removeValidationError(textInput) {
|
|
|
textInput.inputEl.removeClass("is-invalid");
|
|
|
textInput.inputEl.parentElement.removeClasses([
|
|
|
"has-invalid-message",
|
|
|
"unset-align-items"
|
|
|
]);
|
|
|
textInput.inputEl.parentElement.parentElement.removeClass(".unset-align-items");
|
|
|
if (textInput.inputEl.parentElement.querySelector(".invalid-feedback")) {
|
|
|
textInput.inputEl.parentElement.removeChild(textInput.inputEl.parentElement.querySelector(".invalid-feedback"));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
class FeedModal extends BaseModal {
|
|
|
constructor(plugin, feed) {
|
|
|
super(plugin.app);
|
|
|
this.saved = false;
|
|
|
if (feed) {
|
|
|
this.name = feed.name;
|
|
|
this.url = feed.url;
|
|
|
this.folder = feed.folder;
|
|
|
}
|
|
|
}
|
|
|
display() {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
const { contentEl } = this;
|
|
|
contentEl.empty();
|
|
|
let nameText;
|
|
|
const name = new obsidian.Setting(contentEl)
|
|
|
.setName("Name")
|
|
|
.setDesc("Name of feed")
|
|
|
.addText((text) => {
|
|
|
nameText = text;
|
|
|
text.setValue(this.name)
|
|
|
.onChange((value) => {
|
|
|
this.removeValidationError(text);
|
|
|
this.name = value;
|
|
|
});
|
|
|
});
|
|
|
name.controlEl.addClass("rss-setting-input");
|
|
|
let urlText;
|
|
|
const url = new obsidian.Setting(contentEl)
|
|
|
.setName("url")
|
|
|
.setDesc("url of feed")
|
|
|
.addText((text) => {
|
|
|
urlText = text;
|
|
|
text.setValue(this.url)
|
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
|
this.removeValidationError(text);
|
|
|
this.url = value;
|
|
|
}));
|
|
|
});
|
|
|
url.controlEl.addClass("rss-setting-input");
|
|
|
new obsidian.Setting(contentEl)
|
|
|
.setName("Folder")
|
|
|
.addText((text) => {
|
|
|
text.setValue(this.folder)
|
|
|
.onChange((value) => {
|
|
|
this.folder = value;
|
|
|
});
|
|
|
});
|
|
|
const footerEl = contentEl.createDiv();
|
|
|
const footerButtons = new obsidian.Setting(footerEl);
|
|
|
footerButtons.addButton((b) => {
|
|
|
b.setTooltip("Save")
|
|
|
.setIcon("checkmark")
|
|
|
.onClick(() => __awaiter(this, void 0, void 0, function* () {
|
|
|
let error = false;
|
|
|
if (!nameText.getValue().length) {
|
|
|
this.setValidationError(nameText, "you need to specify a name");
|
|
|
error = true;
|
|
|
}
|
|
|
if (!urlText.getValue().length) {
|
|
|
this.setValidationError(urlText, "you need to specify a url");
|
|
|
error = true;
|
|
|
}
|
|
|
if (!isValidHttpUrl(urlText.getValue())) {
|
|
|
this.setValidationError(urlText, "This url is not valid");
|
|
|
error = true;
|
|
|
}
|
|
|
else {
|
|
|
const items = yield getFeedItems({ name: "test", url: urlText.getValue(), folder: "" });
|
|
|
if (items.items.length == 0) {
|
|
|
this.setValidationError(urlText, "this feed does not have any entries");
|
|
|
error = true;
|
|
|
}
|
|
|
}
|
|
|
if (error) {
|
|
|
new obsidian.Notice("please fix errors before saving.");
|
|
|
return;
|
|
|
}
|
|
|
this.saved = true;
|
|
|
this.close();
|
|
|
}));
|
|
|
return b;
|
|
|
});
|
|
|
footerButtons.addExtraButton((b) => {
|
|
|
b.setIcon("cross")
|
|
|
.setTooltip("Cancel")
|
|
|
.onClick(() => {
|
|
|
this.saved = false;
|
|
|
this.close();
|
|
|
});
|
|
|
return b;
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
onOpen() {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
yield this.display();
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
|
|
|
|
|
|
function createCommonjsModule(fn) {
|
|
|
var module = { exports: {} };
|
|
|
return fn(module, module.exports), module.exports;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* lodash (Custom Build) <https://lodash.com/>
|
|
|
* Build: `lodash modularize exports="npm" -o ./`
|
|
|
* Copyright jQuery Foundation and other contributors <https://jquery.org/>
|
|
|
* Released under MIT license <https://lodash.com/license>
|
|
|
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
|
|
|
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
|
|
|
*/
|
|
|
|
|
|
var lodash_groupby = createCommonjsModule(function (module, exports) {
|
|
|
/** Used as the size to enable large array optimizations. */
|
|
|
var LARGE_ARRAY_SIZE = 200;
|
|
|
|
|
|
/** Used as the `TypeError` message for "Functions" methods. */
|
|
|
var FUNC_ERROR_TEXT = 'Expected a function';
|
|
|
|
|
|
/** Used to stand-in for `undefined` hash values. */
|
|
|
var HASH_UNDEFINED = '__lodash_hash_undefined__';
|
|
|
|
|
|
/** Used to compose bitmasks for comparison styles. */
|
|
|
var UNORDERED_COMPARE_FLAG = 1,
|
|
|
PARTIAL_COMPARE_FLAG = 2;
|
|
|
|
|
|
/** Used as references for various `Number` constants. */
|
|
|
var INFINITY = 1 / 0,
|
|
|
MAX_SAFE_INTEGER = 9007199254740991;
|
|
|
|
|
|
/** `Object#toString` result references. */
|
|
|
var argsTag = '[object Arguments]',
|
|
|
arrayTag = '[object Array]',
|
|
|
boolTag = '[object Boolean]',
|
|
|
dateTag = '[object Date]',
|
|
|
errorTag = '[object Error]',
|
|
|
funcTag = '[object Function]',
|
|
|
genTag = '[object GeneratorFunction]',
|
|
|
mapTag = '[object Map]',
|
|
|
numberTag = '[object Number]',
|
|
|
objectTag = '[object Object]',
|
|
|
promiseTag = '[object Promise]',
|
|
|
regexpTag = '[object RegExp]',
|
|
|
setTag = '[object Set]',
|
|
|
stringTag = '[object String]',
|
|
|
symbolTag = '[object Symbol]',
|
|
|
weakMapTag = '[object WeakMap]';
|
|
|
|
|
|
var arrayBufferTag = '[object ArrayBuffer]',
|
|
|
dataViewTag = '[object DataView]',
|
|
|
float32Tag = '[object Float32Array]',
|
|
|
float64Tag = '[object Float64Array]',
|
|
|
int8Tag = '[object Int8Array]',
|
|
|
int16Tag = '[object Int16Array]',
|
|
|
int32Tag = '[object Int32Array]',
|
|
|
uint8Tag = '[object Uint8Array]',
|
|
|
uint8ClampedTag = '[object Uint8ClampedArray]',
|
|
|
uint16Tag = '[object Uint16Array]',
|
|
|
uint32Tag = '[object Uint32Array]';
|
|
|
|
|
|
/** Used to match property names within property paths. */
|
|
|
var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
|
|
|
reIsPlainProp = /^\w*$/,
|
|
|
reLeadingDot = /^\./,
|
|
|
rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
|
|
|
|
|
|
/**
|
|
|
* Used to match `RegExp`
|
|
|
* [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
|
|
|
*/
|
|
|
var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
|
|
|
|
|
|
/** Used to match backslashes in property paths. */
|
|
|
var reEscapeChar = /\\(\\)?/g;
|
|
|
|
|
|
/** Used to detect host constructors (Safari). */
|
|
|
var reIsHostCtor = /^\[object .+?Constructor\]$/;
|
|
|
|
|
|
/** Used to detect unsigned integer values. */
|
|
|
var reIsUint = /^(?:0|[1-9]\d*)$/;
|
|
|
|
|
|
/** Used to identify `toStringTag` values of typed arrays. */
|
|
|
var typedArrayTags = {};
|
|
|
typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
|
|
|
typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
|
|
|
typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
|
|
|
typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
|
|
|
typedArrayTags[uint32Tag] = true;
|
|
|
typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
|
|
|
typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
|
|
|
typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
|
|
|
typedArrayTags[errorTag] = typedArrayTags[funcTag] =
|
|
|
typedArrayTags[mapTag] = typedArrayTags[numberTag] =
|
|
|
typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
|
|
|
typedArrayTags[setTag] = typedArrayTags[stringTag] =
|
|
|
typedArrayTags[weakMapTag] = false;
|
|
|
|
|
|
/** Detect free variable `global` from Node.js. */
|
|
|
var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;
|
|
|
|
|
|
/** Detect free variable `self`. */
|
|
|
var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
|
|
|
|
|
|
/** Used as a reference to the global object. */
|
|
|
var root = freeGlobal || freeSelf || Function('return this')();
|
|
|
|
|
|
/** Detect free variable `exports`. */
|
|
|
var freeExports = exports && !exports.nodeType && exports;
|
|
|
|
|
|
/** Detect free variable `module`. */
|
|
|
var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module;
|
|
|
|
|
|
/** Detect the popular CommonJS extension `module.exports`. */
|
|
|
var moduleExports = freeModule && freeModule.exports === freeExports;
|
|
|
|
|
|
/** Detect free variable `process` from Node.js. */
|
|
|
var freeProcess = moduleExports && freeGlobal.process;
|
|
|
|
|
|
/** Used to access faster Node.js helpers. */
|
|
|
var nodeUtil = (function() {
|
|
|
try {
|
|
|
return freeProcess && freeProcess.binding('util');
|
|
|
} catch (e) {}
|
|
|
}());
|
|
|
|
|
|
/* Node.js helper references. */
|
|
|
var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
|
|
|
|
|
|
/**
|
|
|
* A specialized version of `baseAggregator` for arrays.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Array} [array] The array to iterate over.
|
|
|
* @param {Function} setter The function to set `accumulator` values.
|
|
|
* @param {Function} iteratee The iteratee to transform keys.
|
|
|
* @param {Object} accumulator The initial aggregated object.
|
|
|
* @returns {Function} Returns `accumulator`.
|
|
|
*/
|
|
|
function arrayAggregator(array, setter, iteratee, accumulator) {
|
|
|
var index = -1,
|
|
|
length = array ? array.length : 0;
|
|
|
|
|
|
while (++index < length) {
|
|
|
var value = array[index];
|
|
|
setter(accumulator, value, iteratee(value), array);
|
|
|
}
|
|
|
return accumulator;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* A specialized version of `_.some` for arrays without support for iteratee
|
|
|
* shorthands.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Array} [array] The array to iterate over.
|
|
|
* @param {Function} predicate The function invoked per iteration.
|
|
|
* @returns {boolean} Returns `true` if any element passes the predicate check,
|
|
|
* else `false`.
|
|
|
*/
|
|
|
function arraySome(array, predicate) {
|
|
|
var index = -1,
|
|
|
length = array ? array.length : 0;
|
|
|
|
|
|
while (++index < length) {
|
|
|
if (predicate(array[index], index, array)) {
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* The base implementation of `_.property` without support for deep paths.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {string} key The key of the property to get.
|
|
|
* @returns {Function} Returns the new accessor function.
|
|
|
*/
|
|
|
function baseProperty(key) {
|
|
|
return function(object) {
|
|
|
return object == null ? undefined : object[key];
|
|
|
};
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* The base implementation of `_.times` without support for iteratee shorthands
|
|
|
* or max array length checks.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {number} n The number of times to invoke `iteratee`.
|
|
|
* @param {Function} iteratee The function invoked per iteration.
|
|
|
* @returns {Array} Returns the array of results.
|
|
|
*/
|
|
|
function baseTimes(n, iteratee) {
|
|
|
var index = -1,
|
|
|
result = Array(n);
|
|
|
|
|
|
while (++index < n) {
|
|
|
result[index] = iteratee(index);
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* The base implementation of `_.unary` without support for storing metadata.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Function} func The function to cap arguments for.
|
|
|
* @returns {Function} Returns the new capped function.
|
|
|
*/
|
|
|
function baseUnary(func) {
|
|
|
return function(value) {
|
|
|
return func(value);
|
|
|
};
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Gets the value at `key` of `object`.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Object} [object] The object to query.
|
|
|
* @param {string} key The key of the property to get.
|
|
|
* @returns {*} Returns the property value.
|
|
|
*/
|
|
|
function getValue(object, key) {
|
|
|
return object == null ? undefined : object[key];
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Checks if `value` is a host object in IE < 9.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {*} value The value to check.
|
|
|
* @returns {boolean} Returns `true` if `value` is a host object, else `false`.
|
|
|
*/
|
|
|
function isHostObject(value) {
|
|
|
// Many host objects are `Object` objects that can coerce to strings
|
|
|
// despite having improperly defined `toString` methods.
|
|
|
var result = false;
|
|
|
if (value != null && typeof value.toString != 'function') {
|
|
|
try {
|
|
|
result = !!(value + '');
|
|
|
} catch (e) {}
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Converts `map` to its key-value pairs.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Object} map The map to convert.
|
|
|
* @returns {Array} Returns the key-value pairs.
|
|
|
*/
|
|
|
function mapToArray(map) {
|
|
|
var index = -1,
|
|
|
result = Array(map.size);
|
|
|
|
|
|
map.forEach(function(value, key) {
|
|
|
result[++index] = [key, value];
|
|
|
});
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Creates a unary function that invokes `func` with its argument transformed.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Function} func The function to wrap.
|
|
|
* @param {Function} transform The argument transform.
|
|
|
* @returns {Function} Returns the new function.
|
|
|
*/
|
|
|
function overArg(func, transform) {
|
|
|
return function(arg) {
|
|
|
return func(transform(arg));
|
|
|
};
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Converts `set` to an array of its values.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Object} set The set to convert.
|
|
|
* @returns {Array} Returns the values.
|
|
|
*/
|
|
|
function setToArray(set) {
|
|
|
var index = -1,
|
|
|
result = Array(set.size);
|
|
|
|
|
|
set.forEach(function(value) {
|
|
|
result[++index] = value;
|
|
|
});
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
/** Used for built-in method references. */
|
|
|
var arrayProto = Array.prototype,
|
|
|
funcProto = Function.prototype,
|
|
|
objectProto = Object.prototype;
|
|
|
|
|
|
/** Used to detect overreaching core-js shims. */
|
|
|
var coreJsData = root['__core-js_shared__'];
|
|
|
|
|
|
/** Used to detect methods masquerading as native. */
|
|
|
var maskSrcKey = (function() {
|
|
|
var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
|
|
|
return uid ? ('Symbol(src)_1.' + uid) : '';
|
|
|
}());
|
|
|
|
|
|
/** Used to resolve the decompiled source of functions. */
|
|
|
var funcToString = funcProto.toString;
|
|
|
|
|
|
/** Used to check objects for own properties. */
|
|
|
var hasOwnProperty = objectProto.hasOwnProperty;
|
|
|
|
|
|
/**
|
|
|
* Used to resolve the
|
|
|
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
|
|
|
* of values.
|
|
|
*/
|
|
|
var objectToString = objectProto.toString;
|
|
|
|
|
|
/** Used to detect if a method is native. */
|
|
|
var reIsNative = RegExp('^' +
|
|
|
funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
|
|
|
.replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
|
|
|
);
|
|
|
|
|
|
/** Built-in value references. */
|
|
|
var Symbol = root.Symbol,
|
|
|
Uint8Array = root.Uint8Array,
|
|
|
propertyIsEnumerable = objectProto.propertyIsEnumerable,
|
|
|
splice = arrayProto.splice;
|
|
|
|
|
|
/* Built-in method references for those with the same name as other `lodash` methods. */
|
|
|
var nativeKeys = overArg(Object.keys, Object);
|
|
|
|
|
|
/* Built-in method references that are verified to be native. */
|
|
|
var DataView = getNative(root, 'DataView'),
|
|
|
Map = getNative(root, 'Map'),
|
|
|
Promise = getNative(root, 'Promise'),
|
|
|
Set = getNative(root, 'Set'),
|
|
|
WeakMap = getNative(root, 'WeakMap'),
|
|
|
nativeCreate = getNative(Object, 'create');
|
|
|
|
|
|
/** Used to detect maps, sets, and weakmaps. */
|
|
|
var dataViewCtorString = toSource(DataView),
|
|
|
mapCtorString = toSource(Map),
|
|
|
promiseCtorString = toSource(Promise),
|
|
|
setCtorString = toSource(Set),
|
|
|
weakMapCtorString = toSource(WeakMap);
|
|
|
|
|
|
/** Used to convert symbols to primitives and strings. */
|
|
|
var symbolProto = Symbol ? Symbol.prototype : undefined,
|
|
|
symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,
|
|
|
symbolToString = symbolProto ? symbolProto.toString : undefined;
|
|
|
|
|
|
/**
|
|
|
* Creates a hash object.
|
|
|
*
|
|
|
* @private
|
|
|
* @constructor
|
|
|
* @param {Array} [entries] The key-value pairs to cache.
|
|
|
*/
|
|
|
function Hash(entries) {
|
|
|
var index = -1,
|
|
|
length = entries ? entries.length : 0;
|
|
|
|
|
|
this.clear();
|
|
|
while (++index < length) {
|
|
|
var entry = entries[index];
|
|
|
this.set(entry[0], entry[1]);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Removes all key-value entries from the hash.
|
|
|
*
|
|
|
* @private
|
|
|
* @name clear
|
|
|
* @memberOf Hash
|
|
|
*/
|
|
|
function hashClear() {
|
|
|
this.__data__ = nativeCreate ? nativeCreate(null) : {};
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Removes `key` and its value from the hash.
|
|
|
*
|
|
|
* @private
|
|
|
* @name delete
|
|
|
* @memberOf Hash
|
|
|
* @param {Object} hash The hash to modify.
|
|
|
* @param {string} key The key of the value to remove.
|
|
|
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
|
|
|
*/
|
|
|
function hashDelete(key) {
|
|
|
return this.has(key) && delete this.__data__[key];
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Gets the hash value for `key`.
|
|
|
*
|
|
|
* @private
|
|
|
* @name get
|
|
|
* @memberOf Hash
|
|
|
* @param {string} key The key of the value to get.
|
|
|
* @returns {*} Returns the entry value.
|
|
|
*/
|
|
|
function hashGet(key) {
|
|
|
var data = this.__data__;
|
|
|
if (nativeCreate) {
|
|
|
var result = data[key];
|
|
|
return result === HASH_UNDEFINED ? undefined : result;
|
|
|
}
|
|
|
return hasOwnProperty.call(data, key) ? data[key] : undefined;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Checks if a hash value for `key` exists.
|
|
|
*
|
|
|
* @private
|
|
|
* @name has
|
|
|
* @memberOf Hash
|
|
|
* @param {string} key The key of the entry to check.
|
|
|
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
|
|
|
*/
|
|
|
function hashHas(key) {
|
|
|
var data = this.__data__;
|
|
|
return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Sets the hash `key` to `value`.
|
|
|
*
|
|
|
* @private
|
|
|
* @name set
|
|
|
* @memberOf Hash
|
|
|
* @param {string} key The key of the value to set.
|
|
|
* @param {*} value The value to set.
|
|
|
* @returns {Object} Returns the hash instance.
|
|
|
*/
|
|
|
function hashSet(key, value) {
|
|
|
var data = this.__data__;
|
|
|
data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
// Add methods to `Hash`.
|
|
|
Hash.prototype.clear = hashClear;
|
|
|
Hash.prototype['delete'] = hashDelete;
|
|
|
Hash.prototype.get = hashGet;
|
|
|
Hash.prototype.has = hashHas;
|
|
|
Hash.prototype.set = hashSet;
|
|
|
|
|
|
/**
|
|
|
* Creates an list cache object.
|
|
|
*
|
|
|
* @private
|
|
|
* @constructor
|
|
|
* @param {Array} [entries] The key-value pairs to cache.
|
|
|
*/
|
|
|
function ListCache(entries) {
|
|
|
var index = -1,
|
|
|
length = entries ? entries.length : 0;
|
|
|
|
|
|
this.clear();
|
|
|
while (++index < length) {
|
|
|
var entry = entries[index];
|
|
|
this.set(entry[0], entry[1]);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Removes all key-value entries from the list cache.
|
|
|
*
|
|
|
* @private
|
|
|
* @name clear
|
|
|
* @memberOf ListCache
|
|
|
*/
|
|
|
function listCacheClear() {
|
|
|
this.__data__ = [];
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Removes `key` and its value from the list cache.
|
|
|
*
|
|
|
* @private
|
|
|
* @name delete
|
|
|
* @memberOf ListCache
|
|
|
* @param {string} key The key of the value to remove.
|
|
|
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
|
|
|
*/
|
|
|
function listCacheDelete(key) {
|
|
|
var data = this.__data__,
|
|
|
index = assocIndexOf(data, key);
|
|
|
|
|
|
if (index < 0) {
|
|
|
return false;
|
|
|
}
|
|
|
var lastIndex = data.length - 1;
|
|
|
if (index == lastIndex) {
|
|
|
data.pop();
|
|
|
} else {
|
|
|
splice.call(data, index, 1);
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Gets the list cache value for `key`.
|
|
|
*
|
|
|
* @private
|
|
|
* @name get
|
|
|
* @memberOf ListCache
|
|
|
* @param {string} key The key of the value to get.
|
|
|
* @returns {*} Returns the entry value.
|
|
|
*/
|
|
|
function listCacheGet(key) {
|
|
|
var data = this.__data__,
|
|
|
index = assocIndexOf(data, key);
|
|
|
|
|
|
return index < 0 ? undefined : data[index][1];
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Checks if a list cache value for `key` exists.
|
|
|
*
|
|
|
* @private
|
|
|
* @name has
|
|
|
* @memberOf ListCache
|
|
|
* @param {string} key The key of the entry to check.
|
|
|
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
|
|
|
*/
|
|
|
function listCacheHas(key) {
|
|
|
return assocIndexOf(this.__data__, key) > -1;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Sets the list cache `key` to `value`.
|
|
|
*
|
|
|
* @private
|
|
|
* @name set
|
|
|
* @memberOf ListCache
|
|
|
* @param {string} key The key of the value to set.
|
|
|
* @param {*} value The value to set.
|
|
|
* @returns {Object} Returns the list cache instance.
|
|
|
*/
|
|
|
function listCacheSet(key, value) {
|
|
|
var data = this.__data__,
|
|
|
index = assocIndexOf(data, key);
|
|
|
|
|
|
if (index < 0) {
|
|
|
data.push([key, value]);
|
|
|
} else {
|
|
|
data[index][1] = value;
|
|
|
}
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
// Add methods to `ListCache`.
|
|
|
ListCache.prototype.clear = listCacheClear;
|
|
|
ListCache.prototype['delete'] = listCacheDelete;
|
|
|
ListCache.prototype.get = listCacheGet;
|
|
|
ListCache.prototype.has = listCacheHas;
|
|
|
ListCache.prototype.set = listCacheSet;
|
|
|
|
|
|
/**
|
|
|
* Creates a map cache object to store key-value pairs.
|
|
|
*
|
|
|
* @private
|
|
|
* @constructor
|
|
|
* @param {Array} [entries] The key-value pairs to cache.
|
|
|
*/
|
|
|
function MapCache(entries) {
|
|
|
var index = -1,
|
|
|
length = entries ? entries.length : 0;
|
|
|
|
|
|
this.clear();
|
|
|
while (++index < length) {
|
|
|
var entry = entries[index];
|
|
|
this.set(entry[0], entry[1]);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Removes all key-value entries from the map.
|
|
|
*
|
|
|
* @private
|
|
|
* @name clear
|
|
|
* @memberOf MapCache
|
|
|
*/
|
|
|
function mapCacheClear() {
|
|
|
this.__data__ = {
|
|
|
'hash': new Hash,
|
|
|
'map': new (Map || ListCache),
|
|
|
'string': new Hash
|
|
|
};
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Removes `key` and its value from the map.
|
|
|
*
|
|
|
* @private
|
|
|
* @name delete
|
|
|
* @memberOf MapCache
|
|
|
* @param {string} key The key of the value to remove.
|
|
|
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
|
|
|
*/
|
|
|
function mapCacheDelete(key) {
|
|
|
return getMapData(this, key)['delete'](key);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Gets the map value for `key`.
|
|
|
*
|
|
|
* @private
|
|
|
* @name get
|
|
|
* @memberOf MapCache
|
|
|
* @param {string} key The key of the value to get.
|
|
|
* @returns {*} Returns the entry value.
|
|
|
*/
|
|
|
function mapCacheGet(key) {
|
|
|
return getMapData(this, key).get(key);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Checks if a map value for `key` exists.
|
|
|
*
|
|
|
* @private
|
|
|
* @name has
|
|
|
* @memberOf MapCache
|
|
|
* @param {string} key The key of the entry to check.
|
|
|
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
|
|
|
*/
|
|
|
function mapCacheHas(key) {
|
|
|
return getMapData(this, key).has(key);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Sets the map `key` to `value`.
|
|
|
*
|
|
|
* @private
|
|
|
* @name set
|
|
|
* @memberOf MapCache
|
|
|
* @param {string} key The key of the value to set.
|
|
|
* @param {*} value The value to set.
|
|
|
* @returns {Object} Returns the map cache instance.
|
|
|
*/
|
|
|
function mapCacheSet(key, value) {
|
|
|
getMapData(this, key).set(key, value);
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
// Add methods to `MapCache`.
|
|
|
MapCache.prototype.clear = mapCacheClear;
|
|
|
MapCache.prototype['delete'] = mapCacheDelete;
|
|
|
MapCache.prototype.get = mapCacheGet;
|
|
|
MapCache.prototype.has = mapCacheHas;
|
|
|
MapCache.prototype.set = mapCacheSet;
|
|
|
|
|
|
/**
|
|
|
*
|
|
|
* Creates an array cache object to store unique values.
|
|
|
*
|
|
|
* @private
|
|
|
* @constructor
|
|
|
* @param {Array} [values] The values to cache.
|
|
|
*/
|
|
|
function SetCache(values) {
|
|
|
var index = -1,
|
|
|
length = values ? values.length : 0;
|
|
|
|
|
|
this.__data__ = new MapCache;
|
|
|
while (++index < length) {
|
|
|
this.add(values[index]);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Adds `value` to the array cache.
|
|
|
*
|
|
|
* @private
|
|
|
* @name add
|
|
|
* @memberOf SetCache
|
|
|
* @alias push
|
|
|
* @param {*} value The value to cache.
|
|
|
* @returns {Object} Returns the cache instance.
|
|
|
*/
|
|
|
function setCacheAdd(value) {
|
|
|
this.__data__.set(value, HASH_UNDEFINED);
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Checks if `value` is in the array cache.
|
|
|
*
|
|
|
* @private
|
|
|
* @name has
|
|
|
* @memberOf SetCache
|
|
|
* @param {*} value The value to search for.
|
|
|
* @returns {number} Returns `true` if `value` is found, else `false`.
|
|
|
*/
|
|
|
function setCacheHas(value) {
|
|
|
return this.__data__.has(value);
|
|
|
}
|
|
|
|
|
|
// Add methods to `SetCache`.
|
|
|
SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
|
|
|
SetCache.prototype.has = setCacheHas;
|
|
|
|
|
|
/**
|
|
|
* Creates a stack cache object to store key-value pairs.
|
|
|
*
|
|
|
* @private
|
|
|
* @constructor
|
|
|
* @param {Array} [entries] The key-value pairs to cache.
|
|
|
*/
|
|
|
function Stack(entries) {
|
|
|
this.__data__ = new ListCache(entries);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Removes all key-value entries from the stack.
|
|
|
*
|
|
|
* @private
|
|
|
* @name clear
|
|
|
* @memberOf Stack
|
|
|
*/
|
|
|
function stackClear() {
|
|
|
this.__data__ = new ListCache;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Removes `key` and its value from the stack.
|
|
|
*
|
|
|
* @private
|
|
|
* @name delete
|
|
|
* @memberOf Stack
|
|
|
* @param {string} key The key of the value to remove.
|
|
|
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
|
|
|
*/
|
|
|
function stackDelete(key) {
|
|
|
return this.__data__['delete'](key);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Gets the stack value for `key`.
|
|
|
*
|
|
|
* @private
|
|
|
* @name get
|
|
|
* @memberOf Stack
|
|
|
* @param {string} key The key of the value to get.
|
|
|
* @returns {*} Returns the entry value.
|
|
|
*/
|
|
|
function stackGet(key) {
|
|
|
return this.__data__.get(key);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Checks if a stack value for `key` exists.
|
|
|
*
|
|
|
* @private
|
|
|
* @name has
|
|
|
* @memberOf Stack
|
|
|
* @param {string} key The key of the entry to check.
|
|
|
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
|
|
|
*/
|
|
|
function stackHas(key) {
|
|
|
return this.__data__.has(key);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Sets the stack `key` to `value`.
|
|
|
*
|
|
|
* @private
|
|
|
* @name set
|
|
|
* @memberOf Stack
|
|
|
* @param {string} key The key of the value to set.
|
|
|
* @param {*} value The value to set.
|
|
|
* @returns {Object} Returns the stack cache instance.
|
|
|
*/
|
|
|
function stackSet(key, value) {
|
|
|
var cache = this.__data__;
|
|
|
if (cache instanceof ListCache) {
|
|
|
var pairs = cache.__data__;
|
|
|
if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
|
|
|
pairs.push([key, value]);
|
|
|
return this;
|
|
|
}
|
|
|
cache = this.__data__ = new MapCache(pairs);
|
|
|
}
|
|
|
cache.set(key, value);
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
// Add methods to `Stack`.
|
|
|
Stack.prototype.clear = stackClear;
|
|
|
Stack.prototype['delete'] = stackDelete;
|
|
|
Stack.prototype.get = stackGet;
|
|
|
Stack.prototype.has = stackHas;
|
|
|
Stack.prototype.set = stackSet;
|
|
|
|
|
|
/**
|
|
|
* Creates an array of the enumerable property names of the array-like `value`.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {*} value The value to query.
|
|
|
* @param {boolean} inherited Specify returning inherited property names.
|
|
|
* @returns {Array} Returns the array of property names.
|
|
|
*/
|
|
|
function arrayLikeKeys(value, inherited) {
|
|
|
// Safari 8.1 makes `arguments.callee` enumerable in strict mode.
|
|
|
// Safari 9 makes `arguments.length` enumerable in strict mode.
|
|
|
var result = (isArray(value) || isArguments(value))
|
|
|
? baseTimes(value.length, String)
|
|
|
: [];
|
|
|
|
|
|
var length = result.length,
|
|
|
skipIndexes = !!length;
|
|
|
|
|
|
for (var key in value) {
|
|
|
if ((inherited || hasOwnProperty.call(value, key)) &&
|
|
|
!(skipIndexes && (key == 'length' || isIndex(key, length)))) {
|
|
|
result.push(key);
|
|
|
}
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Gets the index at which the `key` is found in `array` of key-value pairs.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Array} array The array to inspect.
|
|
|
* @param {*} key The key to search for.
|
|
|
* @returns {number} Returns the index of the matched value, else `-1`.
|
|
|
*/
|
|
|
function assocIndexOf(array, key) {
|
|
|
var length = array.length;
|
|
|
while (length--) {
|
|
|
if (eq(array[length][0], key)) {
|
|
|
return length;
|
|
|
}
|
|
|
}
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Aggregates elements of `collection` on `accumulator` with keys transformed
|
|
|
* by `iteratee` and values set by `setter`.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Array|Object} collection The collection to iterate over.
|
|
|
* @param {Function} setter The function to set `accumulator` values.
|
|
|
* @param {Function} iteratee The iteratee to transform keys.
|
|
|
* @param {Object} accumulator The initial aggregated object.
|
|
|
* @returns {Function} Returns `accumulator`.
|
|
|
*/
|
|
|
function baseAggregator(collection, setter, iteratee, accumulator) {
|
|
|
baseEach(collection, function(value, key, collection) {
|
|
|
setter(accumulator, value, iteratee(value), collection);
|
|
|
});
|
|
|
return accumulator;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* The base implementation of `_.forEach` without support for iteratee shorthands.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Array|Object} collection The collection to iterate over.
|
|
|
* @param {Function} iteratee The function invoked per iteration.
|
|
|
* @returns {Array|Object} Returns `collection`.
|
|
|
*/
|
|
|
var baseEach = createBaseEach(baseForOwn);
|
|
|
|
|
|
/**
|
|
|
* The base implementation of `baseForOwn` which iterates over `object`
|
|
|
* properties returned by `keysFunc` and invokes `iteratee` for each property.
|
|
|
* Iteratee functions may exit iteration early by explicitly returning `false`.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Object} object The object to iterate over.
|
|
|
* @param {Function} iteratee The function invoked per iteration.
|
|
|
* @param {Function} keysFunc The function to get the keys of `object`.
|
|
|
* @returns {Object} Returns `object`.
|
|
|
*/
|
|
|
var baseFor = createBaseFor();
|
|
|
|
|
|
/**
|
|
|
* The base implementation of `_.forOwn` without support for iteratee shorthands.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Object} object The object to iterate over.
|
|
|
* @param {Function} iteratee The function invoked per iteration.
|
|
|
* @returns {Object} Returns `object`.
|
|
|
*/
|
|
|
function baseForOwn(object, iteratee) {
|
|
|
return object && baseFor(object, iteratee, keys);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* The base implementation of `_.get` without support for default values.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Object} object The object to query.
|
|
|
* @param {Array|string} path The path of the property to get.
|
|
|
* @returns {*} Returns the resolved value.
|
|
|
*/
|
|
|
function baseGet(object, path) {
|
|
|
path = isKey(path, object) ? [path] : castPath(path);
|
|
|
|
|
|
var index = 0,
|
|
|
length = path.length;
|
|
|
|
|
|
while (object != null && index < length) {
|
|
|
object = object[toKey(path[index++])];
|
|
|
}
|
|
|
return (index && index == length) ? object : undefined;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* The base implementation of `getTag`.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {*} value The value to query.
|
|
|
* @returns {string} Returns the `toStringTag`.
|
|
|
*/
|
|
|
function baseGetTag(value) {
|
|
|
return objectToString.call(value);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* The base implementation of `_.hasIn` without support for deep paths.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Object} [object] The object to query.
|
|
|
* @param {Array|string} key The key to check.
|
|
|
* @returns {boolean} Returns `true` if `key` exists, else `false`.
|
|
|
*/
|
|
|
function baseHasIn(object, key) {
|
|
|
return object != null && key in Object(object);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* The base implementation of `_.isEqual` which supports partial comparisons
|
|
|
* and tracks traversed objects.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {*} value The value to compare.
|
|
|
* @param {*} other The other value to compare.
|
|
|
* @param {Function} [customizer] The function to customize comparisons.
|
|
|
* @param {boolean} [bitmask] The bitmask of comparison flags.
|
|
|
* The bitmask may be composed of the following flags:
|
|
|
* 1 - Unordered comparison
|
|
|
* 2 - Partial comparison
|
|
|
* @param {Object} [stack] Tracks traversed `value` and `other` objects.
|
|
|
* @returns {boolean} Returns `true` if the values are equivalent, else `false`.
|
|
|
*/
|
|
|
function baseIsEqual(value, other, customizer, bitmask, stack) {
|
|
|
if (value === other) {
|
|
|
return true;
|
|
|
}
|
|
|
if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {
|
|
|
return value !== value && other !== other;
|
|
|
}
|
|
|
return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* A specialized version of `baseIsEqual` for arrays and objects which performs
|
|
|
* deep comparisons and tracks traversed objects enabling objects with circular
|
|
|
* references to be compared.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Object} object The object to compare.
|
|
|
* @param {Object} other The other object to compare.
|
|
|
* @param {Function} equalFunc The function to determine equivalents of values.
|
|
|
* @param {Function} [customizer] The function to customize comparisons.
|
|
|
* @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`
|
|
|
* for more details.
|
|
|
* @param {Object} [stack] Tracks traversed `object` and `other` objects.
|
|
|
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
|
|
|
*/
|
|
|
function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {
|
|
|
var objIsArr = isArray(object),
|
|
|
othIsArr = isArray(other),
|
|
|
objTag = arrayTag,
|
|
|
othTag = arrayTag;
|
|
|
|
|
|
if (!objIsArr) {
|
|
|
objTag = getTag(object);
|
|
|
objTag = objTag == argsTag ? objectTag : objTag;
|
|
|
}
|
|
|
if (!othIsArr) {
|
|
|
othTag = getTag(other);
|
|
|
othTag = othTag == argsTag ? objectTag : othTag;
|
|
|
}
|
|
|
var objIsObj = objTag == objectTag && !isHostObject(object),
|
|
|
othIsObj = othTag == objectTag && !isHostObject(other),
|
|
|
isSameTag = objTag == othTag;
|
|
|
|
|
|
if (isSameTag && !objIsObj) {
|
|
|
stack || (stack = new Stack);
|
|
|
return (objIsArr || isTypedArray(object))
|
|
|
? equalArrays(object, other, equalFunc, customizer, bitmask, stack)
|
|
|
: equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);
|
|
|
}
|
|
|
if (!(bitmask & PARTIAL_COMPARE_FLAG)) {
|
|
|
var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
|
|
|
othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
|
|
|
|
|
|
if (objIsWrapped || othIsWrapped) {
|
|
|
var objUnwrapped = objIsWrapped ? object.value() : object,
|
|
|
othUnwrapped = othIsWrapped ? other.value() : other;
|
|
|
|
|
|
stack || (stack = new Stack);
|
|
|
return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);
|
|
|
}
|
|
|
}
|
|
|
if (!isSameTag) {
|
|
|
return false;
|
|
|
}
|
|
|
stack || (stack = new Stack);
|
|
|
return equalObjects(object, other, equalFunc, customizer, bitmask, stack);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* The base implementation of `_.isMatch` without support for iteratee shorthands.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Object} object The object to inspect.
|
|
|
* @param {Object} source The object of property values to match.
|
|
|
* @param {Array} matchData The property names, values, and compare flags to match.
|
|
|
* @param {Function} [customizer] The function to customize comparisons.
|
|
|
* @returns {boolean} Returns `true` if `object` is a match, else `false`.
|
|
|
*/
|
|
|
function baseIsMatch(object, source, matchData, customizer) {
|
|
|
var index = matchData.length,
|
|
|
length = index,
|
|
|
noCustomizer = !customizer;
|
|
|
|
|
|
if (object == null) {
|
|
|
return !length;
|
|
|
}
|
|
|
object = Object(object);
|
|
|
while (index--) {
|
|
|
var data = matchData[index];
|
|
|
if ((noCustomizer && data[2])
|
|
|
? data[1] !== object[data[0]]
|
|
|
: !(data[0] in object)
|
|
|
) {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
while (++index < length) {
|
|
|
data = matchData[index];
|
|
|
var key = data[0],
|
|
|
objValue = object[key],
|
|
|
srcValue = data[1];
|
|
|
|
|
|
if (noCustomizer && data[2]) {
|
|
|
if (objValue === undefined && !(key in object)) {
|
|
|
return false;
|
|
|
}
|
|
|
} else {
|
|
|
var stack = new Stack;
|
|
|
if (customizer) {
|
|
|
var result = customizer(objValue, srcValue, key, object, source, stack);
|
|
|
}
|
|
|
if (!(result === undefined
|
|
|
? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack)
|
|
|
: result
|
|
|
)) {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* The base implementation of `_.isNative` without bad shim checks.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {*} value The value to check.
|
|
|
* @returns {boolean} Returns `true` if `value` is a native function,
|
|
|
* else `false`.
|
|
|
*/
|
|
|
function baseIsNative(value) {
|
|
|
if (!isObject(value) || isMasked(value)) {
|
|
|
return false;
|
|
|
}
|
|
|
var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;
|
|
|
return pattern.test(toSource(value));
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* The base implementation of `_.isTypedArray` without Node.js optimizations.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {*} value The value to check.
|
|
|
* @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
|
|
|
*/
|
|
|
function baseIsTypedArray(value) {
|
|
|
return isObjectLike(value) &&
|
|
|
isLength(value.length) && !!typedArrayTags[objectToString.call(value)];
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* The base implementation of `_.iteratee`.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {*} [value=_.identity] The value to convert to an iteratee.
|
|
|
* @returns {Function} Returns the iteratee.
|
|
|
*/
|
|
|
function baseIteratee(value) {
|
|
|
// Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
|
|
|
// See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
|
|
|
if (typeof value == 'function') {
|
|
|
return value;
|
|
|
}
|
|
|
if (value == null) {
|
|
|
return identity;
|
|
|
}
|
|
|
if (typeof value == 'object') {
|
|
|
return isArray(value)
|
|
|
? baseMatchesProperty(value[0], value[1])
|
|
|
: baseMatches(value);
|
|
|
}
|
|
|
return property(value);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Object} object The object to query.
|
|
|
* @returns {Array} Returns the array of property names.
|
|
|
*/
|
|
|
function baseKeys(object) {
|
|
|
if (!isPrototype(object)) {
|
|
|
return nativeKeys(object);
|
|
|
}
|
|
|
var result = [];
|
|
|
for (var key in Object(object)) {
|
|
|
if (hasOwnProperty.call(object, key) && key != 'constructor') {
|
|
|
result.push(key);
|
|
|
}
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* The base implementation of `_.matches` which doesn't clone `source`.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Object} source The object of property values to match.
|
|
|
* @returns {Function} Returns the new spec function.
|
|
|
*/
|
|
|
function baseMatches(source) {
|
|
|
var matchData = getMatchData(source);
|
|
|
if (matchData.length == 1 && matchData[0][2]) {
|
|
|
return matchesStrictComparable(matchData[0][0], matchData[0][1]);
|
|
|
}
|
|
|
return function(object) {
|
|
|
return object === source || baseIsMatch(object, source, matchData);
|
|
|
};
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {string} path The path of the property to get.
|
|
|
* @param {*} srcValue The value to match.
|
|
|
* @returns {Function} Returns the new spec function.
|
|
|
*/
|
|
|
function baseMatchesProperty(path, srcValue) {
|
|
|
if (isKey(path) && isStrictComparable(srcValue)) {
|
|
|
return matchesStrictComparable(toKey(path), srcValue);
|
|
|
}
|
|
|
return function(object) {
|
|
|
var objValue = get(object, path);
|
|
|
return (objValue === undefined && objValue === srcValue)
|
|
|
? hasIn(object, path)
|
|
|
: baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG);
|
|
|
};
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* A specialized version of `baseProperty` which supports deep paths.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Array|string} path The path of the property to get.
|
|
|
* @returns {Function} Returns the new accessor function.
|
|
|
*/
|
|
|
function basePropertyDeep(path) {
|
|
|
return function(object) {
|
|
|
return baseGet(object, path);
|
|
|
};
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* The base implementation of `_.toString` which doesn't convert nullish
|
|
|
* values to empty strings.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {*} value The value to process.
|
|
|
* @returns {string} Returns the string.
|
|
|
*/
|
|
|
function baseToString(value) {
|
|
|
// Exit early for strings to avoid a performance hit in some environments.
|
|
|
if (typeof value == 'string') {
|
|
|
return value;
|
|
|
}
|
|
|
if (isSymbol(value)) {
|
|
|
return symbolToString ? symbolToString.call(value) : '';
|
|
|
}
|
|
|
var result = (value + '');
|
|
|
return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Casts `value` to a path array if it's not one.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {*} value The value to inspect.
|
|
|
* @returns {Array} Returns the cast property path array.
|
|
|
*/
|
|
|
function castPath(value) {
|
|
|
return isArray(value) ? value : stringToPath(value);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Creates a function like `_.groupBy`.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Function} setter The function to set accumulator values.
|
|
|
* @param {Function} [initializer] The accumulator object initializer.
|
|
|
* @returns {Function} Returns the new aggregator function.
|
|
|
*/
|
|
|
function createAggregator(setter, initializer) {
|
|
|
return function(collection, iteratee) {
|
|
|
var func = isArray(collection) ? arrayAggregator : baseAggregator,
|
|
|
accumulator = initializer ? initializer() : {};
|
|
|
|
|
|
return func(collection, setter, baseIteratee(iteratee), accumulator);
|
|
|
};
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Creates a `baseEach` or `baseEachRight` function.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Function} eachFunc The function to iterate over a collection.
|
|
|
* @param {boolean} [fromRight] Specify iterating from right to left.
|
|
|
* @returns {Function} Returns the new base function.
|
|
|
*/
|
|
|
function createBaseEach(eachFunc, fromRight) {
|
|
|
return function(collection, iteratee) {
|
|
|
if (collection == null) {
|
|
|
return collection;
|
|
|
}
|
|
|
if (!isArrayLike(collection)) {
|
|
|
return eachFunc(collection, iteratee);
|
|
|
}
|
|
|
var length = collection.length,
|
|
|
index = fromRight ? length : -1,
|
|
|
iterable = Object(collection);
|
|
|
|
|
|
while ((fromRight ? index-- : ++index < length)) {
|
|
|
if (iteratee(iterable[index], index, iterable) === false) {
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
return collection;
|
|
|
};
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Creates a base function for methods like `_.forIn` and `_.forOwn`.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {boolean} [fromRight] Specify iterating from right to left.
|
|
|
* @returns {Function} Returns the new base function.
|
|
|
*/
|
|
|
function createBaseFor(fromRight) {
|
|
|
return function(object, iteratee, keysFunc) {
|
|
|
var index = -1,
|
|
|
iterable = Object(object),
|
|
|
props = keysFunc(object),
|
|
|
length = props.length;
|
|
|
|
|
|
while (length--) {
|
|
|
var key = props[fromRight ? length : ++index];
|
|
|
if (iteratee(iterable[key], key, iterable) === false) {
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
return object;
|
|
|
};
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* A specialized version of `baseIsEqualDeep` for arrays with support for
|
|
|
* partial deep comparisons.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Array} array The array to compare.
|
|
|
* @param {Array} other The other array to compare.
|
|
|
* @param {Function} equalFunc The function to determine equivalents of values.
|
|
|
* @param {Function} customizer The function to customize comparisons.
|
|
|
* @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
|
|
|
* for more details.
|
|
|
* @param {Object} stack Tracks traversed `array` and `other` objects.
|
|
|
* @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
|
|
|
*/
|
|
|
function equalArrays(array, other, equalFunc, customizer, bitmask, stack) {
|
|
|
var isPartial = bitmask & PARTIAL_COMPARE_FLAG,
|
|
|
arrLength = array.length,
|
|
|
othLength = other.length;
|
|
|
|
|
|
if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
|
|
|
return false;
|
|
|
}
|
|
|
// Assume cyclic values are equal.
|
|
|
var stacked = stack.get(array);
|
|
|
if (stacked && stack.get(other)) {
|
|
|
return stacked == other;
|
|
|
}
|
|
|
var index = -1,
|
|
|
result = true,
|
|
|
seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined;
|
|
|
|
|
|
stack.set(array, other);
|
|
|
stack.set(other, array);
|
|
|
|
|
|
// Ignore non-index properties.
|
|
|
while (++index < arrLength) {
|
|
|
var arrValue = array[index],
|
|
|
othValue = other[index];
|
|
|
|
|
|
if (customizer) {
|
|
|
var compared = isPartial
|
|
|
? customizer(othValue, arrValue, index, other, array, stack)
|
|
|
: customizer(arrValue, othValue, index, array, other, stack);
|
|
|
}
|
|
|
if (compared !== undefined) {
|
|
|
if (compared) {
|
|
|
continue;
|
|
|
}
|
|
|
result = false;
|
|
|
break;
|
|
|
}
|
|
|
// Recursively compare arrays (susceptible to call stack limits).
|
|
|
if (seen) {
|
|
|
if (!arraySome(other, function(othValue, othIndex) {
|
|
|
if (!seen.has(othIndex) &&
|
|
|
(arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {
|
|
|
return seen.add(othIndex);
|
|
|
}
|
|
|
})) {
|
|
|
result = false;
|
|
|
break;
|
|
|
}
|
|
|
} else if (!(
|
|
|
arrValue === othValue ||
|
|
|
equalFunc(arrValue, othValue, customizer, bitmask, stack)
|
|
|
)) {
|
|
|
result = false;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
stack['delete'](array);
|
|
|
stack['delete'](other);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* A specialized version of `baseIsEqualDeep` for comparing objects of
|
|
|
* the same `toStringTag`.
|
|
|
*
|
|
|
* **Note:** This function only supports comparing values with tags of
|
|
|
* `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Object} object The object to compare.
|
|
|
* @param {Object} other The other object to compare.
|
|
|
* @param {string} tag The `toStringTag` of the objects to compare.
|
|
|
* @param {Function} equalFunc The function to determine equivalents of values.
|
|
|
* @param {Function} customizer The function to customize comparisons.
|
|
|
* @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
|
|
|
* for more details.
|
|
|
* @param {Object} stack Tracks traversed `object` and `other` objects.
|
|
|
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
|
|
|
*/
|
|
|
function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {
|
|
|
switch (tag) {
|
|
|
case dataViewTag:
|
|
|
if ((object.byteLength != other.byteLength) ||
|
|
|
(object.byteOffset != other.byteOffset)) {
|
|
|
return false;
|
|
|
}
|
|
|
object = object.buffer;
|
|
|
other = other.buffer;
|
|
|
|
|
|
case arrayBufferTag:
|
|
|
if ((object.byteLength != other.byteLength) ||
|
|
|
!equalFunc(new Uint8Array(object), new Uint8Array(other))) {
|
|
|
return false;
|
|
|
}
|
|
|
return true;
|
|
|
|
|
|
case boolTag:
|
|
|
case dateTag:
|
|
|
case numberTag:
|
|
|
// Coerce booleans to `1` or `0` and dates to milliseconds.
|
|
|
// Invalid dates are coerced to `NaN`.
|
|
|
return eq(+object, +other);
|
|
|
|
|
|
case errorTag:
|
|
|
return object.name == other.name && object.message == other.message;
|
|
|
|
|
|
case regexpTag:
|
|
|
case stringTag:
|
|
|
// Coerce regexes to strings and treat strings, primitives and objects,
|
|
|
// as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
|
|
|
// for more details.
|
|
|
return object == (other + '');
|
|
|
|
|
|
case mapTag:
|
|
|
var convert = mapToArray;
|
|
|
|
|
|
case setTag:
|
|
|
var isPartial = bitmask & PARTIAL_COMPARE_FLAG;
|
|
|
convert || (convert = setToArray);
|
|
|
|
|
|
if (object.size != other.size && !isPartial) {
|
|
|
return false;
|
|
|
}
|
|
|
// Assume cyclic values are equal.
|
|
|
var stacked = stack.get(object);
|
|
|
if (stacked) {
|
|
|
return stacked == other;
|
|
|
}
|
|
|
bitmask |= UNORDERED_COMPARE_FLAG;
|
|
|
|
|
|
// Recursively compare objects (susceptible to call stack limits).
|
|
|
stack.set(object, other);
|
|
|
var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack);
|
|
|
stack['delete'](object);
|
|
|
return result;
|
|
|
|
|
|
case symbolTag:
|
|
|
if (symbolValueOf) {
|
|
|
return symbolValueOf.call(object) == symbolValueOf.call(other);
|
|
|
}
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* A specialized version of `baseIsEqualDeep` for objects with support for
|
|
|
* partial deep comparisons.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Object} object The object to compare.
|
|
|
* @param {Object} other The other object to compare.
|
|
|
* @param {Function} equalFunc The function to determine equivalents of values.
|
|
|
* @param {Function} customizer The function to customize comparisons.
|
|
|
* @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
|
|
|
* for more details.
|
|
|
* @param {Object} stack Tracks traversed `object` and `other` objects.
|
|
|
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
|
|
|
*/
|
|
|
function equalObjects(object, other, equalFunc, customizer, bitmask, stack) {
|
|
|
var isPartial = bitmask & PARTIAL_COMPARE_FLAG,
|
|
|
objProps = keys(object),
|
|
|
objLength = objProps.length,
|
|
|
othProps = keys(other),
|
|
|
othLength = othProps.length;
|
|
|
|
|
|
if (objLength != othLength && !isPartial) {
|
|
|
return false;
|
|
|
}
|
|
|
var index = objLength;
|
|
|
while (index--) {
|
|
|
var key = objProps[index];
|
|
|
if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
// Assume cyclic values are equal.
|
|
|
var stacked = stack.get(object);
|
|
|
if (stacked && stack.get(other)) {
|
|
|
return stacked == other;
|
|
|
}
|
|
|
var result = true;
|
|
|
stack.set(object, other);
|
|
|
stack.set(other, object);
|
|
|
|
|
|
var skipCtor = isPartial;
|
|
|
while (++index < objLength) {
|
|
|
key = objProps[index];
|
|
|
var objValue = object[key],
|
|
|
othValue = other[key];
|
|
|
|
|
|
if (customizer) {
|
|
|
var compared = isPartial
|
|
|
? customizer(othValue, objValue, key, other, object, stack)
|
|
|
: customizer(objValue, othValue, key, object, other, stack);
|
|
|
}
|
|
|
// Recursively compare objects (susceptible to call stack limits).
|
|
|
if (!(compared === undefined
|
|
|
? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack))
|
|
|
: compared
|
|
|
)) {
|
|
|
result = false;
|
|
|
break;
|
|
|
}
|
|
|
skipCtor || (skipCtor = key == 'constructor');
|
|
|
}
|
|
|
if (result && !skipCtor) {
|
|
|
var objCtor = object.constructor,
|
|
|
othCtor = other.constructor;
|
|
|
|
|
|
// Non `Object` object instances with different constructors are not equal.
|
|
|
if (objCtor != othCtor &&
|
|
|
('constructor' in object && 'constructor' in other) &&
|
|
|
!(typeof objCtor == 'function' && objCtor instanceof objCtor &&
|
|
|
typeof othCtor == 'function' && othCtor instanceof othCtor)) {
|
|
|
result = false;
|
|
|
}
|
|
|
}
|
|
|
stack['delete'](object);
|
|
|
stack['delete'](other);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Gets the data for `map`.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Object} map The map to query.
|
|
|
* @param {string} key The reference key.
|
|
|
* @returns {*} Returns the map data.
|
|
|
*/
|
|
|
function getMapData(map, key) {
|
|
|
var data = map.__data__;
|
|
|
return isKeyable(key)
|
|
|
? data[typeof key == 'string' ? 'string' : 'hash']
|
|
|
: data.map;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Gets the property names, values, and compare flags of `object`.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Object} object The object to query.
|
|
|
* @returns {Array} Returns the match data of `object`.
|
|
|
*/
|
|
|
function getMatchData(object) {
|
|
|
var result = keys(object),
|
|
|
length = result.length;
|
|
|
|
|
|
while (length--) {
|
|
|
var key = result[length],
|
|
|
value = object[key];
|
|
|
|
|
|
result[length] = [key, value, isStrictComparable(value)];
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Gets the native function at `key` of `object`.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Object} object The object to query.
|
|
|
* @param {string} key The key of the method to get.
|
|
|
* @returns {*} Returns the function if it's native, else `undefined`.
|
|
|
*/
|
|
|
function getNative(object, key) {
|
|
|
var value = getValue(object, key);
|
|
|
return baseIsNative(value) ? value : undefined;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Gets the `toStringTag` of `value`.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {*} value The value to query.
|
|
|
* @returns {string} Returns the `toStringTag`.
|
|
|
*/
|
|
|
var getTag = baseGetTag;
|
|
|
|
|
|
// Fallback for data views, maps, sets, and weak maps in IE 11,
|
|
|
// for data views in Edge < 14, and promises in Node.js.
|
|
|
if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
|
|
|
(Map && getTag(new Map) != mapTag) ||
|
|
|
(Promise && getTag(Promise.resolve()) != promiseTag) ||
|
|
|
(Set && getTag(new Set) != setTag) ||
|
|
|
(WeakMap && getTag(new WeakMap) != weakMapTag)) {
|
|
|
getTag = function(value) {
|
|
|
var result = objectToString.call(value),
|
|
|
Ctor = result == objectTag ? value.constructor : undefined,
|
|
|
ctorString = Ctor ? toSource(Ctor) : undefined;
|
|
|
|
|
|
if (ctorString) {
|
|
|
switch (ctorString) {
|
|
|
case dataViewCtorString: return dataViewTag;
|
|
|
case mapCtorString: return mapTag;
|
|
|
case promiseCtorString: return promiseTag;
|
|
|
case setCtorString: return setTag;
|
|
|
case weakMapCtorString: return weakMapTag;
|
|
|
}
|
|
|
}
|
|
|
return result;
|
|
|
};
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Checks if `path` exists on `object`.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Object} object The object to query.
|
|
|
* @param {Array|string} path The path to check.
|
|
|
* @param {Function} hasFunc The function to check properties.
|
|
|
* @returns {boolean} Returns `true` if `path` exists, else `false`.
|
|
|
*/
|
|
|
function hasPath(object, path, hasFunc) {
|
|
|
path = isKey(path, object) ? [path] : castPath(path);
|
|
|
|
|
|
var result,
|
|
|
index = -1,
|
|
|
length = path.length;
|
|
|
|
|
|
while (++index < length) {
|
|
|
var key = toKey(path[index]);
|
|
|
if (!(result = object != null && hasFunc(object, key))) {
|
|
|
break;
|
|
|
}
|
|
|
object = object[key];
|
|
|
}
|
|
|
if (result) {
|
|
|
return result;
|
|
|
}
|
|
|
var length = object ? object.length : 0;
|
|
|
return !!length && isLength(length) && isIndex(key, length) &&
|
|
|
(isArray(object) || isArguments(object));
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Checks if `value` is a valid array-like index.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {*} value The value to check.
|
|
|
* @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
|
|
|
* @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
|
|
|
*/
|
|
|
function isIndex(value, length) {
|
|
|
length = length == null ? MAX_SAFE_INTEGER : length;
|
|
|
return !!length &&
|
|
|
(typeof value == 'number' || reIsUint.test(value)) &&
|
|
|
(value > -1 && value % 1 == 0 && value < length);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Checks if `value` is a property name and not a property path.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {*} value The value to check.
|
|
|
* @param {Object} [object] The object to query keys on.
|
|
|
* @returns {boolean} Returns `true` if `value` is a property name, else `false`.
|
|
|
*/
|
|
|
function isKey(value, object) {
|
|
|
if (isArray(value)) {
|
|
|
return false;
|
|
|
}
|
|
|
var type = typeof value;
|
|
|
if (type == 'number' || type == 'symbol' || type == 'boolean' ||
|
|
|
value == null || isSymbol(value)) {
|
|
|
return true;
|
|
|
}
|
|
|
return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
|
|
|
(object != null && value in Object(object));
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Checks if `value` is suitable for use as unique object key.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {*} value The value to check.
|
|
|
* @returns {boolean} Returns `true` if `value` is suitable, else `false`.
|
|
|
*/
|
|
|
function isKeyable(value) {
|
|
|
var type = typeof value;
|
|
|
return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
|
|
|
? (value !== '__proto__')
|
|
|
: (value === null);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Checks if `func` has its source masked.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Function} func The function to check.
|
|
|
* @returns {boolean} Returns `true` if `func` is masked, else `false`.
|
|
|
*/
|
|
|
function isMasked(func) {
|
|
|
return !!maskSrcKey && (maskSrcKey in func);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Checks if `value` is likely a prototype object.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {*} value The value to check.
|
|
|
* @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
|
|
|
*/
|
|
|
function isPrototype(value) {
|
|
|
var Ctor = value && value.constructor,
|
|
|
proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
|
|
|
|
|
|
return value === proto;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {*} value The value to check.
|
|
|
* @returns {boolean} Returns `true` if `value` if suitable for strict
|
|
|
* equality comparisons, else `false`.
|
|
|
*/
|
|
|
function isStrictComparable(value) {
|
|
|
return value === value && !isObject(value);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* A specialized version of `matchesProperty` for source values suitable
|
|
|
* for strict equality comparisons, i.e. `===`.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {string} key The key of the property to get.
|
|
|
* @param {*} srcValue The value to match.
|
|
|
* @returns {Function} Returns the new spec function.
|
|
|
*/
|
|
|
function matchesStrictComparable(key, srcValue) {
|
|
|
return function(object) {
|
|
|
if (object == null) {
|
|
|
return false;
|
|
|
}
|
|
|
return object[key] === srcValue &&
|
|
|
(srcValue !== undefined || (key in Object(object)));
|
|
|
};
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Converts `string` to a property path array.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {string} string The string to convert.
|
|
|
* @returns {Array} Returns the property path array.
|
|
|
*/
|
|
|
var stringToPath = memoize(function(string) {
|
|
|
string = toString(string);
|
|
|
|
|
|
var result = [];
|
|
|
if (reLeadingDot.test(string)) {
|
|
|
result.push('');
|
|
|
}
|
|
|
string.replace(rePropName, function(match, number, quote, string) {
|
|
|
result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));
|
|
|
});
|
|
|
return result;
|
|
|
});
|
|
|
|
|
|
/**
|
|
|
* Converts `value` to a string key if it's not a string or symbol.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {*} value The value to inspect.
|
|
|
* @returns {string|symbol} Returns the key.
|
|
|
*/
|
|
|
function toKey(value) {
|
|
|
if (typeof value == 'string' || isSymbol(value)) {
|
|
|
return value;
|
|
|
}
|
|
|
var result = (value + '');
|
|
|
return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Converts `func` to its source code.
|
|
|
*
|
|
|
* @private
|
|
|
* @param {Function} func The function to process.
|
|
|
* @returns {string} Returns the source code.
|
|
|
*/
|
|
|
function toSource(func) {
|
|
|
if (func != null) {
|
|
|
try {
|
|
|
return funcToString.call(func);
|
|
|
} catch (e) {}
|
|
|
try {
|
|
|
return (func + '');
|
|
|
} catch (e) {}
|
|
|
}
|
|
|
return '';
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Creates an object composed of keys generated from the results of running
|
|
|
* each element of `collection` thru `iteratee`. The order of grouped values
|
|
|
* is determined by the order they occur in `collection`. The corresponding
|
|
|
* value of each key is an array of elements responsible for generating the
|
|
|
* key. The iteratee is invoked with one argument: (value).
|
|
|
*
|
|
|
* @static
|
|
|
* @memberOf _
|
|
|
* @since 0.1.0
|
|
|
* @category Collection
|
|
|
* @param {Array|Object} collection The collection to iterate over.
|
|
|
* @param {Function} [iteratee=_.identity]
|
|
|
* The iteratee to transform keys.
|
|
|
* @returns {Object} Returns the composed aggregate object.
|
|
|
* @example
|
|
|
*
|
|
|
* _.groupBy([6.1, 4.2, 6.3], Math.floor);
|
|
|
* // => { '4': [4.2], '6': [6.1, 6.3] }
|
|
|
*
|
|
|
* // The `_.property` iteratee shorthand.
|
|
|
* _.groupBy(['one', 'two', 'three'], 'length');
|
|
|
* // => { '3': ['one', 'two'], '5': ['three'] }
|
|
|
*/
|
|
|
var groupBy = createAggregator(function(result, value, key) {
|
|
|
if (hasOwnProperty.call(result, key)) {
|
|
|
result[key].push(value);
|
|
|
} else {
|
|
|
result[key] = [value];
|
|
|
}
|
|
|
});
|
|
|
|
|
|
/**
|
|
|
* Creates a function that memoizes the result of `func`. If `resolver` is
|
|
|
* provided, it determines the cache key for storing the result based on the
|
|
|
* arguments provided to the memoized function. By default, the first argument
|
|
|
* provided to the memoized function is used as the map cache key. The `func`
|
|
|
* is invoked with the `this` binding of the memoized function.
|
|
|
*
|
|
|
* **Note:** The cache is exposed as the `cache` property on the memoized
|
|
|
* function. Its creation may be customized by replacing the `_.memoize.Cache`
|
|
|
* constructor with one whose instances implement the
|
|
|
* [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
|
|
|
* method interface of `delete`, `get`, `has`, and `set`.
|
|
|
*
|
|
|
* @static
|
|
|
* @memberOf _
|
|
|
* @since 0.1.0
|
|
|
* @category Function
|
|
|
* @param {Function} func The function to have its output memoized.
|
|
|
* @param {Function} [resolver] The function to resolve the cache key.
|
|
|
* @returns {Function} Returns the new memoized function.
|
|
|
* @example
|
|
|
*
|
|
|
* var object = { 'a': 1, 'b': 2 };
|
|
|
* var other = { 'c': 3, 'd': 4 };
|
|
|
*
|
|
|
* var values = _.memoize(_.values);
|
|
|
* values(object);
|
|
|
* // => [1, 2]
|
|
|
*
|
|
|
* values(other);
|
|
|
* // => [3, 4]
|
|
|
*
|
|
|
* object.a = 2;
|
|
|
* values(object);
|
|
|
* // => [1, 2]
|
|
|
*
|
|
|
* // Modify the result cache.
|
|
|
* values.cache.set(object, ['a', 'b']);
|
|
|
* values(object);
|
|
|
* // => ['a', 'b']
|
|
|
*
|
|
|
* // Replace `_.memoize.Cache`.
|
|
|
* _.memoize.Cache = WeakMap;
|
|
|
*/
|
|
|
function memoize(func, resolver) {
|
|
|
if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {
|
|
|
throw new TypeError(FUNC_ERROR_TEXT);
|
|
|
}
|
|
|
var memoized = function() {
|
|
|
var args = arguments,
|
|
|
key = resolver ? resolver.apply(this, args) : args[0],
|
|
|
cache = memoized.cache;
|
|
|
|
|
|
if (cache.has(key)) {
|
|
|
return cache.get(key);
|
|
|
}
|
|
|
var result = func.apply(this, args);
|
|
|
memoized.cache = cache.set(key, result);
|
|
|
return result;
|
|
|
};
|
|
|
memoized.cache = new (memoize.Cache || MapCache);
|
|
|
return memoized;
|
|
|
}
|
|
|
|
|
|
// Assign cache to `_.memoize`.
|
|
|
memoize.Cache = MapCache;
|
|
|
|
|
|
/**
|
|
|
* Performs a
|
|
|
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
|
|
|
* comparison between two values to determine if they are equivalent.
|
|
|
*
|
|
|
* @static
|
|
|
* @memberOf _
|
|
|
* @since 4.0.0
|
|
|
* @category Lang
|
|
|
* @param {*} value The value to compare.
|
|
|
* @param {*} other The other value to compare.
|
|
|
* @returns {boolean} Returns `true` if the values are equivalent, else `false`.
|
|
|
* @example
|
|
|
*
|
|
|
* var object = { 'a': 1 };
|
|
|
* var other = { 'a': 1 };
|
|
|
*
|
|
|
* _.eq(object, object);
|
|
|
* // => true
|
|
|
*
|
|
|
* _.eq(object, other);
|
|
|
* // => false
|
|
|
*
|
|
|
* _.eq('a', 'a');
|
|
|
* // => true
|
|
|
*
|
|
|
* _.eq('a', Object('a'));
|
|
|
* // => false
|
|
|
*
|
|
|
* _.eq(NaN, NaN);
|
|
|
* // => true
|
|
|
*/
|
|
|
function eq(value, other) {
|
|
|
return value === other || (value !== value && other !== other);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Checks if `value` is likely an `arguments` object.
|
|
|
*
|
|
|
* @static
|
|
|
* @memberOf _
|
|
|
* @since 0.1.0
|
|
|
* @category Lang
|
|
|
* @param {*} value The value to check.
|
|
|
* @returns {boolean} Returns `true` if `value` is an `arguments` object,
|
|
|
* else `false`.
|
|
|
* @example
|
|
|
*
|
|
|
* _.isArguments(function() { return arguments; }());
|
|
|
* // => true
|
|
|
*
|
|
|
* _.isArguments([1, 2, 3]);
|
|
|
* // => false
|
|
|
*/
|
|
|
function isArguments(value) {
|
|
|
// Safari 8.1 makes `arguments.callee` enumerable in strict mode.
|
|
|
return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&
|
|
|
(!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Checks if `value` is classified as an `Array` object.
|
|
|
*
|
|
|
* @static
|
|
|
* @memberOf _
|
|
|
* @since 0.1.0
|
|
|
* @category Lang
|
|
|
* @param {*} value The value to check.
|
|
|
* @returns {boolean} Returns `true` if `value` is an array, else `false`.
|
|
|
* @example
|
|
|
*
|
|
|
* _.isArray([1, 2, 3]);
|
|
|
* // => true
|
|
|
*
|
|
|
* _.isArray(document.body.children);
|
|
|
* // => false
|
|
|
*
|
|
|
* _.isArray('abc');
|
|
|
* // => false
|
|
|
*
|
|
|
* _.isArray(_.noop);
|
|
|
* // => false
|
|
|
*/
|
|
|
var isArray = Array.isArray;
|
|
|
|
|
|
/**
|
|
|
* Checks if `value` is array-like. A value is considered array-like if it's
|
|
|
* not a function and has a `value.length` that's an integer greater than or
|
|
|
* equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
|
|
|
*
|
|
|
* @static
|
|
|
* @memberOf _
|
|
|
* @since 4.0.0
|
|
|
* @category Lang
|
|
|
* @param {*} value The value to check.
|
|
|
* @returns {boolean} Returns `true` if `value` is array-like, else `false`.
|
|
|
* @example
|
|
|
*
|
|
|
* _.isArrayLike([1, 2, 3]);
|
|
|
* // => true
|
|
|
*
|
|
|
* _.isArrayLike(document.body.children);
|
|
|
* // => true
|
|
|
*
|
|
|
* _.isArrayLike('abc');
|
|
|
* // => true
|
|
|
*
|
|
|
* _.isArrayLike(_.noop);
|
|
|
* // => false
|
|
|
*/
|
|
|
function isArrayLike(value) {
|
|
|
return value != null && isLength(value.length) && !isFunction(value);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* This method is like `_.isArrayLike` except that it also checks if `value`
|
|
|
* is an object.
|
|
|
*
|
|
|
* @static
|
|
|
* @memberOf _
|
|
|
* @since 4.0.0
|
|
|
* @category Lang
|
|
|
* @param {*} value The value to check.
|
|
|
* @returns {boolean} Returns `true` if `value` is an array-like object,
|
|
|
* else `false`.
|
|
|
* @example
|
|
|
*
|
|
|
* _.isArrayLikeObject([1, 2, 3]);
|
|
|
* // => true
|
|
|
*
|
|
|
* _.isArrayLikeObject(document.body.children);
|
|
|
* // => true
|
|
|
*
|
|
|
* _.isArrayLikeObject('abc');
|
|
|
* // => false
|
|
|
*
|
|
|
* _.isArrayLikeObject(_.noop);
|
|
|
* // => false
|
|
|
*/
|
|
|
function isArrayLikeObject(value) {
|
|
|
return isObjectLike(value) && isArrayLike(value);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Checks if `value` is classified as a `Function` object.
|
|
|
*
|
|
|
* @static
|
|
|
* @memberOf _
|
|
|
* @since 0.1.0
|
|
|
* @category Lang
|
|
|
* @param {*} value The value to check.
|
|
|
* @returns {boolean} Returns `true` if `value` is a function, else `false`.
|
|
|
* @example
|
|
|
*
|
|
|
* _.isFunction(_);
|
|
|
* // => true
|
|
|
*
|
|
|
* _.isFunction(/abc/);
|
|
|
* // => false
|
|
|
*/
|
|
|
function isFunction(value) {
|
|
|
// The use of `Object#toString` avoids issues with the `typeof` operator
|
|
|
// in Safari 8-9 which returns 'object' for typed array and other constructors.
|
|
|
var tag = isObject(value) ? objectToString.call(value) : '';
|
|
|
return tag == funcTag || tag == genTag;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Checks if `value` is a valid array-like length.
|
|
|
*
|
|
|
* **Note:** This method is loosely based on
|
|
|
* [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
|
|
|
*
|
|
|
* @static
|
|
|
* @memberOf _
|
|
|
* @since 4.0.0
|
|
|
* @category Lang
|
|
|
* @param {*} value The value to check.
|
|
|
* @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
|
|
|
* @example
|
|
|
*
|
|
|
* _.isLength(3);
|
|
|
* // => true
|
|
|
*
|
|
|
* _.isLength(Number.MIN_VALUE);
|
|
|
* // => false
|
|
|
*
|
|
|
* _.isLength(Infinity);
|
|
|
* // => false
|
|
|
*
|
|
|
* _.isLength('3');
|
|
|
* // => false
|
|
|
*/
|
|
|
function isLength(value) {
|
|
|
return typeof value == 'number' &&
|
|
|
value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Checks if `value` is the
|
|
|
* [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
|
|
|
* of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
|
|
|
*
|
|
|
* @static
|
|
|
* @memberOf _
|
|
|
* @since 0.1.0
|
|
|
* @category Lang
|
|
|
* @param {*} value The value to check.
|
|
|
* @returns {boolean} Returns `true` if `value` is an object, else `false`.
|
|
|
* @example
|
|
|
*
|
|
|
* _.isObject({});
|
|
|
* // => true
|
|
|
*
|
|
|
* _.isObject([1, 2, 3]);
|
|
|
* // => true
|
|
|
*
|
|
|
* _.isObject(_.noop);
|
|
|
* // => true
|
|
|
*
|
|
|
* _.isObject(null);
|
|
|
* // => false
|
|
|
*/
|
|
|
function isObject(value) {
|
|
|
var type = typeof value;
|
|
|
return !!value && (type == 'object' || type == 'function');
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Checks if `value` is object-like. A value is object-like if it's not `null`
|
|
|
* and has a `typeof` result of "object".
|
|
|
*
|
|
|
* @static
|
|
|
* @memberOf _
|
|
|
* @since 4.0.0
|
|
|
* @category Lang
|
|
|
* @param {*} value The value to check.
|
|
|
* @returns {boolean} Returns `true` if `value` is object-like, else `false`.
|
|
|
* @example
|
|
|
*
|
|
|
* _.isObjectLike({});
|
|
|
* // => true
|
|
|
*
|
|
|
* _.isObjectLike([1, 2, 3]);
|
|
|
* // => true
|
|
|
*
|
|
|
* _.isObjectLike(_.noop);
|
|
|
* // => false
|
|
|
*
|
|
|
* _.isObjectLike(null);
|
|
|
* // => false
|
|
|
*/
|
|
|
function isObjectLike(value) {
|
|
|
return !!value && typeof value == 'object';
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Checks if `value` is classified as a `Symbol` primitive or object.
|
|
|
*
|
|
|
* @static
|
|
|
* @memberOf _
|
|
|
* @since 4.0.0
|
|
|
* @category Lang
|
|
|
* @param {*} value The value to check.
|
|
|
* @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
|
|
|
* @example
|
|
|
*
|
|
|
* _.isSymbol(Symbol.iterator);
|
|
|
* // => true
|
|
|
*
|
|
|
* _.isSymbol('abc');
|
|
|
* // => false
|
|
|
*/
|
|
|
function isSymbol(value) {
|
|
|
return typeof value == 'symbol' ||
|
|
|
(isObjectLike(value) && objectToString.call(value) == symbolTag);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Checks if `value` is classified as a typed array.
|
|
|
*
|
|
|
* @static
|
|
|
* @memberOf _
|
|
|
* @since 3.0.0
|
|
|
* @category Lang
|
|
|
* @param {*} value The value to check.
|
|
|
* @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
|
|
|
* @example
|
|
|
*
|
|
|
* _.isTypedArray(new Uint8Array);
|
|
|
* // => true
|
|
|
*
|
|
|
* _.isTypedArray([]);
|
|
|
* // => false
|
|
|
*/
|
|
|
var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
|
|
|
|
|
|
/**
|
|
|
* Converts `value` to a string. An empty string is returned for `null`
|
|
|
* and `undefined` values. The sign of `-0` is preserved.
|
|
|
*
|
|
|
* @static
|
|
|
* @memberOf _
|
|
|
* @since 4.0.0
|
|
|
* @category Lang
|
|
|
* @param {*} value The value to process.
|
|
|
* @returns {string} Returns the string.
|
|
|
* @example
|
|
|
*
|
|
|
* _.toString(null);
|
|
|
* // => ''
|
|
|
*
|
|
|
* _.toString(-0);
|
|
|
* // => '-0'
|
|
|
*
|
|
|
* _.toString([1, 2, 3]);
|
|
|
* // => '1,2,3'
|
|
|
*/
|
|
|
function toString(value) {
|
|
|
return value == null ? '' : baseToString(value);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Gets the value at `path` of `object`. If the resolved value is
|
|
|
* `undefined`, the `defaultValue` is returned in its place.
|
|
|
*
|
|
|
* @static
|
|
|
* @memberOf _
|
|
|
* @since 3.7.0
|
|
|
* @category Object
|
|
|
* @param {Object} object The object to query.
|
|
|
* @param {Array|string} path The path of the property to get.
|
|
|
* @param {*} [defaultValue] The value returned for `undefined` resolved values.
|
|
|
* @returns {*} Returns the resolved value.
|
|
|
* @example
|
|
|
*
|
|
|
* var object = { 'a': [{ 'b': { 'c': 3 } }] };
|
|
|
*
|
|
|
* _.get(object, 'a[0].b.c');
|
|
|
* // => 3
|
|
|
*
|
|
|
* _.get(object, ['a', '0', 'b', 'c']);
|
|
|
* // => 3
|
|
|
*
|
|
|
* _.get(object, 'a.b.c', 'default');
|
|
|
* // => 'default'
|
|
|
*/
|
|
|
function get(object, path, defaultValue) {
|
|
|
var result = object == null ? undefined : baseGet(object, path);
|
|
|
return result === undefined ? defaultValue : result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Checks if `path` is a direct or inherited property of `object`.
|
|
|
*
|
|
|
* @static
|
|
|
* @memberOf _
|
|
|
* @since 4.0.0
|
|
|
* @category Object
|
|
|
* @param {Object} object The object to query.
|
|
|
* @param {Array|string} path The path to check.
|
|
|
* @returns {boolean} Returns `true` if `path` exists, else `false`.
|
|
|
* @example
|
|
|
*
|
|
|
* var object = _.create({ 'a': _.create({ 'b': 2 }) });
|
|
|
*
|
|
|
* _.hasIn(object, 'a');
|
|
|
* // => true
|
|
|
*
|
|
|
* _.hasIn(object, 'a.b');
|
|
|
* // => true
|
|
|
*
|
|
|
* _.hasIn(object, ['a', 'b']);
|
|
|
* // => true
|
|
|
*
|
|
|
* _.hasIn(object, 'b');
|
|
|
* // => false
|
|
|
*/
|
|
|
function hasIn(object, path) {
|
|
|
return object != null && hasPath(object, path, baseHasIn);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Creates an array of the own enumerable property names of `object`.
|
|
|
*
|
|
|
* **Note:** Non-object values are coerced to objects. See the
|
|
|
* [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
|
|
|
* for more details.
|
|
|
*
|
|
|
* @static
|
|
|
* @since 0.1.0
|
|
|
* @memberOf _
|
|
|
* @category Object
|
|
|
* @param {Object} object The object to query.
|
|
|
* @returns {Array} Returns the array of property names.
|
|
|
* @example
|
|
|
*
|
|
|
* function Foo() {
|
|
|
* this.a = 1;
|
|
|
* this.b = 2;
|
|
|
* }
|
|
|
*
|
|
|
* Foo.prototype.c = 3;
|
|
|
*
|
|
|
* _.keys(new Foo);
|
|
|
* // => ['a', 'b'] (iteration order is not guaranteed)
|
|
|
*
|
|
|
* _.keys('hi');
|
|
|
* // => ['0', '1']
|
|
|
*/
|
|
|
function keys(object) {
|
|
|
return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* This method returns the first argument it receives.
|
|
|
*
|
|
|
* @static
|
|
|
* @since 0.1.0
|
|
|
* @memberOf _
|
|
|
* @category Util
|
|
|
* @param {*} value Any value.
|
|
|
* @returns {*} Returns `value`.
|
|
|
* @example
|
|
|
*
|
|
|
* var object = { 'a': 1 };
|
|
|
*
|
|
|
* console.log(_.identity(object) === object);
|
|
|
* // => true
|
|
|
*/
|
|
|
function identity(value) {
|
|
|
return value;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Creates a function that returns the value at `path` of a given object.
|
|
|
*
|
|
|
* @static
|
|
|
* @memberOf _
|
|
|
* @since 2.4.0
|
|
|
* @category Util
|
|
|
* @param {Array|string} path The path of the property to get.
|
|
|
* @returns {Function} Returns the new accessor function.
|
|
|
* @example
|
|
|
*
|
|
|
* var objects = [
|
|
|
* { 'a': { 'b': 2 } },
|
|
|
* { 'a': { 'b': 1 } }
|
|
|
* ];
|
|
|
*
|
|
|
* _.map(objects, _.property('a.b'));
|
|
|
* // => [2, 1]
|
|
|
*
|
|
|
* _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
|
|
|
* // => [1, 2]
|
|
|
*/
|
|
|
function property(path) {
|
|
|
return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
|
|
|
}
|
|
|
|
|
|
module.exports = groupBy;
|
|
|
});
|
|
|
|
|
|
var top = 'top';
|
|
|
var bottom = 'bottom';
|
|
|
var right = 'right';
|
|
|
var left = 'left';
|
|
|
var auto = 'auto';
|
|
|
var basePlacements = [top, bottom, right, left];
|
|
|
var start = 'start';
|
|
|
var end = 'end';
|
|
|
var clippingParents = 'clippingParents';
|
|
|
var viewport = 'viewport';
|
|
|
var popper = 'popper';
|
|
|
var reference = 'reference';
|
|
|
var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {
|
|
|
return acc.concat([placement + "-" + start, placement + "-" + end]);
|
|
|
}, []);
|
|
|
var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {
|
|
|
return acc.concat([placement, placement + "-" + start, placement + "-" + end]);
|
|
|
}, []); // modifiers that need to read the DOM
|
|
|
|
|
|
var beforeRead = 'beforeRead';
|
|
|
var read = 'read';
|
|
|
var afterRead = 'afterRead'; // pure-logic modifiers
|
|
|
|
|
|
var beforeMain = 'beforeMain';
|
|
|
var main = 'main';
|
|
|
var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)
|
|
|
|
|
|
var beforeWrite = 'beforeWrite';
|
|
|
var write = 'write';
|
|
|
var afterWrite = 'afterWrite';
|
|
|
var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];
|
|
|
|
|
|
function getNodeName(element) {
|
|
|
return element ? (element.nodeName || '').toLowerCase() : null;
|
|
|
}
|
|
|
|
|
|
function getWindow(node) {
|
|
|
if (node == null) {
|
|
|
return window;
|
|
|
}
|
|
|
|
|
|
if (node.toString() !== '[object Window]') {
|
|
|
var ownerDocument = node.ownerDocument;
|
|
|
return ownerDocument ? ownerDocument.defaultView || window : window;
|
|
|
}
|
|
|
|
|
|
return node;
|
|
|
}
|
|
|
|
|
|
function isElement(node) {
|
|
|
var OwnElement = getWindow(node).Element;
|
|
|
return node instanceof OwnElement || node instanceof Element;
|
|
|
}
|
|
|
|
|
|
function isHTMLElement(node) {
|
|
|
var OwnElement = getWindow(node).HTMLElement;
|
|
|
return node instanceof OwnElement || node instanceof HTMLElement;
|
|
|
}
|
|
|
|
|
|
function isShadowRoot(node) {
|
|
|
// IE 11 has no ShadowRoot
|
|
|
if (typeof ShadowRoot === 'undefined') {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
var OwnElement = getWindow(node).ShadowRoot;
|
|
|
return node instanceof OwnElement || node instanceof ShadowRoot;
|
|
|
}
|
|
|
|
|
|
// and applies them to the HTMLElements such as popper and arrow
|
|
|
|
|
|
function applyStyles(_ref) {
|
|
|
var state = _ref.state;
|
|
|
Object.keys(state.elements).forEach(function (name) {
|
|
|
var style = state.styles[name] || {};
|
|
|
var attributes = state.attributes[name] || {};
|
|
|
var element = state.elements[name]; // arrow is optional + virtual elements
|
|
|
|
|
|
if (!isHTMLElement(element) || !getNodeName(element)) {
|
|
|
return;
|
|
|
} // Flow doesn't support to extend this property, but it's the most
|
|
|
// effective way to apply styles to an HTMLElement
|
|
|
// $FlowFixMe[cannot-write]
|
|
|
|
|
|
|
|
|
Object.assign(element.style, style);
|
|
|
Object.keys(attributes).forEach(function (name) {
|
|
|
var value = attributes[name];
|
|
|
|
|
|
if (value === false) {
|
|
|
element.removeAttribute(name);
|
|
|
} else {
|
|
|
element.setAttribute(name, value === true ? '' : value);
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
|
|
|
function effect$2(_ref2) {
|
|
|
var state = _ref2.state;
|
|
|
var initialStyles = {
|
|
|
popper: {
|
|
|
position: state.options.strategy,
|
|
|
left: '0',
|
|
|
top: '0',
|
|
|
margin: '0'
|
|
|
},
|
|
|
arrow: {
|
|
|
position: 'absolute'
|
|
|
},
|
|
|
reference: {}
|
|
|
};
|
|
|
Object.assign(state.elements.popper.style, initialStyles.popper);
|
|
|
state.styles = initialStyles;
|
|
|
|
|
|
if (state.elements.arrow) {
|
|
|
Object.assign(state.elements.arrow.style, initialStyles.arrow);
|
|
|
}
|
|
|
|
|
|
return function () {
|
|
|
Object.keys(state.elements).forEach(function (name) {
|
|
|
var element = state.elements[name];
|
|
|
var attributes = state.attributes[name] || {};
|
|
|
var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them
|
|
|
|
|
|
var style = styleProperties.reduce(function (style, property) {
|
|
|
style[property] = '';
|
|
|
return style;
|
|
|
}, {}); // arrow is optional + virtual elements
|
|
|
|
|
|
if (!isHTMLElement(element) || !getNodeName(element)) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
Object.assign(element.style, style);
|
|
|
Object.keys(attributes).forEach(function (attribute) {
|
|
|
element.removeAttribute(attribute);
|
|
|
});
|
|
|
});
|
|
|
};
|
|
|
} // eslint-disable-next-line import/no-unused-modules
|
|
|
|
|
|
|
|
|
var applyStyles$1 = {
|
|
|
name: 'applyStyles',
|
|
|
enabled: true,
|
|
|
phase: 'write',
|
|
|
fn: applyStyles,
|
|
|
effect: effect$2,
|
|
|
requires: ['computeStyles']
|
|
|
};
|
|
|
|
|
|
function getBasePlacement(placement) {
|
|
|
return placement.split('-')[0];
|
|
|
}
|
|
|
|
|
|
// import { isHTMLElement } from './instanceOf';
|
|
|
function getBoundingClientRect(element, // eslint-disable-next-line unused-imports/no-unused-vars
|
|
|
includeScale) {
|
|
|
|
|
|
var rect = element.getBoundingClientRect();
|
|
|
var scaleX = 1;
|
|
|
var scaleY = 1; // FIXME:
|
|
|
// `offsetWidth` returns an integer while `getBoundingClientRect`
|
|
|
// returns a float. This results in `scaleX` or `scaleY` being
|
|
|
// non-1 when it should be for elements that aren't a full pixel in
|
|
|
// width or height.
|
|
|
// if (isHTMLElement(element) && includeScale) {
|
|
|
// const offsetHeight = element.offsetHeight;
|
|
|
// const offsetWidth = element.offsetWidth;
|
|
|
// // Do not attempt to divide by 0, otherwise we get `Infinity` as scale
|
|
|
// // Fallback to 1 in case both values are `0`
|
|
|
// if (offsetWidth > 0) {
|
|
|
// scaleX = rect.width / offsetWidth || 1;
|
|
|
// }
|
|
|
// if (offsetHeight > 0) {
|
|
|
// scaleY = rect.height / offsetHeight || 1;
|
|
|
// }
|
|
|
// }
|
|
|
|
|
|
return {
|
|
|
width: rect.width / scaleX,
|
|
|
height: rect.height / scaleY,
|
|
|
top: rect.top / scaleY,
|
|
|
right: rect.right / scaleX,
|
|
|
bottom: rect.bottom / scaleY,
|
|
|
left: rect.left / scaleX,
|
|
|
x: rect.left / scaleX,
|
|
|
y: rect.top / scaleY
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// means it doesn't take into account transforms.
|
|
|
|
|
|
function getLayoutRect(element) {
|
|
|
var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.
|
|
|
// Fixes https://github.com/popperjs/popper-core/issues/1223
|
|
|
|
|
|
var width = element.offsetWidth;
|
|
|
var height = element.offsetHeight;
|
|
|
|
|
|
if (Math.abs(clientRect.width - width) <= 1) {
|
|
|
width = clientRect.width;
|
|
|
}
|
|
|
|
|
|
if (Math.abs(clientRect.height - height) <= 1) {
|
|
|
height = clientRect.height;
|
|
|
}
|
|
|
|
|
|
return {
|
|
|
x: element.offsetLeft,
|
|
|
y: element.offsetTop,
|
|
|
width: width,
|
|
|
height: height
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function contains(parent, child) {
|
|
|
var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method
|
|
|
|
|
|
if (parent.contains(child)) {
|
|
|
return true;
|
|
|
} // then fallback to custom implementation with Shadow DOM support
|
|
|
else if (rootNode && isShadowRoot(rootNode)) {
|
|
|
var next = child;
|
|
|
|
|
|
do {
|
|
|
if (next && parent.isSameNode(next)) {
|
|
|
return true;
|
|
|
} // $FlowFixMe[prop-missing]: need a better way to handle this...
|
|
|
|
|
|
|
|
|
next = next.parentNode || next.host;
|
|
|
} while (next);
|
|
|
} // Give up, the result is false
|
|
|
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
function getComputedStyle(element) {
|
|
|
return getWindow(element).getComputedStyle(element);
|
|
|
}
|
|
|
|
|
|
function isTableElement(element) {
|
|
|
return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;
|
|
|
}
|
|
|
|
|
|
function getDocumentElement(element) {
|
|
|
// $FlowFixMe[incompatible-return]: assume body is always available
|
|
|
return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]
|
|
|
element.document) || window.document).documentElement;
|
|
|
}
|
|
|
|
|
|
function getParentNode(element) {
|
|
|
if (getNodeName(element) === 'html') {
|
|
|
return element;
|
|
|
}
|
|
|
|
|
|
return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle
|
|
|
// $FlowFixMe[incompatible-return]
|
|
|
// $FlowFixMe[prop-missing]
|
|
|
element.assignedSlot || // step into the shadow DOM of the parent of a slotted node
|
|
|
element.parentNode || ( // DOM Element detected
|
|
|
isShadowRoot(element) ? element.host : null) || // ShadowRoot detected
|
|
|
// $FlowFixMe[incompatible-call]: HTMLElement is a Node
|
|
|
getDocumentElement(element) // fallback
|
|
|
|
|
|
);
|
|
|
}
|
|
|
|
|
|
function getTrueOffsetParent(element) {
|
|
|
if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837
|
|
|
getComputedStyle(element).position === 'fixed') {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
return element.offsetParent;
|
|
|
} // `.offsetParent` reports `null` for fixed elements, while absolute elements
|
|
|
// return the containing block
|
|
|
|
|
|
|
|
|
function getContainingBlock(element) {
|
|
|
var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;
|
|
|
var isIE = navigator.userAgent.indexOf('Trident') !== -1;
|
|
|
|
|
|
if (isIE && isHTMLElement(element)) {
|
|
|
// In IE 9, 10 and 11 fixed elements containing block is always established by the viewport
|
|
|
var elementCss = getComputedStyle(element);
|
|
|
|
|
|
if (elementCss.position === 'fixed') {
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var currentNode = getParentNode(element);
|
|
|
|
|
|
while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {
|
|
|
var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that
|
|
|
// create a containing block.
|
|
|
// https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
|
|
|
|
|
|
if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {
|
|
|
return currentNode;
|
|
|
} else {
|
|
|
currentNode = currentNode.parentNode;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
} // Gets the closest ancestor positioned element. Handles some edge cases,
|
|
|
// such as table ancestors and cross browser bugs.
|
|
|
|
|
|
|
|
|
function getOffsetParent(element) {
|
|
|
var window = getWindow(element);
|
|
|
var offsetParent = getTrueOffsetParent(element);
|
|
|
|
|
|
while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {
|
|
|
offsetParent = getTrueOffsetParent(offsetParent);
|
|
|
}
|
|
|
|
|
|
if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {
|
|
|
return window;
|
|
|
}
|
|
|
|
|
|
return offsetParent || getContainingBlock(element) || window;
|
|
|
}
|
|
|
|
|
|
function getMainAxisFromPlacement(placement) {
|
|
|
return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';
|
|
|
}
|
|
|
|
|
|
var max = Math.max;
|
|
|
var min = Math.min;
|
|
|
var round = Math.round;
|
|
|
|
|
|
function within(min$1, value, max$1) {
|
|
|
return max(min$1, min(value, max$1));
|
|
|
}
|
|
|
|
|
|
function getFreshSideObject() {
|
|
|
return {
|
|
|
top: 0,
|
|
|
right: 0,
|
|
|
bottom: 0,
|
|
|
left: 0
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function mergePaddingObject(paddingObject) {
|
|
|
return Object.assign({}, getFreshSideObject(), paddingObject);
|
|
|
}
|
|
|
|
|
|
function expandToHashMap(value, keys) {
|
|
|
return keys.reduce(function (hashMap, key) {
|
|
|
hashMap[key] = value;
|
|
|
return hashMap;
|
|
|
}, {});
|
|
|
}
|
|
|
|
|
|
var toPaddingObject = function toPaddingObject(padding, state) {
|
|
|
padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {
|
|
|
placement: state.placement
|
|
|
})) : padding;
|
|
|
return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
|
|
|
};
|
|
|
|
|
|
function arrow(_ref) {
|
|
|
var _state$modifiersData$;
|
|
|
|
|
|
var state = _ref.state,
|
|
|
name = _ref.name,
|
|
|
options = _ref.options;
|
|
|
var arrowElement = state.elements.arrow;
|
|
|
var popperOffsets = state.modifiersData.popperOffsets;
|
|
|
var basePlacement = getBasePlacement(state.placement);
|
|
|
var axis = getMainAxisFromPlacement(basePlacement);
|
|
|
var isVertical = [left, right].indexOf(basePlacement) >= 0;
|
|
|
var len = isVertical ? 'height' : 'width';
|
|
|
|
|
|
if (!arrowElement || !popperOffsets) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var paddingObject = toPaddingObject(options.padding, state);
|
|
|
var arrowRect = getLayoutRect(arrowElement);
|
|
|
var minProp = axis === 'y' ? top : left;
|
|
|
var maxProp = axis === 'y' ? bottom : right;
|
|
|
var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];
|
|
|
var startDiff = popperOffsets[axis] - state.rects.reference[axis];
|
|
|
var arrowOffsetParent = getOffsetParent(arrowElement);
|
|
|
var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;
|
|
|
var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is
|
|
|
// outside of the popper bounds
|
|
|
|
|
|
var min = paddingObject[minProp];
|
|
|
var max = clientSize - arrowRect[len] - paddingObject[maxProp];
|
|
|
var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;
|
|
|
var offset = within(min, center, max); // Prevents breaking syntax highlighting...
|
|
|
|
|
|
var axisProp = axis;
|
|
|
state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);
|
|
|
}
|
|
|
|
|
|
function effect$1(_ref2) {
|
|
|
var state = _ref2.state,
|
|
|
options = _ref2.options;
|
|
|
var _options$element = options.element,
|
|
|
arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;
|
|
|
|
|
|
if (arrowElement == null) {
|
|
|
return;
|
|
|
} // CSS selector
|
|
|
|
|
|
|
|
|
if (typeof arrowElement === 'string') {
|
|
|
arrowElement = state.elements.popper.querySelector(arrowElement);
|
|
|
|
|
|
if (!arrowElement) {
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (process.env.NODE_ENV !== "production") {
|
|
|
if (!isHTMLElement(arrowElement)) {
|
|
|
console.error(['Popper: "arrow" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (!contains(state.elements.popper, arrowElement)) {
|
|
|
if (process.env.NODE_ENV !== "production") {
|
|
|
console.error(['Popper: "arrow" modifier\'s `element` must be a child of the popper', 'element.'].join(' '));
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
state.elements.arrow = arrowElement;
|
|
|
} // eslint-disable-next-line import/no-unused-modules
|
|
|
|
|
|
|
|
|
var arrow$1 = {
|
|
|
name: 'arrow',
|
|
|
enabled: true,
|
|
|
phase: 'main',
|
|
|
fn: arrow,
|
|
|
effect: effect$1,
|
|
|
requires: ['popperOffsets'],
|
|
|
requiresIfExists: ['preventOverflow']
|
|
|
};
|
|
|
|
|
|
function getVariation(placement) {
|
|
|
return placement.split('-')[1];
|
|
|
}
|
|
|
|
|
|
var unsetSides = {
|
|
|
top: 'auto',
|
|
|
right: 'auto',
|
|
|
bottom: 'auto',
|
|
|
left: 'auto'
|
|
|
}; // Round the offsets to the nearest suitable subpixel based on the DPR.
|
|
|
// Zooming can change the DPR, but it seems to report a value that will
|
|
|
// cleanly divide the values into the appropriate subpixels.
|
|
|
|
|
|
function roundOffsetsByDPR(_ref) {
|
|
|
var x = _ref.x,
|
|
|
y = _ref.y;
|
|
|
var win = window;
|
|
|
var dpr = win.devicePixelRatio || 1;
|
|
|
return {
|
|
|
x: round(round(x * dpr) / dpr) || 0,
|
|
|
y: round(round(y * dpr) / dpr) || 0
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function mapToStyles(_ref2) {
|
|
|
var _Object$assign2;
|
|
|
|
|
|
var popper = _ref2.popper,
|
|
|
popperRect = _ref2.popperRect,
|
|
|
placement = _ref2.placement,
|
|
|
variation = _ref2.variation,
|
|
|
offsets = _ref2.offsets,
|
|
|
position = _ref2.position,
|
|
|
gpuAcceleration = _ref2.gpuAcceleration,
|
|
|
adaptive = _ref2.adaptive,
|
|
|
roundOffsets = _ref2.roundOffsets;
|
|
|
|
|
|
var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,
|
|
|
_ref3$x = _ref3.x,
|
|
|
x = _ref3$x === void 0 ? 0 : _ref3$x,
|
|
|
_ref3$y = _ref3.y,
|
|
|
y = _ref3$y === void 0 ? 0 : _ref3$y;
|
|
|
|
|
|
var hasX = offsets.hasOwnProperty('x');
|
|
|
var hasY = offsets.hasOwnProperty('y');
|
|
|
var sideX = left;
|
|
|
var sideY = top;
|
|
|
var win = window;
|
|
|
|
|
|
if (adaptive) {
|
|
|
var offsetParent = getOffsetParent(popper);
|
|
|
var heightProp = 'clientHeight';
|
|
|
var widthProp = 'clientWidth';
|
|
|
|
|
|
if (offsetParent === getWindow(popper)) {
|
|
|
offsetParent = getDocumentElement(popper);
|
|
|
|
|
|
if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {
|
|
|
heightProp = 'scrollHeight';
|
|
|
widthProp = 'scrollWidth';
|
|
|
}
|
|
|
} // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it
|
|
|
|
|
|
|
|
|
offsetParent = offsetParent;
|
|
|
|
|
|
if (placement === top || (placement === left || placement === right) && variation === end) {
|
|
|
sideY = bottom; // $FlowFixMe[prop-missing]
|
|
|
|
|
|
y -= offsetParent[heightProp] - popperRect.height;
|
|
|
y *= gpuAcceleration ? 1 : -1;
|
|
|
}
|
|
|
|
|
|
if (placement === left || (placement === top || placement === bottom) && variation === end) {
|
|
|
sideX = right; // $FlowFixMe[prop-missing]
|
|
|
|
|
|
x -= offsetParent[widthProp] - popperRect.width;
|
|
|
x *= gpuAcceleration ? 1 : -1;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var commonStyles = Object.assign({
|
|
|
position: position
|
|
|
}, adaptive && unsetSides);
|
|
|
|
|
|
if (gpuAcceleration) {
|
|
|
var _Object$assign;
|
|
|
|
|
|
return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign));
|
|
|
}
|
|
|
|
|
|
return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2));
|
|
|
}
|
|
|
|
|
|
function computeStyles(_ref4) {
|
|
|
var state = _ref4.state,
|
|
|
options = _ref4.options;
|
|
|
var _options$gpuAccelerat = options.gpuAcceleration,
|
|
|
gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,
|
|
|
_options$adaptive = options.adaptive,
|
|
|
adaptive = _options$adaptive === void 0 ? true : _options$adaptive,
|
|
|
_options$roundOffsets = options.roundOffsets,
|
|
|
roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
|
|
|
|
|
|
if (process.env.NODE_ENV !== "production") {
|
|
|
var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';
|
|
|
|
|
|
if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {
|
|
|
return transitionProperty.indexOf(property) >= 0;
|
|
|
})) {
|
|
|
console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: "transform", "top", "right", "bottom", "left".', '\n\n', 'Disable the "computeStyles" modifier\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\n\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var commonStyles = {
|
|
|
placement: getBasePlacement(state.placement),
|
|
|
variation: getVariation(state.placement),
|
|
|
popper: state.elements.popper,
|
|
|
popperRect: state.rects.popper,
|
|
|
gpuAcceleration: gpuAcceleration
|
|
|
};
|
|
|
|
|
|
if (state.modifiersData.popperOffsets != null) {
|
|
|
state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {
|
|
|
offsets: state.modifiersData.popperOffsets,
|
|
|
position: state.options.strategy,
|
|
|
adaptive: adaptive,
|
|
|
roundOffsets: roundOffsets
|
|
|
})));
|
|
|
}
|
|
|
|
|
|
if (state.modifiersData.arrow != null) {
|
|
|
state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {
|
|
|
offsets: state.modifiersData.arrow,
|
|
|
position: 'absolute',
|
|
|
adaptive: false,
|
|
|
roundOffsets: roundOffsets
|
|
|
})));
|
|
|
}
|
|
|
|
|
|
state.attributes.popper = Object.assign({}, state.attributes.popper, {
|
|
|
'data-popper-placement': state.placement
|
|
|
});
|
|
|
} // eslint-disable-next-line import/no-unused-modules
|
|
|
|
|
|
|
|
|
var computeStyles$1 = {
|
|
|
name: 'computeStyles',
|
|
|
enabled: true,
|
|
|
phase: 'beforeWrite',
|
|
|
fn: computeStyles,
|
|
|
data: {}
|
|
|
};
|
|
|
|
|
|
var passive = {
|
|
|
passive: true
|
|
|
};
|
|
|
|
|
|
function effect(_ref) {
|
|
|
var state = _ref.state,
|
|
|
instance = _ref.instance,
|
|
|
options = _ref.options;
|
|
|
var _options$scroll = options.scroll,
|
|
|
scroll = _options$scroll === void 0 ? true : _options$scroll,
|
|
|
_options$resize = options.resize,
|
|
|
resize = _options$resize === void 0 ? true : _options$resize;
|
|
|
var window = getWindow(state.elements.popper);
|
|
|
var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);
|
|
|
|
|
|
if (scroll) {
|
|
|
scrollParents.forEach(function (scrollParent) {
|
|
|
scrollParent.addEventListener('scroll', instance.update, passive);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
if (resize) {
|
|
|
window.addEventListener('resize', instance.update, passive);
|
|
|
}
|
|
|
|
|
|
return function () {
|
|
|
if (scroll) {
|
|
|
scrollParents.forEach(function (scrollParent) {
|
|
|
scrollParent.removeEventListener('scroll', instance.update, passive);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
if (resize) {
|
|
|
window.removeEventListener('resize', instance.update, passive);
|
|
|
}
|
|
|
};
|
|
|
} // eslint-disable-next-line import/no-unused-modules
|
|
|
|
|
|
|
|
|
var eventListeners = {
|
|
|
name: 'eventListeners',
|
|
|
enabled: true,
|
|
|
phase: 'write',
|
|
|
fn: function fn() {},
|
|
|
effect: effect,
|
|
|
data: {}
|
|
|
};
|
|
|
|
|
|
var hash$1 = {
|
|
|
left: 'right',
|
|
|
right: 'left',
|
|
|
bottom: 'top',
|
|
|
top: 'bottom'
|
|
|
};
|
|
|
function getOppositePlacement(placement) {
|
|
|
return placement.replace(/left|right|bottom|top/g, function (matched) {
|
|
|
return hash$1[matched];
|
|
|
});
|
|
|
}
|
|
|
|
|
|
var hash = {
|
|
|
start: 'end',
|
|
|
end: 'start'
|
|
|
};
|
|
|
function getOppositeVariationPlacement(placement) {
|
|
|
return placement.replace(/start|end/g, function (matched) {
|
|
|
return hash[matched];
|
|
|
});
|
|
|
}
|
|
|
|
|
|
function getWindowScroll(node) {
|
|
|
var win = getWindow(node);
|
|
|
var scrollLeft = win.pageXOffset;
|
|
|
var scrollTop = win.pageYOffset;
|
|
|
return {
|
|
|
scrollLeft: scrollLeft,
|
|
|
scrollTop: scrollTop
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function getWindowScrollBarX(element) {
|
|
|
// If <html> has a CSS width greater than the viewport, then this will be
|
|
|
// incorrect for RTL.
|
|
|
// Popper 1 is broken in this case and never had a bug report so let's assume
|
|
|
// it's not an issue. I don't think anyone ever specifies width on <html>
|
|
|
// anyway.
|
|
|
// Browsers where the left scrollbar doesn't cause an issue report `0` for
|
|
|
// this (e.g. Edge 2019, IE11, Safari)
|
|
|
return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;
|
|
|
}
|
|
|
|
|
|
function getViewportRect(element) {
|
|
|
var win = getWindow(element);
|
|
|
var html = getDocumentElement(element);
|
|
|
var visualViewport = win.visualViewport;
|
|
|
var width = html.clientWidth;
|
|
|
var height = html.clientHeight;
|
|
|
var x = 0;
|
|
|
var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper
|
|
|
// can be obscured underneath it.
|
|
|
// Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even
|
|
|
// if it isn't open, so if this isn't available, the popper will be detected
|
|
|
// to overflow the bottom of the screen too early.
|
|
|
|
|
|
if (visualViewport) {
|
|
|
width = visualViewport.width;
|
|
|
height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)
|
|
|
// In Chrome, it returns a value very close to 0 (+/-) but contains rounding
|
|
|
// errors due to floating point numbers, so we need to check precision.
|
|
|
// Safari returns a number <= 0, usually < -1 when pinch-zoomed
|
|
|
// Feature detection fails in mobile emulation mode in Chrome.
|
|
|
// Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <
|
|
|
// 0.001
|
|
|
// Fallback here: "Not Safari" userAgent
|
|
|
|
|
|
if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {
|
|
|
x = visualViewport.offsetLeft;
|
|
|
y = visualViewport.offsetTop;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return {
|
|
|
width: width,
|
|
|
height: height,
|
|
|
x: x + getWindowScrollBarX(element),
|
|
|
y: y
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// of the `<html>` and `<body>` rect bounds if horizontally scrollable
|
|
|
|
|
|
function getDocumentRect(element) {
|
|
|
var _element$ownerDocumen;
|
|
|
|
|
|
var html = getDocumentElement(element);
|
|
|
var winScroll = getWindowScroll(element);
|
|
|
var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;
|
|
|
var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);
|
|
|
var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);
|
|
|
var x = -winScroll.scrollLeft + getWindowScrollBarX(element);
|
|
|
var y = -winScroll.scrollTop;
|
|
|
|
|
|
if (getComputedStyle(body || html).direction === 'rtl') {
|
|
|
x += max(html.clientWidth, body ? body.clientWidth : 0) - width;
|
|
|
}
|
|
|
|
|
|
return {
|
|
|
width: width,
|
|
|
height: height,
|
|
|
x: x,
|
|
|
y: y
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function isScrollParent(element) {
|
|
|
// Firefox wants us to check `-x` and `-y` variations as well
|
|
|
var _getComputedStyle = getComputedStyle(element),
|
|
|
overflow = _getComputedStyle.overflow,
|
|
|
overflowX = _getComputedStyle.overflowX,
|
|
|
overflowY = _getComputedStyle.overflowY;
|
|
|
|
|
|
return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);
|
|
|
}
|
|
|
|
|
|
function getScrollParent(node) {
|
|
|
if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {
|
|
|
// $FlowFixMe[incompatible-return]: assume body is always available
|
|
|
return node.ownerDocument.body;
|
|
|
}
|
|
|
|
|
|
if (isHTMLElement(node) && isScrollParent(node)) {
|
|
|
return node;
|
|
|
}
|
|
|
|
|
|
return getScrollParent(getParentNode(node));
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
given a DOM element, return the list of all scroll parents, up the list of ancesors
|
|
|
until we get to the top window object. This list is what we attach scroll listeners
|
|
|
to, because if any of these parent elements scroll, we'll need to re-calculate the
|
|
|
reference element's position.
|
|
|
*/
|
|
|
|
|
|
function listScrollParents(element, list) {
|
|
|
var _element$ownerDocumen;
|
|
|
|
|
|
if (list === void 0) {
|
|
|
list = [];
|
|
|
}
|
|
|
|
|
|
var scrollParent = getScrollParent(element);
|
|
|
var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);
|
|
|
var win = getWindow(scrollParent);
|
|
|
var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;
|
|
|
var updatedList = list.concat(target);
|
|
|
return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here
|
|
|
updatedList.concat(listScrollParents(getParentNode(target)));
|
|
|
}
|
|
|
|
|
|
function rectToClientRect(rect) {
|
|
|
return Object.assign({}, rect, {
|
|
|
left: rect.x,
|
|
|
top: rect.y,
|
|
|
right: rect.x + rect.width,
|
|
|
bottom: rect.y + rect.height
|
|
|
});
|
|
|
}
|
|
|
|
|
|
function getInnerBoundingClientRect(element) {
|
|
|
var rect = getBoundingClientRect(element);
|
|
|
rect.top = rect.top + element.clientTop;
|
|
|
rect.left = rect.left + element.clientLeft;
|
|
|
rect.bottom = rect.top + element.clientHeight;
|
|
|
rect.right = rect.left + element.clientWidth;
|
|
|
rect.width = element.clientWidth;
|
|
|
rect.height = element.clientHeight;
|
|
|
rect.x = rect.left;
|
|
|
rect.y = rect.top;
|
|
|
return rect;
|
|
|
}
|
|
|
|
|
|
function getClientRectFromMixedType(element, clippingParent) {
|
|
|
return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
|
|
|
} // A "clipping parent" is an overflowable container with the characteristic of
|
|
|
// clipping (or hiding) overflowing elements with a position different from
|
|
|
// `initial`
|
|
|
|
|
|
|
|
|
function getClippingParents(element) {
|
|
|
var clippingParents = listScrollParents(getParentNode(element));
|
|
|
var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;
|
|
|
var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;
|
|
|
|
|
|
if (!isElement(clipperElement)) {
|
|
|
return [];
|
|
|
} // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414
|
|
|
|
|
|
|
|
|
return clippingParents.filter(function (clippingParent) {
|
|
|
return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';
|
|
|
});
|
|
|
} // Gets the maximum area that the element is visible in due to any number of
|
|
|
// clipping parents
|
|
|
|
|
|
|
|
|
function getClippingRect(element, boundary, rootBoundary) {
|
|
|
var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);
|
|
|
var clippingParents = [].concat(mainClippingParents, [rootBoundary]);
|
|
|
var firstClippingParent = clippingParents[0];
|
|
|
var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {
|
|
|
var rect = getClientRectFromMixedType(element, clippingParent);
|
|
|
accRect.top = max(rect.top, accRect.top);
|
|
|
accRect.right = min(rect.right, accRect.right);
|
|
|
accRect.bottom = min(rect.bottom, accRect.bottom);
|
|
|
accRect.left = max(rect.left, accRect.left);
|
|
|
return accRect;
|
|
|
}, getClientRectFromMixedType(element, firstClippingParent));
|
|
|
clippingRect.width = clippingRect.right - clippingRect.left;
|
|
|
clippingRect.height = clippingRect.bottom - clippingRect.top;
|
|
|
clippingRect.x = clippingRect.left;
|
|
|
clippingRect.y = clippingRect.top;
|
|
|
return clippingRect;
|
|
|
}
|
|
|
|
|
|
function computeOffsets(_ref) {
|
|
|
var reference = _ref.reference,
|
|
|
element = _ref.element,
|
|
|
placement = _ref.placement;
|
|
|
var basePlacement = placement ? getBasePlacement(placement) : null;
|
|
|
var variation = placement ? getVariation(placement) : null;
|
|
|
var commonX = reference.x + reference.width / 2 - element.width / 2;
|
|
|
var commonY = reference.y + reference.height / 2 - element.height / 2;
|
|
|
var offsets;
|
|
|
|
|
|
switch (basePlacement) {
|
|
|
case top:
|
|
|
offsets = {
|
|
|
x: commonX,
|
|
|
y: reference.y - element.height
|
|
|
};
|
|
|
break;
|
|
|
|
|
|
case bottom:
|
|
|
offsets = {
|
|
|
x: commonX,
|
|
|
y: reference.y + reference.height
|
|
|
};
|
|
|
break;
|
|
|
|
|
|
case right:
|
|
|
offsets = {
|
|
|
x: reference.x + reference.width,
|
|
|
y: commonY
|
|
|
};
|
|
|
break;
|
|
|
|
|
|
case left:
|
|
|
offsets = {
|
|
|
x: reference.x - element.width,
|
|
|
y: commonY
|
|
|
};
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
offsets = {
|
|
|
x: reference.x,
|
|
|
y: reference.y
|
|
|
};
|
|
|
}
|
|
|
|
|
|
var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;
|
|
|
|
|
|
if (mainAxis != null) {
|
|
|
var len = mainAxis === 'y' ? 'height' : 'width';
|
|
|
|
|
|
switch (variation) {
|
|
|
case start:
|
|
|
offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);
|
|
|
break;
|
|
|
|
|
|
case end:
|
|
|
offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return offsets;
|
|
|
}
|
|
|
|
|
|
function detectOverflow(state, options) {
|
|
|
if (options === void 0) {
|
|
|
options = {};
|
|
|
}
|
|
|
|
|
|
var _options = options,
|
|
|
_options$placement = _options.placement,
|
|
|
placement = _options$placement === void 0 ? state.placement : _options$placement,
|
|
|
_options$boundary = _options.boundary,
|
|
|
boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,
|
|
|
_options$rootBoundary = _options.rootBoundary,
|
|
|
rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,
|
|
|
_options$elementConte = _options.elementContext,
|
|
|
elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,
|
|
|
_options$altBoundary = _options.altBoundary,
|
|
|
altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,
|
|
|
_options$padding = _options.padding,
|
|
|
padding = _options$padding === void 0 ? 0 : _options$padding;
|
|
|
var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
|
|
|
var altContext = elementContext === popper ? reference : popper;
|
|
|
var popperRect = state.rects.popper;
|
|
|
var element = state.elements[altBoundary ? altContext : elementContext];
|
|
|
var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);
|
|
|
var referenceClientRect = getBoundingClientRect(state.elements.reference);
|
|
|
var popperOffsets = computeOffsets({
|
|
|
reference: referenceClientRect,
|
|
|
element: popperRect,
|
|
|
strategy: 'absolute',
|
|
|
placement: placement
|
|
|
});
|
|
|
var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));
|
|
|
var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect
|
|
|
// 0 or negative = within the clipping rect
|
|
|
|
|
|
var overflowOffsets = {
|
|
|
top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
|
|
|
bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,
|
|
|
left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
|
|
|
right: elementClientRect.right - clippingClientRect.right + paddingObject.right
|
|
|
};
|
|
|
var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element
|
|
|
|
|
|
if (elementContext === popper && offsetData) {
|
|
|
var offset = offsetData[placement];
|
|
|
Object.keys(overflowOffsets).forEach(function (key) {
|
|
|
var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;
|
|
|
var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';
|
|
|
overflowOffsets[key] += offset[axis] * multiply;
|
|
|
});
|
|
|
}
|
|
|
|
|
|
return overflowOffsets;
|
|
|
}
|
|
|
|
|
|
function computeAutoPlacement(state, options) {
|
|
|
if (options === void 0) {
|
|
|
options = {};
|
|
|
}
|
|
|
|
|
|
var _options = options,
|
|
|
placement = _options.placement,
|
|
|
boundary = _options.boundary,
|
|
|
rootBoundary = _options.rootBoundary,
|
|
|
padding = _options.padding,
|
|
|
flipVariations = _options.flipVariations,
|
|
|
_options$allowedAutoP = _options.allowedAutoPlacements,
|
|
|
allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;
|
|
|
var variation = getVariation(placement);
|
|
|
var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {
|
|
|
return getVariation(placement) === variation;
|
|
|
}) : basePlacements;
|
|
|
var allowedPlacements = placements$1.filter(function (placement) {
|
|
|
return allowedAutoPlacements.indexOf(placement) >= 0;
|
|
|
});
|
|
|
|
|
|
if (allowedPlacements.length === 0) {
|
|
|
allowedPlacements = placements$1;
|
|
|
|
|
|
if (process.env.NODE_ENV !== "production") {
|
|
|
console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, "auto" cannot be used to allow "bottom-start".', 'Use "auto-start" instead.'].join(' '));
|
|
|
}
|
|
|
} // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...
|
|
|
|
|
|
|
|
|
var overflows = allowedPlacements.reduce(function (acc, placement) {
|
|
|
acc[placement] = detectOverflow(state, {
|
|
|
placement: placement,
|
|
|
boundary: boundary,
|
|
|
rootBoundary: rootBoundary,
|
|
|
padding: padding
|
|
|
})[getBasePlacement(placement)];
|
|
|
return acc;
|
|
|
}, {});
|
|
|
return Object.keys(overflows).sort(function (a, b) {
|
|
|
return overflows[a] - overflows[b];
|
|
|
});
|
|
|
}
|
|
|
|
|
|
function getExpandedFallbackPlacements(placement) {
|
|
|
if (getBasePlacement(placement) === auto) {
|
|
|
return [];
|
|
|
}
|
|
|
|
|
|
var oppositePlacement = getOppositePlacement(placement);
|
|
|
return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];
|
|
|
}
|
|
|
|
|
|
function flip(_ref) {
|
|
|
var state = _ref.state,
|
|
|
options = _ref.options,
|
|
|
name = _ref.name;
|
|
|
|
|
|
if (state.modifiersData[name]._skip) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var _options$mainAxis = options.mainAxis,
|
|
|
checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
|
|
|
_options$altAxis = options.altAxis,
|
|
|
checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,
|
|
|
specifiedFallbackPlacements = options.fallbackPlacements,
|
|
|
padding = options.padding,
|
|
|
boundary = options.boundary,
|
|
|
rootBoundary = options.rootBoundary,
|
|
|
altBoundary = options.altBoundary,
|
|
|
_options$flipVariatio = options.flipVariations,
|
|
|
flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,
|
|
|
allowedAutoPlacements = options.allowedAutoPlacements;
|
|
|
var preferredPlacement = state.options.placement;
|
|
|
var basePlacement = getBasePlacement(preferredPlacement);
|
|
|
var isBasePlacement = basePlacement === preferredPlacement;
|
|
|
var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));
|
|
|
var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {
|
|
|
return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {
|
|
|
placement: placement,
|
|
|
boundary: boundary,
|
|
|
rootBoundary: rootBoundary,
|
|
|
padding: padding,
|
|
|
flipVariations: flipVariations,
|
|
|
allowedAutoPlacements: allowedAutoPlacements
|
|
|
}) : placement);
|
|
|
}, []);
|
|
|
var referenceRect = state.rects.reference;
|
|
|
var popperRect = state.rects.popper;
|
|
|
var checksMap = new Map();
|
|
|
var makeFallbackChecks = true;
|
|
|
var firstFittingPlacement = placements[0];
|
|
|
|
|
|
for (var i = 0; i < placements.length; i++) {
|
|
|
var placement = placements[i];
|
|
|
|
|
|
var _basePlacement = getBasePlacement(placement);
|
|
|
|
|
|
var isStartVariation = getVariation(placement) === start;
|
|
|
var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;
|
|
|
var len = isVertical ? 'width' : 'height';
|
|
|
var overflow = detectOverflow(state, {
|
|
|
placement: placement,
|
|
|
boundary: boundary,
|
|
|
rootBoundary: rootBoundary,
|
|
|
altBoundary: altBoundary,
|
|
|
padding: padding
|
|
|
});
|
|
|
var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;
|
|
|
|
|
|
if (referenceRect[len] > popperRect[len]) {
|
|
|
mainVariationSide = getOppositePlacement(mainVariationSide);
|
|
|
}
|
|
|
|
|
|
var altVariationSide = getOppositePlacement(mainVariationSide);
|
|
|
var checks = [];
|
|
|
|
|
|
if (checkMainAxis) {
|
|
|
checks.push(overflow[_basePlacement] <= 0);
|
|
|
}
|
|
|
|
|
|
if (checkAltAxis) {
|
|
|
checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);
|
|
|
}
|
|
|
|
|
|
if (checks.every(function (check) {
|
|
|
return check;
|
|
|
})) {
|
|
|
firstFittingPlacement = placement;
|
|
|
makeFallbackChecks = false;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
checksMap.set(placement, checks);
|
|
|
}
|
|
|
|
|
|
if (makeFallbackChecks) {
|
|
|
// `2` may be desired in some cases – research later
|
|
|
var numberOfChecks = flipVariations ? 3 : 1;
|
|
|
|
|
|
var _loop = function _loop(_i) {
|
|
|
var fittingPlacement = placements.find(function (placement) {
|
|
|
var checks = checksMap.get(placement);
|
|
|
|
|
|
if (checks) {
|
|
|
return checks.slice(0, _i).every(function (check) {
|
|
|
return check;
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
|
|
|
if (fittingPlacement) {
|
|
|
firstFittingPlacement = fittingPlacement;
|
|
|
return "break";
|
|
|
}
|
|
|
};
|
|
|
|
|
|
for (var _i = numberOfChecks; _i > 0; _i--) {
|
|
|
var _ret = _loop(_i);
|
|
|
|
|
|
if (_ret === "break") break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (state.placement !== firstFittingPlacement) {
|
|
|
state.modifiersData[name]._skip = true;
|
|
|
state.placement = firstFittingPlacement;
|
|
|
state.reset = true;
|
|
|
}
|
|
|
} // eslint-disable-next-line import/no-unused-modules
|
|
|
|
|
|
|
|
|
var flip$1 = {
|
|
|
name: 'flip',
|
|
|
enabled: true,
|
|
|
phase: 'main',
|
|
|
fn: flip,
|
|
|
requiresIfExists: ['offset'],
|
|
|
data: {
|
|
|
_skip: false
|
|
|
}
|
|
|
};
|
|
|
|
|
|
function getSideOffsets(overflow, rect, preventedOffsets) {
|
|
|
if (preventedOffsets === void 0) {
|
|
|
preventedOffsets = {
|
|
|
x: 0,
|
|
|
y: 0
|
|
|
};
|
|
|
}
|
|
|
|
|
|
return {
|
|
|
top: overflow.top - rect.height - preventedOffsets.y,
|
|
|
right: overflow.right - rect.width + preventedOffsets.x,
|
|
|
bottom: overflow.bottom - rect.height + preventedOffsets.y,
|
|
|
left: overflow.left - rect.width - preventedOffsets.x
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function isAnySideFullyClipped(overflow) {
|
|
|
return [top, right, bottom, left].some(function (side) {
|
|
|
return overflow[side] >= 0;
|
|
|
});
|
|
|
}
|
|
|
|
|
|
function hide(_ref) {
|
|
|
var state = _ref.state,
|
|
|
name = _ref.name;
|
|
|
var referenceRect = state.rects.reference;
|
|
|
var popperRect = state.rects.popper;
|
|
|
var preventedOffsets = state.modifiersData.preventOverflow;
|
|
|
var referenceOverflow = detectOverflow(state, {
|
|
|
elementContext: 'reference'
|
|
|
});
|
|
|
var popperAltOverflow = detectOverflow(state, {
|
|
|
altBoundary: true
|
|
|
});
|
|
|
var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);
|
|
|
var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);
|
|
|
var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);
|
|
|
var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);
|
|
|
state.modifiersData[name] = {
|
|
|
referenceClippingOffsets: referenceClippingOffsets,
|
|
|
popperEscapeOffsets: popperEscapeOffsets,
|
|
|
isReferenceHidden: isReferenceHidden,
|
|
|
hasPopperEscaped: hasPopperEscaped
|
|
|
};
|
|
|
state.attributes.popper = Object.assign({}, state.attributes.popper, {
|
|
|
'data-popper-reference-hidden': isReferenceHidden,
|
|
|
'data-popper-escaped': hasPopperEscaped
|
|
|
});
|
|
|
} // eslint-disable-next-line import/no-unused-modules
|
|
|
|
|
|
|
|
|
var hide$1 = {
|
|
|
name: 'hide',
|
|
|
enabled: true,
|
|
|
phase: 'main',
|
|
|
requiresIfExists: ['preventOverflow'],
|
|
|
fn: hide
|
|
|
};
|
|
|
|
|
|
function distanceAndSkiddingToXY(placement, rects, offset) {
|
|
|
var basePlacement = getBasePlacement(placement);
|
|
|
var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;
|
|
|
|
|
|
var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {
|
|
|
placement: placement
|
|
|
})) : offset,
|
|
|
skidding = _ref[0],
|
|
|
distance = _ref[1];
|
|
|
|
|
|
skidding = skidding || 0;
|
|
|
distance = (distance || 0) * invertDistance;
|
|
|
return [left, right].indexOf(basePlacement) >= 0 ? {
|
|
|
x: distance,
|
|
|
y: skidding
|
|
|
} : {
|
|
|
x: skidding,
|
|
|
y: distance
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function offset(_ref2) {
|
|
|
var state = _ref2.state,
|
|
|
options = _ref2.options,
|
|
|
name = _ref2.name;
|
|
|
var _options$offset = options.offset,
|
|
|
offset = _options$offset === void 0 ? [0, 0] : _options$offset;
|
|
|
var data = placements.reduce(function (acc, placement) {
|
|
|
acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);
|
|
|
return acc;
|
|
|
}, {});
|
|
|
var _data$state$placement = data[state.placement],
|
|
|
x = _data$state$placement.x,
|
|
|
y = _data$state$placement.y;
|
|
|
|
|
|
if (state.modifiersData.popperOffsets != null) {
|
|
|
state.modifiersData.popperOffsets.x += x;
|
|
|
state.modifiersData.popperOffsets.y += y;
|
|
|
}
|
|
|
|
|
|
state.modifiersData[name] = data;
|
|
|
} // eslint-disable-next-line import/no-unused-modules
|
|
|
|
|
|
|
|
|
var offset$1 = {
|
|
|
name: 'offset',
|
|
|
enabled: true,
|
|
|
phase: 'main',
|
|
|
requires: ['popperOffsets'],
|
|
|
fn: offset
|
|
|
};
|
|
|
|
|
|
function popperOffsets(_ref) {
|
|
|
var state = _ref.state,
|
|
|
name = _ref.name;
|
|
|
// Offsets are the actual position the popper needs to have to be
|
|
|
// properly positioned near its reference element
|
|
|
// This is the most basic placement, and will be adjusted by
|
|
|
// the modifiers in the next step
|
|
|
state.modifiersData[name] = computeOffsets({
|
|
|
reference: state.rects.reference,
|
|
|
element: state.rects.popper,
|
|
|
strategy: 'absolute',
|
|
|
placement: state.placement
|
|
|
});
|
|
|
} // eslint-disable-next-line import/no-unused-modules
|
|
|
|
|
|
|
|
|
var popperOffsets$1 = {
|
|
|
name: 'popperOffsets',
|
|
|
enabled: true,
|
|
|
phase: 'read',
|
|
|
fn: popperOffsets,
|
|
|
data: {}
|
|
|
};
|
|
|
|
|
|
function getAltAxis(axis) {
|
|
|
return axis === 'x' ? 'y' : 'x';
|
|
|
}
|
|
|
|
|
|
function preventOverflow(_ref) {
|
|
|
var state = _ref.state,
|
|
|
options = _ref.options,
|
|
|
name = _ref.name;
|
|
|
var _options$mainAxis = options.mainAxis,
|
|
|
checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
|
|
|
_options$altAxis = options.altAxis,
|
|
|
checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,
|
|
|
boundary = options.boundary,
|
|
|
rootBoundary = options.rootBoundary,
|
|
|
altBoundary = options.altBoundary,
|
|
|
padding = options.padding,
|
|
|
_options$tether = options.tether,
|
|
|
tether = _options$tether === void 0 ? true : _options$tether,
|
|
|
_options$tetherOffset = options.tetherOffset,
|
|
|
tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;
|
|
|
var overflow = detectOverflow(state, {
|
|
|
boundary: boundary,
|
|
|
rootBoundary: rootBoundary,
|
|
|
padding: padding,
|
|
|
altBoundary: altBoundary
|
|
|
});
|
|
|
var basePlacement = getBasePlacement(state.placement);
|
|
|
var variation = getVariation(state.placement);
|
|
|
var isBasePlacement = !variation;
|
|
|
var mainAxis = getMainAxisFromPlacement(basePlacement);
|
|
|
var altAxis = getAltAxis(mainAxis);
|
|
|
var popperOffsets = state.modifiersData.popperOffsets;
|
|
|
var referenceRect = state.rects.reference;
|
|
|
var popperRect = state.rects.popper;
|
|
|
var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {
|
|
|
placement: state.placement
|
|
|
})) : tetherOffset;
|
|
|
var data = {
|
|
|
x: 0,
|
|
|
y: 0
|
|
|
};
|
|
|
|
|
|
if (!popperOffsets) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (checkMainAxis || checkAltAxis) {
|
|
|
var mainSide = mainAxis === 'y' ? top : left;
|
|
|
var altSide = mainAxis === 'y' ? bottom : right;
|
|
|
var len = mainAxis === 'y' ? 'height' : 'width';
|
|
|
var offset = popperOffsets[mainAxis];
|
|
|
var min$1 = popperOffsets[mainAxis] + overflow[mainSide];
|
|
|
var max$1 = popperOffsets[mainAxis] - overflow[altSide];
|
|
|
var additive = tether ? -popperRect[len] / 2 : 0;
|
|
|
var minLen = variation === start ? referenceRect[len] : popperRect[len];
|
|
|
var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go
|
|
|
// outside the reference bounds
|
|
|
|
|
|
var arrowElement = state.elements.arrow;
|
|
|
var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {
|
|
|
width: 0,
|
|
|
height: 0
|
|
|
};
|
|
|
var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();
|
|
|
var arrowPaddingMin = arrowPaddingObject[mainSide];
|
|
|
var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want
|
|
|
// to include its full size in the calculation. If the reference is small
|
|
|
// and near the edge of a boundary, the popper can overflow even if the
|
|
|
// reference is not overflowing as well (e.g. virtual elements with no
|
|
|
// width or height)
|
|
|
|
|
|
var arrowLen = within(0, referenceRect[len], arrowRect[len]);
|
|
|
var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;
|
|
|
var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;
|
|
|
var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);
|
|
|
var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;
|
|
|
var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;
|
|
|
var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;
|
|
|
var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;
|
|
|
|
|
|
if (checkMainAxis) {
|
|
|
var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);
|
|
|
popperOffsets[mainAxis] = preventedOffset;
|
|
|
data[mainAxis] = preventedOffset - offset;
|
|
|
}
|
|
|
|
|
|
if (checkAltAxis) {
|
|
|
var _mainSide = mainAxis === 'x' ? top : left;
|
|
|
|
|
|
var _altSide = mainAxis === 'x' ? bottom : right;
|
|
|
|
|
|
var _offset = popperOffsets[altAxis];
|
|
|
|
|
|
var _min = _offset + overflow[_mainSide];
|
|
|
|
|
|
var _max = _offset - overflow[_altSide];
|
|
|
|
|
|
var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);
|
|
|
|
|
|
popperOffsets[altAxis] = _preventedOffset;
|
|
|
data[altAxis] = _preventedOffset - _offset;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
state.modifiersData[name] = data;
|
|
|
} // eslint-disable-next-line import/no-unused-modules
|
|
|
|
|
|
|
|
|
var preventOverflow$1 = {
|
|
|
name: 'preventOverflow',
|
|
|
enabled: true,
|
|
|
phase: 'main',
|
|
|
fn: preventOverflow,
|
|
|
requiresIfExists: ['offset']
|
|
|
};
|
|
|
|
|
|
function getHTMLElementScroll(element) {
|
|
|
return {
|
|
|
scrollLeft: element.scrollLeft,
|
|
|
scrollTop: element.scrollTop
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function getNodeScroll(node) {
|
|
|
if (node === getWindow(node) || !isHTMLElement(node)) {
|
|
|
return getWindowScroll(node);
|
|
|
} else {
|
|
|
return getHTMLElementScroll(node);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function isElementScaled(element) {
|
|
|
var rect = element.getBoundingClientRect();
|
|
|
var scaleX = rect.width / element.offsetWidth || 1;
|
|
|
var scaleY = rect.height / element.offsetHeight || 1;
|
|
|
return scaleX !== 1 || scaleY !== 1;
|
|
|
} // Returns the composite rect of an element relative to its offsetParent.
|
|
|
// Composite means it takes into account transforms as well as layout.
|
|
|
|
|
|
|
|
|
function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
|
|
|
if (isFixed === void 0) {
|
|
|
isFixed = false;
|
|
|
}
|
|
|
|
|
|
var isOffsetParentAnElement = isHTMLElement(offsetParent);
|
|
|
isHTMLElement(offsetParent) && isElementScaled(offsetParent);
|
|
|
var documentElement = getDocumentElement(offsetParent);
|
|
|
var rect = getBoundingClientRect(elementOrVirtualElement);
|
|
|
var scroll = {
|
|
|
scrollLeft: 0,
|
|
|
scrollTop: 0
|
|
|
};
|
|
|
var offsets = {
|
|
|
x: 0,
|
|
|
y: 0
|
|
|
};
|
|
|
|
|
|
if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
|
|
|
if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078
|
|
|
isScrollParent(documentElement)) {
|
|
|
scroll = getNodeScroll(offsetParent);
|
|
|
}
|
|
|
|
|
|
if (isHTMLElement(offsetParent)) {
|
|
|
offsets = getBoundingClientRect(offsetParent);
|
|
|
offsets.x += offsetParent.clientLeft;
|
|
|
offsets.y += offsetParent.clientTop;
|
|
|
} else if (documentElement) {
|
|
|
offsets.x = getWindowScrollBarX(documentElement);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return {
|
|
|
x: rect.left + scroll.scrollLeft - offsets.x,
|
|
|
y: rect.top + scroll.scrollTop - offsets.y,
|
|
|
width: rect.width,
|
|
|
height: rect.height
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function order(modifiers) {
|
|
|
var map = new Map();
|
|
|
var visited = new Set();
|
|
|
var result = [];
|
|
|
modifiers.forEach(function (modifier) {
|
|
|
map.set(modifier.name, modifier);
|
|
|
}); // On visiting object, check for its dependencies and visit them recursively
|
|
|
|
|
|
function sort(modifier) {
|
|
|
visited.add(modifier.name);
|
|
|
var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);
|
|
|
requires.forEach(function (dep) {
|
|
|
if (!visited.has(dep)) {
|
|
|
var depModifier = map.get(dep);
|
|
|
|
|
|
if (depModifier) {
|
|
|
sort(depModifier);
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
result.push(modifier);
|
|
|
}
|
|
|
|
|
|
modifiers.forEach(function (modifier) {
|
|
|
if (!visited.has(modifier.name)) {
|
|
|
// check for visited object
|
|
|
sort(modifier);
|
|
|
}
|
|
|
});
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
function orderModifiers(modifiers) {
|
|
|
// order based on dependencies
|
|
|
var orderedModifiers = order(modifiers); // order based on phase
|
|
|
|
|
|
return modifierPhases.reduce(function (acc, phase) {
|
|
|
return acc.concat(orderedModifiers.filter(function (modifier) {
|
|
|
return modifier.phase === phase;
|
|
|
}));
|
|
|
}, []);
|
|
|
}
|
|
|
|
|
|
function debounce(fn) {
|
|
|
var pending;
|
|
|
return function () {
|
|
|
if (!pending) {
|
|
|
pending = new Promise(function (resolve) {
|
|
|
Promise.resolve().then(function () {
|
|
|
pending = undefined;
|
|
|
resolve(fn());
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
|
|
|
return pending;
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function format(str) {
|
|
|
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
|
args[_key - 1] = arguments[_key];
|
|
|
}
|
|
|
|
|
|
return [].concat(args).reduce(function (p, c) {
|
|
|
return p.replace(/%s/, c);
|
|
|
}, str);
|
|
|
}
|
|
|
|
|
|
var INVALID_MODIFIER_ERROR = 'Popper: modifier "%s" provided an invalid %s property, expected %s but got %s';
|
|
|
var MISSING_DEPENDENCY_ERROR = 'Popper: modifier "%s" requires "%s", but "%s" modifier is not available';
|
|
|
var VALID_PROPERTIES = ['name', 'enabled', 'phase', 'fn', 'effect', 'requires', 'options'];
|
|
|
function validateModifiers(modifiers) {
|
|
|
modifiers.forEach(function (modifier) {
|
|
|
[].concat(Object.keys(modifier), VALID_PROPERTIES) // IE11-compatible replacement for `new Set(iterable)`
|
|
|
.filter(function (value, index, self) {
|
|
|
return self.indexOf(value) === index;
|
|
|
}).forEach(function (key) {
|
|
|
switch (key) {
|
|
|
case 'name':
|
|
|
if (typeof modifier.name !== 'string') {
|
|
|
console.error(format(INVALID_MODIFIER_ERROR, String(modifier.name), '"name"', '"string"', "\"" + String(modifier.name) + "\""));
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 'enabled':
|
|
|
if (typeof modifier.enabled !== 'boolean') {
|
|
|
console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"enabled"', '"boolean"', "\"" + String(modifier.enabled) + "\""));
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 'phase':
|
|
|
if (modifierPhases.indexOf(modifier.phase) < 0) {
|
|
|
console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"phase"', "either " + modifierPhases.join(', '), "\"" + String(modifier.phase) + "\""));
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 'fn':
|
|
|
if (typeof modifier.fn !== 'function') {
|
|
|
console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"fn"', '"function"', "\"" + String(modifier.fn) + "\""));
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 'effect':
|
|
|
if (modifier.effect != null && typeof modifier.effect !== 'function') {
|
|
|
console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"effect"', '"function"', "\"" + String(modifier.fn) + "\""));
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 'requires':
|
|
|
if (modifier.requires != null && !Array.isArray(modifier.requires)) {
|
|
|
console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requires"', '"array"', "\"" + String(modifier.requires) + "\""));
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 'requiresIfExists':
|
|
|
if (!Array.isArray(modifier.requiresIfExists)) {
|
|
|
console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requiresIfExists"', '"array"', "\"" + String(modifier.requiresIfExists) + "\""));
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 'options':
|
|
|
case 'data':
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
console.error("PopperJS: an invalid property has been provided to the \"" + modifier.name + "\" modifier, valid properties are " + VALID_PROPERTIES.map(function (s) {
|
|
|
return "\"" + s + "\"";
|
|
|
}).join(', ') + "; but \"" + key + "\" was provided.");
|
|
|
}
|
|
|
|
|
|
modifier.requires && modifier.requires.forEach(function (requirement) {
|
|
|
if (modifiers.find(function (mod) {
|
|
|
return mod.name === requirement;
|
|
|
}) == null) {
|
|
|
console.error(format(MISSING_DEPENDENCY_ERROR, String(modifier.name), requirement, requirement));
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
|
|
|
function uniqueBy(arr, fn) {
|
|
|
var identifiers = new Set();
|
|
|
return arr.filter(function (item) {
|
|
|
var identifier = fn(item);
|
|
|
|
|
|
if (!identifiers.has(identifier)) {
|
|
|
identifiers.add(identifier);
|
|
|
return true;
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
function mergeByName(modifiers) {
|
|
|
var merged = modifiers.reduce(function (merged, current) {
|
|
|
var existing = merged[current.name];
|
|
|
merged[current.name] = existing ? Object.assign({}, existing, current, {
|
|
|
options: Object.assign({}, existing.options, current.options),
|
|
|
data: Object.assign({}, existing.data, current.data)
|
|
|
}) : current;
|
|
|
return merged;
|
|
|
}, {}); // IE11 does not support Object.values
|
|
|
|
|
|
return Object.keys(merged).map(function (key) {
|
|
|
return merged[key];
|
|
|
});
|
|
|
}
|
|
|
|
|
|
var INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';
|
|
|
var INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';
|
|
|
var DEFAULT_OPTIONS = {
|
|
|
placement: 'bottom',
|
|
|
modifiers: [],
|
|
|
strategy: 'absolute'
|
|
|
};
|
|
|
|
|
|
function areValidElements() {
|
|
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
|
args[_key] = arguments[_key];
|
|
|
}
|
|
|
|
|
|
return !args.some(function (element) {
|
|
|
return !(element && typeof element.getBoundingClientRect === 'function');
|
|
|
});
|
|
|
}
|
|
|
|
|
|
function popperGenerator(generatorOptions) {
|
|
|
if (generatorOptions === void 0) {
|
|
|
generatorOptions = {};
|
|
|
}
|
|
|
|
|
|
var _generatorOptions = generatorOptions,
|
|
|
_generatorOptions$def = _generatorOptions.defaultModifiers,
|
|
|
defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,
|
|
|
_generatorOptions$def2 = _generatorOptions.defaultOptions,
|
|
|
defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;
|
|
|
return function createPopper(reference, popper, options) {
|
|
|
if (options === void 0) {
|
|
|
options = defaultOptions;
|
|
|
}
|
|
|
|
|
|
var state = {
|
|
|
placement: 'bottom',
|
|
|
orderedModifiers: [],
|
|
|
options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),
|
|
|
modifiersData: {},
|
|
|
elements: {
|
|
|
reference: reference,
|
|
|
popper: popper
|
|
|
},
|
|
|
attributes: {},
|
|
|
styles: {}
|
|
|
};
|
|
|
var effectCleanupFns = [];
|
|
|
var isDestroyed = false;
|
|
|
var instance = {
|
|
|
state: state,
|
|
|
setOptions: function setOptions(setOptionsAction) {
|
|
|
var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;
|
|
|
cleanupModifierEffects();
|
|
|
state.options = Object.assign({}, defaultOptions, state.options, options);
|
|
|
state.scrollParents = {
|
|
|
reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],
|
|
|
popper: listScrollParents(popper)
|
|
|
}; // Orders the modifiers based on their dependencies and `phase`
|
|
|
// properties
|
|
|
|
|
|
var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers
|
|
|
|
|
|
state.orderedModifiers = orderedModifiers.filter(function (m) {
|
|
|
return m.enabled;
|
|
|
}); // Validate the provided modifiers so that the consumer will get warned
|
|
|
// if one of the modifiers is invalid for any reason
|
|
|
|
|
|
if (process.env.NODE_ENV !== "production") {
|
|
|
var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {
|
|
|
var name = _ref.name;
|
|
|
return name;
|
|
|
});
|
|
|
validateModifiers(modifiers);
|
|
|
|
|
|
if (getBasePlacement(state.options.placement) === auto) {
|
|
|
var flipModifier = state.orderedModifiers.find(function (_ref2) {
|
|
|
var name = _ref2.name;
|
|
|
return name === 'flip';
|
|
|
});
|
|
|
|
|
|
if (!flipModifier) {
|
|
|
console.error(['Popper: "auto" placements require the "flip" modifier be', 'present and enabled to work.'].join(' '));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var _getComputedStyle = getComputedStyle(popper),
|
|
|
marginTop = _getComputedStyle.marginTop,
|
|
|
marginRight = _getComputedStyle.marginRight,
|
|
|
marginBottom = _getComputedStyle.marginBottom,
|
|
|
marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can
|
|
|
// cause bugs with positioning, so we'll warn the consumer
|
|
|
|
|
|
|
|
|
if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {
|
|
|
return parseFloat(margin);
|
|
|
})) {
|
|
|
console.warn(['Popper: CSS "margin" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
runModifierEffects();
|
|
|
return instance.update();
|
|
|
},
|
|
|
// Sync update – it will always be executed, even if not necessary. This
|
|
|
// is useful for low frequency updates where sync behavior simplifies the
|
|
|
// logic.
|
|
|
// For high frequency updates (e.g. `resize` and `scroll` events), always
|
|
|
// prefer the async Popper#update method
|
|
|
forceUpdate: function forceUpdate() {
|
|
|
if (isDestroyed) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var _state$elements = state.elements,
|
|
|
reference = _state$elements.reference,
|
|
|
popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements
|
|
|
// anymore
|
|
|
|
|
|
if (!areValidElements(reference, popper)) {
|
|
|
if (process.env.NODE_ENV !== "production") {
|
|
|
console.error(INVALID_ELEMENT_ERROR);
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
} // Store the reference and popper rects to be read by modifiers
|
|
|
|
|
|
|
|
|
state.rects = {
|
|
|
reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),
|
|
|
popper: getLayoutRect(popper)
|
|
|
}; // Modifiers have the ability to reset the current update cycle. The
|
|
|
// most common use case for this is the `flip` modifier changing the
|
|
|
// placement, which then needs to re-run all the modifiers, because the
|
|
|
// logic was previously ran for the previous placement and is therefore
|
|
|
// stale/incorrect
|
|
|
|
|
|
state.reset = false;
|
|
|
state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier
|
|
|
// is filled with the initial data specified by the modifier. This means
|
|
|
// it doesn't persist and is fresh on each update.
|
|
|
// To ensure persistent data, use `${name}#persistent`
|
|
|
|
|
|
state.orderedModifiers.forEach(function (modifier) {
|
|
|
return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);
|
|
|
});
|
|
|
var __debug_loops__ = 0;
|
|
|
|
|
|
for (var index = 0; index < state.orderedModifiers.length; index++) {
|
|
|
if (process.env.NODE_ENV !== "production") {
|
|
|
__debug_loops__ += 1;
|
|
|
|
|
|
if (__debug_loops__ > 100) {
|
|
|
console.error(INFINITE_LOOP_ERROR);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (state.reset === true) {
|
|
|
state.reset = false;
|
|
|
index = -1;
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
var _state$orderedModifie = state.orderedModifiers[index],
|
|
|
fn = _state$orderedModifie.fn,
|
|
|
_state$orderedModifie2 = _state$orderedModifie.options,
|
|
|
_options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,
|
|
|
name = _state$orderedModifie.name;
|
|
|
|
|
|
if (typeof fn === 'function') {
|
|
|
state = fn({
|
|
|
state: state,
|
|
|
options: _options,
|
|
|
name: name,
|
|
|
instance: instance
|
|
|
}) || state;
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
// Async and optimistically optimized update – it will not be executed if
|
|
|
// not necessary (debounced to run at most once-per-tick)
|
|
|
update: debounce(function () {
|
|
|
return new Promise(function (resolve) {
|
|
|
instance.forceUpdate();
|
|
|
resolve(state);
|
|
|
});
|
|
|
}),
|
|
|
destroy: function destroy() {
|
|
|
cleanupModifierEffects();
|
|
|
isDestroyed = true;
|
|
|
}
|
|
|
};
|
|
|
|
|
|
if (!areValidElements(reference, popper)) {
|
|
|
if (process.env.NODE_ENV !== "production") {
|
|
|
console.error(INVALID_ELEMENT_ERROR);
|
|
|
}
|
|
|
|
|
|
return instance;
|
|
|
}
|
|
|
|
|
|
instance.setOptions(options).then(function (state) {
|
|
|
if (!isDestroyed && options.onFirstUpdate) {
|
|
|
options.onFirstUpdate(state);
|
|
|
}
|
|
|
}); // Modifiers have the ability to execute arbitrary code before the first
|
|
|
// update cycle runs. They will be executed in the same order as the update
|
|
|
// cycle. This is useful when a modifier adds some persistent data that
|
|
|
// other modifiers need to use, but the modifier is run after the dependent
|
|
|
// one.
|
|
|
|
|
|
function runModifierEffects() {
|
|
|
state.orderedModifiers.forEach(function (_ref3) {
|
|
|
var name = _ref3.name,
|
|
|
_ref3$options = _ref3.options,
|
|
|
options = _ref3$options === void 0 ? {} : _ref3$options,
|
|
|
effect = _ref3.effect;
|
|
|
|
|
|
if (typeof effect === 'function') {
|
|
|
var cleanupFn = effect({
|
|
|
state: state,
|
|
|
name: name,
|
|
|
instance: instance,
|
|
|
options: options
|
|
|
});
|
|
|
|
|
|
var noopFn = function noopFn() {};
|
|
|
|
|
|
effectCleanupFns.push(cleanupFn || noopFn);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
function cleanupModifierEffects() {
|
|
|
effectCleanupFns.forEach(function (fn) {
|
|
|
return fn();
|
|
|
});
|
|
|
effectCleanupFns = [];
|
|
|
}
|
|
|
|
|
|
return instance;
|
|
|
};
|
|
|
}
|
|
|
|
|
|
var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];
|
|
|
var createPopper = /*#__PURE__*/popperGenerator({
|
|
|
defaultModifiers: defaultModifiers
|
|
|
}); // eslint-disable-next-line import/no-unused-modules
|
|
|
|
|
|
// Credits go to Liam's Periodic Notes Plugin: https://github.com/liamcain/obsidian-periodic-notes
|
|
|
const wrapAround = (value, size) => {
|
|
|
return ((value % size) + size) % size;
|
|
|
};
|
|
|
class Suggest {
|
|
|
constructor(owner, containerEl, scope) {
|
|
|
this.owner = owner;
|
|
|
this.containerEl = containerEl;
|
|
|
containerEl.on("click", ".suggestion-item", this.onSuggestionClick.bind(this));
|
|
|
containerEl.on("mousemove", ".suggestion-item", this.onSuggestionMouseover.bind(this));
|
|
|
scope.register([], "ArrowUp", (event) => {
|
|
|
if (!event.isComposing) {
|
|
|
this.setSelectedItem(this.selectedItem - 1, true);
|
|
|
return false;
|
|
|
}
|
|
|
});
|
|
|
scope.register([], "ArrowDown", (event) => {
|
|
|
if (!event.isComposing) {
|
|
|
this.setSelectedItem(this.selectedItem + 1, true);
|
|
|
return false;
|
|
|
}
|
|
|
});
|
|
|
scope.register([], "Enter", (event) => {
|
|
|
if (!event.isComposing) {
|
|
|
this.useSelectedItem(event);
|
|
|
return false;
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
onSuggestionClick(event, el) {
|
|
|
event.preventDefault();
|
|
|
const item = this.suggestions.indexOf(el);
|
|
|
this.setSelectedItem(item, false);
|
|
|
this.useSelectedItem(event);
|
|
|
}
|
|
|
onSuggestionMouseover(_event, el) {
|
|
|
const item = this.suggestions.indexOf(el);
|
|
|
this.setSelectedItem(item, false);
|
|
|
}
|
|
|
setSuggestions(values) {
|
|
|
this.containerEl.empty();
|
|
|
const suggestionEls = [];
|
|
|
values.forEach((value) => {
|
|
|
const suggestionEl = this.containerEl.createDiv("suggestion-item");
|
|
|
this.owner.renderSuggestion(value, suggestionEl);
|
|
|
suggestionEls.push(suggestionEl);
|
|
|
});
|
|
|
this.values = values;
|
|
|
this.suggestions = suggestionEls;
|
|
|
this.setSelectedItem(0, false);
|
|
|
}
|
|
|
useSelectedItem(event) {
|
|
|
const currentValue = this.values[this.selectedItem];
|
|
|
if (currentValue) {
|
|
|
this.owner.selectSuggestion(currentValue, event);
|
|
|
}
|
|
|
}
|
|
|
setSelectedItem(selectedIndex, scrollIntoView) {
|
|
|
const normalizedIndex = wrapAround(selectedIndex, this.suggestions.length);
|
|
|
const prevSelectedSuggestion = this.suggestions[this.selectedItem];
|
|
|
const selectedSuggestion = this.suggestions[normalizedIndex];
|
|
|
prevSelectedSuggestion === null || prevSelectedSuggestion === void 0 ? void 0 : prevSelectedSuggestion.removeClass("is-selected");
|
|
|
selectedSuggestion === null || selectedSuggestion === void 0 ? void 0 : selectedSuggestion.addClass("is-selected");
|
|
|
this.selectedItem = normalizedIndex;
|
|
|
if (scrollIntoView) {
|
|
|
selectedSuggestion.scrollIntoView(false);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
class TextInputSuggest {
|
|
|
constructor(app, inputEl) {
|
|
|
this.app = app;
|
|
|
this.inputEl = inputEl;
|
|
|
this.scope = new obsidian.Scope();
|
|
|
this.suggestEl = createDiv("suggestion-container");
|
|
|
const suggestion = this.suggestEl.createDiv("suggestion");
|
|
|
this.suggest = new Suggest(this, suggestion, this.scope);
|
|
|
this.scope.register([], "Escape", this.close.bind(this));
|
|
|
this.inputEl.addEventListener("input", this.onInputChanged.bind(this));
|
|
|
this.inputEl.addEventListener("focus", this.onInputChanged.bind(this));
|
|
|
this.inputEl.addEventListener("blur", this.close.bind(this));
|
|
|
this.suggestEl.on("mousedown", ".suggestion-container", (event) => {
|
|
|
event.preventDefault();
|
|
|
});
|
|
|
}
|
|
|
onInputChanged() {
|
|
|
const inputStr = this.inputEl.value;
|
|
|
const suggestions = this.getSuggestions(inputStr);
|
|
|
if (!suggestions) {
|
|
|
this.close();
|
|
|
return;
|
|
|
}
|
|
|
if (suggestions.length > 0) {
|
|
|
this.suggest.setSuggestions(suggestions);
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
|
this.open(this.app.dom.appContainerEl, this.inputEl);
|
|
|
}
|
|
|
else {
|
|
|
this.close();
|
|
|
}
|
|
|
}
|
|
|
open(container, inputEl) {
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
|
this.app.keymap.pushScope(this.scope);
|
|
|
container.appendChild(this.suggestEl);
|
|
|
this.popper = createPopper(inputEl, this.suggestEl, {
|
|
|
placement: "bottom-start",
|
|
|
modifiers: [
|
|
|
{
|
|
|
name: "sameWidth",
|
|
|
enabled: true,
|
|
|
fn: ({ state, instance }) => {
|
|
|
// Note: positioning needs to be calculated twice -
|
|
|
// first pass - positioning it according to the width of the popper
|
|
|
// second pass - position it with the width bound to the reference element
|
|
|
// we need to early exit to avoid an infinite loop
|
|
|
const targetWidth = `${state.rects.reference.width}px`;
|
|
|
if (state.styles.popper.width === targetWidth) {
|
|
|
return;
|
|
|
}
|
|
|
state.styles.popper.width = targetWidth;
|
|
|
instance.update();
|
|
|
},
|
|
|
phase: "beforeWrite",
|
|
|
requires: ["computeStyles"],
|
|
|
},
|
|
|
],
|
|
|
});
|
|
|
}
|
|
|
close() {
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
|
this.app.keymap.popScope(this.scope);
|
|
|
this.suggest.setSuggestions([]);
|
|
|
if (this.popper)
|
|
|
this.popper.destroy();
|
|
|
this.suggestEl.detach();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// Credits go to Liam's Periodic Notes Plugin: https://github.com/liamcain/obsidian-periodic-notes
|
|
|
class FolderSuggest extends TextInputSuggest {
|
|
|
getSuggestions(inputStr) {
|
|
|
const abstractFiles = this.app.vault.getAllLoadedFiles();
|
|
|
const folders = [];
|
|
|
const lowerCaseInputStr = inputStr.toLowerCase();
|
|
|
abstractFiles.forEach((folder) => {
|
|
|
if (folder instanceof obsidian.TFolder &&
|
|
|
folder.path.toLowerCase().contains(lowerCaseInputStr)) {
|
|
|
folders.push(folder);
|
|
|
}
|
|
|
});
|
|
|
return folders;
|
|
|
}
|
|
|
renderSuggestion(file, el) {
|
|
|
el.setText(file.path);
|
|
|
}
|
|
|
selectSuggestion(file) {
|
|
|
this.inputEl.value = file.path;
|
|
|
this.inputEl.trigger("input");
|
|
|
this.close();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var FilterType;
|
|
|
(function (FilterType) {
|
|
|
FilterType["TAGS"] = "all articles with tags";
|
|
|
FilterType["UNREAD"] = "All unread articles(from folders)";
|
|
|
FilterType["READ"] = "All read articles(from folders)";
|
|
|
FilterType["FAVORITES"] = "Favorites(from folders)";
|
|
|
})(FilterType || (FilterType = {}));
|
|
|
var SortOrder;
|
|
|
(function (SortOrder) {
|
|
|
SortOrder["DATE_NEWEST"] = "Publication date (new to old)";
|
|
|
SortOrder["DATE_OLDEST"] = "Publication date (old to new)";
|
|
|
SortOrder["ALPHABET_NORMAL"] = "Name (A to Z)";
|
|
|
SortOrder["ALPHABET_INVERTED"] = "Name (Z to A)";
|
|
|
})(SortOrder || (SortOrder = {}));
|
|
|
class FilteredFolderModal extends BaseModal {
|
|
|
constructor(plugin, folder) {
|
|
|
super(plugin.app);
|
|
|
this.filterContent = "";
|
|
|
this.saved = false;
|
|
|
if (folder) {
|
|
|
this.name = folder.name;
|
|
|
this.filterType = folder.filterType;
|
|
|
this.filterContent = folder.filterContent;
|
|
|
this.sortOrder = folder.sortOrder;
|
|
|
}
|
|
|
}
|
|
|
display() {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
const { contentEl } = this;
|
|
|
contentEl.empty();
|
|
|
let nameText;
|
|
|
const name = new obsidian.Setting(contentEl)
|
|
|
.setName("Name")
|
|
|
.addText((text) => {
|
|
|
nameText = text;
|
|
|
text.setValue(this.name)
|
|
|
.onChange((value) => {
|
|
|
this.removeValidationError(text);
|
|
|
this.name = value;
|
|
|
});
|
|
|
});
|
|
|
name.controlEl.addClass("rss-setting-input");
|
|
|
const type = new obsidian.Setting(contentEl)
|
|
|
.setName("Type")
|
|
|
.setDesc("type of filter")
|
|
|
.addDropdown((dropdown) => {
|
|
|
for (const option in FilterType) {
|
|
|
// @ts-ignore
|
|
|
dropdown.addOption(option, FilterType[option]);
|
|
|
}
|
|
|
dropdown
|
|
|
.setValue(this.filterType)
|
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
|
this.filterType = value;
|
|
|
}));
|
|
|
});
|
|
|
type.controlEl.addClass("rss-setting-input");
|
|
|
new obsidian.Setting(contentEl)
|
|
|
.setName("Filter")
|
|
|
.setDesc("Folders/Tags to filter on, split by ,")
|
|
|
.addText((text) => {
|
|
|
text
|
|
|
.setValue(this.filterContent)
|
|
|
.onChange((value) => {
|
|
|
this.filterContent = value;
|
|
|
this.removeValidationError(text);
|
|
|
});
|
|
|
});
|
|
|
const sorting = new obsidian.Setting(contentEl)
|
|
|
.setName("Order by")
|
|
|
.addDropdown((dropdown) => {
|
|
|
for (const order in SortOrder) {
|
|
|
// @ts-ignore
|
|
|
dropdown.addOption(order, SortOrder[order]);
|
|
|
}
|
|
|
dropdown
|
|
|
.setValue(this.sortOrder)
|
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
|
this.sortOrder = value;
|
|
|
}));
|
|
|
});
|
|
|
sorting.controlEl.addClass("rss-setting-input");
|
|
|
const footerEl = contentEl.createDiv();
|
|
|
const footerButtons = new obsidian.Setting(footerEl);
|
|
|
footerButtons.addButton((b) => {
|
|
|
b.setTooltip("Save")
|
|
|
.setIcon("checkmark")
|
|
|
.onClick(() => __awaiter(this, void 0, void 0, function* () {
|
|
|
let error = false;
|
|
|
if (!nameText.getValue().length) {
|
|
|
this.setValidationError(nameText, "you need to specify a name");
|
|
|
error = true;
|
|
|
}
|
|
|
if (error) {
|
|
|
new obsidian.Notice("please fix errors before saving.");
|
|
|
return;
|
|
|
}
|
|
|
this.saved = true;
|
|
|
this.close();
|
|
|
}));
|
|
|
return b;
|
|
|
});
|
|
|
footerButtons.addExtraButton((b) => {
|
|
|
b.setIcon("cross")
|
|
|
.setTooltip("Cancel")
|
|
|
.onClick(() => {
|
|
|
this.saved = false;
|
|
|
this.close();
|
|
|
});
|
|
|
return b;
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
onOpen() {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
yield this.display();
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
|
|
|
const DEFAULT_SETTINGS = Object.freeze({
|
|
|
feeds: [],
|
|
|
updateTime: 60,
|
|
|
filtered: [{
|
|
|
name: "Favorites",
|
|
|
filterType: "FAVORITES",
|
|
|
filterContent: "",
|
|
|
sortOrder: "ALPHABET_NORMAL"
|
|
|
}],
|
|
|
saveLocation: 'default',
|
|
|
saveLocationFolder: '',
|
|
|
items: [],
|
|
|
dateFormat: "YYYY-MM-DDTHH:MM:SS",
|
|
|
template: "---\n" +
|
|
|
"link: {{link}}\n" +
|
|
|
"author: {{author}}\n" +
|
|
|
"published: {{published}}\n" +
|
|
|
"tags: [{{tags:,}}]\n" +
|
|
|
"---\n" +
|
|
|
"{{title}}\n" +
|
|
|
"{{content}}",
|
|
|
pasteTemplate: "## {{title}}\n" +
|
|
|
"{{content}}",
|
|
|
askForFilename: true
|
|
|
});
|
|
|
class RSSReaderSettingsTab extends obsidian.PluginSettingTab {
|
|
|
constructor(app, plugin) {
|
|
|
super(app, plugin);
|
|
|
this.plugin = plugin;
|
|
|
}
|
|
|
display() {
|
|
|
const { containerEl } = this;
|
|
|
containerEl.empty();
|
|
|
containerEl.createEl('h2', { text: 'RSS Reader Settings' });
|
|
|
new obsidian.Setting(containerEl)
|
|
|
.setName("New file template")
|
|
|
.setDesc('When creating a note from a article this gets processed. ' +
|
|
|
'Available variables are: {{title}}, {{link}}, {{author}}, {{published}}, {{created}}, {{content}}, {{description}}, {{folder}}, {{feed}}, {{filename}, {{tags}}, {{#tags}}')
|
|
|
.addTextArea((textArea) => {
|
|
|
textArea
|
|
|
.setValue(this.plugin.settings.template)
|
|
|
.setPlaceholder(DEFAULT_SETTINGS.template)
|
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
|
yield this.plugin.writeSettings(() => ({
|
|
|
template: value
|
|
|
}));
|
|
|
}));
|
|
|
textArea.inputEl.setAttr("rows", 8);
|
|
|
});
|
|
|
new obsidian.Setting(containerEl)
|
|
|
.setName("paste article template")
|
|
|
.setDesc('When pasting/copying an article this gets processed. ' +
|
|
|
'Available variables are: {{title}}, {{link}}, {{author}}, {{published}}, {{content}}, {{description}}, {{folder}}, {{feed}}, {{tags}}, {{#tags}}')
|
|
|
.addTextArea((textArea) => {
|
|
|
textArea
|
|
|
.setValue(this.plugin.settings.pasteTemplate)
|
|
|
.setPlaceholder(DEFAULT_SETTINGS.pasteTemplate)
|
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
|
yield this.plugin.writeSettings(() => ({
|
|
|
pasteTemplate: value
|
|
|
}));
|
|
|
}));
|
|
|
textArea.inputEl.setAttr("rows", 8);
|
|
|
});
|
|
|
new obsidian.Setting(containerEl)
|
|
|
.setName("Default location for new notes")
|
|
|
.setDesc("")
|
|
|
.addDropdown((dropdown) => __awaiter(this, void 0, void 0, function* () {
|
|
|
dropdown
|
|
|
.addOption("default", "In the default folder")
|
|
|
.addOption("custom", "In the folder specified below")
|
|
|
.setValue(this.plugin.settings.saveLocation)
|
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
|
yield this.plugin.writeSettings(() => ({ saveLocation: value }));
|
|
|
this.display();
|
|
|
}));
|
|
|
}));
|
|
|
if (this.plugin.settings.saveLocation == "custom") {
|
|
|
new obsidian.Setting(containerEl)
|
|
|
.setName("Folder to create new articles in")
|
|
|
.setDesc("newly created articles will appear in this folder")
|
|
|
.addSearch((search) => __awaiter(this, void 0, void 0, function* () {
|
|
|
new FolderSuggest(this.app, search.inputEl);
|
|
|
search
|
|
|
.setValue(this.plugin.settings.saveLocationFolder)
|
|
|
.setPlaceholder(DEFAULT_SETTINGS.saveLocationFolder)
|
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
|
yield this.plugin.writeSettings(() => ({ saveLocationFolder: value }));
|
|
|
}));
|
|
|
}));
|
|
|
}
|
|
|
const refresh = new obsidian.Setting(containerEl)
|
|
|
.setName("Refresh time")
|
|
|
.setDesc("How often should the feeds be refreshed, in minutes, use 0 to disable")
|
|
|
.addText((text) => {
|
|
|
text
|
|
|
.setPlaceholder(String(DEFAULT_SETTINGS.updateTime))
|
|
|
.setValue(String(this.plugin.settings.updateTime))
|
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
|
if (value.length === 0) {
|
|
|
new obsidian.Notice("please specify a value");
|
|
|
return;
|
|
|
}
|
|
|
if (Number(value) < 0) {
|
|
|
new obsidian.Notice("please specify a bigger value");
|
|
|
return;
|
|
|
}
|
|
|
yield this.plugin.writeSettings(() => ({ updateTime: Number(value) }));
|
|
|
}));
|
|
|
text.inputEl.setAttr("type", "number");
|
|
|
text.inputEl.setAttr("min", "1");
|
|
|
//we don't want decimal numbers.
|
|
|
text.inputEl.setAttr("onkeypress", "return event.charCode >= 48 && event.charCode <= 57");
|
|
|
});
|
|
|
refresh.addExtraButton((button) => {
|
|
|
button
|
|
|
.setIcon('reset')
|
|
|
.setTooltip('restore default')
|
|
|
.onClick(() => __awaiter(this, void 0, void 0, function* () {
|
|
|
yield this.plugin.writeSettings(() => ({
|
|
|
updateTime: DEFAULT_SETTINGS.updateTime
|
|
|
}));
|
|
|
this.display();
|
|
|
}));
|
|
|
});
|
|
|
let dateFormatSampleEl;
|
|
|
const dateFormat = new obsidian.Setting(containerEl)
|
|
|
.setName("Date format")
|
|
|
.setDesc("")
|
|
|
.addMomentFormat((format) => {
|
|
|
dateFormatSampleEl = format
|
|
|
.setDefaultFormat(DEFAULT_SETTINGS.dateFormat)
|
|
|
.setPlaceholder(DEFAULT_SETTINGS.dateFormat)
|
|
|
.setValue(this.plugin.settings.dateFormat)
|
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
|
yield this.plugin.writeSettings(() => ({ dateFormat: value }));
|
|
|
}));
|
|
|
});
|
|
|
const referenceLink = dateFormat.descEl.createEl("a");
|
|
|
referenceLink.setAttr("href", "https://momentjs.com/docs/#/displaying/format/");
|
|
|
referenceLink.setText("Syntax Reference");
|
|
|
const text = dateFormat.descEl.createDiv("text");
|
|
|
text.setText("Your current syntax looks like this: ");
|
|
|
const sampleEl = text.createSpan("sample");
|
|
|
dateFormatSampleEl.setSampleEl(sampleEl);
|
|
|
dateFormat.addExtraButton((button) => {
|
|
|
button
|
|
|
.setIcon('reset')
|
|
|
.setTooltip('restore default')
|
|
|
.onClick(() => __awaiter(this, void 0, void 0, function* () {
|
|
|
yield this.plugin.writeSettings(() => ({
|
|
|
dateFormat: DEFAULT_SETTINGS.dateFormat
|
|
|
}));
|
|
|
this.display();
|
|
|
}));
|
|
|
});
|
|
|
new obsidian.Setting(containerEl)
|
|
|
.setName("Ask for filename")
|
|
|
.setDesc("Disable to use title as filename(with invalid symbols removed)")
|
|
|
.addToggle((toggle) => {
|
|
|
return toggle
|
|
|
.setValue(this.plugin.settings.askForFilename)
|
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
|
yield this.plugin.writeSettings(() => ({
|
|
|
askForFilename: value
|
|
|
}));
|
|
|
}));
|
|
|
});
|
|
|
containerEl.createEl("h3", { text: "Filtered Folders" });
|
|
|
new obsidian.Setting(containerEl)
|
|
|
.setName("Add New")
|
|
|
.setDesc("Add new filtered folder")
|
|
|
.addButton((button) => {
|
|
|
return button
|
|
|
.setTooltip("add new filtered folder")
|
|
|
.setIcon("create-new")
|
|
|
.onClick(() => __awaiter(this, void 0, void 0, function* () {
|
|
|
const modal = new FilteredFolderModal(this.plugin);
|
|
|
modal.onClose = () => __awaiter(this, void 0, void 0, function* () {
|
|
|
if (modal.saved) {
|
|
|
if (this.plugin.settings.filtered.some(folder => folder.name === modal.name)) {
|
|
|
new obsidian.Notice("you already have a filter configured with that name");
|
|
|
return;
|
|
|
}
|
|
|
yield this.plugin.writeFiltered(() => (this.plugin.settings.filtered.concat({
|
|
|
name: modal.name,
|
|
|
filterType: modal.filterType,
|
|
|
filterContent: modal.filterContent,
|
|
|
sortOrder: modal.sortOrder
|
|
|
})));
|
|
|
this.display();
|
|
|
}
|
|
|
});
|
|
|
modal.open();
|
|
|
}));
|
|
|
});
|
|
|
const filterContainer = containerEl.createDiv("filter-container");
|
|
|
const filtersDiv = filterContainer.createDiv("filters");
|
|
|
for (const id in this.plugin.settings.filtered) {
|
|
|
const filter = this.plugin.settings.filtered[id];
|
|
|
const setting = new obsidian.Setting(filtersDiv);
|
|
|
setting.setName(filter.name);
|
|
|
setting.setDesc(filter.filterType + (filter.filterContent.length > 0) ? (" from " + filter.filterContent) : "");
|
|
|
setting
|
|
|
.addExtraButton((b) => {
|
|
|
b.setIcon("pencil")
|
|
|
.setTooltip("Edit")
|
|
|
.onClick(() => {
|
|
|
const modal = new FilteredFolderModal(this.plugin, filter);
|
|
|
const oldFilter = filter;
|
|
|
modal.onClose = () => __awaiter(this, void 0, void 0, function* () {
|
|
|
if (modal.saved) {
|
|
|
const filters = this.plugin.settings.filtered;
|
|
|
filters.remove(oldFilter);
|
|
|
filters.push({ name: modal.name, filterType: modal.filterType, filterContent: modal.filterContent, sortOrder: modal.sortOrder });
|
|
|
yield this.plugin.writeFiltered(() => (filters));
|
|
|
this.display();
|
|
|
}
|
|
|
});
|
|
|
modal.open();
|
|
|
});
|
|
|
})
|
|
|
.addExtraButton((b) => {
|
|
|
b.setIcon("trash")
|
|
|
.setTooltip("Delete")
|
|
|
.onClick(() => __awaiter(this, void 0, void 0, function* () {
|
|
|
const filters = this.plugin.settings.filtered;
|
|
|
filters.remove(filter);
|
|
|
yield this.plugin.writeFiltered(() => (filters));
|
|
|
this.display();
|
|
|
}));
|
|
|
});
|
|
|
}
|
|
|
containerEl.createEl("h3", { text: "Feeds" });
|
|
|
new obsidian.Setting(containerEl)
|
|
|
.setName("Add New")
|
|
|
.setDesc("Add a new Feed")
|
|
|
.addButton((button) => {
|
|
|
return button
|
|
|
.setTooltip("add new Feed")
|
|
|
.setIcon("create-new")
|
|
|
.onClick(() => __awaiter(this, void 0, void 0, function* () {
|
|
|
const modal = new FeedModal(this.plugin);
|
|
|
modal.onClose = () => __awaiter(this, void 0, void 0, function* () {
|
|
|
if (modal.saved) {
|
|
|
if (this.plugin.settings.feeds.some(item => item.url === modal.url)) {
|
|
|
new obsidian.Notice("you already have a feed configured with that url");
|
|
|
return;
|
|
|
}
|
|
|
yield this.plugin.writeFeeds(() => (this.plugin.settings.feeds.concat({
|
|
|
name: modal.name,
|
|
|
url: modal.url,
|
|
|
folder: modal.folder
|
|
|
})));
|
|
|
this.display();
|
|
|
}
|
|
|
});
|
|
|
modal.open();
|
|
|
}));
|
|
|
});
|
|
|
const additionalContainer = containerEl.createDiv("feed-container");
|
|
|
const feedsDiv = additionalContainer.createDiv("feeds");
|
|
|
const sorted = lodash_groupby(this.plugin.settings.feeds, "folder");
|
|
|
for (const [, feeds] of Object.entries(sorted)) {
|
|
|
for (const id in feeds) {
|
|
|
const feed = feeds[id];
|
|
|
const setting = new obsidian.Setting(feedsDiv);
|
|
|
setting.setName((feed.folder ? feed.folder : "No Folder") + " - " + feed.name);
|
|
|
setting.setDesc(feed.url);
|
|
|
setting
|
|
|
.addExtraButton((b) => {
|
|
|
b.setIcon("pencil")
|
|
|
.setTooltip("Edit")
|
|
|
.onClick(() => {
|
|
|
const modal = new FeedModal(this.plugin, feed);
|
|
|
const oldFeed = feed;
|
|
|
modal.onClose = () => __awaiter(this, void 0, void 0, function* () {
|
|
|
if (modal.saved) {
|
|
|
const feeds = this.plugin.settings.feeds;
|
|
|
feeds.remove(oldFeed);
|
|
|
feeds.push({ name: modal.name, url: modal.url, folder: modal.folder });
|
|
|
yield this.plugin.writeFeeds(() => (feeds));
|
|
|
this.display();
|
|
|
}
|
|
|
});
|
|
|
modal.open();
|
|
|
});
|
|
|
})
|
|
|
.addExtraButton((b) => {
|
|
|
b.setIcon("trash")
|
|
|
.setTooltip("Delete")
|
|
|
.onClick(() => __awaiter(this, void 0, void 0, function* () {
|
|
|
const feeds = this.plugin.settings.feeds;
|
|
|
feeds.remove(feed);
|
|
|
yield this.plugin.writeFeeds(() => (feeds));
|
|
|
this.display();
|
|
|
}));
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function noop() { }
|
|
|
function run(fn) {
|
|
|
return fn();
|
|
|
}
|
|
|
function blank_object() {
|
|
|
return Object.create(null);
|
|
|
}
|
|
|
function run_all(fns) {
|
|
|
fns.forEach(run);
|
|
|
}
|
|
|
function is_function(thing) {
|
|
|
return typeof thing === 'function';
|
|
|
}
|
|
|
function safe_not_equal(a, b) {
|
|
|
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
|
|
|
}
|
|
|
let src_url_equal_anchor;
|
|
|
function src_url_equal(element_src, url) {
|
|
|
if (!src_url_equal_anchor) {
|
|
|
src_url_equal_anchor = document.createElement('a');
|
|
|
}
|
|
|
src_url_equal_anchor.href = url;
|
|
|
return element_src === src_url_equal_anchor.href;
|
|
|
}
|
|
|
function is_empty(obj) {
|
|
|
return Object.keys(obj).length === 0;
|
|
|
}
|
|
|
function subscribe(store, ...callbacks) {
|
|
|
if (store == null) {
|
|
|
return noop;
|
|
|
}
|
|
|
const unsub = store.subscribe(...callbacks);
|
|
|
return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
|
|
|
}
|
|
|
function component_subscribe(component, store, callback) {
|
|
|
component.$$.on_destroy.push(subscribe(store, callback));
|
|
|
}
|
|
|
function action_destroyer(action_result) {
|
|
|
return action_result && is_function(action_result.destroy) ? action_result.destroy : noop;
|
|
|
}
|
|
|
function append(target, node) {
|
|
|
target.appendChild(node);
|
|
|
}
|
|
|
function insert(target, node, anchor) {
|
|
|
target.insertBefore(node, anchor || null);
|
|
|
}
|
|
|
function detach(node) {
|
|
|
node.parentNode.removeChild(node);
|
|
|
}
|
|
|
function destroy_each(iterations, detaching) {
|
|
|
for (let i = 0; i < iterations.length; i += 1) {
|
|
|
if (iterations[i])
|
|
|
iterations[i].d(detaching);
|
|
|
}
|
|
|
}
|
|
|
function element(name) {
|
|
|
return document.createElement(name);
|
|
|
}
|
|
|
function text(data) {
|
|
|
return document.createTextNode(data);
|
|
|
}
|
|
|
function space() {
|
|
|
return text(' ');
|
|
|
}
|
|
|
function empty() {
|
|
|
return text('');
|
|
|
}
|
|
|
function listen(node, event, handler, options) {
|
|
|
node.addEventListener(event, handler, options);
|
|
|
return () => node.removeEventListener(event, handler, options);
|
|
|
}
|
|
|
function attr(node, attribute, value) {
|
|
|
if (value == null)
|
|
|
node.removeAttribute(attribute);
|
|
|
else if (node.getAttribute(attribute) !== value)
|
|
|
node.setAttribute(attribute, value);
|
|
|
}
|
|
|
function children(element) {
|
|
|
return Array.from(element.childNodes);
|
|
|
}
|
|
|
function set_data(text, data) {
|
|
|
data = '' + data;
|
|
|
if (text.wholeText !== data)
|
|
|
text.data = data;
|
|
|
}
|
|
|
function set_style(node, key, value, important) {
|
|
|
node.style.setProperty(key, value, important ? 'important' : '');
|
|
|
}
|
|
|
|
|
|
let current_component;
|
|
|
function set_current_component(component) {
|
|
|
current_component = component;
|
|
|
}
|
|
|
|
|
|
const dirty_components = [];
|
|
|
const binding_callbacks = [];
|
|
|
const render_callbacks = [];
|
|
|
const flush_callbacks = [];
|
|
|
const resolved_promise = Promise.resolve();
|
|
|
let update_scheduled = false;
|
|
|
function schedule_update() {
|
|
|
if (!update_scheduled) {
|
|
|
update_scheduled = true;
|
|
|
resolved_promise.then(flush);
|
|
|
}
|
|
|
}
|
|
|
function add_render_callback(fn) {
|
|
|
render_callbacks.push(fn);
|
|
|
}
|
|
|
let flushing = false;
|
|
|
const seen_callbacks = new Set();
|
|
|
function flush() {
|
|
|
if (flushing)
|
|
|
return;
|
|
|
flushing = true;
|
|
|
do {
|
|
|
// first, call beforeUpdate functions
|
|
|
// and update components
|
|
|
for (let i = 0; i < dirty_components.length; i += 1) {
|
|
|
const component = dirty_components[i];
|
|
|
set_current_component(component);
|
|
|
update(component.$$);
|
|
|
}
|
|
|
set_current_component(null);
|
|
|
dirty_components.length = 0;
|
|
|
while (binding_callbacks.length)
|
|
|
binding_callbacks.pop()();
|
|
|
// then, once components are updated, call
|
|
|
// afterUpdate functions. This may cause
|
|
|
// subsequent updates...
|
|
|
for (let i = 0; i < render_callbacks.length; i += 1) {
|
|
|
const callback = render_callbacks[i];
|
|
|
if (!seen_callbacks.has(callback)) {
|
|
|
// ...so guard against infinite loops
|
|
|
seen_callbacks.add(callback);
|
|
|
callback();
|
|
|
}
|
|
|
}
|
|
|
render_callbacks.length = 0;
|
|
|
} while (dirty_components.length);
|
|
|
while (flush_callbacks.length) {
|
|
|
flush_callbacks.pop()();
|
|
|
}
|
|
|
update_scheduled = false;
|
|
|
flushing = false;
|
|
|
seen_callbacks.clear();
|
|
|
}
|
|
|
function update($$) {
|
|
|
if ($$.fragment !== null) {
|
|
|
$$.update();
|
|
|
run_all($$.before_update);
|
|
|
const dirty = $$.dirty;
|
|
|
$$.dirty = [-1];
|
|
|
$$.fragment && $$.fragment.p($$.ctx, dirty);
|
|
|
$$.after_update.forEach(add_render_callback);
|
|
|
}
|
|
|
}
|
|
|
const outroing = new Set();
|
|
|
let outros;
|
|
|
function group_outros() {
|
|
|
outros = {
|
|
|
r: 0,
|
|
|
c: [],
|
|
|
p: outros // parent group
|
|
|
};
|
|
|
}
|
|
|
function check_outros() {
|
|
|
if (!outros.r) {
|
|
|
run_all(outros.c);
|
|
|
}
|
|
|
outros = outros.p;
|
|
|
}
|
|
|
function transition_in(block, local) {
|
|
|
if (block && block.i) {
|
|
|
outroing.delete(block);
|
|
|
block.i(local);
|
|
|
}
|
|
|
}
|
|
|
function transition_out(block, local, detach, callback) {
|
|
|
if (block && block.o) {
|
|
|
if (outroing.has(block))
|
|
|
return;
|
|
|
outroing.add(block);
|
|
|
outros.c.push(() => {
|
|
|
outroing.delete(block);
|
|
|
if (callback) {
|
|
|
if (detach)
|
|
|
block.d(1);
|
|
|
callback();
|
|
|
}
|
|
|
});
|
|
|
block.o(local);
|
|
|
}
|
|
|
}
|
|
|
function create_component(block) {
|
|
|
block && block.c();
|
|
|
}
|
|
|
function mount_component(component, target, anchor, customElement) {
|
|
|
const { fragment, on_mount, on_destroy, after_update } = component.$$;
|
|
|
fragment && fragment.m(target, anchor);
|
|
|
if (!customElement) {
|
|
|
// onMount happens before the initial afterUpdate
|
|
|
add_render_callback(() => {
|
|
|
const new_on_destroy = on_mount.map(run).filter(is_function);
|
|
|
if (on_destroy) {
|
|
|
on_destroy.push(...new_on_destroy);
|
|
|
}
|
|
|
else {
|
|
|
// Edge case - component was destroyed immediately,
|
|
|
// most likely as a result of a binding initialising
|
|
|
run_all(new_on_destroy);
|
|
|
}
|
|
|
component.$$.on_mount = [];
|
|
|
});
|
|
|
}
|
|
|
after_update.forEach(add_render_callback);
|
|
|
}
|
|
|
function destroy_component(component, detaching) {
|
|
|
const $$ = component.$$;
|
|
|
if ($$.fragment !== null) {
|
|
|
run_all($$.on_destroy);
|
|
|
$$.fragment && $$.fragment.d(detaching);
|
|
|
// TODO null out other refs, including component.$$ (but need to
|
|
|
// preserve final state?)
|
|
|
$$.on_destroy = $$.fragment = null;
|
|
|
$$.ctx = [];
|
|
|
}
|
|
|
}
|
|
|
function make_dirty(component, i) {
|
|
|
if (component.$$.dirty[0] === -1) {
|
|
|
dirty_components.push(component);
|
|
|
schedule_update();
|
|
|
component.$$.dirty.fill(0);
|
|
|
}
|
|
|
component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));
|
|
|
}
|
|
|
function init(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) {
|
|
|
const parent_component = current_component;
|
|
|
set_current_component(component);
|
|
|
const $$ = component.$$ = {
|
|
|
fragment: null,
|
|
|
ctx: null,
|
|
|
// state
|
|
|
props,
|
|
|
update: noop,
|
|
|
not_equal,
|
|
|
bound: blank_object(),
|
|
|
// lifecycle
|
|
|
on_mount: [],
|
|
|
on_destroy: [],
|
|
|
on_disconnect: [],
|
|
|
before_update: [],
|
|
|
after_update: [],
|
|
|
context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),
|
|
|
// everything else
|
|
|
callbacks: blank_object(),
|
|
|
dirty,
|
|
|
skip_bound: false,
|
|
|
root: options.target || parent_component.$$.root
|
|
|
};
|
|
|
append_styles && append_styles($$.root);
|
|
|
let ready = false;
|
|
|
$$.ctx = instance
|
|
|
? instance(component, options.props || {}, (i, ret, ...rest) => {
|
|
|
const value = rest.length ? rest[0] : ret;
|
|
|
if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {
|
|
|
if (!$$.skip_bound && $$.bound[i])
|
|
|
$$.bound[i](value);
|
|
|
if (ready)
|
|
|
make_dirty(component, i);
|
|
|
}
|
|
|
return ret;
|
|
|
})
|
|
|
: [];
|
|
|
$$.update();
|
|
|
ready = true;
|
|
|
run_all($$.before_update);
|
|
|
// `false` as a special case of no DOM component
|
|
|
$$.fragment = create_fragment ? create_fragment($$.ctx) : false;
|
|
|
if (options.target) {
|
|
|
if (options.hydrate) {
|
|
|
const nodes = children(options.target);
|
|
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
|
$$.fragment && $$.fragment.l(nodes);
|
|
|
nodes.forEach(detach);
|
|
|
}
|
|
|
else {
|
|
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
|
$$.fragment && $$.fragment.c();
|
|
|
}
|
|
|
if (options.intro)
|
|
|
transition_in(component.$$.fragment);
|
|
|
mount_component(component, options.target, options.anchor, options.customElement);
|
|
|
flush();
|
|
|
}
|
|
|
set_current_component(parent_component);
|
|
|
}
|
|
|
/**
|
|
|
* Base class for Svelte components. Used when dev=false.
|
|
|
*/
|
|
|
class SvelteComponent {
|
|
|
$destroy() {
|
|
|
destroy_component(this, 1);
|
|
|
this.$destroy = noop;
|
|
|
}
|
|
|
$on(type, callback) {
|
|
|
const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));
|
|
|
callbacks.push(callback);
|
|
|
return () => {
|
|
|
const index = callbacks.indexOf(callback);
|
|
|
if (index !== -1)
|
|
|
callbacks.splice(index, 1);
|
|
|
};
|
|
|
}
|
|
|
$set($$props) {
|
|
|
if (this.$$set && !is_empty($$props)) {
|
|
|
this.$$.skip_bound = true;
|
|
|
this.$$set($$props);
|
|
|
this.$$.skip_bound = false;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
const subscriber_queue = [];
|
|
|
/**
|
|
|
* Create a `Writable` store that allows both updating and reading by subscription.
|
|
|
* @param {*=}value initial value
|
|
|
* @param {StartStopNotifier=}start start and stop notifications for subscriptions
|
|
|
*/
|
|
|
function writable(value, start = noop) {
|
|
|
let stop;
|
|
|
const subscribers = new Set();
|
|
|
function set(new_value) {
|
|
|
if (safe_not_equal(value, new_value)) {
|
|
|
value = new_value;
|
|
|
if (stop) { // store is ready
|
|
|
const run_queue = !subscriber_queue.length;
|
|
|
for (const subscriber of subscribers) {
|
|
|
subscriber[1]();
|
|
|
subscriber_queue.push(subscriber, value);
|
|
|
}
|
|
|
if (run_queue) {
|
|
|
for (let i = 0; i < subscriber_queue.length; i += 2) {
|
|
|
subscriber_queue[i][0](subscriber_queue[i + 1]);
|
|
|
}
|
|
|
subscriber_queue.length = 0;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function update(fn) {
|
|
|
set(fn(value));
|
|
|
}
|
|
|
function subscribe(run, invalidate = noop) {
|
|
|
const subscriber = [run, invalidate];
|
|
|
subscribers.add(subscriber);
|
|
|
if (subscribers.size === 1) {
|
|
|
stop = start(set) || noop;
|
|
|
}
|
|
|
run(value);
|
|
|
return () => {
|
|
|
subscribers.delete(subscriber);
|
|
|
if (subscribers.size === 0) {
|
|
|
stop();
|
|
|
stop = null;
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
return { set, update, subscribe };
|
|
|
}
|
|
|
|
|
|
const configuredFeedsStore = writable([]);
|
|
|
const filteredStore = writable([]);
|
|
|
const settingsStore = writable(DEFAULT_SETTINGS);
|
|
|
const feedsStore = writable([]);
|
|
|
const sortedFeedsStore = writable();
|
|
|
const filteredItemsStore = writable();
|
|
|
|
|
|
/* src/view/IconComponent.svelte generated by Svelte v3.44.2 */
|
|
|
|
|
|
function create_if_block$4(ctx) {
|
|
|
let span;
|
|
|
let icon_action;
|
|
|
let mounted;
|
|
|
let dispose;
|
|
|
|
|
|
return {
|
|
|
c() {
|
|
|
span = element("span");
|
|
|
},
|
|
|
m(target, anchor) {
|
|
|
insert(target, span, anchor);
|
|
|
|
|
|
if (!mounted) {
|
|
|
dispose = action_destroyer(icon_action = /*icon*/ ctx[1].call(null, span, /*iconName*/ ctx[0]));
|
|
|
mounted = true;
|
|
|
}
|
|
|
},
|
|
|
p(ctx, dirty) {
|
|
|
if (icon_action && is_function(icon_action.update) && dirty & /*iconName*/ 1) icon_action.update.call(null, /*iconName*/ ctx[0]);
|
|
|
},
|
|
|
d(detaching) {
|
|
|
if (detaching) detach(span);
|
|
|
mounted = false;
|
|
|
dispose();
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function create_fragment$4(ctx) {
|
|
|
let if_block_anchor;
|
|
|
let if_block = /*iconName*/ ctx[0].length > 0 && create_if_block$4(ctx);
|
|
|
|
|
|
return {
|
|
|
c() {
|
|
|
if (if_block) if_block.c();
|
|
|
if_block_anchor = empty();
|
|
|
},
|
|
|
m(target, anchor) {
|
|
|
if (if_block) if_block.m(target, anchor);
|
|
|
insert(target, if_block_anchor, anchor);
|
|
|
},
|
|
|
p(ctx, [dirty]) {
|
|
|
if (/*iconName*/ ctx[0].length > 0) {
|
|
|
if (if_block) {
|
|
|
if_block.p(ctx, dirty);
|
|
|
} else {
|
|
|
if_block = create_if_block$4(ctx);
|
|
|
if_block.c();
|
|
|
if_block.m(if_block_anchor.parentNode, if_block_anchor);
|
|
|
}
|
|
|
} else if (if_block) {
|
|
|
if_block.d(1);
|
|
|
if_block = null;
|
|
|
}
|
|
|
},
|
|
|
i: noop,
|
|
|
o: noop,
|
|
|
d(detaching) {
|
|
|
if (if_block) if_block.d(detaching);
|
|
|
if (detaching) detach(if_block_anchor);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function instance$4($$self, $$props, $$invalidate) {
|
|
|
let { iconName = "" } = $$props;
|
|
|
|
|
|
const icon = (node, icon) => {
|
|
|
obsidian.setIcon(node, icon);
|
|
|
};
|
|
|
|
|
|
$$self.$$set = $$props => {
|
|
|
if ('iconName' in $$props) $$invalidate(0, iconName = $$props.iconName);
|
|
|
};
|
|
|
|
|
|
return [iconName, icon];
|
|
|
}
|
|
|
|
|
|
class IconComponent extends SvelteComponent {
|
|
|
constructor(options) {
|
|
|
super();
|
|
|
init(this, options, instance$4, create_fragment$4, safe_not_equal, { iconName: 0 });
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//slightly modified version from https://github.com/zsviczian/obsidian-excalidraw-plugin
|
|
|
class TextInputPrompt extends BaseModal {
|
|
|
constructor(app, promptText, hint, defaultValue, placeholder) {
|
|
|
super(app);
|
|
|
this.promptText = promptText;
|
|
|
this.hint = hint;
|
|
|
this.defaultValue = defaultValue;
|
|
|
this.placeholder = placeholder;
|
|
|
}
|
|
|
onOpen() {
|
|
|
this.titleEl.setText(this.promptText);
|
|
|
this.createForm();
|
|
|
}
|
|
|
onClose() {
|
|
|
this.contentEl.empty();
|
|
|
}
|
|
|
createForm() {
|
|
|
const div = this.contentEl.createDiv();
|
|
|
const text = new obsidian.Setting(div).setName(this.promptText).setDesc(this.hint).addText((textComponent) => {
|
|
|
textComponent
|
|
|
.setValue(this.defaultValue)
|
|
|
.setPlaceholder(this.placeholder)
|
|
|
.onChange(() => {
|
|
|
this.removeValidationError(textComponent);
|
|
|
})
|
|
|
.inputEl.setAttribute("size", "50");
|
|
|
this.textComponent = textComponent;
|
|
|
});
|
|
|
text.controlEl.addClass("rss-setting-input");
|
|
|
new obsidian.Setting(div).addButton((b) => {
|
|
|
b
|
|
|
.setButtonText("Save")
|
|
|
.onClick(() => __awaiter(this, void 0, void 0, function* () {
|
|
|
this.resolve(this.textComponent);
|
|
|
}));
|
|
|
return b;
|
|
|
});
|
|
|
}
|
|
|
openAndGetValue(resolve) {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
this.resolve = resolve;
|
|
|
yield this.open();
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var feather = createCommonjsModule(function (module, exports) {
|
|
|
(function webpackUniversalModuleDefinition(root, factory) {
|
|
|
module.exports = factory();
|
|
|
})(typeof self !== 'undefined' ? self : commonjsGlobal, function() {
|
|
|
return /******/ (function(modules) { // webpackBootstrap
|
|
|
/******/ // The module cache
|
|
|
/******/ var installedModules = {};
|
|
|
/******/
|
|
|
/******/ // The require function
|
|
|
/******/ function __webpack_require__(moduleId) {
|
|
|
/******/
|
|
|
/******/ // Check if module is in cache
|
|
|
/******/ if(installedModules[moduleId]) {
|
|
|
/******/ return installedModules[moduleId].exports;
|
|
|
/******/ }
|
|
|
/******/ // Create a new module (and put it into the cache)
|
|
|
/******/ var module = installedModules[moduleId] = {
|
|
|
/******/ i: moduleId,
|
|
|
/******/ l: false,
|
|
|
/******/ exports: {}
|
|
|
/******/ };
|
|
|
/******/
|
|
|
/******/ // Execute the module function
|
|
|
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
|
|
/******/
|
|
|
/******/ // Flag the module as loaded
|
|
|
/******/ module.l = true;
|
|
|
/******/
|
|
|
/******/ // Return the exports of the module
|
|
|
/******/ return module.exports;
|
|
|
/******/ }
|
|
|
/******/
|
|
|
/******/
|
|
|
/******/ // expose the modules object (__webpack_modules__)
|
|
|
/******/ __webpack_require__.m = modules;
|
|
|
/******/
|
|
|
/******/ // expose the module cache
|
|
|
/******/ __webpack_require__.c = installedModules;
|
|
|
/******/
|
|
|
/******/ // define getter function for harmony exports
|
|
|
/******/ __webpack_require__.d = function(exports, name, getter) {
|
|
|
/******/ if(!__webpack_require__.o(exports, name)) {
|
|
|
/******/ Object.defineProperty(exports, name, {
|
|
|
/******/ configurable: false,
|
|
|
/******/ enumerable: true,
|
|
|
/******/ get: getter
|
|
|
/******/ });
|
|
|
/******/ }
|
|
|
/******/ };
|
|
|
/******/
|
|
|
/******/ // define __esModule on exports
|
|
|
/******/ __webpack_require__.r = function(exports) {
|
|
|
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
/******/ };
|
|
|
/******/
|
|
|
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
|
/******/ __webpack_require__.n = function(module) {
|
|
|
/******/ var getter = module && module.__esModule ?
|
|
|
/******/ function getDefault() { return module['default']; } :
|
|
|
/******/ function getModuleExports() { return module; };
|
|
|
/******/ __webpack_require__.d(getter, 'a', getter);
|
|
|
/******/ return getter;
|
|
|
/******/ };
|
|
|
/******/
|
|
|
/******/ // Object.prototype.hasOwnProperty.call
|
|
|
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
|
|
/******/
|
|
|
/******/ // __webpack_public_path__
|
|
|
/******/ __webpack_require__.p = "";
|
|
|
/******/
|
|
|
/******/
|
|
|
/******/ // Load entry module and return exports
|
|
|
/******/ return __webpack_require__(__webpack_require__.s = 0);
|
|
|
/******/ })
|
|
|
/************************************************************************/
|
|
|
/******/ ({
|
|
|
|
|
|
/***/ "./dist/icons.json":
|
|
|
/*!*************************!*\
|
|
|
!*** ./dist/icons.json ***!
|
|
|
\*************************/
|
|
|
/*! exports provided: activity, airplay, alert-circle, alert-octagon, alert-triangle, align-center, align-justify, align-left, align-right, anchor, aperture, archive, arrow-down-circle, arrow-down-left, arrow-down-right, arrow-down, arrow-left-circle, arrow-left, arrow-right-circle, arrow-right, arrow-up-circle, arrow-up-left, arrow-up-right, arrow-up, at-sign, award, bar-chart-2, bar-chart, battery-charging, battery, bell-off, bell, bluetooth, bold, book-open, book, bookmark, box, briefcase, calendar, camera-off, camera, cast, check-circle, check-square, check, chevron-down, chevron-left, chevron-right, chevron-up, chevrons-down, chevrons-left, chevrons-right, chevrons-up, chrome, circle, clipboard, clock, cloud-drizzle, cloud-lightning, cloud-off, cloud-rain, cloud-snow, cloud, code, codepen, codesandbox, coffee, columns, command, compass, copy, corner-down-left, corner-down-right, corner-left-down, corner-left-up, corner-right-down, corner-right-up, corner-up-left, corner-up-right, cpu, credit-card, crop, crosshair, database, delete, disc, divide-circle, divide-square, divide, dollar-sign, download-cloud, download, dribbble, droplet, edit-2, edit-3, edit, external-link, eye-off, eye, facebook, fast-forward, feather, figma, file-minus, file-plus, file-text, file, film, filter, flag, folder-minus, folder-plus, folder, framer, frown, gift, git-branch, git-commit, git-merge, git-pull-request, github, gitlab, globe, grid, hard-drive, hash, headphones, heart, help-circle, hexagon, home, image, inbox, info, instagram, italic, key, layers, layout, life-buoy, link-2, link, linkedin, list, loader, lock, log-in, log-out, mail, map-pin, map, maximize-2, maximize, meh, menu, message-circle, message-square, mic-off, mic, minimize-2, minimize, minus-circle, minus-square, minus, monitor, moon, more-horizontal, more-vertical, mouse-pointer, move, music, navigation-2, navigation, octagon, package, paperclip, pause-circle, pause, pen-tool, percent, phone-call, phone-forwarded, phone-incoming, phone-missed, phone-off, phone-outgoing, phone, pie-chart, play-circle, play, plus-circle, plus-square, plus, pocket, power, printer, radio, refresh-ccw, refresh-cw, repeat, rewind, rotate-ccw, rotate-cw, rss, save, scissors, search, send, server, settings, share-2, share, shield-off, shield, shopping-bag, shopping-cart, shuffle, sidebar, skip-back, skip-forward, slack, slash, sliders, smartphone, smile, speaker, square, star, stop-circle, sun, sunrise, sunset, tablet, tag, target, terminal, thermometer, thumbs-down, thumbs-up, toggle-left, toggle-right, tool, trash-2, trash, trello, trending-down, trending-up, triangle, truck, tv, twitch, twitter, type, umbrella, underline, unlock, upload-cloud, upload, user-check, user-minus, user-plus, user-x, user, users, video-off, video, voicemail, volume-1, volume-2, volume-x, volume, watch, wifi-off, wifi, wind, x-circle, x-octagon, x-square, x, youtube, zap-off, zap, zoom-in, zoom-out, default */
|
|
|
/***/ (function(module) {
|
|
|
|
|
|
module.exports = {"activity":"<polyline points=\"22 12 18 12 15 21 9 3 6 12 2 12\"></polyline>","airplay":"<path d=\"M5 17H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-1\"></path><polygon points=\"12 15 17 21 7 21 12 15\"></polygon>","alert-circle":"<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line>","alert-octagon":"<polygon points=\"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2\"></polygon><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line>","alert-triangle":"<path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"></path><line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"></line><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"></line>","align-center":"<line x1=\"18\" y1=\"10\" x2=\"6\" y2=\"10\"></line><line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\"></line><line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\"></line><line x1=\"18\" y1=\"18\" x2=\"6\" y2=\"18\"></line>","align-justify":"<line x1=\"21\" y1=\"10\" x2=\"3\" y2=\"10\"></line><line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\"></line><line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\"></line><line x1=\"21\" y1=\"18\" x2=\"3\" y2=\"18\"></line>","align-left":"<line x1=\"17\" y1=\"10\" x2=\"3\" y2=\"10\"></line><line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\"></line><line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\"></line><line x1=\"17\" y1=\"18\" x2=\"3\" y2=\"18\"></line>","align-right":"<line x1=\"21\" y1=\"10\" x2=\"7\" y2=\"10\"></line><line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\"></line><line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\"></line><line x1=\"21\" y1=\"18\" x2=\"7\" y2=\"18\"></line>","anchor":"<circle cx=\"12\" cy=\"5\" r=\"3\"></circle><line x1=\"12\" y1=\"22\" x2=\"12\" y2=\"8\"></line><path d=\"M5 12H2a10 10 0 0 0 20 0h-3\"></path>","aperture":"<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"14.31\" y1=\"8\" x2=\"20.05\" y2=\"17.94\"></line><line x1=\"9.69\" y1=\"8\" x2=\"21.17\" y2=\"8\"></line><line x1=\"7.38\" y1=\"12\" x2=\"13.12\" y2=\"2.06\"></line><line x1=\"9.69\" y1=\"16\" x2=\"3.95\" y2=\"6.06\"></line><line x1=\"14.31\" y1=\"16\" x2=\"2.83\" y2=\"16\"></line><line x1=\"16.62\" y1=\"12\" x2=\"10.88\" y2=\"21.94\"></line>","archive":"<polyline points=\"21 8 21 21 3 21 3 8\"></polyline><rect x=\"1\" y=\"3\" width=\"22\" height=\"5\"></rect><line x1=\"10\" y1=\"12\" x2=\"14\" y2=\"12\"></line>","arrow-down-circle":"<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><polyline points=\"8 12 12 16 16 12\"></polyline><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"16\"></line>","arrow-down-left":"<line x1=\"17\" y1=\"7\" x2=\"7\" y2=\"17\"></line><polyline points=\"17 17 7 17 7 7\"></polyline>","arrow-down-right":"<line x1=\"7\" y1=\"7\" x2=\"17\" y2=\"17\"></line><polyline points=\"17 7 17 17 7 17\"></polyline>","arrow-down":"<line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line><polyline points=\"19 12 12 19 5 12\"></polyline>","arrow-left-circle":"<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><polyline points=\"12 8 8 12 12 16\"></polyline><line x1=\"16\" y1=\"12\" x2=\"8\" y2=\"12\"></line>","arrow-left":"<line x1=\"19\" y1=\"12\" x2=\"5\" y2=\"12\"></line><polyline points=\"12 19 5 12 12 5\"></polyline>","arrow-right-circle":"<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><polyline points=\"12 16 16 12 12 8\"></polyline><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line>","arrow-right":"<line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line><polyline points=\"12 5 19 12 12 19\"></polyline>","arrow-up-circle":"<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><polyline points=\"16 12 12 8 8 12\"></polyline><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"8\"></line>","arrow-up-left":"<line x1=\"17\" y1=\"17\" x2=\"7\" y2=\"7\"></line><polyline points=\"7 17 7 7 17 7\"></polyline>","arrow-up-right":"<line x1=\"7\" y1=\"17\" x2=\"17\" y2=\"7\"></line><polyline points=\"7 7 17 7 17 17\"></polyline>","arrow-up":"<line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"5\"></line><polyline points=\"5 12 12 5 19 12\"></polyline>","at-sign":"<circle cx=\"12\" cy=\"12\" r=\"4\"></circle><path d=\"M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-3.92 7.94\"></path>","award":"<circle cx=\"12\" cy=\"8\" r=\"7\"></circle><polyline points=\"8.21 13.89 7 23 12 20 17 23 15.79 13.88\"></polyline>","bar-chart-2":"<line x1=\"18\" y1=\"20\" x2=\"18\" y2=\"10\"></line><line x1=\"12\" y1=\"20\" x2=\"12\" y2=\"4\"></line><line x1=\"6\" y1=\"20\" x2=\"6\" y2=\"14\"></line>","bar-chart":"<line x1=\"12\" y1=\"20\" x2=\"12\" y2=\"10\"></line><line x1=\"18\" y1=\"20\" x2=\"18\" y2=\"4\"></line><line x1=\"6\" y1=\"20\" x2=\"6\" y2=\"16\"></line>","battery-charging":"<path d=\"M5 18H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h3.19M15 6h2a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-3.19\"></path><line x1=\"23\" y1=\"13\" x2=\"23\" y2=\"11\"></line><polyline points=\"11 6 7 12 13 12 9 18\"></polyline>","battery":"<rect x=\"1\" y=\"6\" width=\"18\" height=\"12\" rx=\"2\" ry=\"2\"></rect><line x1=\"23\" y1=\"13\" x2=\"23\" y2=\"11\"></line>","bell-off":"<path d=\"M13.73 21a2 2 0 0 1-3.46 0\"></path><path d=\"M18.63 13A17.89 17.89 0 0 1 18 8\"></path><path d=\"M6.26 6.26A5.86 5.86 0 0 0 6 8c0 7-3 9-3 9h14\"></path><path d=\"M18 8a6 6 0 0 0-9.33-5\"></path><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line>","bell":"<path d=\"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9\"></path><path d=\"M13.73 21a2 2 0 0 1-3.46 0\"></path>","bluetooth":"<polyline points=\"6.5 6.5 17.5 17.5 12 23 12 1 17.5 6.5 6.5 17.5\"></polyline>","bold":"<path d=\"M6 4h8a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z\"></path><path d=\"M6 12h9a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z\"></path>","book-open":"<path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\"></path><path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\"></path>","book":"<path d=\"M4 19.5A2.5 2.5 0 0 1 6.5 17H20\"></path><path d=\"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z\"></path>","bookmark":"<path d=\"M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z\"></path>","box":"<path d=\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\"></path><polyline points=\"3.27 6.96 12 12.01 20.73 6.96\"></polyline><line x1=\"12\" y1=\"22.08\" x2=\"12\" y2=\"12\"></line>","briefcase":"<rect x=\"2\" y=\"7\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"></rect><path d=\"M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16\"></path>","calendar":"<rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"></line><line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"></line><line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>","camera-off":"<line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line><path d=\"M21 21H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h3m3-3h6l2 3h4a2 2 0 0 1 2 2v9.34m-7.72-2.06a4 4 0 1 1-5.56-5.56\"></path>","camera":"<path d=\"M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z\"></path><circle cx=\"12\" cy=\"13\" r=\"4\"></circle>","cast":"<path d=\"M2 16.1A5 5 0 0 1 5.9 20M2 12.05A9 9 0 0 1 9.95 20M2 8V6a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-6\"></path><line x1=\"2\" y1=\"20\" x2=\"2.01\" y2=\"20\"></line>","check-circle":"<path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\"></path><polyline points=\"22 4 12 14.01 9 11.01\"></polyline>","check-square":"<polyline points=\"9 11 12 14 22 4\"></polyline><path d=\"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11\"></path>","check":"<polyline points=\"20 6 9 17 4 12\"></polyline>","chevron-down":"<polyline points=\"6 9 12 15 18 9\"></polyline>","chevron-left":"<polyline points=\"15 18 9 12 15 6\"></polyline>","chevron-right":"<polyline points=\"9 18 15 12 9 6\"></polyline>","chevron-up":"<polyline points=\"18 15 12 9 6 15\"></polyline>","chevrons-down":"<polyline points=\"7 13 12 18 17 13\"></polyline><polyline points=\"7 6 12 11 17 6\"></polyline>","chevrons-left":"<polyline points=\"11 17 6 12 11 7\"></polyline><polyline points=\"18 17 13 12 18 7\"></polyline>","chevrons-right":"<polyline points=\"13 17 18 12 13 7\"></polyline><polyline points=\"6 17 11 12 6 7\"></polyline>","chevrons-up":"<polyline points=\"17 11 12 6 7 11\"></polyline><polyline points=\"17 18 12 13 7 18\"></polyline>","chrome":"<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><circle cx=\"12\" cy=\"12\" r=\"4\"></circle><line x1=\"21.17\" y1=\"8\" x2=\"12\" y2=\"8\"></line><line x1=\"3.95\" y1=\"6.06\" x2=\"8.54\" y2=\"14\"></line><line x1=\"10.88\" y1=\"21.94\" x2=\"15.46\" y2=\"14\"></line>","circle":"<circle cx=\"12\" cy=\"12\" r=\"10\"></circle>","clipboard":"<path d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\"></path><rect x=\"8\" y=\"2\" width=\"8\" height=\"4\" rx=\"1\" ry=\"1\"></rect>","clock":"<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><polyline points=\"12 6 12 12 16 14\"></polyline>","cloud-drizzle":"<line x1=\"8\" y1=\"19\" x2=\"8\" y2=\"21\"></line><line x1=\"8\" y1=\"13\" x2=\"8\" y2=\"15\"></line><line x1=\"16\" y1=\"19\" x2=\"16\" y2=\"21\"></line><line x1=\"16\" y1=\"13\" x2=\"16\" y2=\"15\"></line><line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"23\"></line><line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"17\"></line><path d=\"M20 16.58A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 4 15.25\"></path>","cloud-lightning":"<path d=\"M19 16.9A5 5 0 0 0 18 7h-1.26a8 8 0 1 0-11.62 9\"></path><polyline points=\"13 11 9 17 15 17 11 23\"></polyline>","cloud-off":"<path d=\"M22.61 16.95A5 5 0 0 0 18 10h-1.26a8 8 0 0 0-7.05-6M5 5a8 8 0 0 0 4 15h9a5 5 0 0 0 1.7-.3\"></path><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line>","cloud-rain":"<line x1=\"16\" y1=\"13\" x2=\"16\" y2=\"21\"></line><line x1=\"8\" y1=\"13\" x2=\"8\" y2=\"21\"></line><line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"23\"></line><path d=\"M20 16.58A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 4 15.25\"></path>","cloud-snow":"<path d=\"M20 17.58A5 5 0 0 0 18 8h-1.26A8 8 0 1 0 4 16.25\"></path><line x1=\"8\" y1=\"16\" x2=\"8.01\" y2=\"16\"></line><line x1=\"8\" y1=\"20\" x2=\"8.01\" y2=\"20\"></line><line x1=\"12\" y1=\"18\" x2=\"12.01\" y2=\"18\"></line><line x1=\"12\" y1=\"22\" x2=\"12.01\" y2=\"22\"></line><line x1=\"16\" y1=\"16\" x2=\"16.01\" y2=\"16\"></line><line x1=\"16\" y1=\"20\" x2=\"16.01\" y2=\"20\"></line>","cloud":"<path d=\"M18 10h-1.26A8 8 0 1 0 9 20h9a5 5 0 0 0 0-10z\"></path>","code":"<polyline points=\"16 18 22 12 16 6\"></polyline><polyline points=\"8 6 2 12 8 18\"></polyline>","codepen":"<polygon points=\"12 2 22 8.5 22 15.5 12 22 2 15.5 2 8.5 12 2\"></polygon><line x1=\"12\" y1=\"22\" x2=\"12\" y2=\"15.5\"></line><polyline points=\"22 8.5 12 15.5 2 8.5\"></polyline><polyline points=\"2 15.5 12 8.5 22 15.5\"></polyline><line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"8.5\"></line>","codesandbox":"<path d=\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\"></path><polyline points=\"7.5 4.21 12 6.81 16.5 4.21\"></polyline><polyline points=\"7.5 19.79 7.5 14.6 3 12\"></polyline><polyline points=\"21 12 16.5 14.6 16.5 19.79\"></polyline><polyline points=\"3.27 6.96 12 12.01 20.73 6.96\"></polyline><line x1=\"12\" y1=\"22.08\" x2=\"12\" y2=\"12\"></line>","coffee":"<path d=\"M18 8h1a4 4 0 0 1 0 8h-1\"></path><path d=\"M2 8h16v9a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4V8z\"></path><line x1=\"6\" y1=\"1\" x2=\"6\" y2=\"4\"></line><line x1=\"10\" y1=\"1\" x2=\"10\" y2=\"4\"></line><line x1=\"14\" y1=\"1\" x2=\"14\" y2=\"4\"></line>","columns":"<path d=\"M12 3h7a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-7m0-18H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h7m0-18v18\"></path>","command":"<path d=\"M18 3a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3H6a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3V6a3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3h12a3 3 0 0 0 3-3 3 3 0 0 0-3-3z\"></path>","compass":"<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><polygon points=\"16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76\"></polygon>","copy":"<rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"></rect><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"></path>","corner-down-left":"<polyline points=\"9 10 4 15 9 20\"></polyline><path d=\"M20 4v7a4 4 0 0 1-4 4H4\"></path>","corner-down-right":"<polyline points=\"15 10 20 15 15 20\"></polyline><path d=\"M4 4v7a4 4 0 0 0 4 4h12\"></path>","corner-left-down":"<polyline points=\"14 15 9 20 4 15\"></polyline><path d=\"M20 4h-7a4 4 0 0 0-4 4v12\"></path>","corner-left-up":"<polyline points=\"14 9 9 4 4 9\"></polyline><path d=\"M20 20h-7a4 4 0 0 1-4-4V4\"></path>","corner-right-down":"<polyline points=\"10 15 15 20 20 15\"></polyline><path d=\"M4 4h7a4 4 0 0 1 4 4v12\"></path>","corner-right-up":"<polyline points=\"10 9 15 4 20 9\"></polyline><path d=\"M4 20h7a4 4 0 0 0 4-4V4\"></path>","corner-up-left":"<polyline points=\"9 14 4 9 9 4\"></polyline><path d=\"M20 20v-7a4 4 0 0 0-4-4H4\"></path>","corner-up-right":"<polyline points=\"15 14 20 9 15 4\"></polyline><path d=\"M4 20v-7a4 4 0 0 1 4-4h12\"></path>","cpu":"<rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\" ry=\"2\"></rect><rect x=\"9\" y=\"9\" width=\"6\" height=\"6\"></rect><line x1=\"9\" y1=\"1\" x2=\"9\" y2=\"4\"></line><line x1=\"15\" y1=\"1\" x2=\"15\" y2=\"4\"></line><line x1=\"9\" y1=\"20\" x2=\"9\" y2=\"23\"></line><line x1=\"15\" y1=\"20\" x2=\"15\" y2=\"23\"></line><line x1=\"20\" y1=\"9\" x2=\"23\" y2=\"9\"></line><line x1=\"20\" y1=\"14\" x2=\"23\" y2=\"14\"></line><line x1=\"1\" y1=\"9\" x2=\"4\" y2=\"9\"></line><line x1=\"1\" y1=\"14\" x2=\"4\" y2=\"14\"></line>","credit-card":"<rect x=\"1\" y=\"4\" width=\"22\" height=\"16\" rx=\"2\" ry=\"2\"></rect><line x1=\"1\" y1=\"10\" x2=\"23\" y2=\"10\"></line>","crop":"<path d=\"M6.13 1L6 16a2 2 0 0 0 2 2h15\"></path><path d=\"M1 6.13L16 6a2 2 0 0 1 2 2v15\"></path>","crosshair":"<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"22\" y1=\"12\" x2=\"18\" y2=\"12\"></line><line x1=\"6\" y1=\"12\" x2=\"2\" y2=\"12\"></line><line x1=\"12\" y1=\"6\" x2=\"12\" y2=\"2\"></line><line x1=\"12\" y1=\"22\" x2=\"12\" y2=\"18\"></line>","database":"<ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\"></ellipse><path d=\"M21 12c0 1.66-4 3-9 3s-9-1.34-9-3\"></path><path d=\"M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5\"></path>","delete":"<path d=\"M21 4H8l-7 8 7 8h13a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2z\"></path><line x1=\"18\" y1=\"9\" x2=\"12\" y2=\"15\"></line><line x1=\"12\" y1=\"9\" x2=\"18\" y2=\"15\"></line>","disc":"<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><circle cx=\"12\" cy=\"12\" r=\"3\"></circle>","divide-circle":"<line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"16\"></line><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"8\"></line><circle cx=\"12\" cy=\"12\" r=\"10\"></circle>","divide-square":"<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"16\"></line><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"8\"></line>","divide":"<circle cx=\"12\" cy=\"6\" r=\"2\"></circle><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line><circle cx=\"12\" cy=\"18\" r=\"2\"></circle>","dollar-sign":"<line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"23\"></line><path d=\"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6\"></path>","download-cloud":"<polyline points=\"8 17 12 21 16 17\"></polyline><line x1=\"12\" y1=\"12\" x2=\"12\" y2=\"21\"></line><path d=\"M20.88 18.09A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.29\"></path>","download":"<path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path><polyline points=\"7 10 12 15 17 10\"></polyline><line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"></line>","dribbble":"<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><path d=\"M8.56 2.75c4.37 6.03 6.02 9.42 8.03 17.72m2.54-15.38c-3.72 4.35-8.94 5.66-16.88 5.85m19.5 1.9c-3.5-.93-6.63-.82-8.94 0-2.58.92-5.01 2.86-7.44 6.32\"></path>","droplet":"<path d=\"M12 2.69l5.66 5.66a8 8 0 1 1-11.31 0z\"></path>","edit-2":"<path d=\"M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z\"></path>","edit-3":"<path d=\"M12 20h9\"></path><path d=\"M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z\"></path>","edit":"<path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"></path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"></path>","external-link":"<path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"></path><polyline points=\"15 3 21 3 21 9\"></polyline><line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\"></line>","eye-off":"<path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"></path><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line>","eye":"<path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"></path><circle cx=\"12\" cy=\"12\" r=\"3\"></circle>","facebook":"<path d=\"M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z\"></path>","fast-forward":"<polygon points=\"13 19 22 12 13 5 13 19\"></polygon><polygon points=\"2 19 11 12 2 5 2 19\"></polygon>","feather":"<path d=\"M20.24 12.24a6 6 0 0 0-8.49-8.49L5 10.5V19h8.5z\"></path><line x1=\"16\" y1=\"8\" x2=\"2\" y2=\"22\"></line><line x1=\"17.5\" y1=\"15\" x2=\"9\" y2=\"15\"></line>","figma":"<path d=\"M5 5.5A3.5 3.5 0 0 1 8.5 2H12v7H8.5A3.5 3.5 0 0 1 5 5.5z\"></path><path d=\"M12 2h3.5a3.5 3.5 0 1 1 0 7H12V2z\"></path><path d=\"M12 12.5a3.5 3.5 0 1 1 7 0 3.5 3.5 0 1 1-7 0z\"></path><path d=\"M5 19.5A3.5 3.5 0 0 1 8.5 16H12v3.5a3.5 3.5 0 1 1-7 0z\"></path><path d=\"M5 12.5A3.5 3.5 0 0 1 8.5 9H12v7H8.5A3.5 3.5 0 0 1 5 12.5z\"></path>","file-minus":"<path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"></path><polyline points=\"14 2 14 8 20 8\"></polyline><line x1=\"9\" y1=\"15\" x2=\"15\" y2=\"15\"></line>","file-plus":"<path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"></path><polyline points=\"14 2 14 8 20 8\"></polyline><line x1=\"12\" y1=\"18\" x2=\"12\" y2=\"12\"></line><line x1=\"9\" y1=\"15\" x2=\"15\" y2=\"15\"></line>","file-text":"<path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"></path><polyline points=\"14 2 14 8 20 8\"></polyline><line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"></line><line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"></line><polyline points=\"10 9 9 9 8 9\"></polyline>","file":"<path d=\"M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z\"></path><polyline points=\"13 2 13 9 20 9\"></polyline>","film":"<rect x=\"2\" y=\"2\" width=\"20\" height=\"20\" rx=\"2.18\" ry=\"2.18\"></rect><line x1=\"7\" y1=\"2\" x2=\"7\" y2=\"22\"></line><line x1=\"17\" y1=\"2\" x2=\"17\" y2=\"22\"></line><line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"></line><line x1=\"2\" y1=\"7\" x2=\"7\" y2=\"7\"></line><line x1=\"2\" y1=\"17\" x2=\"7\" y2=\"17\"></line><line x1=\"17\" y1=\"17\" x2=\"22\" y2=\"17\"></line><line x1=\"17\" y1=\"7\" x2=\"22\" y2=\"7\"></line>","filter":"<polygon points=\"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3\"></polygon>","flag":"<path d=\"M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z\"></path><line x1=\"4\" y1=\"22\" x2=\"4\" y2=\"15\"></line>","folder-minus":"<path d=\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\"></path><line x1=\"9\" y1=\"14\" x2=\"15\" y2=\"14\"></line>","folder-plus":"<path d=\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\"></path><line x1=\"12\" y1=\"11\" x2=\"12\" y2=\"17\"></line><line x1=\"9\" y1=\"14\" x2=\"15\" y2=\"14\"></line>","folder":"<path d=\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\"></path>","framer":"<path d=\"M5 16V9h14V2H5l14 14h-7m-7 0l7 7v-7m-7 0h7\"></path>","frown":"<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><path d=\"M16 16s-1.5-2-4-2-4 2-4 2\"></path><line x1=\"9\" y1=\"9\" x2=\"9.01\" y2=\"9\"></line><line x1=\"15\" y1=\"9\" x2=\"15.01\" y2=\"9\"></line>","gift":"<polyline points=\"20 12 20 22 4 22 4 12\"></polyline><rect x=\"2\" y=\"7\" width=\"20\" height=\"5\"></rect><line x1=\"12\" y1=\"22\" x2=\"12\" y2=\"7\"></line><path d=\"M12 7H7.5a2.5 2.5 0 0 1 0-5C11 2 12 7 12 7z\"></path><path d=\"M12 7h4.5a2.5 2.5 0 0 0 0-5C13 2 12 7 12 7z\"></path>","git-branch":"<line x1=\"6\" y1=\"3\" x2=\"6\" y2=\"15\"></line><circle cx=\"18\" cy=\"6\" r=\"3\"></circle><circle cx=\"6\" cy=\"18\" r=\"3\"></circle><path d=\"M18 9a9 9 0 0 1-9 9\"></path>","git-commit":"<circle cx=\"12\" cy=\"12\" r=\"4\"></circle><line x1=\"1.05\" y1=\"12\" x2=\"7\" y2=\"12\"></line><line x1=\"17.01\" y1=\"12\" x2=\"22.96\" y2=\"12\"></line>","git-merge":"<circle cx=\"18\" cy=\"18\" r=\"3\"></circle><circle cx=\"6\" cy=\"6\" r=\"3\"></circle><path d=\"M6 21V9a9 9 0 0 0 9 9\"></path>","git-pull-request":"<circle cx=\"18\" cy=\"18\" r=\"3\"></circle><circle cx=\"6\" cy=\"6\" r=\"3\"></circle><path d=\"M13 6h3a2 2 0 0 1 2 2v7\"></path><line x1=\"6\" y1=\"9\" x2=\"6\" y2=\"21\"></line>","github":"<path d=\"M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22\"></path>","gitlab":"<path d=\"M22.65 14.39L12 22.13 1.35 14.39a.84.84 0 0 1-.3-.94l1.22-3.78 2.44-7.51A.42.42 0 0 1 4.82 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.49h8.1l2.44-7.51A.42.42 0 0 1 18.6 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.51L23 13.45a.84.84 0 0 1-.35.94z\"></path>","globe":"<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"></line><path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\"></path>","grid":"<rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"></rect><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"></rect><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"></rect><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"></rect>","hard-drive":"<line x1=\"22\" y1=\"12\" x2=\"2\" y2=\"12\"></line><path d=\"M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\"></path><line x1=\"6\" y1=\"16\" x2=\"6.01\" y2=\"16\"></line><line x1=\"10\" y1=\"16\" x2=\"10.01\" y2=\"16\"></line>","hash":"<line x1=\"4\" y1=\"9\" x2=\"20\" y2=\"9\"></line><line x1=\"4\" y1=\"15\" x2=\"20\" y2=\"15\"></line><line x1=\"10\" y1=\"3\" x2=\"8\" y2=\"21\"></line><line x1=\"16\" y1=\"3\" x2=\"14\" y2=\"21\"></line>","headphones":"<path d=\"M3 18v-6a9 9 0 0 1 18 0v6\"></path><path d=\"M21 19a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3zM3 19a2 2 0 0 0 2 2h1a2 2 0 0 0 2-2v-3a2 2 0 0 0-2-2H3z\"></path>","heart":"<path d=\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\"></path>","help-circle":"<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><path d=\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\"></path><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"></line>","hexagon":"<path d=\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\"></path>","home":"<path d=\"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\"></path><polyline points=\"9 22 9 12 15 12 15 22\"></polyline>","image":"<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"></circle><polyline points=\"21 15 16 10 5 21\"></polyline>","inbox":"<polyline points=\"22 12 16 12 14 15 10 15 8 12 2 12\"></polyline><path d=\"M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\"></path>","info":"<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line>","instagram":"<rect x=\"2\" y=\"2\" width=\"20\" height=\"20\" rx=\"5\" ry=\"5\"></rect><path d=\"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z\"></path><line x1=\"17.5\" y1=\"6.5\" x2=\"17.51\" y2=\"6.5\"></line>","italic":"<line x1=\"19\" y1=\"4\" x2=\"10\" y2=\"4\"></line><line x1=\"14\" y1=\"20\" x2=\"5\" y2=\"20\"></line><line x1=\"15\" y1=\"4\" x2=\"9\" y2=\"20\"></line>","key":"<path d=\"M21 2l-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.778 7.778 5.5 5.5 0 0 1 7.777-7.777zm0 0L15.5 7.5m0 0l3 3L22 7l-3-3m-3.5 3.5L19 4\"></path>","layers":"<polygon points=\"12 2 2 7 12 12 22 7 12 2\"></polygon><polyline points=\"2 17 12 22 22 17\"></polyline><polyline points=\"2 12 12 17 22 12\"></polyline>","layout":"<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"3\" y1=\"9\" x2=\"21\" y2=\"9\"></line><line x1=\"9\" y1=\"21\" x2=\"9\" y2=\"9\"></line>","life-buoy":"<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><circle cx=\"12\" cy=\"12\" r=\"4\"></circle><line x1=\"4.93\" y1=\"4.93\" x2=\"9.17\" y2=\"9.17\"></line><line x1=\"14.83\" y1=\"14.83\" x2=\"19.07\" y2=\"19.07\"></line><line x1=\"14.83\" y1=\"9.17\" x2=\"19.07\" y2=\"4.93\"></line><line x1=\"14.83\" y1=\"9.17\" x2=\"18.36\" y2=\"5.64\"></line><line x1=\"4.93\" y1=\"19.07\" x2=\"9.17\" y2=\"14.83\"></line>","link-2":"<path d=\"M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3\"></path><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line>","link":"<path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path>","linkedin":"<path d=\"M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z\"></path><rect x=\"2\" y=\"9\" width=\"4\" height=\"12\"></rect><circle cx=\"4\" cy=\"4\" r=\"2\"></circle>","list":"<line x1=\"8\" y1=\"6\" x2=\"21\" y2=\"6\"></line><line x1=\"8\" y1=\"12\" x2=\"21\" y2=\"12\"></line><line x1=\"8\" y1=\"18\" x2=\"21\" y2=\"18\"></line><line x1=\"3\" y1=\"6\" x2=\"3.01\" y2=\"6\"></line><line x1=\"3\" y1=\"12\" x2=\"3.01\" y2=\"12\"></line><line x1=\"3\" y1=\"18\" x2=\"3.01\" y2=\"18\"></line>","loader":"<line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"6\"></line><line x1=\"12\" y1=\"18\" x2=\"12\" y2=\"22\"></line><line x1=\"4.93\" y1=\"4.93\" x2=\"7.76\" y2=\"7.76\"></line><line x1=\"16.24\" y1=\"16.24\" x2=\"19.07\" y2=\"19.07\"></line><line x1=\"2\" y1=\"12\" x2=\"6\" y2=\"12\"></line><line x1=\"18\" y1=\"12\" x2=\"22\" y2=\"12\"></line><line x1=\"4.93\" y1=\"19.07\" x2=\"7.76\" y2=\"16.24\"></line><line x1=\"16.24\" y1=\"7.76\" x2=\"19.07\" y2=\"4.93\"></line>","lock":"<rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\"></rect><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"></path>","log-in":"<path d=\"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4\"></path><polyline points=\"10 17 15 12 10 7\"></polyline><line x1=\"15\" y1=\"12\" x2=\"3\" y2=\"12\"></line>","log-out":"<path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\"></path><polyline points=\"16 17 21 12 16 7\"></polyline><line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\"></line>","mail":"<path d=\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\"></path><polyline points=\"22,6 12,13 2,6\"></polyline>","map-pin":"<path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\"></path><circle cx=\"12\" cy=\"10\" r=\"3\"></circle>","map":"<polygon points=\"1 6 1 22 8 18 16 22 23 18 23 2 16 6 8 2 1 6\"></polygon><line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"18\"></line><line x1=\"16\" y1=\"6\" x2=\"16\" y2=\"22\"></line>","maximize-2":"<polyline points=\"15 3 21 3 21 9\"></polyline><polyline points=\"9 21 3 21 3 15\"></polyline><line x1=\"21\" y1=\"3\" x2=\"14\" y2=\"10\"></line><line x1=\"3\" y1=\"21\" x2=\"10\" y2=\"14\"></line>","maximize":"<path d=\"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3\"></path>","meh":"<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"8\" y1=\"15\" x2=\"16\" y2=\"15\"></line><line x1=\"9\" y1=\"9\" x2=\"9.01\" y2=\"9\"></line><line x1=\"15\" y1=\"9\" x2=\"15.01\" y2=\"9\"></line>","menu":"<line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"></line><line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\"></line><line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\"></line>","message-circle":"<path d=\"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z\"></path>","message-square":"<path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\"></path>","mic-off":"<line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line><path d=\"M9 9v3a3 3 0 0 0 5.12 2.12M15 9.34V4a3 3 0 0 0-5.94-.6\"></path><path d=\"M17 16.95A7 7 0 0 1 5 12v-2m14 0v2a7 7 0 0 1-.11 1.23\"></path><line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\"></line><line x1=\"8\" y1=\"23\" x2=\"16\" y2=\"23\"></line>","mic":"<path d=\"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z\"></path><path d=\"M19 10v2a7 7 0 0 1-14 0v-2\"></path><line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\"></line><line x1=\"8\" y1=\"23\" x2=\"16\" y2=\"23\"></line>","minimize-2":"<polyline points=\"4 14 10 14 10 20\"></polyline><polyline points=\"20 10 14 10 14 4\"></polyline><line x1=\"14\" y1=\"10\" x2=\"21\" y2=\"3\"></line><line x1=\"3\" y1=\"21\" x2=\"10\" y2=\"14\"></line>","minimize":"<path d=\"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3\"></path>","minus-circle":"<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line>","minus-square":"<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line>","minus":"<line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>","monitor":"<rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"></rect><line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\"></line><line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\"></line>","moon":"<path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\"></path>","more-horizontal":"<circle cx=\"12\" cy=\"12\" r=\"1\"></circle><circle cx=\"19\" cy=\"12\" r=\"1\"></circle><circle cx=\"5\" cy=\"12\" r=\"1\"></circle>","more-vertical":"<circle cx=\"12\" cy=\"12\" r=\"1\"></circle><circle cx=\"12\" cy=\"5\" r=\"1\"></circle><circle cx=\"12\" cy=\"19\" r=\"1\"></circle>","mouse-pointer":"<path d=\"M3 3l7.07 16.97 2.51-7.39 7.39-2.51L3 3z\"></path><path d=\"M13 13l6 6\"></path>","move":"<polyline points=\"5 9 2 12 5 15\"></polyline><polyline points=\"9 5 12 2 15 5\"></polyline><polyline points=\"15 19 12 22 9 19\"></polyline><polyline points=\"19 9 22 12 19 15\"></polyline><line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"></line><line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"22\"></line>","music":"<path d=\"M9 18V5l12-2v13\"></path><circle cx=\"6\" cy=\"18\" r=\"3\"></circle><circle cx=\"18\" cy=\"16\" r=\"3\"></circle>","navigation-2":"<polygon points=\"12 2 19 21 12 17 5 21 12 2\"></polygon>","navigation":"<polygon points=\"3 11 22 2 13 21 11 13 3 11\"></polygon>","octagon":"<polygon points=\"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2\"></polygon>","package":"<line x1=\"16.5\" y1=\"9.4\" x2=\"7.5\" y2=\"4.21\"></line><path d=\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\"></path><polyline points=\"3.27 6.96 12 12.01 20.73 6.96\"></polyline><line x1=\"12\" y1=\"22.08\" x2=\"12\" y2=\"12\"></line>","paperclip":"<path d=\"M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48\"></path>","pause-circle":"<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"10\" y1=\"15\" x2=\"10\" y2=\"9\"></line><line x1=\"14\" y1=\"15\" x2=\"14\" y2=\"9\"></line>","pause":"<rect x=\"6\" y=\"4\" width=\"4\" height=\"16\"></rect><rect x=\"14\" y=\"4\" width=\"4\" height=\"16\"></rect>","pen-tool":"<path d=\"M12 19l7-7 3 3-7 7-3-3z\"></path><path d=\"M18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z\"></path><path d=\"M2 2l7.586 7.586\"></path><circle cx=\"11\" cy=\"11\" r=\"2\"></circle>","percent":"<line x1=\"19\" y1=\"5\" x2=\"5\" y2=\"19\"></line><circle cx=\"6.5\" cy=\"6.5\" r=\"2.5\"></circle><circle cx=\"17.5\" cy=\"17.5\" r=\"2.5\"></circle>","phone-call":"<path d=\"M15.05 5A5 5 0 0 1 19 8.95M15.05 1A9 9 0 0 1 23 8.94m-1 7.98v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"></path>","phone-forwarded":"<polyline points=\"19 1 23 5 19 9\"></polyline><line x1=\"15\" y1=\"5\" x2=\"23\" y2=\"5\"></line><path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"></path>","phone-incoming":"<polyline points=\"16 2 16 8 22 8\"></polyline><line x1=\"23\" y1=\"1\" x2=\"16\" y2=\"8\"></line><path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"></path>","phone-missed":"<line x1=\"23\" y1=\"1\" x2=\"17\" y2=\"7\"></line><line x1=\"17\" y1=\"1\" x2=\"23\" y2=\"7\"></line><path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"></path>","phone-off":"<path d=\"M10.68 13.31a16 16 0 0 0 3.41 2.6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7 2 2 0 0 1 1.72 2v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.42 19.42 0 0 1-3.33-2.67m-2.67-3.34a19.79 19.79 0 0 1-3.07-8.63A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91\"></path><line x1=\"23\" y1=\"1\" x2=\"1\" y2=\"23\"></line>","phone-outgoing":"<polyline points=\"23 7 23 1 17 1\"></polyline><line x1=\"16\" y1=\"8\" x2=\"23\" y2=\"1\"></line><path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"></path>","phone":"<path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"></path>","pie-chart":"<path d=\"M21.21 15.89A10 10 0 1 1 8 2.83\"></path><path d=\"M22 12A10 10 0 0 0 12 2v10z\"></path>","play-circle":"<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><polygon points=\"10 8 16 12 10 16 10 8\"></polygon>","play":"<polygon points=\"5 3 19 12 5 21 5 3\"></polygon>","plus-circle":"<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"16\"></line><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line>","plus-square":"<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"16\"></line><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line>","plus":"<line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>","pocket":"<path d=\"M4 3h16a2 2 0 0 1 2 2v6a10 10 0 0 1-10 10A10 10 0 0 1 2 11V5a2 2 0 0 1 2-2z\"></path><polyline points=\"8 10 12 14 16 10\"></polyline>","power":"<path d=\"M18.36 6.64a9 9 0 1 1-12.73 0\"></path><line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"12\"></line>","printer":"<polyline points=\"6 9 6 2 18 2 18 9\"></polyline><path d=\"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2\"></path><rect x=\"6\" y=\"14\" width=\"12\" height=\"8\"></rect>","radio":"<circle cx=\"12\" cy=\"12\" r=\"2\"></circle><path d=\"M16.24 7.76a6 6 0 0 1 0 8.49m-8.48-.01a6 6 0 0 1 0-8.49m11.31-2.82a10 10 0 0 1 0 14.14m-14.14 0a10 10 0 0 1 0-14.14\"></path>","refresh-ccw":"<polyline points=\"1 4 1 10 7 10\"></polyline><polyline points=\"23 20 23 14 17 14\"></polyline><path d=\"M20.49 9A9 9 0 0 0 5.64 5.64L1 10m22 4l-4.64 4.36A9 9 0 0 1 3.51 15\"></path>","refresh-cw":"<polyline points=\"23 4 23 10 17 10\"></polyline><polyline points=\"1 20 1 14 7 14\"></polyline><path d=\"M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\"></path>","repeat":"<polyline points=\"17 1 21 5 17 9\"></polyline><path d=\"M3 11V9a4 4 0 0 1 4-4h14\"></path><polyline points=\"7 23 3 19 7 15\"></polyline><path d=\"M21 13v2a4 4 0 0 1-4 4H3\"></path>","rewind":"<polygon points=\"11 19 2 12 11 5 11 19\"></polygon><polygon points=\"22 19 13 12 22 5 22 19\"></polygon>","rotate-ccw":"<polyline points=\"1 4 1 10 7 10\"></polyline><path d=\"M3.51 15a9 9 0 1 0 2.13-9.36L1 10\"></path>","rotate-cw":"<polyline points=\"23 4 23 10 17 10\"></polyline><path d=\"M20.49 15a9 9 0 1 1-2.12-9.36L23 10\"></path>","rss":"<path d=\"M4 11a9 9 0 0 1 9 9\"></path><path d=\"M4 4a16 16 0 0 1 16 16\"></path><circle cx=\"5\" cy=\"19\" r=\"1\"></circle>","save":"<path d=\"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z\"></path><polyline points=\"17 21 17 13 7 13 7 21\"></polyline><polyline points=\"7 3 7 8 15 8\"></polyline>","scissors":"<circle cx=\"6\" cy=\"6\" r=\"3\"></circle><circle cx=\"6\" cy=\"18\" r=\"3\"></circle><line x1=\"20\" y1=\"4\" x2=\"8.12\" y2=\"15.88\"></line><line x1=\"14.47\" y1=\"14.48\" x2=\"20\" y2=\"20\"></line><line x1=\"8.12\" y1=\"8.12\" x2=\"12\" y2=\"12\"></line>","search":"<circle cx=\"11\" cy=\"11\" r=\"8\"></circle><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line>","send":"<line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\"></line><polygon points=\"22 2 15 22 11 13 2 9 22 2\"></polygon>","server":"<rect x=\"2\" y=\"2\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\"></rect><rect x=\"2\" y=\"14\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\"></rect><line x1=\"6\" y1=\"6\" x2=\"6.01\" y2=\"6\"></line><line x1=\"6\" y1=\"18\" x2=\"6.01\" y2=\"18\"></line>","settings":"<circle cx=\"12\" cy=\"12\" r=\"3\"></circle><path d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z\"></path>","share-2":"<circle cx=\"18\" cy=\"5\" r=\"3\"></circle><circle cx=\"6\" cy=\"12\" r=\"3\"></circle><circle cx=\"18\" cy=\"19\" r=\"3\"></circle><line x1=\"8.59\" y1=\"13.51\" x2=\"15.42\" y2=\"17.49\"></line><line x1=\"15.41\" y1=\"6.51\" x2=\"8.59\" y2=\"10.49\"></line>","share":"<path d=\"M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8\"></path><polyline points=\"16 6 12 2 8 6\"></polyline><line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"15\"></line>","shield-off":"<path d=\"M19.69 14a6.9 6.9 0 0 0 .31-2V5l-8-3-3.16 1.18\"></path><path d=\"M4.73 4.73L4 5v7c0 6 8 10 8 10a20.29 20.29 0 0 0 5.62-4.38\"></path><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line>","shield":"<path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"></path>","shopping-bag":"<path d=\"M6 2L3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z\"></path><line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\"></line><path d=\"M16 10a4 4 0 0 1-8 0\"></path>","shopping-cart":"<circle cx=\"9\" cy=\"21\" r=\"1\"></circle><circle cx=\"20\" cy=\"21\" r=\"1\"></circle><path d=\"M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6\"></path>","shuffle":"<polyline points=\"16 3 21 3 21 8\"></polyline><line x1=\"4\" y1=\"20\" x2=\"21\" y2=\"3\"></line><polyline points=\"21 16 21 21 16 21\"></polyline><line x1=\"15\" y1=\"15\" x2=\"21\" y2=\"21\"></line><line x1=\"4\" y1=\"4\" x2=\"9\" y2=\"9\"></line>","sidebar":"<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"9\" y1=\"3\" x2=\"9\" y2=\"21\"></line>","skip-back":"<polygon points=\"19 20 9 12 19 4 19 20\"></polygon><line x1=\"5\" y1=\"19\" x2=\"5\" y2=\"5\"></line>","skip-forward":"<polygon points=\"5 4 15 12 5 20 5 4\"></polygon><line x1=\"19\" y1=\"5\" x2=\"19\" y2=\"19\"></line>","slack":"<path d=\"M14.5 10c-.83 0-1.5-.67-1.5-1.5v-5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5v5c0 .83-.67 1.5-1.5 1.5z\"></path><path d=\"M20.5 10H19V8.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5-.67 1.5-1.5 1.5z\"></path><path d=\"M9.5 14c.83 0 1.5.67 1.5 1.5v5c0 .83-.67 1.5-1.5 1.5S8 21.33 8 20.5v-5c0-.83.67-1.5 1.5-1.5z\"></path><path d=\"M3.5 14H5v1.5c0 .83-.67 1.5-1.5 1.5S2 16.33 2 15.5 2.67 14 3.5 14z\"></path><path d=\"M14 14.5c0-.83.67-1.5 1.5-1.5h5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5h-5c-.83 0-1.5-.67-1.5-1.5z\"></path><path d=\"M15.5 19H14v1.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z\"></path><path d=\"M10 9.5C10 8.67 9.33 8 8.5 8h-5C2.67 8 2 8.67 2 9.5S2.67 11 3.5 11h5c.83 0 1.5-.67 1.5-1.5z\"></path><path d=\"M8.5 5H10V3.5C10 2.67 9.33 2 8.5 2S7 2.67 7 3.5 7.67 5 8.5 5z\"></path>","slash":"<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"4.93\" y1=\"4.93\" x2=\"19.07\" y2=\"19.07\"></line>","sliders":"<line x1=\"4\" y1=\"21\" x2=\"4\" y2=\"14\"></line><line x1=\"4\" y1=\"10\" x2=\"4\" y2=\"3\"></line><line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"3\"></line><line x1=\"20\" y1=\"21\" x2=\"20\" y2=\"16\"></line><line x1=\"20\" y1=\"12\" x2=\"20\" y2=\"3\"></line><line x1=\"1\" y1=\"14\" x2=\"7\" y2=\"14\"></line><line x1=\"9\" y1=\"8\" x2=\"15\" y2=\"8\"></line><line x1=\"17\" y1=\"16\" x2=\"23\" y2=\"16\"></line>","smartphone":"<rect x=\"5\" y=\"2\" width=\"14\" height=\"20\" rx=\"2\" ry=\"2\"></rect><line x1=\"12\" y1=\"18\" x2=\"12.01\" y2=\"18\"></line>","smile":"<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><path d=\"M8 14s1.5 2 4 2 4-2 4-2\"></path><line x1=\"9\" y1=\"9\" x2=\"9.01\" y2=\"9\"></line><line x1=\"15\" y1=\"9\" x2=\"15.01\" y2=\"9\"></line>","speaker":"<rect x=\"4\" y=\"2\" width=\"16\" height=\"20\" rx=\"2\" ry=\"2\"></rect><circle cx=\"12\" cy=\"14\" r=\"4\"></circle><line x1=\"12\" y1=\"6\" x2=\"12.01\" y2=\"6\"></line>","square":"<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>","star":"<polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"></polygon>","stop-circle":"<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><rect x=\"9\" y=\"9\" width=\"6\" height=\"6\"></rect>","sun":"<circle cx=\"12\" cy=\"12\" r=\"5\"></circle><line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"3\"></line><line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"23\"></line><line x1=\"4.22\" y1=\"4.22\" x2=\"5.64\" y2=\"5.64\"></line><line x1=\"18.36\" y1=\"18.36\" x2=\"19.78\" y2=\"19.78\"></line><line x1=\"1\" y1=\"12\" x2=\"3\" y2=\"12\"></line><line x1=\"21\" y1=\"12\" x2=\"23\" y2=\"12\"></line><line x1=\"4.22\" y1=\"19.78\" x2=\"5.64\" y2=\"18.36\"></line><line x1=\"18.36\" y1=\"5.64\" x2=\"19.78\" y2=\"4.22\"></line>","sunrise":"<path d=\"M17 18a5 5 0 0 0-10 0\"></path><line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"9\"></line><line x1=\"4.22\" y1=\"10.22\" x2=\"5.64\" y2=\"11.64\"></line><line x1=\"1\" y1=\"18\" x2=\"3\" y2=\"18\"></line><line x1=\"21\" y1=\"18\" x2=\"23\" y2=\"18\"></line><line x1=\"18.36\" y1=\"11.64\" x2=\"19.78\" y2=\"10.22\"></line><line x1=\"23\" y1=\"22\" x2=\"1\" y2=\"22\"></line><polyline points=\"8 6 12 2 16 6\"></polyline>","sunset":"<path d=\"M17 18a5 5 0 0 0-10 0\"></path><line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"2\"></line><line x1=\"4.22\" y1=\"10.22\" x2=\"5.64\" y2=\"11.64\"></line><line x1=\"1\" y1=\"18\" x2=\"3\" y2=\"18\"></line><line x1=\"21\" y1=\"18\" x2=\"23\" y2=\"18\"></line><line x1=\"18.36\" y1=\"11.64\" x2=\"19.78\" y2=\"10.22\"></line><line x1=\"23\" y1=\"22\" x2=\"1\" y2=\"22\"></line><polyline points=\"16 5 12 9 8 5\"></polyline>","tablet":"<rect x=\"4\" y=\"2\" width=\"16\" height=\"20\" rx=\"2\" ry=\"2\"></rect><line x1=\"12\" y1=\"18\" x2=\"12.01\" y2=\"18\"></line>","tag":"<path d=\"M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z\"></path><line x1=\"7\" y1=\"7\" x2=\"7.01\" y2=\"7\"></line>","target":"<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><circle cx=\"12\" cy=\"12\" r=\"6\"></circle><circle cx=\"12\" cy=\"12\" r=\"2\"></circle>","terminal":"<polyline points=\"4 17 10 11 4 5\"></polyline><line x1=\"12\" y1=\"19\" x2=\"20\" y2=\"19\"></line>","thermometer":"<path d=\"M14 14.76V3.5a2.5 2.5 0 0 0-5 0v11.26a4.5 4.5 0 1 0 5 0z\"></path>","thumbs-down":"<path d=\"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\"></path>","thumbs-up":"<path d=\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\"></path>","toggle-left":"<rect x=\"1\" y=\"5\" width=\"22\" height=\"14\" rx=\"7\" ry=\"7\"></rect><circle cx=\"8\" cy=\"12\" r=\"3\"></circle>","toggle-right":"<rect x=\"1\" y=\"5\" width=\"22\" height=\"14\" rx=\"7\" ry=\"7\"></rect><circle cx=\"16\" cy=\"12\" r=\"3\"></circle>","tool":"<path d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z\"></path>","trash-2":"<polyline points=\"3 6 5 6 21 6\"></polyline><path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"></path><line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\"></line><line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\"></line>","trash":"<polyline points=\"3 6 5 6 21 6\"></polyline><path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"></path>","trello":"<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><rect x=\"7\" y=\"7\" width=\"3\" height=\"9\"></rect><rect x=\"14\" y=\"7\" width=\"3\" height=\"5\"></rect>","trending-down":"<polyline points=\"23 18 13.5 8.5 8.5 13.5 1 6\"></polyline><polyline points=\"17 18 23 18 23 12\"></polyline>","trending-up":"<polyline points=\"23 6 13.5 15.5 8.5 10.5 1 18\"></polyline><polyline points=\"17 6 23 6 23 12\"></polyline>","triangle":"<path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"></path>","truck":"<rect x=\"1\" y=\"3\" width=\"15\" height=\"13\"></rect><polygon points=\"16 8 20 8 23 11 23 16 16 16 16 8\"></polygon><circle cx=\"5.5\" cy=\"18.5\" r=\"2.5\"></circle><circle cx=\"18.5\" cy=\"18.5\" r=\"2.5\"></circle>","tv":"<rect x=\"2\" y=\"7\" width=\"20\" height=\"15\" rx=\"2\" ry=\"2\"></rect><polyline points=\"17 2 12 7 7 2\"></polyline>","twitch":"<path d=\"M21 2H3v16h5v4l4-4h5l4-4V2zm-10 9V7m5 4V7\"></path>","twitter":"<path d=\"M23 3a10.9 10.9 0 0 1-3.14 1.53 4.48 4.48 0 0 0-7.86 3v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 23 3z\"></path>","type":"<polyline points=\"4 7 4 4 20 4 20 7\"></polyline><line x1=\"9\" y1=\"20\" x2=\"15\" y2=\"20\"></line><line x1=\"12\" y1=\"4\" x2=\"12\" y2=\"20\"></line>","umbrella":"<path d=\"M23 12a11.05 11.05 0 0 0-22 0zm-5 7a3 3 0 0 1-6 0v-7\"></path>","underline":"<path d=\"M6 3v7a6 6 0 0 0 6 6 6 6 0 0 0 6-6V3\"></path><line x1=\"4\" y1=\"21\" x2=\"20\" y2=\"21\"></line>","unlock":"<rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\"></rect><path d=\"M7 11V7a5 5 0 0 1 9.9-1\"></path>","upload-cloud":"<polyline points=\"16 16 12 12 8 16\"></polyline><line x1=\"12\" y1=\"12\" x2=\"12\" y2=\"21\"></line><path d=\"M20.39 18.39A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.3\"></path><polyline points=\"16 16 12 12 8 16\"></polyline>","upload":"<path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path><polyline points=\"17 8 12 3 7 8\"></polyline><line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\"></line>","user-check":"<path d=\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"></path><circle cx=\"8.5\" cy=\"7\" r=\"4\"></circle><polyline points=\"17 11 19 13 23 9\"></polyline>","user-minus":"<path d=\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"></path><circle cx=\"8.5\" cy=\"7\" r=\"4\"></circle><line x1=\"23\" y1=\"11\" x2=\"17\" y2=\"11\"></line>","user-plus":"<path d=\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"></path><circle cx=\"8.5\" cy=\"7\" r=\"4\"></circle><line x1=\"20\" y1=\"8\" x2=\"20\" y2=\"14\"></line><line x1=\"23\" y1=\"11\" x2=\"17\" y2=\"11\"></line>","user-x":"<path d=\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"></path><circle cx=\"8.5\" cy=\"7\" r=\"4\"></circle><line x1=\"18\" y1=\"8\" x2=\"23\" y2=\"13\"></line><line x1=\"23\" y1=\"8\" x2=\"18\" y2=\"13\"></line>","user":"<path d=\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\"></path><circle cx=\"12\" cy=\"7\" r=\"4\"></circle>","users":"<path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"></path><circle cx=\"9\" cy=\"7\" r=\"4\"></circle><path d=\"M23 21v-2a4 4 0 0 0-3-3.87\"></path><path d=\"M16 3.13a4 4 0 0 1 0 7.75\"></path>","video-off":"<path d=\"M16 16v1a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h2m5.66 0H14a2 2 0 0 1 2 2v3.34l1 1L23 7v10\"></path><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line>","video":"<polygon points=\"23 7 16 12 23 17 23 7\"></polygon><rect x=\"1\" y=\"5\" width=\"15\" height=\"14\" rx=\"2\" ry=\"2\"></rect>","voicemail":"<circle cx=\"5.5\" cy=\"11.5\" r=\"4.5\"></circle><circle cx=\"18.5\" cy=\"11.5\" r=\"4.5\"></circle><line x1=\"5.5\" y1=\"16\" x2=\"18.5\" y2=\"16\"></line>","volume-1":"<polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"></polygon><path d=\"M15.54 8.46a5 5 0 0 1 0 7.07\"></path>","volume-2":"<polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"></polygon><path d=\"M19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07\"></path>","volume-x":"<polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"></polygon><line x1=\"23\" y1=\"9\" x2=\"17\" y2=\"15\"></line><line x1=\"17\" y1=\"9\" x2=\"23\" y2=\"15\"></line>","volume":"<polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"></polygon>","watch":"<circle cx=\"12\" cy=\"12\" r=\"7\"></circle><polyline points=\"12 9 12 12 13.5 13.5\"></polyline><path d=\"M16.51 17.35l-.35 3.83a2 2 0 0 1-2 1.82H9.83a2 2 0 0 1-2-1.82l-.35-3.83m.01-10.7l.35-3.83A2 2 0 0 1 9.83 1h4.35a2 2 0 0 1 2 1.82l.35 3.83\"></path>","wifi-off":"<line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line><path d=\"M16.72 11.06A10.94 10.94 0 0 1 19 12.55\"></path><path d=\"M5 12.55a10.94 10.94 0 0 1 5.17-2.39\"></path><path d=\"M10.71 5.05A16 16 0 0 1 22.58 9\"></path><path d=\"M1.42 9a15.91 15.91 0 0 1 4.7-2.88\"></path><path d=\"M8.53 16.11a6 6 0 0 1 6.95 0\"></path><line x1=\"12\" y1=\"20\" x2=\"12.01\" y2=\"20\"></line>","wifi":"<path d=\"M5 12.55a11 11 0 0 1 14.08 0\"></path><path d=\"M1.42 9a16 16 0 0 1 21.16 0\"></path><path d=\"M8.53 16.11a6 6 0 0 1 6.95 0\"></path><line x1=\"12\" y1=\"20\" x2=\"12.01\" y2=\"20\"></line>","wind":"<path d=\"M9.59 4.59A2 2 0 1 1 11 8H2m10.59 11.41A2 2 0 1 0 14 16H2m15.73-8.27A2.5 2.5 0 1 1 19.5 12H2\"></path>","x-circle":"<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\"></line><line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\"></line>","x-octagon":"<polygon points=\"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2\"></polygon><line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\"></line><line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\"></line>","x-square":"<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\"></line><line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\"></line>","x":"<line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>","youtube":"<path d=\"M22.54 6.42a2.78 2.78 0 0 0-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 0 0-1.94 2A29 29 0 0 0 1 11.75a29 29 0 0 0 .46 5.33A2.78 2.78 0 0 0 3.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 0 0 1.94-2 29 29 0 0 0 .46-5.25 29 29 0 0 0-.46-5.33z\"></path><polygon points=\"9.75 15.02 15.5 11.75 9.75 8.48 9.75 15.02\"></polygon>","zap-off":"<polyline points=\"12.41 6.75 13 2 10.57 4.92\"></polyline><polyline points=\"18.57 12.91 21 10 15.66 10\"></polyline><polyline points=\"8 8 3 14 12 14 11 22 16 16\"></polyline><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line>","zap":"<polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"></polygon>","zoom-in":"<circle cx=\"11\" cy=\"11\" r=\"8\"></circle><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line><line x1=\"11\" y1=\"8\" x2=\"11\" y2=\"14\"></line><line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\"></line>","zoom-out":"<circle cx=\"11\" cy=\"11\" r=\"8\"></circle><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line><line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\"></line>"};
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/classnames/dedupe.js":
|
|
|
/*!*******************************************!*\
|
|
|
!*** ./node_modules/classnames/dedupe.js ***!
|
|
|
\*******************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
|
|
|
Copyright (c) 2016 Jed Watson.
|
|
|
Licensed under the MIT License (MIT), see
|
|
|
http://jedwatson.github.io/classnames
|
|
|
*/
|
|
|
/* global define */
|
|
|
|
|
|
(function () {
|
|
|
|
|
|
var classNames = (function () {
|
|
|
// don't inherit from Object so we can skip hasOwnProperty check later
|
|
|
// http://stackoverflow.com/questions/15518328/creating-js-object-with-object-createnull#answer-21079232
|
|
|
function StorageObject() {}
|
|
|
StorageObject.prototype = Object.create(null);
|
|
|
|
|
|
function _parseArray (resultSet, array) {
|
|
|
var length = array.length;
|
|
|
|
|
|
for (var i = 0; i < length; ++i) {
|
|
|
_parse(resultSet, array[i]);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var hasOwn = {}.hasOwnProperty;
|
|
|
|
|
|
function _parseNumber (resultSet, num) {
|
|
|
resultSet[num] = true;
|
|
|
}
|
|
|
|
|
|
function _parseObject (resultSet, object) {
|
|
|
for (var k in object) {
|
|
|
if (hasOwn.call(object, k)) {
|
|
|
// set value to false instead of deleting it to avoid changing object structure
|
|
|
// https://www.smashingmagazine.com/2012/11/writing-fast-memory-efficient-javascript/#de-referencing-misconceptions
|
|
|
resultSet[k] = !!object[k];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var SPACE = /\s+/;
|
|
|
function _parseString (resultSet, str) {
|
|
|
var array = str.split(SPACE);
|
|
|
var length = array.length;
|
|
|
|
|
|
for (var i = 0; i < length; ++i) {
|
|
|
resultSet[array[i]] = true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function _parse (resultSet, arg) {
|
|
|
if (!arg) return;
|
|
|
var argType = typeof arg;
|
|
|
|
|
|
// 'foo bar'
|
|
|
if (argType === 'string') {
|
|
|
_parseString(resultSet, arg);
|
|
|
|
|
|
// ['foo', 'bar', ...]
|
|
|
} else if (Array.isArray(arg)) {
|
|
|
_parseArray(resultSet, arg);
|
|
|
|
|
|
// { 'foo': true, ... }
|
|
|
} else if (argType === 'object') {
|
|
|
_parseObject(resultSet, arg);
|
|
|
|
|
|
// '130'
|
|
|
} else if (argType === 'number') {
|
|
|
_parseNumber(resultSet, arg);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function _classNames () {
|
|
|
// don't leak arguments
|
|
|
// https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
|
|
|
var len = arguments.length;
|
|
|
var args = Array(len);
|
|
|
for (var i = 0; i < len; i++) {
|
|
|
args[i] = arguments[i];
|
|
|
}
|
|
|
|
|
|
var classSet = new StorageObject();
|
|
|
_parseArray(classSet, args);
|
|
|
|
|
|
var list = [];
|
|
|
|
|
|
for (var k in classSet) {
|
|
|
if (classSet[k]) {
|
|
|
list.push(k);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return list.join(' ');
|
|
|
}
|
|
|
|
|
|
return _classNames;
|
|
|
})();
|
|
|
|
|
|
if (typeof module !== 'undefined' && module.exports) {
|
|
|
module.exports = classNames;
|
|
|
} else {
|
|
|
// register as 'classnames', consistent with npm package name
|
|
|
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {
|
|
|
return classNames;
|
|
|
}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
|
|
|
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
|
|
|
}
|
|
|
}());
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/es/array/from.js":
|
|
|
/*!***********************************************!*\
|
|
|
!*** ./node_modules/core-js/es/array/from.js ***!
|
|
|
\***********************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
__webpack_require__(/*! ../../modules/es.string.iterator */ "./node_modules/core-js/modules/es.string.iterator.js");
|
|
|
__webpack_require__(/*! ../../modules/es.array.from */ "./node_modules/core-js/modules/es.array.from.js");
|
|
|
var path = __webpack_require__(/*! ../../internals/path */ "./node_modules/core-js/internals/path.js");
|
|
|
|
|
|
module.exports = path.Array.from;
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/a-function.js":
|
|
|
/*!******************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/a-function.js ***!
|
|
|
\******************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports) {
|
|
|
|
|
|
module.exports = function (it) {
|
|
|
if (typeof it != 'function') {
|
|
|
throw TypeError(String(it) + ' is not a function');
|
|
|
} return it;
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/an-object.js":
|
|
|
/*!*****************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/an-object.js ***!
|
|
|
\*****************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js");
|
|
|
|
|
|
module.exports = function (it) {
|
|
|
if (!isObject(it)) {
|
|
|
throw TypeError(String(it) + ' is not an object');
|
|
|
} return it;
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/array-from.js":
|
|
|
/*!******************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/array-from.js ***!
|
|
|
\******************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var bind = __webpack_require__(/*! ../internals/bind-context */ "./node_modules/core-js/internals/bind-context.js");
|
|
|
var toObject = __webpack_require__(/*! ../internals/to-object */ "./node_modules/core-js/internals/to-object.js");
|
|
|
var callWithSafeIterationClosing = __webpack_require__(/*! ../internals/call-with-safe-iteration-closing */ "./node_modules/core-js/internals/call-with-safe-iteration-closing.js");
|
|
|
var isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ "./node_modules/core-js/internals/is-array-iterator-method.js");
|
|
|
var toLength = __webpack_require__(/*! ../internals/to-length */ "./node_modules/core-js/internals/to-length.js");
|
|
|
var createProperty = __webpack_require__(/*! ../internals/create-property */ "./node_modules/core-js/internals/create-property.js");
|
|
|
var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ "./node_modules/core-js/internals/get-iterator-method.js");
|
|
|
|
|
|
// `Array.from` method
|
|
|
// https://tc39.github.io/ecma262/#sec-array.from
|
|
|
module.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {
|
|
|
var O = toObject(arrayLike);
|
|
|
var C = typeof this == 'function' ? this : Array;
|
|
|
var argumentsLength = arguments.length;
|
|
|
var mapfn = argumentsLength > 1 ? arguments[1] : undefined;
|
|
|
var mapping = mapfn !== undefined;
|
|
|
var index = 0;
|
|
|
var iteratorMethod = getIteratorMethod(O);
|
|
|
var length, result, step, iterator;
|
|
|
if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2);
|
|
|
// if the target is not iterable or it's an array with the default iterator - use a simple case
|
|
|
if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) {
|
|
|
iterator = iteratorMethod.call(O);
|
|
|
result = new C();
|
|
|
for (;!(step = iterator.next()).done; index++) {
|
|
|
createProperty(result, index, mapping
|
|
|
? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true)
|
|
|
: step.value
|
|
|
);
|
|
|
}
|
|
|
} else {
|
|
|
length = toLength(O.length);
|
|
|
result = new C(length);
|
|
|
for (;length > index; index++) {
|
|
|
createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);
|
|
|
}
|
|
|
}
|
|
|
result.length = index;
|
|
|
return result;
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/array-includes.js":
|
|
|
/*!**********************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/array-includes.js ***!
|
|
|
\**********************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js/internals/to-indexed-object.js");
|
|
|
var toLength = __webpack_require__(/*! ../internals/to-length */ "./node_modules/core-js/internals/to-length.js");
|
|
|
var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ "./node_modules/core-js/internals/to-absolute-index.js");
|
|
|
|
|
|
// `Array.prototype.{ indexOf, includes }` methods implementation
|
|
|
// false -> Array#indexOf
|
|
|
// https://tc39.github.io/ecma262/#sec-array.prototype.indexof
|
|
|
// true -> Array#includes
|
|
|
// https://tc39.github.io/ecma262/#sec-array.prototype.includes
|
|
|
module.exports = function (IS_INCLUDES) {
|
|
|
return function ($this, el, fromIndex) {
|
|
|
var O = toIndexedObject($this);
|
|
|
var length = toLength(O.length);
|
|
|
var index = toAbsoluteIndex(fromIndex, length);
|
|
|
var value;
|
|
|
// Array#includes uses SameValueZero equality algorithm
|
|
|
// eslint-disable-next-line no-self-compare
|
|
|
if (IS_INCLUDES && el != el) while (length > index) {
|
|
|
value = O[index++];
|
|
|
// eslint-disable-next-line no-self-compare
|
|
|
if (value != value) return true;
|
|
|
// Array#indexOf ignores holes, Array#includes - not
|
|
|
} else for (;length > index; index++) if (IS_INCLUDES || index in O) {
|
|
|
if (O[index] === el) return IS_INCLUDES || index || 0;
|
|
|
} return !IS_INCLUDES && -1;
|
|
|
};
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/bind-context.js":
|
|
|
/*!********************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/bind-context.js ***!
|
|
|
\********************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var aFunction = __webpack_require__(/*! ../internals/a-function */ "./node_modules/core-js/internals/a-function.js");
|
|
|
|
|
|
// optional / simple context binding
|
|
|
module.exports = function (fn, that, length) {
|
|
|
aFunction(fn);
|
|
|
if (that === undefined) return fn;
|
|
|
switch (length) {
|
|
|
case 0: return function () {
|
|
|
return fn.call(that);
|
|
|
};
|
|
|
case 1: return function (a) {
|
|
|
return fn.call(that, a);
|
|
|
};
|
|
|
case 2: return function (a, b) {
|
|
|
return fn.call(that, a, b);
|
|
|
};
|
|
|
case 3: return function (a, b, c) {
|
|
|
return fn.call(that, a, b, c);
|
|
|
};
|
|
|
}
|
|
|
return function (/* ...args */) {
|
|
|
return fn.apply(that, arguments);
|
|
|
};
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/call-with-safe-iteration-closing.js":
|
|
|
/*!****************************************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/call-with-safe-iteration-closing.js ***!
|
|
|
\****************************************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js");
|
|
|
|
|
|
// call something on iterator step with safe closing on error
|
|
|
module.exports = function (iterator, fn, value, ENTRIES) {
|
|
|
try {
|
|
|
return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);
|
|
|
// 7.4.6 IteratorClose(iterator, completion)
|
|
|
} catch (error) {
|
|
|
var returnMethod = iterator['return'];
|
|
|
if (returnMethod !== undefined) anObject(returnMethod.call(iterator));
|
|
|
throw error;
|
|
|
}
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/check-correctness-of-iteration.js":
|
|
|
/*!**************************************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/check-correctness-of-iteration.js ***!
|
|
|
\**************************************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js");
|
|
|
|
|
|
var ITERATOR = wellKnownSymbol('iterator');
|
|
|
var SAFE_CLOSING = false;
|
|
|
|
|
|
try {
|
|
|
var called = 0;
|
|
|
var iteratorWithReturn = {
|
|
|
next: function () {
|
|
|
return { done: !!called++ };
|
|
|
},
|
|
|
'return': function () {
|
|
|
SAFE_CLOSING = true;
|
|
|
}
|
|
|
};
|
|
|
iteratorWithReturn[ITERATOR] = function () {
|
|
|
return this;
|
|
|
};
|
|
|
// eslint-disable-next-line no-throw-literal
|
|
|
Array.from(iteratorWithReturn, function () { throw 2; });
|
|
|
} catch (error) { /* empty */ }
|
|
|
|
|
|
module.exports = function (exec, SKIP_CLOSING) {
|
|
|
if (!SKIP_CLOSING && !SAFE_CLOSING) return false;
|
|
|
var ITERATION_SUPPORT = false;
|
|
|
try {
|
|
|
var object = {};
|
|
|
object[ITERATOR] = function () {
|
|
|
return {
|
|
|
next: function () {
|
|
|
return { done: ITERATION_SUPPORT = true };
|
|
|
}
|
|
|
};
|
|
|
};
|
|
|
exec(object);
|
|
|
} catch (error) { /* empty */ }
|
|
|
return ITERATION_SUPPORT;
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/classof-raw.js":
|
|
|
/*!*******************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/classof-raw.js ***!
|
|
|
\*******************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports) {
|
|
|
|
|
|
var toString = {}.toString;
|
|
|
|
|
|
module.exports = function (it) {
|
|
|
return toString.call(it).slice(8, -1);
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/classof.js":
|
|
|
/*!***************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/classof.js ***!
|
|
|
\***************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js/internals/classof-raw.js");
|
|
|
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js");
|
|
|
|
|
|
var TO_STRING_TAG = wellKnownSymbol('toStringTag');
|
|
|
// ES3 wrong here
|
|
|
var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';
|
|
|
|
|
|
// fallback for IE11 Script Access Denied error
|
|
|
var tryGet = function (it, key) {
|
|
|
try {
|
|
|
return it[key];
|
|
|
} catch (error) { /* empty */ }
|
|
|
};
|
|
|
|
|
|
// getting tag from ES6+ `Object.prototype.toString`
|
|
|
module.exports = function (it) {
|
|
|
var O, tag, result;
|
|
|
return it === undefined ? 'Undefined' : it === null ? 'Null'
|
|
|
// @@toStringTag case
|
|
|
: typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag
|
|
|
// builtinTag case
|
|
|
: CORRECT_ARGUMENTS ? classofRaw(O)
|
|
|
// ES3 arguments fallback
|
|
|
: (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/copy-constructor-properties.js":
|
|
|
/*!***********************************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/copy-constructor-properties.js ***!
|
|
|
\***********************************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var has = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js");
|
|
|
var ownKeys = __webpack_require__(/*! ../internals/own-keys */ "./node_modules/core-js/internals/own-keys.js");
|
|
|
var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ "./node_modules/core-js/internals/object-get-own-property-descriptor.js");
|
|
|
var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js/internals/object-define-property.js");
|
|
|
|
|
|
module.exports = function (target, source) {
|
|
|
var keys = ownKeys(source);
|
|
|
var defineProperty = definePropertyModule.f;
|
|
|
var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
|
|
|
for (var i = 0; i < keys.length; i++) {
|
|
|
var key = keys[i];
|
|
|
if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));
|
|
|
}
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/correct-prototype-getter.js":
|
|
|
/*!********************************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/correct-prototype-getter.js ***!
|
|
|
\********************************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js");
|
|
|
|
|
|
module.exports = !fails(function () {
|
|
|
function F() { /* empty */ }
|
|
|
F.prototype.constructor = null;
|
|
|
return Object.getPrototypeOf(new F()) !== F.prototype;
|
|
|
});
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/create-iterator-constructor.js":
|
|
|
/*!***********************************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/create-iterator-constructor.js ***!
|
|
|
\***********************************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var IteratorPrototype = __webpack_require__(/*! ../internals/iterators-core */ "./node_modules/core-js/internals/iterators-core.js").IteratorPrototype;
|
|
|
var create = __webpack_require__(/*! ../internals/object-create */ "./node_modules/core-js/internals/object-create.js");
|
|
|
var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "./node_modules/core-js/internals/create-property-descriptor.js");
|
|
|
var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "./node_modules/core-js/internals/set-to-string-tag.js");
|
|
|
var Iterators = __webpack_require__(/*! ../internals/iterators */ "./node_modules/core-js/internals/iterators.js");
|
|
|
|
|
|
var returnThis = function () { return this; };
|
|
|
|
|
|
module.exports = function (IteratorConstructor, NAME, next) {
|
|
|
var TO_STRING_TAG = NAME + ' Iterator';
|
|
|
IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });
|
|
|
setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);
|
|
|
Iterators[TO_STRING_TAG] = returnThis;
|
|
|
return IteratorConstructor;
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/create-property-descriptor.js":
|
|
|
/*!**********************************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/create-property-descriptor.js ***!
|
|
|
\**********************************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports) {
|
|
|
|
|
|
module.exports = function (bitmap, value) {
|
|
|
return {
|
|
|
enumerable: !(bitmap & 1),
|
|
|
configurable: !(bitmap & 2),
|
|
|
writable: !(bitmap & 4),
|
|
|
value: value
|
|
|
};
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/create-property.js":
|
|
|
/*!***********************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/create-property.js ***!
|
|
|
\***********************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ "./node_modules/core-js/internals/to-primitive.js");
|
|
|
var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js/internals/object-define-property.js");
|
|
|
var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "./node_modules/core-js/internals/create-property-descriptor.js");
|
|
|
|
|
|
module.exports = function (object, key, value) {
|
|
|
var propertyKey = toPrimitive(key);
|
|
|
if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));
|
|
|
else object[propertyKey] = value;
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/define-iterator.js":
|
|
|
/*!***********************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/define-iterator.js ***!
|
|
|
\***********************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js");
|
|
|
var createIteratorConstructor = __webpack_require__(/*! ../internals/create-iterator-constructor */ "./node_modules/core-js/internals/create-iterator-constructor.js");
|
|
|
var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ "./node_modules/core-js/internals/object-get-prototype-of.js");
|
|
|
var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ "./node_modules/core-js/internals/object-set-prototype-of.js");
|
|
|
var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "./node_modules/core-js/internals/set-to-string-tag.js");
|
|
|
var hide = __webpack_require__(/*! ../internals/hide */ "./node_modules/core-js/internals/hide.js");
|
|
|
var redefine = __webpack_require__(/*! ../internals/redefine */ "./node_modules/core-js/internals/redefine.js");
|
|
|
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js");
|
|
|
var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js/internals/is-pure.js");
|
|
|
var Iterators = __webpack_require__(/*! ../internals/iterators */ "./node_modules/core-js/internals/iterators.js");
|
|
|
var IteratorsCore = __webpack_require__(/*! ../internals/iterators-core */ "./node_modules/core-js/internals/iterators-core.js");
|
|
|
|
|
|
var IteratorPrototype = IteratorsCore.IteratorPrototype;
|
|
|
var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;
|
|
|
var ITERATOR = wellKnownSymbol('iterator');
|
|
|
var KEYS = 'keys';
|
|
|
var VALUES = 'values';
|
|
|
var ENTRIES = 'entries';
|
|
|
|
|
|
var returnThis = function () { return this; };
|
|
|
|
|
|
module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {
|
|
|
createIteratorConstructor(IteratorConstructor, NAME, next);
|
|
|
|
|
|
var getIterationMethod = function (KIND) {
|
|
|
if (KIND === DEFAULT && defaultIterator) return defaultIterator;
|
|
|
if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];
|
|
|
switch (KIND) {
|
|
|
case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };
|
|
|
case VALUES: return function values() { return new IteratorConstructor(this, KIND); };
|
|
|
case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };
|
|
|
} return function () { return new IteratorConstructor(this); };
|
|
|
};
|
|
|
|
|
|
var TO_STRING_TAG = NAME + ' Iterator';
|
|
|
var INCORRECT_VALUES_NAME = false;
|
|
|
var IterablePrototype = Iterable.prototype;
|
|
|
var nativeIterator = IterablePrototype[ITERATOR]
|
|
|
|| IterablePrototype['@@iterator']
|
|
|
|| DEFAULT && IterablePrototype[DEFAULT];
|
|
|
var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);
|
|
|
var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;
|
|
|
var CurrentIteratorPrototype, methods, KEY;
|
|
|
|
|
|
// fix native
|
|
|
if (anyNativeIterator) {
|
|
|
CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));
|
|
|
if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {
|
|
|
if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {
|
|
|
if (setPrototypeOf) {
|
|
|
setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);
|
|
|
} else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {
|
|
|
hide(CurrentIteratorPrototype, ITERATOR, returnThis);
|
|
|
}
|
|
|
}
|
|
|
// Set @@toStringTag to native iterators
|
|
|
setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);
|
|
|
if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// fix Array#{values, @@iterator}.name in V8 / FF
|
|
|
if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {
|
|
|
INCORRECT_VALUES_NAME = true;
|
|
|
defaultIterator = function values() { return nativeIterator.call(this); };
|
|
|
}
|
|
|
|
|
|
// define iterator
|
|
|
if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {
|
|
|
hide(IterablePrototype, ITERATOR, defaultIterator);
|
|
|
}
|
|
|
Iterators[NAME] = defaultIterator;
|
|
|
|
|
|
// export additional methods
|
|
|
if (DEFAULT) {
|
|
|
methods = {
|
|
|
values: getIterationMethod(VALUES),
|
|
|
keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),
|
|
|
entries: getIterationMethod(ENTRIES)
|
|
|
};
|
|
|
if (FORCED) for (KEY in methods) {
|
|
|
if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {
|
|
|
redefine(IterablePrototype, KEY, methods[KEY]);
|
|
|
}
|
|
|
} else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);
|
|
|
}
|
|
|
|
|
|
return methods;
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/descriptors.js":
|
|
|
/*!*******************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/descriptors.js ***!
|
|
|
\*******************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js");
|
|
|
|
|
|
// Thank's IE8 for his funny defineProperty
|
|
|
module.exports = !fails(function () {
|
|
|
return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
|
|
|
});
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/document-create-element.js":
|
|
|
/*!*******************************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/document-create-element.js ***!
|
|
|
\*******************************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js");
|
|
|
var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js");
|
|
|
|
|
|
var document = global.document;
|
|
|
// typeof document.createElement is 'object' in old IE
|
|
|
var exist = isObject(document) && isObject(document.createElement);
|
|
|
|
|
|
module.exports = function (it) {
|
|
|
return exist ? document.createElement(it) : {};
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/enum-bug-keys.js":
|
|
|
/*!*********************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/enum-bug-keys.js ***!
|
|
|
\*********************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports) {
|
|
|
|
|
|
// IE8- don't enum bug keys
|
|
|
module.exports = [
|
|
|
'constructor',
|
|
|
'hasOwnProperty',
|
|
|
'isPrototypeOf',
|
|
|
'propertyIsEnumerable',
|
|
|
'toLocaleString',
|
|
|
'toString',
|
|
|
'valueOf'
|
|
|
];
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/export.js":
|
|
|
/*!**************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/export.js ***!
|
|
|
\**************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js");
|
|
|
var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ "./node_modules/core-js/internals/object-get-own-property-descriptor.js").f;
|
|
|
var hide = __webpack_require__(/*! ../internals/hide */ "./node_modules/core-js/internals/hide.js");
|
|
|
var redefine = __webpack_require__(/*! ../internals/redefine */ "./node_modules/core-js/internals/redefine.js");
|
|
|
var setGlobal = __webpack_require__(/*! ../internals/set-global */ "./node_modules/core-js/internals/set-global.js");
|
|
|
var copyConstructorProperties = __webpack_require__(/*! ../internals/copy-constructor-properties */ "./node_modules/core-js/internals/copy-constructor-properties.js");
|
|
|
var isForced = __webpack_require__(/*! ../internals/is-forced */ "./node_modules/core-js/internals/is-forced.js");
|
|
|
|
|
|
/*
|
|
|
options.target - name of the target object
|
|
|
options.global - target is the global object
|
|
|
options.stat - export as static methods of target
|
|
|
options.proto - export as prototype methods of target
|
|
|
options.real - real prototype method for the `pure` version
|
|
|
options.forced - export even if the native feature is available
|
|
|
options.bind - bind methods to the target, required for the `pure` version
|
|
|
options.wrap - wrap constructors to preventing global pollution, required for the `pure` version
|
|
|
options.unsafe - use the simple assignment of property instead of delete + defineProperty
|
|
|
options.sham - add a flag to not completely full polyfills
|
|
|
options.enumerable - export as enumerable property
|
|
|
options.noTargetGet - prevent calling a getter on target
|
|
|
*/
|
|
|
module.exports = function (options, source) {
|
|
|
var TARGET = options.target;
|
|
|
var GLOBAL = options.global;
|
|
|
var STATIC = options.stat;
|
|
|
var FORCED, target, key, targetProperty, sourceProperty, descriptor;
|
|
|
if (GLOBAL) {
|
|
|
target = global;
|
|
|
} else if (STATIC) {
|
|
|
target = global[TARGET] || setGlobal(TARGET, {});
|
|
|
} else {
|
|
|
target = (global[TARGET] || {}).prototype;
|
|
|
}
|
|
|
if (target) for (key in source) {
|
|
|
sourceProperty = source[key];
|
|
|
if (options.noTargetGet) {
|
|
|
descriptor = getOwnPropertyDescriptor(target, key);
|
|
|
targetProperty = descriptor && descriptor.value;
|
|
|
} else targetProperty = target[key];
|
|
|
FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);
|
|
|
// contained in target
|
|
|
if (!FORCED && targetProperty !== undefined) {
|
|
|
if (typeof sourceProperty === typeof targetProperty) continue;
|
|
|
copyConstructorProperties(sourceProperty, targetProperty);
|
|
|
}
|
|
|
// add a flag to not completely full polyfills
|
|
|
if (options.sham || (targetProperty && targetProperty.sham)) {
|
|
|
hide(sourceProperty, 'sham', true);
|
|
|
}
|
|
|
// extend global
|
|
|
redefine(target, key, sourceProperty, options);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/fails.js":
|
|
|
/*!*************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/fails.js ***!
|
|
|
\*************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports) {
|
|
|
|
|
|
module.exports = function (exec) {
|
|
|
try {
|
|
|
return !!exec();
|
|
|
} catch (error) {
|
|
|
return true;
|
|
|
}
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/function-to-string.js":
|
|
|
/*!**************************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/function-to-string.js ***!
|
|
|
\**************************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var shared = __webpack_require__(/*! ../internals/shared */ "./node_modules/core-js/internals/shared.js");
|
|
|
|
|
|
module.exports = shared('native-function-to-string', Function.toString);
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/get-iterator-method.js":
|
|
|
/*!***************************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/get-iterator-method.js ***!
|
|
|
\***************************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var classof = __webpack_require__(/*! ../internals/classof */ "./node_modules/core-js/internals/classof.js");
|
|
|
var Iterators = __webpack_require__(/*! ../internals/iterators */ "./node_modules/core-js/internals/iterators.js");
|
|
|
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js");
|
|
|
|
|
|
var ITERATOR = wellKnownSymbol('iterator');
|
|
|
|
|
|
module.exports = function (it) {
|
|
|
if (it != undefined) return it[ITERATOR]
|
|
|
|| it['@@iterator']
|
|
|
|| Iterators[classof(it)];
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/global.js":
|
|
|
/*!**************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/global.js ***!
|
|
|
\**************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
/* WEBPACK VAR INJECTION */(function(global) {var O = 'object';
|
|
|
var check = function (it) {
|
|
|
return it && it.Math == Math && it;
|
|
|
};
|
|
|
|
|
|
// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
|
|
|
module.exports =
|
|
|
// eslint-disable-next-line no-undef
|
|
|
check(typeof globalThis == O && globalThis) ||
|
|
|
check(typeof window == O && window) ||
|
|
|
check(typeof self == O && self) ||
|
|
|
check(typeof global == O && global) ||
|
|
|
// eslint-disable-next-line no-new-func
|
|
|
Function('return this')();
|
|
|
|
|
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")));
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/has.js":
|
|
|
/*!***********************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/has.js ***!
|
|
|
\***********************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports) {
|
|
|
|
|
|
var hasOwnProperty = {}.hasOwnProperty;
|
|
|
|
|
|
module.exports = function (it, key) {
|
|
|
return hasOwnProperty.call(it, key);
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/hidden-keys.js":
|
|
|
/*!*******************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/hidden-keys.js ***!
|
|
|
\*******************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports) {
|
|
|
|
|
|
module.exports = {};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/hide.js":
|
|
|
/*!************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/hide.js ***!
|
|
|
\************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js");
|
|
|
var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js/internals/object-define-property.js");
|
|
|
var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "./node_modules/core-js/internals/create-property-descriptor.js");
|
|
|
|
|
|
module.exports = DESCRIPTORS ? function (object, key, value) {
|
|
|
return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));
|
|
|
} : function (object, key, value) {
|
|
|
object[key] = value;
|
|
|
return object;
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/html.js":
|
|
|
/*!************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/html.js ***!
|
|
|
\************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js");
|
|
|
|
|
|
var document = global.document;
|
|
|
|
|
|
module.exports = document && document.documentElement;
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/ie8-dom-define.js":
|
|
|
/*!**********************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/ie8-dom-define.js ***!
|
|
|
\**********************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js");
|
|
|
var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js");
|
|
|
var createElement = __webpack_require__(/*! ../internals/document-create-element */ "./node_modules/core-js/internals/document-create-element.js");
|
|
|
|
|
|
// Thank's IE8 for his funny defineProperty
|
|
|
module.exports = !DESCRIPTORS && !fails(function () {
|
|
|
return Object.defineProperty(createElement('div'), 'a', {
|
|
|
get: function () { return 7; }
|
|
|
}).a != 7;
|
|
|
});
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/indexed-object.js":
|
|
|
/*!**********************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/indexed-object.js ***!
|
|
|
\**********************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
// fallback for non-array-like ES3 and non-enumerable old V8 strings
|
|
|
var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js");
|
|
|
var classof = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js/internals/classof-raw.js");
|
|
|
|
|
|
var split = ''.split;
|
|
|
|
|
|
module.exports = fails(function () {
|
|
|
// throws an error in rhino, see https://github.com/mozilla/rhino/issues/346
|
|
|
// eslint-disable-next-line no-prototype-builtins
|
|
|
return !Object('z').propertyIsEnumerable(0);
|
|
|
}) ? function (it) {
|
|
|
return classof(it) == 'String' ? split.call(it, '') : Object(it);
|
|
|
} : Object;
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/internal-state.js":
|
|
|
/*!**********************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/internal-state.js ***!
|
|
|
\**********************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/native-weak-map */ "./node_modules/core-js/internals/native-weak-map.js");
|
|
|
var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js");
|
|
|
var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js");
|
|
|
var hide = __webpack_require__(/*! ../internals/hide */ "./node_modules/core-js/internals/hide.js");
|
|
|
var objectHas = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js");
|
|
|
var sharedKey = __webpack_require__(/*! ../internals/shared-key */ "./node_modules/core-js/internals/shared-key.js");
|
|
|
var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "./node_modules/core-js/internals/hidden-keys.js");
|
|
|
|
|
|
var WeakMap = global.WeakMap;
|
|
|
var set, get, has;
|
|
|
|
|
|
var enforce = function (it) {
|
|
|
return has(it) ? get(it) : set(it, {});
|
|
|
};
|
|
|
|
|
|
var getterFor = function (TYPE) {
|
|
|
return function (it) {
|
|
|
var state;
|
|
|
if (!isObject(it) || (state = get(it)).type !== TYPE) {
|
|
|
throw TypeError('Incompatible receiver, ' + TYPE + ' required');
|
|
|
} return state;
|
|
|
};
|
|
|
};
|
|
|
|
|
|
if (NATIVE_WEAK_MAP) {
|
|
|
var store = new WeakMap();
|
|
|
var wmget = store.get;
|
|
|
var wmhas = store.has;
|
|
|
var wmset = store.set;
|
|
|
set = function (it, metadata) {
|
|
|
wmset.call(store, it, metadata);
|
|
|
return metadata;
|
|
|
};
|
|
|
get = function (it) {
|
|
|
return wmget.call(store, it) || {};
|
|
|
};
|
|
|
has = function (it) {
|
|
|
return wmhas.call(store, it);
|
|
|
};
|
|
|
} else {
|
|
|
var STATE = sharedKey('state');
|
|
|
hiddenKeys[STATE] = true;
|
|
|
set = function (it, metadata) {
|
|
|
hide(it, STATE, metadata);
|
|
|
return metadata;
|
|
|
};
|
|
|
get = function (it) {
|
|
|
return objectHas(it, STATE) ? it[STATE] : {};
|
|
|
};
|
|
|
has = function (it) {
|
|
|
return objectHas(it, STATE);
|
|
|
};
|
|
|
}
|
|
|
|
|
|
module.exports = {
|
|
|
set: set,
|
|
|
get: get,
|
|
|
has: has,
|
|
|
enforce: enforce,
|
|
|
getterFor: getterFor
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/is-array-iterator-method.js":
|
|
|
/*!********************************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/is-array-iterator-method.js ***!
|
|
|
\********************************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js");
|
|
|
var Iterators = __webpack_require__(/*! ../internals/iterators */ "./node_modules/core-js/internals/iterators.js");
|
|
|
|
|
|
var ITERATOR = wellKnownSymbol('iterator');
|
|
|
var ArrayPrototype = Array.prototype;
|
|
|
|
|
|
// check on default Array iterator
|
|
|
module.exports = function (it) {
|
|
|
return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/is-forced.js":
|
|
|
/*!*****************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/is-forced.js ***!
|
|
|
\*****************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js");
|
|
|
|
|
|
var replacement = /#|\.prototype\./;
|
|
|
|
|
|
var isForced = function (feature, detection) {
|
|
|
var value = data[normalize(feature)];
|
|
|
return value == POLYFILL ? true
|
|
|
: value == NATIVE ? false
|
|
|
: typeof detection == 'function' ? fails(detection)
|
|
|
: !!detection;
|
|
|
};
|
|
|
|
|
|
var normalize = isForced.normalize = function (string) {
|
|
|
return String(string).replace(replacement, '.').toLowerCase();
|
|
|
};
|
|
|
|
|
|
var data = isForced.data = {};
|
|
|
var NATIVE = isForced.NATIVE = 'N';
|
|
|
var POLYFILL = isForced.POLYFILL = 'P';
|
|
|
|
|
|
module.exports = isForced;
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/is-object.js":
|
|
|
/*!*****************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/is-object.js ***!
|
|
|
\*****************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports) {
|
|
|
|
|
|
module.exports = function (it) {
|
|
|
return typeof it === 'object' ? it !== null : typeof it === 'function';
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/is-pure.js":
|
|
|
/*!***************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/is-pure.js ***!
|
|
|
\***************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports) {
|
|
|
|
|
|
module.exports = false;
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/iterators-core.js":
|
|
|
/*!**********************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/iterators-core.js ***!
|
|
|
\**********************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ "./node_modules/core-js/internals/object-get-prototype-of.js");
|
|
|
var hide = __webpack_require__(/*! ../internals/hide */ "./node_modules/core-js/internals/hide.js");
|
|
|
var has = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js");
|
|
|
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js");
|
|
|
var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js/internals/is-pure.js");
|
|
|
|
|
|
var ITERATOR = wellKnownSymbol('iterator');
|
|
|
var BUGGY_SAFARI_ITERATORS = false;
|
|
|
|
|
|
var returnThis = function () { return this; };
|
|
|
|
|
|
// `%IteratorPrototype%` object
|
|
|
// https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object
|
|
|
var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;
|
|
|
|
|
|
if ([].keys) {
|
|
|
arrayIterator = [].keys();
|
|
|
// Safari 8 has buggy iterators w/o `next`
|
|
|
if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;
|
|
|
else {
|
|
|
PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));
|
|
|
if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (IteratorPrototype == undefined) IteratorPrototype = {};
|
|
|
|
|
|
// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
|
|
|
if (!IS_PURE && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);
|
|
|
|
|
|
module.exports = {
|
|
|
IteratorPrototype: IteratorPrototype,
|
|
|
BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/iterators.js":
|
|
|
/*!*****************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/iterators.js ***!
|
|
|
\*****************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports) {
|
|
|
|
|
|
module.exports = {};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/native-symbol.js":
|
|
|
/*!*********************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/native-symbol.js ***!
|
|
|
\*********************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js");
|
|
|
|
|
|
module.exports = !!Object.getOwnPropertySymbols && !fails(function () {
|
|
|
// Chrome 38 Symbol has incorrect toString conversion
|
|
|
// eslint-disable-next-line no-undef
|
|
|
return !String(Symbol());
|
|
|
});
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/native-weak-map.js":
|
|
|
/*!***********************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/native-weak-map.js ***!
|
|
|
\***********************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js");
|
|
|
var nativeFunctionToString = __webpack_require__(/*! ../internals/function-to-string */ "./node_modules/core-js/internals/function-to-string.js");
|
|
|
|
|
|
var WeakMap = global.WeakMap;
|
|
|
|
|
|
module.exports = typeof WeakMap === 'function' && /native code/.test(nativeFunctionToString.call(WeakMap));
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/object-create.js":
|
|
|
/*!*********************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/object-create.js ***!
|
|
|
\*********************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js");
|
|
|
var defineProperties = __webpack_require__(/*! ../internals/object-define-properties */ "./node_modules/core-js/internals/object-define-properties.js");
|
|
|
var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ "./node_modules/core-js/internals/enum-bug-keys.js");
|
|
|
var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "./node_modules/core-js/internals/hidden-keys.js");
|
|
|
var html = __webpack_require__(/*! ../internals/html */ "./node_modules/core-js/internals/html.js");
|
|
|
var documentCreateElement = __webpack_require__(/*! ../internals/document-create-element */ "./node_modules/core-js/internals/document-create-element.js");
|
|
|
var sharedKey = __webpack_require__(/*! ../internals/shared-key */ "./node_modules/core-js/internals/shared-key.js");
|
|
|
var IE_PROTO = sharedKey('IE_PROTO');
|
|
|
|
|
|
var PROTOTYPE = 'prototype';
|
|
|
var Empty = function () { /* empty */ };
|
|
|
|
|
|
// Create object with fake `null` prototype: use iframe Object with cleared prototype
|
|
|
var createDict = function () {
|
|
|
// Thrash, waste and sodomy: IE GC bug
|
|
|
var iframe = documentCreateElement('iframe');
|
|
|
var length = enumBugKeys.length;
|
|
|
var lt = '<';
|
|
|
var script = 'script';
|
|
|
var gt = '>';
|
|
|
var js = 'java' + script + ':';
|
|
|
var iframeDocument;
|
|
|
iframe.style.display = 'none';
|
|
|
html.appendChild(iframe);
|
|
|
iframe.src = String(js);
|
|
|
iframeDocument = iframe.contentWindow.document;
|
|
|
iframeDocument.open();
|
|
|
iframeDocument.write(lt + script + gt + 'document.F=Object' + lt + '/' + script + gt);
|
|
|
iframeDocument.close();
|
|
|
createDict = iframeDocument.F;
|
|
|
while (length--) delete createDict[PROTOTYPE][enumBugKeys[length]];
|
|
|
return createDict();
|
|
|
};
|
|
|
|
|
|
// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
|
|
|
module.exports = Object.create || function create(O, Properties) {
|
|
|
var result;
|
|
|
if (O !== null) {
|
|
|
Empty[PROTOTYPE] = anObject(O);
|
|
|
result = new Empty();
|
|
|
Empty[PROTOTYPE] = null;
|
|
|
// add "__proto__" for Object.getPrototypeOf polyfill
|
|
|
result[IE_PROTO] = O;
|
|
|
} else result = createDict();
|
|
|
return Properties === undefined ? result : defineProperties(result, Properties);
|
|
|
};
|
|
|
|
|
|
hiddenKeys[IE_PROTO] = true;
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/object-define-properties.js":
|
|
|
/*!********************************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/object-define-properties.js ***!
|
|
|
\********************************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js");
|
|
|
var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js/internals/object-define-property.js");
|
|
|
var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js");
|
|
|
var objectKeys = __webpack_require__(/*! ../internals/object-keys */ "./node_modules/core-js/internals/object-keys.js");
|
|
|
|
|
|
module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {
|
|
|
anObject(O);
|
|
|
var keys = objectKeys(Properties);
|
|
|
var length = keys.length;
|
|
|
var i = 0;
|
|
|
var key;
|
|
|
while (length > i) definePropertyModule.f(O, key = keys[i++], Properties[key]);
|
|
|
return O;
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/object-define-property.js":
|
|
|
/*!******************************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/object-define-property.js ***!
|
|
|
\******************************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js");
|
|
|
var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ "./node_modules/core-js/internals/ie8-dom-define.js");
|
|
|
var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js");
|
|
|
var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ "./node_modules/core-js/internals/to-primitive.js");
|
|
|
|
|
|
var nativeDefineProperty = Object.defineProperty;
|
|
|
|
|
|
exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) {
|
|
|
anObject(O);
|
|
|
P = toPrimitive(P, true);
|
|
|
anObject(Attributes);
|
|
|
if (IE8_DOM_DEFINE) try {
|
|
|
return nativeDefineProperty(O, P, Attributes);
|
|
|
} catch (error) { /* empty */ }
|
|
|
if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');
|
|
|
if ('value' in Attributes) O[P] = Attributes.value;
|
|
|
return O;
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/object-get-own-property-descriptor.js":
|
|
|
/*!******************************************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/object-get-own-property-descriptor.js ***!
|
|
|
\******************************************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js");
|
|
|
var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ "./node_modules/core-js/internals/object-property-is-enumerable.js");
|
|
|
var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "./node_modules/core-js/internals/create-property-descriptor.js");
|
|
|
var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js/internals/to-indexed-object.js");
|
|
|
var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ "./node_modules/core-js/internals/to-primitive.js");
|
|
|
var has = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js");
|
|
|
var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ "./node_modules/core-js/internals/ie8-dom-define.js");
|
|
|
|
|
|
var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
|
|
|
|
|
|
exports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {
|
|
|
O = toIndexedObject(O);
|
|
|
P = toPrimitive(P, true);
|
|
|
if (IE8_DOM_DEFINE) try {
|
|
|
return nativeGetOwnPropertyDescriptor(O, P);
|
|
|
} catch (error) { /* empty */ }
|
|
|
if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/object-get-own-property-names.js":
|
|
|
/*!*************************************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/object-get-own-property-names.js ***!
|
|
|
\*************************************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
|
|
|
var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ "./node_modules/core-js/internals/object-keys-internal.js");
|
|
|
var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ "./node_modules/core-js/internals/enum-bug-keys.js");
|
|
|
|
|
|
var hiddenKeys = enumBugKeys.concat('length', 'prototype');
|
|
|
|
|
|
exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
|
|
|
return internalObjectKeys(O, hiddenKeys);
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/object-get-own-property-symbols.js":
|
|
|
/*!***************************************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/object-get-own-property-symbols.js ***!
|
|
|
\***************************************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports) {
|
|
|
|
|
|
exports.f = Object.getOwnPropertySymbols;
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/object-get-prototype-of.js":
|
|
|
/*!*******************************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/object-get-prototype-of.js ***!
|
|
|
\*******************************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var has = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js");
|
|
|
var toObject = __webpack_require__(/*! ../internals/to-object */ "./node_modules/core-js/internals/to-object.js");
|
|
|
var sharedKey = __webpack_require__(/*! ../internals/shared-key */ "./node_modules/core-js/internals/shared-key.js");
|
|
|
var CORRECT_PROTOTYPE_GETTER = __webpack_require__(/*! ../internals/correct-prototype-getter */ "./node_modules/core-js/internals/correct-prototype-getter.js");
|
|
|
|
|
|
var IE_PROTO = sharedKey('IE_PROTO');
|
|
|
var ObjectPrototype = Object.prototype;
|
|
|
|
|
|
// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
|
|
|
module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {
|
|
|
O = toObject(O);
|
|
|
if (has(O, IE_PROTO)) return O[IE_PROTO];
|
|
|
if (typeof O.constructor == 'function' && O instanceof O.constructor) {
|
|
|
return O.constructor.prototype;
|
|
|
} return O instanceof Object ? ObjectPrototype : null;
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/object-keys-internal.js":
|
|
|
/*!****************************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/object-keys-internal.js ***!
|
|
|
\****************************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var has = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js");
|
|
|
var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js/internals/to-indexed-object.js");
|
|
|
var arrayIncludes = __webpack_require__(/*! ../internals/array-includes */ "./node_modules/core-js/internals/array-includes.js");
|
|
|
var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "./node_modules/core-js/internals/hidden-keys.js");
|
|
|
|
|
|
var arrayIndexOf = arrayIncludes(false);
|
|
|
|
|
|
module.exports = function (object, names) {
|
|
|
var O = toIndexedObject(object);
|
|
|
var i = 0;
|
|
|
var result = [];
|
|
|
var key;
|
|
|
for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);
|
|
|
// Don't enum bug & hidden keys
|
|
|
while (names.length > i) if (has(O, key = names[i++])) {
|
|
|
~arrayIndexOf(result, key) || result.push(key);
|
|
|
}
|
|
|
return result;
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/object-keys.js":
|
|
|
/*!*******************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/object-keys.js ***!
|
|
|
\*******************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ "./node_modules/core-js/internals/object-keys-internal.js");
|
|
|
var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ "./node_modules/core-js/internals/enum-bug-keys.js");
|
|
|
|
|
|
// 19.1.2.14 / 15.2.3.14 Object.keys(O)
|
|
|
module.exports = Object.keys || function keys(O) {
|
|
|
return internalObjectKeys(O, enumBugKeys);
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/object-property-is-enumerable.js":
|
|
|
/*!*************************************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/object-property-is-enumerable.js ***!
|
|
|
\*************************************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var nativePropertyIsEnumerable = {}.propertyIsEnumerable;
|
|
|
var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
|
|
|
|
|
|
// Nashorn ~ JDK8 bug
|
|
|
var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);
|
|
|
|
|
|
exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {
|
|
|
var descriptor = getOwnPropertyDescriptor(this, V);
|
|
|
return !!descriptor && descriptor.enumerable;
|
|
|
} : nativePropertyIsEnumerable;
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/object-set-prototype-of.js":
|
|
|
/*!*******************************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/object-set-prototype-of.js ***!
|
|
|
\*******************************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var validateSetPrototypeOfArguments = __webpack_require__(/*! ../internals/validate-set-prototype-of-arguments */ "./node_modules/core-js/internals/validate-set-prototype-of-arguments.js");
|
|
|
|
|
|
// Works with __proto__ only. Old v8 can't work with null proto objects.
|
|
|
/* eslint-disable no-proto */
|
|
|
module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {
|
|
|
var correctSetter = false;
|
|
|
var test = {};
|
|
|
var setter;
|
|
|
try {
|
|
|
setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;
|
|
|
setter.call(test, []);
|
|
|
correctSetter = test instanceof Array;
|
|
|
} catch (error) { /* empty */ }
|
|
|
return function setPrototypeOf(O, proto) {
|
|
|
validateSetPrototypeOfArguments(O, proto);
|
|
|
if (correctSetter) setter.call(O, proto);
|
|
|
else O.__proto__ = proto;
|
|
|
return O;
|
|
|
};
|
|
|
}() : undefined);
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/own-keys.js":
|
|
|
/*!****************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/own-keys.js ***!
|
|
|
\****************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js");
|
|
|
var getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ "./node_modules/core-js/internals/object-get-own-property-names.js");
|
|
|
var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ "./node_modules/core-js/internals/object-get-own-property-symbols.js");
|
|
|
var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js");
|
|
|
|
|
|
var Reflect = global.Reflect;
|
|
|
|
|
|
// all object keys, includes non-enumerable and symbols
|
|
|
module.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {
|
|
|
var keys = getOwnPropertyNamesModule.f(anObject(it));
|
|
|
var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
|
|
|
return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/path.js":
|
|
|
/*!************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/path.js ***!
|
|
|
\************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
module.exports = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js");
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/redefine.js":
|
|
|
/*!****************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/redefine.js ***!
|
|
|
\****************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js");
|
|
|
var shared = __webpack_require__(/*! ../internals/shared */ "./node_modules/core-js/internals/shared.js");
|
|
|
var hide = __webpack_require__(/*! ../internals/hide */ "./node_modules/core-js/internals/hide.js");
|
|
|
var has = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js");
|
|
|
var setGlobal = __webpack_require__(/*! ../internals/set-global */ "./node_modules/core-js/internals/set-global.js");
|
|
|
var nativeFunctionToString = __webpack_require__(/*! ../internals/function-to-string */ "./node_modules/core-js/internals/function-to-string.js");
|
|
|
var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "./node_modules/core-js/internals/internal-state.js");
|
|
|
|
|
|
var getInternalState = InternalStateModule.get;
|
|
|
var enforceInternalState = InternalStateModule.enforce;
|
|
|
var TEMPLATE = String(nativeFunctionToString).split('toString');
|
|
|
|
|
|
shared('inspectSource', function (it) {
|
|
|
return nativeFunctionToString.call(it);
|
|
|
});
|
|
|
|
|
|
(module.exports = function (O, key, value, options) {
|
|
|
var unsafe = options ? !!options.unsafe : false;
|
|
|
var simple = options ? !!options.enumerable : false;
|
|
|
var noTargetGet = options ? !!options.noTargetGet : false;
|
|
|
if (typeof value == 'function') {
|
|
|
if (typeof key == 'string' && !has(value, 'name')) hide(value, 'name', key);
|
|
|
enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : '');
|
|
|
}
|
|
|
if (O === global) {
|
|
|
if (simple) O[key] = value;
|
|
|
else setGlobal(key, value);
|
|
|
return;
|
|
|
} else if (!unsafe) {
|
|
|
delete O[key];
|
|
|
} else if (!noTargetGet && O[key]) {
|
|
|
simple = true;
|
|
|
}
|
|
|
if (simple) O[key] = value;
|
|
|
else hide(O, key, value);
|
|
|
// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
|
|
|
})(Function.prototype, 'toString', function toString() {
|
|
|
return typeof this == 'function' && getInternalState(this).source || nativeFunctionToString.call(this);
|
|
|
});
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/require-object-coercible.js":
|
|
|
/*!********************************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/require-object-coercible.js ***!
|
|
|
\********************************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports) {
|
|
|
|
|
|
// `RequireObjectCoercible` abstract operation
|
|
|
// https://tc39.github.io/ecma262/#sec-requireobjectcoercible
|
|
|
module.exports = function (it) {
|
|
|
if (it == undefined) throw TypeError("Can't call method on " + it);
|
|
|
return it;
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/set-global.js":
|
|
|
/*!******************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/set-global.js ***!
|
|
|
\******************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js");
|
|
|
var hide = __webpack_require__(/*! ../internals/hide */ "./node_modules/core-js/internals/hide.js");
|
|
|
|
|
|
module.exports = function (key, value) {
|
|
|
try {
|
|
|
hide(global, key, value);
|
|
|
} catch (error) {
|
|
|
global[key] = value;
|
|
|
} return value;
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/set-to-string-tag.js":
|
|
|
/*!*************************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/set-to-string-tag.js ***!
|
|
|
\*************************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js/internals/object-define-property.js").f;
|
|
|
var has = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js");
|
|
|
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js");
|
|
|
|
|
|
var TO_STRING_TAG = wellKnownSymbol('toStringTag');
|
|
|
|
|
|
module.exports = function (it, TAG, STATIC) {
|
|
|
if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {
|
|
|
defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });
|
|
|
}
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/shared-key.js":
|
|
|
/*!******************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/shared-key.js ***!
|
|
|
\******************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var shared = __webpack_require__(/*! ../internals/shared */ "./node_modules/core-js/internals/shared.js");
|
|
|
var uid = __webpack_require__(/*! ../internals/uid */ "./node_modules/core-js/internals/uid.js");
|
|
|
|
|
|
var keys = shared('keys');
|
|
|
|
|
|
module.exports = function (key) {
|
|
|
return keys[key] || (keys[key] = uid(key));
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/shared.js":
|
|
|
/*!**************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/shared.js ***!
|
|
|
\**************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js");
|
|
|
var setGlobal = __webpack_require__(/*! ../internals/set-global */ "./node_modules/core-js/internals/set-global.js");
|
|
|
var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js/internals/is-pure.js");
|
|
|
|
|
|
var SHARED = '__core-js_shared__';
|
|
|
var store = global[SHARED] || setGlobal(SHARED, {});
|
|
|
|
|
|
(module.exports = function (key, value) {
|
|
|
return store[key] || (store[key] = value !== undefined ? value : {});
|
|
|
})('versions', []).push({
|
|
|
version: '3.1.3',
|
|
|
mode: IS_PURE ? 'pure' : 'global',
|
|
|
copyright: '© 2019 Denis Pushkarev (zloirock.ru)'
|
|
|
});
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/string-at.js":
|
|
|
/*!*****************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/string-at.js ***!
|
|
|
\*****************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var toInteger = __webpack_require__(/*! ../internals/to-integer */ "./node_modules/core-js/internals/to-integer.js");
|
|
|
var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "./node_modules/core-js/internals/require-object-coercible.js");
|
|
|
|
|
|
// CONVERT_TO_STRING: true -> String#at
|
|
|
// CONVERT_TO_STRING: false -> String#codePointAt
|
|
|
module.exports = function (that, pos, CONVERT_TO_STRING) {
|
|
|
var S = String(requireObjectCoercible(that));
|
|
|
var position = toInteger(pos);
|
|
|
var size = S.length;
|
|
|
var first, second;
|
|
|
if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;
|
|
|
first = S.charCodeAt(position);
|
|
|
return first < 0xD800 || first > 0xDBFF || position + 1 === size
|
|
|
|| (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF
|
|
|
? CONVERT_TO_STRING ? S.charAt(position) : first
|
|
|
: CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/to-absolute-index.js":
|
|
|
/*!*************************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/to-absolute-index.js ***!
|
|
|
\*************************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var toInteger = __webpack_require__(/*! ../internals/to-integer */ "./node_modules/core-js/internals/to-integer.js");
|
|
|
|
|
|
var max = Math.max;
|
|
|
var min = Math.min;
|
|
|
|
|
|
// Helper for a popular repeating case of the spec:
|
|
|
// Let integer be ? ToInteger(index).
|
|
|
// If integer < 0, let result be max((length + integer), 0); else let result be min(length, length).
|
|
|
module.exports = function (index, length) {
|
|
|
var integer = toInteger(index);
|
|
|
return integer < 0 ? max(integer + length, 0) : min(integer, length);
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/to-indexed-object.js":
|
|
|
/*!*************************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/to-indexed-object.js ***!
|
|
|
\*************************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
// toObject with fallback for non-array-like ES3 strings
|
|
|
var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ "./node_modules/core-js/internals/indexed-object.js");
|
|
|
var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "./node_modules/core-js/internals/require-object-coercible.js");
|
|
|
|
|
|
module.exports = function (it) {
|
|
|
return IndexedObject(requireObjectCoercible(it));
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/to-integer.js":
|
|
|
/*!******************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/to-integer.js ***!
|
|
|
\******************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports) {
|
|
|
|
|
|
var ceil = Math.ceil;
|
|
|
var floor = Math.floor;
|
|
|
|
|
|
// `ToInteger` abstract operation
|
|
|
// https://tc39.github.io/ecma262/#sec-tointeger
|
|
|
module.exports = function (argument) {
|
|
|
return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/to-length.js":
|
|
|
/*!*****************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/to-length.js ***!
|
|
|
\*****************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var toInteger = __webpack_require__(/*! ../internals/to-integer */ "./node_modules/core-js/internals/to-integer.js");
|
|
|
|
|
|
var min = Math.min;
|
|
|
|
|
|
// `ToLength` abstract operation
|
|
|
// https://tc39.github.io/ecma262/#sec-tolength
|
|
|
module.exports = function (argument) {
|
|
|
return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/to-object.js":
|
|
|
/*!*****************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/to-object.js ***!
|
|
|
\*****************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "./node_modules/core-js/internals/require-object-coercible.js");
|
|
|
|
|
|
// `ToObject` abstract operation
|
|
|
// https://tc39.github.io/ecma262/#sec-toobject
|
|
|
module.exports = function (argument) {
|
|
|
return Object(requireObjectCoercible(argument));
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/to-primitive.js":
|
|
|
/*!********************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/to-primitive.js ***!
|
|
|
\********************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js");
|
|
|
|
|
|
// 7.1.1 ToPrimitive(input [, PreferredType])
|
|
|
// instead of the ES6 spec version, we didn't implement @@toPrimitive case
|
|
|
// and the second argument - flag - preferred type is a string
|
|
|
module.exports = function (it, S) {
|
|
|
if (!isObject(it)) return it;
|
|
|
var fn, val;
|
|
|
if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
|
|
|
if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
|
|
|
if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
|
|
|
throw TypeError("Can't convert object to primitive value");
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/uid.js":
|
|
|
/*!***********************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/uid.js ***!
|
|
|
\***********************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports) {
|
|
|
|
|
|
var id = 0;
|
|
|
var postfix = Math.random();
|
|
|
|
|
|
module.exports = function (key) {
|
|
|
return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + postfix).toString(36));
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/validate-set-prototype-of-arguments.js":
|
|
|
/*!*******************************************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/validate-set-prototype-of-arguments.js ***!
|
|
|
\*******************************************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js");
|
|
|
var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js");
|
|
|
|
|
|
module.exports = function (O, proto) {
|
|
|
anObject(O);
|
|
|
if (!isObject(proto) && proto !== null) {
|
|
|
throw TypeError("Can't set " + String(proto) + ' as a prototype');
|
|
|
}
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/internals/well-known-symbol.js":
|
|
|
/*!*************************************************************!*\
|
|
|
!*** ./node_modules/core-js/internals/well-known-symbol.js ***!
|
|
|
\*************************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js");
|
|
|
var shared = __webpack_require__(/*! ../internals/shared */ "./node_modules/core-js/internals/shared.js");
|
|
|
var uid = __webpack_require__(/*! ../internals/uid */ "./node_modules/core-js/internals/uid.js");
|
|
|
var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ "./node_modules/core-js/internals/native-symbol.js");
|
|
|
|
|
|
var Symbol = global.Symbol;
|
|
|
var store = shared('wks');
|
|
|
|
|
|
module.exports = function (name) {
|
|
|
return store[name] || (store[name] = NATIVE_SYMBOL && Symbol[name]
|
|
|
|| (NATIVE_SYMBOL ? Symbol : uid)('Symbol.' + name));
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/modules/es.array.from.js":
|
|
|
/*!*******************************************************!*\
|
|
|
!*** ./node_modules/core-js/modules/es.array.from.js ***!
|
|
|
\*******************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js");
|
|
|
var from = __webpack_require__(/*! ../internals/array-from */ "./node_modules/core-js/internals/array-from.js");
|
|
|
var checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ "./node_modules/core-js/internals/check-correctness-of-iteration.js");
|
|
|
|
|
|
var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {
|
|
|
Array.from(iterable);
|
|
|
});
|
|
|
|
|
|
// `Array.from` method
|
|
|
// https://tc39.github.io/ecma262/#sec-array.from
|
|
|
$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {
|
|
|
from: from
|
|
|
});
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/core-js/modules/es.string.iterator.js":
|
|
|
/*!************************************************************!*\
|
|
|
!*** ./node_modules/core-js/modules/es.string.iterator.js ***!
|
|
|
\************************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
var codePointAt = __webpack_require__(/*! ../internals/string-at */ "./node_modules/core-js/internals/string-at.js");
|
|
|
var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "./node_modules/core-js/internals/internal-state.js");
|
|
|
var defineIterator = __webpack_require__(/*! ../internals/define-iterator */ "./node_modules/core-js/internals/define-iterator.js");
|
|
|
|
|
|
var STRING_ITERATOR = 'String Iterator';
|
|
|
var setInternalState = InternalStateModule.set;
|
|
|
var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);
|
|
|
|
|
|
// `String.prototype[@@iterator]` method
|
|
|
// https://tc39.github.io/ecma262/#sec-string.prototype-@@iterator
|
|
|
defineIterator(String, 'String', function (iterated) {
|
|
|
setInternalState(this, {
|
|
|
type: STRING_ITERATOR,
|
|
|
string: String(iterated),
|
|
|
index: 0
|
|
|
});
|
|
|
// `%StringIteratorPrototype%.next` method
|
|
|
// https://tc39.github.io/ecma262/#sec-%stringiteratorprototype%.next
|
|
|
}, function next() {
|
|
|
var state = getInternalState(this);
|
|
|
var string = state.string;
|
|
|
var index = state.index;
|
|
|
var point;
|
|
|
if (index >= string.length) return { value: undefined, done: true };
|
|
|
point = codePointAt(string, index, true);
|
|
|
state.index += point.length;
|
|
|
return { value: point, done: false };
|
|
|
});
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/webpack/buildin/global.js":
|
|
|
/*!***********************************!*\
|
|
|
!*** (webpack)/buildin/global.js ***!
|
|
|
\***********************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports) {
|
|
|
|
|
|
var g;
|
|
|
|
|
|
// This works in non-strict mode
|
|
|
g = (function() {
|
|
|
return this;
|
|
|
})();
|
|
|
|
|
|
try {
|
|
|
// This works if eval is allowed (see CSP)
|
|
|
g = g || Function("return this")() || (1, eval)("this");
|
|
|
} catch (e) {
|
|
|
// This works if the window reference is available
|
|
|
if (typeof window === "object") g = window;
|
|
|
}
|
|
|
|
|
|
// g can still be undefined, but nothing to do about it...
|
|
|
// We return undefined, instead of nothing here, so it's
|
|
|
// easier to handle this case. if(!global) { ...}
|
|
|
|
|
|
module.exports = g;
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./src/default-attrs.json":
|
|
|
/*!********************************!*\
|
|
|
!*** ./src/default-attrs.json ***!
|
|
|
\********************************/
|
|
|
/*! exports provided: xmlns, width, height, viewBox, fill, stroke, stroke-width, stroke-linecap, stroke-linejoin, default */
|
|
|
/***/ (function(module) {
|
|
|
|
|
|
module.exports = {"xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./src/icon.js":
|
|
|
/*!*********************!*\
|
|
|
!*** ./src/icon.js ***!
|
|
|
\*********************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
|
value: true
|
|
|
});
|
|
|
|
|
|
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
|
|
|
|
|
|
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
|
|
|
|
|
var _dedupe = __webpack_require__(/*! classnames/dedupe */ "./node_modules/classnames/dedupe.js");
|
|
|
|
|
|
var _dedupe2 = _interopRequireDefault(_dedupe);
|
|
|
|
|
|
var _defaultAttrs = __webpack_require__(/*! ./default-attrs.json */ "./src/default-attrs.json");
|
|
|
|
|
|
var _defaultAttrs2 = _interopRequireDefault(_defaultAttrs);
|
|
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
|
|
var Icon = function () {
|
|
|
function Icon(name, contents) {
|
|
|
var tags = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
|
|
|
|
_classCallCheck(this, Icon);
|
|
|
|
|
|
this.name = name;
|
|
|
this.contents = contents;
|
|
|
this.tags = tags;
|
|
|
this.attrs = _extends({}, _defaultAttrs2.default, { class: 'feather feather-' + name });
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Create an SVG string.
|
|
|
* @param {Object} attrs
|
|
|
* @returns {string}
|
|
|
*/
|
|
|
|
|
|
|
|
|
_createClass(Icon, [{
|
|
|
key: 'toSvg',
|
|
|
value: function toSvg() {
|
|
|
var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
|
|
|
|
var combinedAttrs = _extends({}, this.attrs, attrs, { class: (0, _dedupe2.default)(this.attrs.class, attrs.class) });
|
|
|
|
|
|
return '<svg ' + attrsToString(combinedAttrs) + '>' + this.contents + '</svg>';
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Return string representation of an `Icon`.
|
|
|
*
|
|
|
* Added for backward compatibility. If old code expects `feather.icons.<name>`
|
|
|
* to be a string, `toString()` will get implicitly called.
|
|
|
*
|
|
|
* @returns {string}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: 'toString',
|
|
|
value: function toString() {
|
|
|
return this.contents;
|
|
|
}
|
|
|
}]);
|
|
|
|
|
|
return Icon;
|
|
|
}();
|
|
|
|
|
|
/**
|
|
|
* Convert attributes object to string of HTML attributes.
|
|
|
* @param {Object} attrs
|
|
|
* @returns {string}
|
|
|
*/
|
|
|
|
|
|
|
|
|
function attrsToString(attrs) {
|
|
|
return Object.keys(attrs).map(function (key) {
|
|
|
return key + '="' + attrs[key] + '"';
|
|
|
}).join(' ');
|
|
|
}
|
|
|
|
|
|
exports.default = Icon;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./src/icons.js":
|
|
|
/*!**********************!*\
|
|
|
!*** ./src/icons.js ***!
|
|
|
\**********************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
|
value: true
|
|
|
});
|
|
|
|
|
|
var _icon = __webpack_require__(/*! ./icon */ "./src/icon.js");
|
|
|
|
|
|
var _icon2 = _interopRequireDefault(_icon);
|
|
|
|
|
|
var _icons = __webpack_require__(/*! ../dist/icons.json */ "./dist/icons.json");
|
|
|
|
|
|
var _icons2 = _interopRequireDefault(_icons);
|
|
|
|
|
|
var _tags = __webpack_require__(/*! ./tags.json */ "./src/tags.json");
|
|
|
|
|
|
var _tags2 = _interopRequireDefault(_tags);
|
|
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
|
|
exports.default = Object.keys(_icons2.default).map(function (key) {
|
|
|
return new _icon2.default(key, _icons2.default[key], _tags2.default[key]);
|
|
|
}).reduce(function (object, icon) {
|
|
|
object[icon.name] = icon;
|
|
|
return object;
|
|
|
}, {});
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./src/index.js":
|
|
|
/*!**********************!*\
|
|
|
!*** ./src/index.js ***!
|
|
|
\**********************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
var _icons = __webpack_require__(/*! ./icons */ "./src/icons.js");
|
|
|
|
|
|
var _icons2 = _interopRequireDefault(_icons);
|
|
|
|
|
|
var _toSvg = __webpack_require__(/*! ./to-svg */ "./src/to-svg.js");
|
|
|
|
|
|
var _toSvg2 = _interopRequireDefault(_toSvg);
|
|
|
|
|
|
var _replace = __webpack_require__(/*! ./replace */ "./src/replace.js");
|
|
|
|
|
|
var _replace2 = _interopRequireDefault(_replace);
|
|
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
|
|
module.exports = { icons: _icons2.default, toSvg: _toSvg2.default, replace: _replace2.default };
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./src/replace.js":
|
|
|
/*!************************!*\
|
|
|
!*** ./src/replace.js ***!
|
|
|
\************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
|
value: true
|
|
|
});
|
|
|
|
|
|
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /* eslint-env browser */
|
|
|
|
|
|
|
|
|
var _dedupe = __webpack_require__(/*! classnames/dedupe */ "./node_modules/classnames/dedupe.js");
|
|
|
|
|
|
var _dedupe2 = _interopRequireDefault(_dedupe);
|
|
|
|
|
|
var _icons = __webpack_require__(/*! ./icons */ "./src/icons.js");
|
|
|
|
|
|
var _icons2 = _interopRequireDefault(_icons);
|
|
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
|
|
/**
|
|
|
* Replace all HTML elements that have a `data-feather` attribute with SVG markup
|
|
|
* corresponding to the element's `data-feather` attribute value.
|
|
|
* @param {Object} attrs
|
|
|
*/
|
|
|
function replace() {
|
|
|
var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
|
|
|
|
if (typeof document === 'undefined') {
|
|
|
throw new Error('`feather.replace()` only works in a browser environment.');
|
|
|
}
|
|
|
|
|
|
var elementsToReplace = document.querySelectorAll('[data-feather]');
|
|
|
|
|
|
Array.from(elementsToReplace).forEach(function (element) {
|
|
|
return replaceElement(element, attrs);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Replace a single HTML element with SVG markup
|
|
|
* corresponding to the element's `data-feather` attribute value.
|
|
|
* @param {HTMLElement} element
|
|
|
* @param {Object} attrs
|
|
|
*/
|
|
|
function replaceElement(element) {
|
|
|
var attrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
|
|
|
|
var elementAttrs = getAttrs(element);
|
|
|
var name = elementAttrs['data-feather'];
|
|
|
delete elementAttrs['data-feather'];
|
|
|
|
|
|
var svgString = _icons2.default[name].toSvg(_extends({}, attrs, elementAttrs, { class: (0, _dedupe2.default)(attrs.class, elementAttrs.class) }));
|
|
|
var svgDocument = new DOMParser().parseFromString(svgString, 'image/svg+xml');
|
|
|
var svgElement = svgDocument.querySelector('svg');
|
|
|
|
|
|
element.parentNode.replaceChild(svgElement, element);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Get the attributes of an HTML element.
|
|
|
* @param {HTMLElement} element
|
|
|
* @returns {Object}
|
|
|
*/
|
|
|
function getAttrs(element) {
|
|
|
return Array.from(element.attributes).reduce(function (attrs, attr) {
|
|
|
attrs[attr.name] = attr.value;
|
|
|
return attrs;
|
|
|
}, {});
|
|
|
}
|
|
|
|
|
|
exports.default = replace;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./src/tags.json":
|
|
|
/*!***********************!*\
|
|
|
!*** ./src/tags.json ***!
|
|
|
\***********************/
|
|
|
/*! exports provided: activity, airplay, alert-circle, alert-octagon, alert-triangle, align-center, align-justify, align-left, align-right, anchor, archive, at-sign, award, aperture, bar-chart, bar-chart-2, battery, battery-charging, bell, bell-off, bluetooth, book-open, book, bookmark, box, briefcase, calendar, camera, cast, circle, clipboard, clock, cloud-drizzle, cloud-lightning, cloud-rain, cloud-snow, cloud, codepen, codesandbox, code, coffee, columns, command, compass, copy, corner-down-left, corner-down-right, corner-left-down, corner-left-up, corner-right-down, corner-right-up, corner-up-left, corner-up-right, cpu, credit-card, crop, crosshair, database, delete, disc, dollar-sign, droplet, edit, edit-2, edit-3, eye, eye-off, external-link, facebook, fast-forward, figma, file-minus, file-plus, file-text, film, filter, flag, folder-minus, folder-plus, folder, framer, frown, gift, git-branch, git-commit, git-merge, git-pull-request, github, gitlab, globe, hard-drive, hash, headphones, heart, help-circle, hexagon, home, image, inbox, instagram, key, layers, layout, life-bouy, link, link-2, linkedin, list, lock, log-in, log-out, mail, map-pin, map, maximize, maximize-2, meh, menu, message-circle, message-square, mic-off, mic, minimize, minimize-2, minus, monitor, moon, more-horizontal, more-vertical, mouse-pointer, move, music, navigation, navigation-2, octagon, package, paperclip, pause, pause-circle, pen-tool, percent, phone-call, phone-forwarded, phone-incoming, phone-missed, phone-off, phone-outgoing, phone, play, pie-chart, play-circle, plus, plus-circle, plus-square, pocket, power, printer, radio, refresh-cw, refresh-ccw, repeat, rewind, rotate-ccw, rotate-cw, rss, save, scissors, search, send, settings, share-2, shield, shield-off, shopping-bag, shopping-cart, shuffle, skip-back, skip-forward, slack, slash, sliders, smartphone, smile, speaker, star, stop-circle, sun, sunrise, sunset, tablet, tag, target, terminal, thermometer, thumbs-down, thumbs-up, toggle-left, toggle-right, tool, trash, trash-2, triangle, truck, tv, twitch, twitter, type, umbrella, unlock, user-check, user-minus, user-plus, user-x, user, users, video-off, video, voicemail, volume, volume-1, volume-2, volume-x, watch, wifi-off, wifi, wind, x-circle, x-octagon, x-square, x, youtube, zap-off, zap, zoom-in, zoom-out, default */
|
|
|
/***/ (function(module) {
|
|
|
|
|
|
module.exports = {"activity":["pulse","health","action","motion"],"airplay":["stream","cast","mirroring"],"alert-circle":["warning","alert","danger"],"alert-octagon":["warning","alert","danger"],"alert-triangle":["warning","alert","danger"],"align-center":["text alignment","center"],"align-justify":["text alignment","justified"],"align-left":["text alignment","left"],"align-right":["text alignment","right"],"anchor":[],"archive":["index","box"],"at-sign":["mention","at","email","message"],"award":["achievement","badge"],"aperture":["camera","photo"],"bar-chart":["statistics","diagram","graph"],"bar-chart-2":["statistics","diagram","graph"],"battery":["power","electricity"],"battery-charging":["power","electricity"],"bell":["alarm","notification","sound"],"bell-off":["alarm","notification","silent"],"bluetooth":["wireless"],"book-open":["read","library"],"book":["read","dictionary","booklet","magazine","library"],"bookmark":["read","clip","marker","tag"],"box":["cube"],"briefcase":["work","bag","baggage","folder"],"calendar":["date"],"camera":["photo"],"cast":["chromecast","airplay"],"circle":["off","zero","record"],"clipboard":["copy"],"clock":["time","watch","alarm"],"cloud-drizzle":["weather","shower"],"cloud-lightning":["weather","bolt"],"cloud-rain":["weather"],"cloud-snow":["weather","blizzard"],"cloud":["weather"],"codepen":["logo"],"codesandbox":["logo"],"code":["source","programming"],"coffee":["drink","cup","mug","tea","cafe","hot","beverage"],"columns":["layout"],"command":["keyboard","cmd","terminal","prompt"],"compass":["navigation","safari","travel","direction"],"copy":["clone","duplicate"],"corner-down-left":["arrow","return"],"corner-down-right":["arrow"],"corner-left-down":["arrow"],"corner-left-up":["arrow"],"corner-right-down":["arrow"],"corner-right-up":["arrow"],"corner-up-left":["arrow"],"corner-up-right":["arrow"],"cpu":["processor","technology"],"credit-card":["purchase","payment","cc"],"crop":["photo","image"],"crosshair":["aim","target"],"database":["storage","memory"],"delete":["remove"],"disc":["album","cd","dvd","music"],"dollar-sign":["currency","money","payment"],"droplet":["water"],"edit":["pencil","change"],"edit-2":["pencil","change"],"edit-3":["pencil","change"],"eye":["view","watch"],"eye-off":["view","watch","hide","hidden"],"external-link":["outbound"],"facebook":["logo","social"],"fast-forward":["music"],"figma":["logo","design","tool"],"file-minus":["delete","remove","erase"],"file-plus":["add","create","new"],"file-text":["data","txt","pdf"],"film":["movie","video"],"filter":["funnel","hopper"],"flag":["report"],"folder-minus":["directory"],"folder-plus":["directory"],"folder":["directory"],"framer":["logo","design","tool"],"frown":["emoji","face","bad","sad","emotion"],"gift":["present","box","birthday","party"],"git-branch":["code","version control"],"git-commit":["code","version control"],"git-merge":["code","version control"],"git-pull-request":["code","version control"],"github":["logo","version control"],"gitlab":["logo","version control"],"globe":["world","browser","language","translate"],"hard-drive":["computer","server","memory","data"],"hash":["hashtag","number","pound"],"headphones":["music","audio","sound"],"heart":["like","love","emotion"],"help-circle":["question mark"],"hexagon":["shape","node.js","logo"],"home":["house","living"],"image":["picture"],"inbox":["email"],"instagram":["logo","camera"],"key":["password","login","authentication","secure"],"layers":["stack"],"layout":["window","webpage"],"life-bouy":["help","life ring","support"],"link":["chain","url"],"link-2":["chain","url"],"linkedin":["logo","social media"],"list":["options"],"lock":["security","password","secure"],"log-in":["sign in","arrow","enter"],"log-out":["sign out","arrow","exit"],"mail":["email","message"],"map-pin":["location","navigation","travel","marker"],"map":["location","navigation","travel"],"maximize":["fullscreen"],"maximize-2":["fullscreen","arrows","expand"],"meh":["emoji","face","neutral","emotion"],"menu":["bars","navigation","hamburger"],"message-circle":["comment","chat"],"message-square":["comment","chat"],"mic-off":["record","sound","mute"],"mic":["record","sound","listen"],"minimize":["exit fullscreen","close"],"minimize-2":["exit fullscreen","arrows","close"],"minus":["subtract"],"monitor":["tv","screen","display"],"moon":["dark","night"],"more-horizontal":["ellipsis"],"more-vertical":["ellipsis"],"mouse-pointer":["arrow","cursor"],"move":["arrows"],"music":["note"],"navigation":["location","travel"],"navigation-2":["location","travel"],"octagon":["stop"],"package":["box","container"],"paperclip":["attachment"],"pause":["music","stop"],"pause-circle":["music","audio","stop"],"pen-tool":["vector","drawing"],"percent":["discount"],"phone-call":["ring"],"phone-forwarded":["call"],"phone-incoming":["call"],"phone-missed":["call"],"phone-off":["call","mute"],"phone-outgoing":["call"],"phone":["call"],"play":["music","start"],"pie-chart":["statistics","diagram"],"play-circle":["music","start"],"plus":["add","new"],"plus-circle":["add","new"],"plus-square":["add","new"],"pocket":["logo","save"],"power":["on","off"],"printer":["fax","office","device"],"radio":["signal"],"refresh-cw":["synchronise","arrows"],"refresh-ccw":["arrows"],"repeat":["loop","arrows"],"rewind":["music"],"rotate-ccw":["arrow"],"rotate-cw":["arrow"],"rss":["feed","subscribe"],"save":["floppy disk"],"scissors":["cut"],"search":["find","magnifier","magnifying glass"],"send":["message","mail","email","paper airplane","paper aeroplane"],"settings":["cog","edit","gear","preferences"],"share-2":["network","connections"],"shield":["security","secure"],"shield-off":["security","insecure"],"shopping-bag":["ecommerce","cart","purchase","store"],"shopping-cart":["ecommerce","cart","purchase","store"],"shuffle":["music"],"skip-back":["music"],"skip-forward":["music"],"slack":["logo"],"slash":["ban","no"],"sliders":["settings","controls"],"smartphone":["cellphone","device"],"smile":["emoji","face","happy","good","emotion"],"speaker":["audio","music"],"star":["bookmark","favorite","like"],"stop-circle":["media","music"],"sun":["brightness","weather","light"],"sunrise":["weather","time","morning","day"],"sunset":["weather","time","evening","night"],"tablet":["device"],"tag":["label"],"target":["logo","bullseye"],"terminal":["code","command line","prompt"],"thermometer":["temperature","celsius","fahrenheit","weather"],"thumbs-down":["dislike","bad","emotion"],"thumbs-up":["like","good","emotion"],"toggle-left":["on","off","switch"],"toggle-right":["on","off","switch"],"tool":["settings","spanner"],"trash":["garbage","delete","remove","bin"],"trash-2":["garbage","delete","remove","bin"],"triangle":["delta"],"truck":["delivery","van","shipping","transport","lorry"],"tv":["television","stream"],"twitch":["logo"],"twitter":["logo","social"],"type":["text"],"umbrella":["rain","weather"],"unlock":["security"],"user-check":["followed","subscribed"],"user-minus":["delete","remove","unfollow","unsubscribe"],"user-plus":["new","add","create","follow","subscribe"],"user-x":["delete","remove","unfollow","unsubscribe","unavailable"],"user":["person","account"],"users":["group"],"video-off":["camera","movie","film"],"video":["camera","movie","film"],"voicemail":["phone"],"volume":["music","sound","mute"],"volume-1":["music","sound"],"volume-2":["music","sound"],"volume-x":["music","sound","mute"],"watch":["clock","time"],"wifi-off":["disabled"],"wifi":["connection","signal","wireless"],"wind":["weather","air"],"x-circle":["cancel","close","delete","remove","times","clear"],"x-octagon":["delete","stop","alert","warning","times","clear"],"x-square":["cancel","close","delete","remove","times","clear"],"x":["cancel","close","delete","remove","times","clear"],"youtube":["logo","video","play"],"zap-off":["flash","camera","lightning"],"zap":["flash","camera","lightning"],"zoom-in":["magnifying glass"],"zoom-out":["magnifying glass"]};
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./src/to-svg.js":
|
|
|
/*!***********************!*\
|
|
|
!*** ./src/to-svg.js ***!
|
|
|
\***********************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
|
value: true
|
|
|
});
|
|
|
|
|
|
var _icons = __webpack_require__(/*! ./icons */ "./src/icons.js");
|
|
|
|
|
|
var _icons2 = _interopRequireDefault(_icons);
|
|
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
|
|
/**
|
|
|
* Create an SVG string.
|
|
|
* @deprecated
|
|
|
* @param {string} name
|
|
|
* @param {Object} attrs
|
|
|
* @returns {string}
|
|
|
*/
|
|
|
function toSvg(name) {
|
|
|
var attrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
|
|
|
|
console.warn('feather.toSvg() is deprecated. Please use feather.icons[name].toSvg() instead.');
|
|
|
|
|
|
if (!name) {
|
|
|
throw new Error('The required `key` (icon name) parameter is missing.');
|
|
|
}
|
|
|
|
|
|
if (!_icons2.default[name]) {
|
|
|
throw new Error('No icon matching \'' + name + '\'. See the complete list of icons at https://feathericons.com');
|
|
|
}
|
|
|
|
|
|
return _icons2.default[name].toSvg(attrs);
|
|
|
}
|
|
|
|
|
|
exports.default = toSvg;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ 0:
|
|
|
/*!**************************************************!*\
|
|
|
!*** multi core-js/es/array/from ./src/index.js ***!
|
|
|
\**************************************************/
|
|
|
/*! no static exports found */
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
|
__webpack_require__(/*! core-js/es/array/from */"./node_modules/core-js/es/array/from.js");
|
|
|
module.exports = __webpack_require__(/*! /home/travis/build/feathericons/feather/src/index.js */"./src/index.js");
|
|
|
|
|
|
|
|
|
/***/ })
|
|
|
|
|
|
/******/ });
|
|
|
});
|
|
|
|
|
|
});
|
|
|
|
|
|
/**
|
|
|
* This module contains various utility functions commonly used in Obsidian plugins.
|
|
|
* @module obsidian-community-lib
|
|
|
*/
|
|
|
/**
|
|
|
* Adds a specific Feather Icon to Obsidian.
|
|
|
*
|
|
|
* @param name official Name of the Icon (https://feathericons.com/)
|
|
|
* @param attr SVG Attributes for the Icon. The default should work for most usecases.
|
|
|
* @returns {string} Icon name
|
|
|
*/
|
|
|
function addFeatherIcon(name, attr = { viewBox: "0 0 24 24", width: "100", height: "100" }) {
|
|
|
if (feather.icons[name]) {
|
|
|
const iconName = `feather-${name}`;
|
|
|
obsidian.addIcon(iconName, feather.icons[name].toSvg(attr));
|
|
|
return iconName;
|
|
|
}
|
|
|
else {
|
|
|
throw Error(`This Icon (${name}) doesn't exist in the Feather Library.`);
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Copy `content` to the users clipboard.
|
|
|
*
|
|
|
* @param {string} content The content to be copied to clipboard.
|
|
|
* @param {() => any} success The callback to run when text is successfully copied. Default throws a new `Notice`
|
|
|
* @param {(reason?) => any} failure The callback to run when text was not able to be copied. Default throws a new `Notice`, and console logs the error.`
|
|
|
*/
|
|
|
async function copy(content, success = () => new obsidian.Notice("Copied to clipboard"), failure = (reason) => {
|
|
|
new obsidian.Notice("Could not copy to clipboard");
|
|
|
console.log({ reason });
|
|
|
}) {
|
|
|
await navigator.clipboard.writeText(content).then(success, failure);
|
|
|
}
|
|
|
/**
|
|
|
* Check if `noteName` is the name of a note that exists in the vault.
|
|
|
* @param {App} app
|
|
|
* @param {string} noteName Basename of the note to search for.
|
|
|
* @param {string} [sourcePath=""] Optional file path to start searching from. Default is the current file.
|
|
|
* @returns boolean
|
|
|
*/
|
|
|
const isInVault = (app, noteName, sourcePath = "") => !!app.metadataCache.getFirstLinkpathDest(noteName, sourcePath);
|
|
|
|
|
|
function createNewNote(plugin, item) {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
const activeFile = plugin.app.workspace.getActiveFile();
|
|
|
let dir = plugin.app.fileManager.getNewFileParent(activeFile ? activeFile.path : "").path;
|
|
|
if (plugin.settings.saveLocation === "custom") {
|
|
|
dir = plugin.settings.saveLocationFolder;
|
|
|
}
|
|
|
//make sure there are no slashes in the title.
|
|
|
const title = item.title.replace(/[\/\\:]/g, ' ');
|
|
|
const inputPrompt = new TextInputPrompt(plugin.app, "Please specify a file name", "cannot contain: * \" \\ / < > : | ?", title, title);
|
|
|
if (plugin.settings.askForFilename) {
|
|
|
yield inputPrompt
|
|
|
.openAndGetValue((text) => __awaiter(this, void 0, void 0, function* () {
|
|
|
const value = text.getValue();
|
|
|
if (value.match(FILE_NAME_REGEX)) {
|
|
|
inputPrompt.setValidationError(text, "that filename is not valid");
|
|
|
return;
|
|
|
}
|
|
|
const filePath = obsidian.normalizePath([dir, `${value}.md`].join('/'));
|
|
|
if (isInVault(plugin.app, filePath, '')) {
|
|
|
inputPrompt.setValidationError(text, "there is already a note with that name");
|
|
|
return;
|
|
|
}
|
|
|
inputPrompt.close();
|
|
|
yield createNewFile(plugin, item, filePath, value);
|
|
|
}));
|
|
|
}
|
|
|
else {
|
|
|
const replacedTitle = item.title.replace(FILE_NAME_REGEX, '');
|
|
|
const filePath = obsidian.normalizePath([dir, `${replacedTitle}.md`].join('/'));
|
|
|
yield createNewFile(plugin, item, filePath, item.title);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
function createNewFile(plugin, item, path, title) {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
if (isInVault(plugin.app, path, '')) {
|
|
|
new obsidian.Notice("there is already a note with that name");
|
|
|
return;
|
|
|
}
|
|
|
const appliedTemplate = applyTemplate(item, plugin.settings.template, plugin.settings, title);
|
|
|
const file = yield plugin.app.vault.create(path, appliedTemplate);
|
|
|
yield plugin.app.workspace.activeLeaf.openFile(file, {
|
|
|
state: { mode: 'edit' },
|
|
|
});
|
|
|
item.created = true;
|
|
|
const items = plugin.settings.items;
|
|
|
yield plugin.writeFeedContent(() => {
|
|
|
return items;
|
|
|
});
|
|
|
new obsidian.Notice("Created note from article");
|
|
|
});
|
|
|
}
|
|
|
function pasteToNote(plugin, item) {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
const file = plugin.app.workspace.getActiveFile();
|
|
|
if (file === null) {
|
|
|
new obsidian.Notice("no file active");
|
|
|
return;
|
|
|
}
|
|
|
const view = plugin.app.workspace.getActiveViewOfType(obsidian.MarkdownView);
|
|
|
if (view) {
|
|
|
const appliedTemplate = applyTemplate(item, plugin.settings.pasteTemplate, plugin.settings);
|
|
|
const editor = view.editor;
|
|
|
editor.replaceRange(appliedTemplate, editor.getCursor());
|
|
|
item.created = true;
|
|
|
const items = plugin.settings.items;
|
|
|
yield plugin.writeFeedContent(() => {
|
|
|
return items;
|
|
|
});
|
|
|
new obsidian.Notice("inserted article into note");
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
function applyTemplate(item, template, settings, filename) {
|
|
|
const content = obsidian.htmlToMarkdown(item.content);
|
|
|
let result = replaceAll(template, "{{title}}", item.title);
|
|
|
result = replaceAll(result, "{{link}}", item.link);
|
|
|
result = replaceAll(result, "{{author}}", item.creator);
|
|
|
result = replaceAll(result, "{{content}}", content);
|
|
|
result = replaceAll(result, "{{published}}", window.moment(item.pubDate).format(settings.dateFormat));
|
|
|
result = replaceAll(result, "{{feed}}", item.feed);
|
|
|
result = replaceAll(result, "{{folder}}", item.folder);
|
|
|
result = replaceAll(result, "{{description}}", item.description);
|
|
|
result = result.replace(/({{tags:).*(}})/g, function (k) {
|
|
|
const value = k.split(":")[1];
|
|
|
const separator = value.substring(0, value.indexOf("}"));
|
|
|
return item.tags.join(separator);
|
|
|
});
|
|
|
result = result.replace(/({{#tags:).*(}})/g, function (k) {
|
|
|
const value = k.split(":")[1];
|
|
|
const separator = value.substring(0, value.indexOf("}"));
|
|
|
return item.tags.map(i => '#' + i).join(separator);
|
|
|
});
|
|
|
result = replaceAll(result, "{{tags}}", item.tags.join(", "));
|
|
|
result = replaceAll(result, "{{#tags}}", item.tags.map(i => '#' + i).join(", "));
|
|
|
if (filename) {
|
|
|
result = replaceAll(result, "{{filename}}", filename);
|
|
|
result = replaceAll(result, "{{created}}", window.moment().format(settings.dateFormat));
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
function openInBrowser(item) {
|
|
|
if (typeof item.link === "string") {
|
|
|
window.open(item.link, '_blank');
|
|
|
}
|
|
|
}
|
|
|
//taken from: https://stackoverflow.com/a/1144788/5589264
|
|
|
function escapeRegExp(string) {
|
|
|
return string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
|
|
|
}
|
|
|
function replaceAll(str, find, replace) {
|
|
|
return str.replace(new RegExp(escapeRegExp(find), 'g'), replace);
|
|
|
}
|
|
|
|
|
|
class TagModal extends BaseModal {
|
|
|
constructor(plugin, tags) {
|
|
|
super(plugin.app);
|
|
|
this.plugin = plugin;
|
|
|
this.tags = tags;
|
|
|
}
|
|
|
display() {
|
|
|
const { contentEl } = this;
|
|
|
contentEl.empty();
|
|
|
contentEl.createEl("h1", { text: "Edit Tags" });
|
|
|
const tagDiv = contentEl.createDiv("tags");
|
|
|
for (const tag in this.tags) {
|
|
|
const setting = new obsidian.Setting(tagDiv);
|
|
|
setting.setName(this.tags[tag]);
|
|
|
setting.addExtraButton((b) => {
|
|
|
b
|
|
|
.setIcon("trash")
|
|
|
.setTooltip("Delete")
|
|
|
.onClick(() => {
|
|
|
this.tags = this.tags.filter(e => e !== this.tags[tag]);
|
|
|
console.log("new tags " + this.tags);
|
|
|
this.display();
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
const buttonEl = contentEl.createSpan("actionButtons");
|
|
|
const buttons = new obsidian.Setting(buttonEl).addButton((btn) => btn.setButtonText("new").onClick(() => __awaiter(this, void 0, void 0, function* () {
|
|
|
const input = yield new TextInputPrompt(this.app, "Tag", "new tag name", "", "tag name");
|
|
|
let textInput;
|
|
|
input.openAndGetValue((value => {
|
|
|
textInput = value;
|
|
|
if (!value.getValue().match(TAG_REGEX) || value.getValue().match(NUMBER_REGEX) || value.getValue().contains(" ") || value.getValue().contains('#')) {
|
|
|
input.setValidationError(textInput, "This is not a valid tag");
|
|
|
return;
|
|
|
}
|
|
|
this.tags.push(value.getValue());
|
|
|
this.display();
|
|
|
input.close();
|
|
|
}));
|
|
|
})));
|
|
|
buttons.addExtraButton((btn) => btn.setTooltip("Save").setIcon("checkmark").onClick(() => __awaiter(this, void 0, void 0, function* () {
|
|
|
this.close();
|
|
|
})));
|
|
|
}
|
|
|
onClose() {
|
|
|
const { contentEl } = this;
|
|
|
contentEl.empty();
|
|
|
}
|
|
|
onOpen() {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
yield this.display();
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
|
|
|
class Action {
|
|
|
constructor(name, icon, processor) {
|
|
|
this.name = name;
|
|
|
this.icon = icon;
|
|
|
this.processor = processor;
|
|
|
}
|
|
|
}
|
|
|
Action.CREATE_NOTE = new Action("create new note", "create-new", (plugin, item) => {
|
|
|
return createNewNote(plugin, item);
|
|
|
});
|
|
|
Action.PASTE = new Action("paste to current note", "paste", (plugin, item) => {
|
|
|
return pasteToNote(plugin, item);
|
|
|
});
|
|
|
Action.COPY = new Action("copy to clipboard", "feather-clipboard", ((_, item) => {
|
|
|
return copy(obsidian.htmlToMarkdown(item.content));
|
|
|
}));
|
|
|
Action.OPEN = new Action("open in browser", "open-elsewhere-glyph", ((_, item) => {
|
|
|
openInBrowser(item);
|
|
|
return Promise.resolve();
|
|
|
}));
|
|
|
Action.TAGS = new Action("edit tags", "tag-glyph", (((plugin, item) => {
|
|
|
const modal = new TagModal(plugin, item.tags);
|
|
|
modal.onClose = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
item.tags = modal.tags;
|
|
|
const items = plugin.settings.items;
|
|
|
yield plugin.writeFeedContent(() => {
|
|
|
return items;
|
|
|
});
|
|
|
});
|
|
|
modal.open();
|
|
|
return Promise.resolve();
|
|
|
})));
|
|
|
Action.actions = Array.of(Action.TAGS, Action.CREATE_NOTE, Action.PASTE, Action.COPY, Action.OPEN);
|
|
|
|
|
|
class ItemModal extends obsidian.Modal {
|
|
|
constructor(plugin, item) {
|
|
|
super(plugin.app);
|
|
|
this.plugin = plugin;
|
|
|
this.item = item;
|
|
|
item.read = true;
|
|
|
const items = this.plugin.settings.items;
|
|
|
this.plugin.writeFeedContent(() => {
|
|
|
return items;
|
|
|
});
|
|
|
}
|
|
|
display() {
|
|
|
const { contentEl } = this;
|
|
|
contentEl.empty();
|
|
|
const topButtons = contentEl.createSpan('topButtons');
|
|
|
const title = contentEl.createEl('h1', 'rss-title');
|
|
|
title.setText(this.item.title);
|
|
|
const subtitle = contentEl.createEl("h3", "rss-subtitle");
|
|
|
if (this.item.creator) {
|
|
|
subtitle.appendText(this.item.creator);
|
|
|
}
|
|
|
if (this.item.pubDate) {
|
|
|
subtitle.appendText(" - " + window.moment(this.item.pubDate).format(this.plugin.settings.dateFormat));
|
|
|
}
|
|
|
const tagEl = contentEl.createSpan("tags");
|
|
|
this.item.tags.forEach((tag) => {
|
|
|
const tagA = tagEl.createEl("a");
|
|
|
tagA.setText(tag);
|
|
|
tagA.addClass("tag", "rss-tag");
|
|
|
});
|
|
|
const readButton = new obsidian.ButtonComponent(topButtons)
|
|
|
.setIcon(this.item.read ? 'feather-eye-off' : 'feather-eye')
|
|
|
.setTooltip(this.item.read ? 'Mark as unread' : 'mark as read')
|
|
|
.onClick(() => __awaiter(this, void 0, void 0, function* () {
|
|
|
if (this.item.read) {
|
|
|
readButton.setIcon('feather-eye');
|
|
|
this.item.read = false;
|
|
|
new obsidian.Notice("marked item as unread");
|
|
|
}
|
|
|
else {
|
|
|
this.item.read = true;
|
|
|
readButton.setIcon('feather-eye-off');
|
|
|
new obsidian.Notice("marked item as read");
|
|
|
}
|
|
|
const items = this.plugin.settings.items;
|
|
|
yield this.plugin.writeFeedContent(() => {
|
|
|
return items;
|
|
|
});
|
|
|
}));
|
|
|
const favoriteButton = new obsidian.ButtonComponent(topButtons)
|
|
|
.setIcon(this.item.favorite ? 'star-glyph' : 'star')
|
|
|
.setTooltip(this.item.favorite ? 'remove from favorites' : 'mark as favorite')
|
|
|
.onClick(() => __awaiter(this, void 0, void 0, function* () {
|
|
|
if (this.item.favorite) {
|
|
|
favoriteButton.setIcon('star');
|
|
|
this.item.favorite = false;
|
|
|
new obsidian.Notice("removed item from favorites");
|
|
|
}
|
|
|
else {
|
|
|
favoriteButton.setIcon('star-glyph');
|
|
|
this.item.favorite = true;
|
|
|
new obsidian.Notice("added item to favorites");
|
|
|
}
|
|
|
const items = this.plugin.settings.items;
|
|
|
yield this.plugin.writeFeedContent(() => {
|
|
|
return items;
|
|
|
});
|
|
|
}));
|
|
|
Action.actions.forEach((action) => {
|
|
|
new obsidian.ButtonComponent(topButtons)
|
|
|
.setIcon(action.icon)
|
|
|
.setTooltip(action.name)
|
|
|
.onClick(() => __awaiter(this, void 0, void 0, function* () {
|
|
|
yield action.processor(this.plugin, this.item);
|
|
|
}));
|
|
|
});
|
|
|
const content = contentEl.createDiv('rss-content');
|
|
|
content.addClass("scrollable-content");
|
|
|
if (this.item.content) {
|
|
|
content.append(sanitizeHTMLToDom(this.item.content));
|
|
|
}
|
|
|
}
|
|
|
onClose() {
|
|
|
const { contentEl } = this;
|
|
|
contentEl.empty();
|
|
|
}
|
|
|
onOpen() {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
yield this.display();
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/* src/view/HtmlTooltip.svelte generated by Svelte v3.44.2 */
|
|
|
|
|
|
function create_if_block$3(ctx) {
|
|
|
let span;
|
|
|
let html_action;
|
|
|
let mounted;
|
|
|
let dispose;
|
|
|
|
|
|
return {
|
|
|
c() {
|
|
|
span = element("span");
|
|
|
attr(span, "class", "tooltiptext");
|
|
|
},
|
|
|
m(target, anchor) {
|
|
|
insert(target, span, anchor);
|
|
|
|
|
|
if (!mounted) {
|
|
|
dispose = action_destroyer(html_action = /*html*/ ctx[1].call(null, span, /*content*/ ctx[0]));
|
|
|
mounted = true;
|
|
|
}
|
|
|
},
|
|
|
p(ctx, dirty) {
|
|
|
if (html_action && is_function(html_action.update) && dirty & /*content*/ 1) html_action.update.call(null, /*content*/ ctx[0]);
|
|
|
},
|
|
|
d(detaching) {
|
|
|
if (detaching) detach(span);
|
|
|
mounted = false;
|
|
|
dispose();
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function create_fragment$3(ctx) {
|
|
|
let if_block_anchor;
|
|
|
let if_block = /*content*/ ctx[0].length > 0 && create_if_block$3(ctx);
|
|
|
|
|
|
return {
|
|
|
c() {
|
|
|
if (if_block) if_block.c();
|
|
|
if_block_anchor = empty();
|
|
|
},
|
|
|
m(target, anchor) {
|
|
|
if (if_block) if_block.m(target, anchor);
|
|
|
insert(target, if_block_anchor, anchor);
|
|
|
},
|
|
|
p(ctx, [dirty]) {
|
|
|
if (/*content*/ ctx[0].length > 0) {
|
|
|
if (if_block) {
|
|
|
if_block.p(ctx, dirty);
|
|
|
} else {
|
|
|
if_block = create_if_block$3(ctx);
|
|
|
if_block.c();
|
|
|
if_block.m(if_block_anchor.parentNode, if_block_anchor);
|
|
|
}
|
|
|
} else if (if_block) {
|
|
|
if_block.d(1);
|
|
|
if_block = null;
|
|
|
}
|
|
|
},
|
|
|
i: noop,
|
|
|
o: noop,
|
|
|
d(detaching) {
|
|
|
if (if_block) if_block.d(detaching);
|
|
|
if (detaching) detach(if_block_anchor);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function instance$3($$self, $$props, $$invalidate) {
|
|
|
let { content = "" } = $$props;
|
|
|
|
|
|
const html = (node, content) => {
|
|
|
node.append(sanitizeHTMLToDom(content));
|
|
|
};
|
|
|
|
|
|
$$self.$$set = $$props => {
|
|
|
if ('content' in $$props) $$invalidate(0, content = $$props.content);
|
|
|
};
|
|
|
|
|
|
return [content, html];
|
|
|
}
|
|
|
|
|
|
class HtmlTooltip extends SvelteComponent {
|
|
|
constructor(options) {
|
|
|
super();
|
|
|
init(this, options, instance$3, create_fragment$3, safe_not_equal, { content: 0 });
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/* src/view/ItemView.svelte generated by Svelte v3.44.2 */
|
|
|
|
|
|
function get_each_context$2(ctx, list, i) {
|
|
|
const child_ctx = ctx.slice();
|
|
|
child_ctx[6] = list[i];
|
|
|
return child_ctx;
|
|
|
}
|
|
|
|
|
|
// (46:0) {#if item}
|
|
|
function create_if_block$2(ctx) {
|
|
|
let div1;
|
|
|
let div0;
|
|
|
let t0;
|
|
|
let t1;
|
|
|
let a;
|
|
|
let t2_value = /*item*/ ctx[1].title + "";
|
|
|
let t2;
|
|
|
let t3;
|
|
|
let span;
|
|
|
let div0_class_value;
|
|
|
let t4;
|
|
|
let current;
|
|
|
let mounted;
|
|
|
let dispose;
|
|
|
let if_block0 = /*item*/ ctx[1].favorite && create_if_block_4$1();
|
|
|
let if_block1 = /*item*/ ctx[1].created && create_if_block_3$1();
|
|
|
let each_value = /*item*/ ctx[1].tags;
|
|
|
let each_blocks = [];
|
|
|
|
|
|
for (let i = 0; i < each_value.length; i += 1) {
|
|
|
each_blocks[i] = create_each_block$2(get_each_context$2(ctx, each_value, i));
|
|
|
}
|
|
|
|
|
|
let if_block2 = /*hover*/ ctx[2] && create_if_block_1$2(ctx);
|
|
|
|
|
|
return {
|
|
|
c() {
|
|
|
div1 = element("div");
|
|
|
div0 = element("div");
|
|
|
if (if_block0) if_block0.c();
|
|
|
t0 = space();
|
|
|
if (if_block1) if_block1.c();
|
|
|
t1 = space();
|
|
|
a = element("a");
|
|
|
t2 = text(t2_value);
|
|
|
t3 = space();
|
|
|
span = element("span");
|
|
|
|
|
|
for (let i = 0; i < each_blocks.length; i += 1) {
|
|
|
each_blocks[i].c();
|
|
|
}
|
|
|
|
|
|
t4 = space();
|
|
|
if (if_block2) if_block2.c();
|
|
|
attr(div0, "class", div0_class_value = "rss-feed-item " + (/*item*/ ctx[1].read ? 'rss-read' : 'rss-not-read'));
|
|
|
attr(div1, "class", "is-clickable rss-tooltip");
|
|
|
set_style(div1, "margin-left", "20px");
|
|
|
},
|
|
|
m(target, anchor) {
|
|
|
insert(target, div1, anchor);
|
|
|
append(div1, div0);
|
|
|
if (if_block0) if_block0.m(div0, null);
|
|
|
append(div0, t0);
|
|
|
if (if_block1) if_block1.m(div0, null);
|
|
|
append(div0, t1);
|
|
|
append(div0, a);
|
|
|
append(a, t2);
|
|
|
append(div0, t3);
|
|
|
append(div0, span);
|
|
|
|
|
|
for (let i = 0; i < each_blocks.length; i += 1) {
|
|
|
each_blocks[i].m(span, null);
|
|
|
}
|
|
|
|
|
|
append(div1, t4);
|
|
|
if (if_block2) if_block2.m(div1, null);
|
|
|
current = true;
|
|
|
|
|
|
if (!mounted) {
|
|
|
dispose = [
|
|
|
listen(a, "click", /*click_handler*/ ctx[5]),
|
|
|
listen(a, "contextmenu", /*openMenu*/ ctx[4]),
|
|
|
listen(a, "mouseover", /*toggleHover*/ ctx[3]),
|
|
|
listen(a, "mouseleave", /*toggleHover*/ ctx[3])
|
|
|
];
|
|
|
|
|
|
mounted = true;
|
|
|
}
|
|
|
},
|
|
|
p(ctx, dirty) {
|
|
|
if (/*item*/ ctx[1].favorite) {
|
|
|
if (if_block0) {
|
|
|
if (dirty & /*item*/ 2) {
|
|
|
transition_in(if_block0, 1);
|
|
|
}
|
|
|
} else {
|
|
|
if_block0 = create_if_block_4$1();
|
|
|
if_block0.c();
|
|
|
transition_in(if_block0, 1);
|
|
|
if_block0.m(div0, t0);
|
|
|
}
|
|
|
} else if (if_block0) {
|
|
|
group_outros();
|
|
|
|
|
|
transition_out(if_block0, 1, 1, () => {
|
|
|
if_block0 = null;
|
|
|
});
|
|
|
|
|
|
check_outros();
|
|
|
}
|
|
|
|
|
|
if (/*item*/ ctx[1].created) {
|
|
|
if (if_block1) {
|
|
|
if (dirty & /*item*/ 2) {
|
|
|
transition_in(if_block1, 1);
|
|
|
}
|
|
|
} else {
|
|
|
if_block1 = create_if_block_3$1();
|
|
|
if_block1.c();
|
|
|
transition_in(if_block1, 1);
|
|
|
if_block1.m(div0, t1);
|
|
|
}
|
|
|
} else if (if_block1) {
|
|
|
group_outros();
|
|
|
|
|
|
transition_out(if_block1, 1, 1, () => {
|
|
|
if_block1 = null;
|
|
|
});
|
|
|
|
|
|
check_outros();
|
|
|
}
|
|
|
|
|
|
if ((!current || dirty & /*item*/ 2) && t2_value !== (t2_value = /*item*/ ctx[1].title + "")) set_data(t2, t2_value);
|
|
|
|
|
|
if (dirty & /*item*/ 2) {
|
|
|
each_value = /*item*/ ctx[1].tags;
|
|
|
let i;
|
|
|
|
|
|
for (i = 0; i < each_value.length; i += 1) {
|
|
|
const child_ctx = get_each_context$2(ctx, each_value, i);
|
|
|
|
|
|
if (each_blocks[i]) {
|
|
|
each_blocks[i].p(child_ctx, dirty);
|
|
|
} else {
|
|
|
each_blocks[i] = create_each_block$2(child_ctx);
|
|
|
each_blocks[i].c();
|
|
|
each_blocks[i].m(span, null);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
for (; i < each_blocks.length; i += 1) {
|
|
|
each_blocks[i].d(1);
|
|
|
}
|
|
|
|
|
|
each_blocks.length = each_value.length;
|
|
|
}
|
|
|
|
|
|
if (!current || dirty & /*item*/ 2 && div0_class_value !== (div0_class_value = "rss-feed-item " + (/*item*/ ctx[1].read ? 'rss-read' : 'rss-not-read'))) {
|
|
|
attr(div0, "class", div0_class_value);
|
|
|
}
|
|
|
|
|
|
if (/*hover*/ ctx[2]) {
|
|
|
if (if_block2) {
|
|
|
if_block2.p(ctx, dirty);
|
|
|
|
|
|
if (dirty & /*hover*/ 4) {
|
|
|
transition_in(if_block2, 1);
|
|
|
}
|
|
|
} else {
|
|
|
if_block2 = create_if_block_1$2(ctx);
|
|
|
if_block2.c();
|
|
|
transition_in(if_block2, 1);
|
|
|
if_block2.m(div1, null);
|
|
|
}
|
|
|
} else if (if_block2) {
|
|
|
group_outros();
|
|
|
|
|
|
transition_out(if_block2, 1, 1, () => {
|
|
|
if_block2 = null;
|
|
|
});
|
|
|
|
|
|
check_outros();
|
|
|
}
|
|
|
},
|
|
|
i(local) {
|
|
|
if (current) return;
|
|
|
transition_in(if_block0);
|
|
|
transition_in(if_block1);
|
|
|
transition_in(if_block2);
|
|
|
current = true;
|
|
|
},
|
|
|
o(local) {
|
|
|
transition_out(if_block0);
|
|
|
transition_out(if_block1);
|
|
|
transition_out(if_block2);
|
|
|
current = false;
|
|
|
},
|
|
|
d(detaching) {
|
|
|
if (detaching) detach(div1);
|
|
|
if (if_block0) if_block0.d();
|
|
|
if (if_block1) if_block1.d();
|
|
|
destroy_each(each_blocks, detaching);
|
|
|
if (if_block2) if_block2.d();
|
|
|
mounted = false;
|
|
|
run_all(dispose);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// (49:12) {#if (item.favorite)}
|
|
|
function create_if_block_4$1(ctx) {
|
|
|
let iconcomponent;
|
|
|
let current;
|
|
|
iconcomponent = new IconComponent({ props: { iconName: "star" } });
|
|
|
|
|
|
return {
|
|
|
c() {
|
|
|
create_component(iconcomponent.$$.fragment);
|
|
|
},
|
|
|
m(target, anchor) {
|
|
|
mount_component(iconcomponent, target, anchor);
|
|
|
current = true;
|
|
|
},
|
|
|
i(local) {
|
|
|
if (current) return;
|
|
|
transition_in(iconcomponent.$$.fragment, local);
|
|
|
current = true;
|
|
|
},
|
|
|
o(local) {
|
|
|
transition_out(iconcomponent.$$.fragment, local);
|
|
|
current = false;
|
|
|
},
|
|
|
d(detaching) {
|
|
|
destroy_component(iconcomponent, detaching);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// (52:12) {#if (item.created)}
|
|
|
function create_if_block_3$1(ctx) {
|
|
|
let iconcomponent;
|
|
|
let current;
|
|
|
iconcomponent = new IconComponent({ props: { iconName: "document" } });
|
|
|
|
|
|
return {
|
|
|
c() {
|
|
|
create_component(iconcomponent.$$.fragment);
|
|
|
},
|
|
|
m(target, anchor) {
|
|
|
mount_component(iconcomponent, target, anchor);
|
|
|
current = true;
|
|
|
},
|
|
|
i(local) {
|
|
|
if (current) return;
|
|
|
transition_in(iconcomponent.$$.fragment, local);
|
|
|
current = true;
|
|
|
},
|
|
|
o(local) {
|
|
|
transition_out(iconcomponent.$$.fragment, local);
|
|
|
current = false;
|
|
|
},
|
|
|
d(detaching) {
|
|
|
destroy_component(iconcomponent, detaching);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// (66:12) {#each item.tags as tag}
|
|
|
function create_each_block$2(ctx) {
|
|
|
let t0;
|
|
|
let a;
|
|
|
let t1_value = /*tag*/ ctx[6] + "";
|
|
|
let t1;
|
|
|
|
|
|
return {
|
|
|
c() {
|
|
|
t0 = text(" ");
|
|
|
a = element("a");
|
|
|
t1 = text(t1_value);
|
|
|
attr(a, "class", "tag rss-tag");
|
|
|
},
|
|
|
m(target, anchor) {
|
|
|
insert(target, t0, anchor);
|
|
|
insert(target, a, anchor);
|
|
|
append(a, t1);
|
|
|
},
|
|
|
p(ctx, dirty) {
|
|
|
if (dirty & /*item*/ 2 && t1_value !== (t1_value = /*tag*/ ctx[6] + "")) set_data(t1, t1_value);
|
|
|
},
|
|
|
d(detaching) {
|
|
|
if (detaching) detach(t0);
|
|
|
if (detaching) detach(a);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// (71:8) {#if (hover)}
|
|
|
function create_if_block_1$2(ctx) {
|
|
|
let if_block_anchor;
|
|
|
let current;
|
|
|
let if_block = /*item*/ ctx[1].description !== /*item*/ ctx[1].content && create_if_block_2$2(ctx);
|
|
|
|
|
|
return {
|
|
|
c() {
|
|
|
if (if_block) if_block.c();
|
|
|
if_block_anchor = empty();
|
|
|
},
|
|
|
m(target, anchor) {
|
|
|
if (if_block) if_block.m(target, anchor);
|
|
|
insert(target, if_block_anchor, anchor);
|
|
|
current = true;
|
|
|
},
|
|
|
p(ctx, dirty) {
|
|
|
if (/*item*/ ctx[1].description !== /*item*/ ctx[1].content) {
|
|
|
if (if_block) {
|
|
|
if_block.p(ctx, dirty);
|
|
|
|
|
|
if (dirty & /*item*/ 2) {
|
|
|
transition_in(if_block, 1);
|
|
|
}
|
|
|
} else {
|
|
|
if_block = create_if_block_2$2(ctx);
|
|
|
if_block.c();
|
|
|
transition_in(if_block, 1);
|
|
|
if_block.m(if_block_anchor.parentNode, if_block_anchor);
|
|
|
}
|
|
|
} else if (if_block) {
|
|
|
group_outros();
|
|
|
|
|
|
transition_out(if_block, 1, 1, () => {
|
|
|
if_block = null;
|
|
|
});
|
|
|
|
|
|
check_outros();
|
|
|
}
|
|
|
},
|
|
|
i(local) {
|
|
|
if (current) return;
|
|
|
transition_in(if_block);
|
|
|
current = true;
|
|
|
},
|
|
|
o(local) {
|
|
|
transition_out(if_block);
|
|
|
current = false;
|
|
|
},
|
|
|
d(detaching) {
|
|
|
if (if_block) if_block.d(detaching);
|
|
|
if (detaching) detach(if_block_anchor);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// (72:12) {#if (item.description !== item.content)}
|
|
|
function create_if_block_2$2(ctx) {
|
|
|
let htmltooltip;
|
|
|
let current;
|
|
|
|
|
|
htmltooltip = new HtmlTooltip({
|
|
|
props: { content: /*item*/ ctx[1].description }
|
|
|
});
|
|
|
|
|
|
return {
|
|
|
c() {
|
|
|
create_component(htmltooltip.$$.fragment);
|
|
|
},
|
|
|
m(target, anchor) {
|
|
|
mount_component(htmltooltip, target, anchor);
|
|
|
current = true;
|
|
|
},
|
|
|
p(ctx, dirty) {
|
|
|
const htmltooltip_changes = {};
|
|
|
if (dirty & /*item*/ 2) htmltooltip_changes.content = /*item*/ ctx[1].description;
|
|
|
htmltooltip.$set(htmltooltip_changes);
|
|
|
},
|
|
|
i(local) {
|
|
|
if (current) return;
|
|
|
transition_in(htmltooltip.$$.fragment, local);
|
|
|
current = true;
|
|
|
},
|
|
|
o(local) {
|
|
|
transition_out(htmltooltip.$$.fragment, local);
|
|
|
current = false;
|
|
|
},
|
|
|
d(detaching) {
|
|
|
destroy_component(htmltooltip, detaching);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function create_fragment$2(ctx) {
|
|
|
let if_block_anchor;
|
|
|
let current;
|
|
|
let if_block = /*item*/ ctx[1] && create_if_block$2(ctx);
|
|
|
|
|
|
return {
|
|
|
c() {
|
|
|
if (if_block) if_block.c();
|
|
|
if_block_anchor = empty();
|
|
|
},
|
|
|
m(target, anchor) {
|
|
|
if (if_block) if_block.m(target, anchor);
|
|
|
insert(target, if_block_anchor, anchor);
|
|
|
current = true;
|
|
|
},
|
|
|
p(ctx, [dirty]) {
|
|
|
if (/*item*/ ctx[1]) {
|
|
|
if (if_block) {
|
|
|
if_block.p(ctx, dirty);
|
|
|
|
|
|
if (dirty & /*item*/ 2) {
|
|
|
transition_in(if_block, 1);
|
|
|
}
|
|
|
} else {
|
|
|
if_block = create_if_block$2(ctx);
|
|
|
if_block.c();
|
|
|
transition_in(if_block, 1);
|
|
|
if_block.m(if_block_anchor.parentNode, if_block_anchor);
|
|
|
}
|
|
|
} else if (if_block) {
|
|
|
group_outros();
|
|
|
|
|
|
transition_out(if_block, 1, 1, () => {
|
|
|
if_block = null;
|
|
|
});
|
|
|
|
|
|
check_outros();
|
|
|
}
|
|
|
},
|
|
|
i(local) {
|
|
|
if (current) return;
|
|
|
transition_in(if_block);
|
|
|
current = true;
|
|
|
},
|
|
|
o(local) {
|
|
|
transition_out(if_block);
|
|
|
current = false;
|
|
|
},
|
|
|
d(detaching) {
|
|
|
if (if_block) if_block.d(detaching);
|
|
|
if (detaching) detach(if_block_anchor);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function instance$2($$self, $$props, $$invalidate) {
|
|
|
let { plugin = null } = $$props;
|
|
|
let { item = null } = $$props;
|
|
|
let hover = false;
|
|
|
|
|
|
function toggleHover() {
|
|
|
$$invalidate(2, hover = !hover);
|
|
|
}
|
|
|
|
|
|
function openMenu(e) {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
if (e.ctrlKey && e.altKey) {
|
|
|
openInBrowser(item);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (e.ctrlKey) {
|
|
|
yield createNewNote(plugin, item);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (e.altKey) {
|
|
|
yield pasteToNote(plugin, item);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
const menu = new obsidian.Menu(plugin.app);
|
|
|
|
|
|
Action.actions.forEach(action => {
|
|
|
menu.addItem(menuItem => {
|
|
|
menuItem.setIcon(action.icon).setTitle(action.name).onClick(() => __awaiter(this, void 0, void 0, function* () {
|
|
|
yield action.processor(plugin, item);
|
|
|
}));
|
|
|
});
|
|
|
});
|
|
|
|
|
|
menu.showAtPosition({ x: e.x, y: e.y });
|
|
|
});
|
|
|
}
|
|
|
|
|
|
const click_handler = () => {
|
|
|
new ItemModal(plugin, item).open();
|
|
|
};
|
|
|
|
|
|
$$self.$$set = $$props => {
|
|
|
if ('plugin' in $$props) $$invalidate(0, plugin = $$props.plugin);
|
|
|
if ('item' in $$props) $$invalidate(1, item = $$props.item);
|
|
|
};
|
|
|
|
|
|
return [plugin, item, hover, toggleHover, openMenu, click_handler];
|
|
|
}
|
|
|
|
|
|
class ItemView extends SvelteComponent {
|
|
|
constructor(options) {
|
|
|
super();
|
|
|
init(this, options, instance$2, create_fragment$2, safe_not_equal, { plugin: 0, item: 1 });
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/* src/view/FeedView.svelte generated by Svelte v3.44.2 */
|
|
|
|
|
|
function get_each_context$1(ctx, list, i) {
|
|
|
const child_ctx = ctx.slice();
|
|
|
child_ctx[5] = list[i];
|
|
|
return child_ctx;
|
|
|
}
|
|
|
|
|
|
// (16:0) {:else}
|
|
|
function create_else_block(ctx) {
|
|
|
let div3;
|
|
|
let div1;
|
|
|
let div0;
|
|
|
let iconcomponent;
|
|
|
let t0;
|
|
|
let span;
|
|
|
let t1_value = /*feed*/ ctx[0].name + "";
|
|
|
let t1;
|
|
|
let t2;
|
|
|
let div1_class_value;
|
|
|
let t3;
|
|
|
let div2;
|
|
|
let show_if = !/*foldedState*/ ctx[2].get(/*feed*/ ctx[0].name);
|
|
|
let current;
|
|
|
let mounted;
|
|
|
let dispose;
|
|
|
iconcomponent = new IconComponent({ props: { iconName: "right-triangle" } });
|
|
|
let if_block0 = /*feed*/ ctx[0].image && create_if_block_2$1(ctx);
|
|
|
let if_block1 = show_if && create_if_block_1$1(ctx);
|
|
|
|
|
|
return {
|
|
|
c() {
|
|
|
div3 = element("div");
|
|
|
div1 = element("div");
|
|
|
div0 = element("div");
|
|
|
create_component(iconcomponent.$$.fragment);
|
|
|
t0 = space();
|
|
|
span = element("span");
|
|
|
t1 = text(t1_value);
|
|
|
t2 = space();
|
|
|
if (if_block0) if_block0.c();
|
|
|
t3 = space();
|
|
|
div2 = element("div");
|
|
|
if (if_block1) if_block1.c();
|
|
|
attr(div0, "class", "rss-feed-title");
|
|
|
set_style(div0, "overflow", "hidden");
|
|
|
|
|
|
attr(div1, "class", div1_class_value = /*foldedState*/ ctx[2].get(/*feed*/ ctx[0].name)
|
|
|
? 'is-collapsed'
|
|
|
: '');
|
|
|
|
|
|
attr(div2, "class", "rss-feed-items");
|
|
|
attr(div3, "class", "rss-feed");
|
|
|
set_style(div3, "margin-left", "20px");
|
|
|
},
|
|
|
m(target, anchor) {
|
|
|
insert(target, div3, anchor);
|
|
|
append(div3, div1);
|
|
|
append(div1, div0);
|
|
|
mount_component(iconcomponent, div0, null);
|
|
|
append(div0, t0);
|
|
|
append(div0, span);
|
|
|
append(span, t1);
|
|
|
append(span, t2);
|
|
|
if (if_block0) if_block0.m(span, null);
|
|
|
append(div3, t3);
|
|
|
append(div3, div2);
|
|
|
if (if_block1) if_block1.m(div2, null);
|
|
|
current = true;
|
|
|
|
|
|
if (!mounted) {
|
|
|
dispose = listen(div1, "click", /*click_handler*/ ctx[4]);
|
|
|
mounted = true;
|
|
|
}
|
|
|
},
|
|
|
p(ctx, dirty) {
|
|
|
if ((!current || dirty & /*feed*/ 1) && t1_value !== (t1_value = /*feed*/ ctx[0].name + "")) set_data(t1, t1_value);
|
|
|
|
|
|
if (/*feed*/ ctx[0].image) {
|
|
|
if (if_block0) {
|
|
|
if_block0.p(ctx, dirty);
|
|
|
} else {
|
|
|
if_block0 = create_if_block_2$1(ctx);
|
|
|
if_block0.c();
|
|
|
if_block0.m(span, null);
|
|
|
}
|
|
|
} else if (if_block0) {
|
|
|
if_block0.d(1);
|
|
|
if_block0 = null;
|
|
|
}
|
|
|
|
|
|
if (!current || dirty & /*foldedState, feed*/ 5 && div1_class_value !== (div1_class_value = /*foldedState*/ ctx[2].get(/*feed*/ ctx[0].name)
|
|
|
? 'is-collapsed'
|
|
|
: '')) {
|
|
|
attr(div1, "class", div1_class_value);
|
|
|
}
|
|
|
|
|
|
if (dirty & /*foldedState, feed*/ 5) show_if = !/*foldedState*/ ctx[2].get(/*feed*/ ctx[0].name);
|
|
|
|
|
|
if (show_if) {
|
|
|
if (if_block1) {
|
|
|
if_block1.p(ctx, dirty);
|
|
|
|
|
|
if (dirty & /*foldedState, feed*/ 5) {
|
|
|
transition_in(if_block1, 1);
|
|
|
}
|
|
|
} else {
|
|
|
if_block1 = create_if_block_1$1(ctx);
|
|
|
if_block1.c();
|
|
|
transition_in(if_block1, 1);
|
|
|
if_block1.m(div2, null);
|
|
|
}
|
|
|
} else if (if_block1) {
|
|
|
group_outros();
|
|
|
|
|
|
transition_out(if_block1, 1, 1, () => {
|
|
|
if_block1 = null;
|
|
|
});
|
|
|
|
|
|
check_outros();
|
|
|
}
|
|
|
},
|
|
|
i(local) {
|
|
|
if (current) return;
|
|
|
transition_in(iconcomponent.$$.fragment, local);
|
|
|
transition_in(if_block1);
|
|
|
current = true;
|
|
|
},
|
|
|
o(local) {
|
|
|
transition_out(iconcomponent.$$.fragment, local);
|
|
|
transition_out(if_block1);
|
|
|
current = false;
|
|
|
},
|
|
|
d(detaching) {
|
|
|
if (detaching) detach(div3);
|
|
|
destroy_component(iconcomponent);
|
|
|
if (if_block0) if_block0.d();
|
|
|
if (if_block1) if_block1.d();
|
|
|
mounted = false;
|
|
|
dispose();
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// (14:0) {#if !feed}
|
|
|
function create_if_block$1(ctx) {
|
|
|
let p;
|
|
|
|
|
|
return {
|
|
|
c() {
|
|
|
p = element("p");
|
|
|
p.textContent = "...loading";
|
|
|
},
|
|
|
m(target, anchor) {
|
|
|
insert(target, p, anchor);
|
|
|
},
|
|
|
p: noop,
|
|
|
i: noop,
|
|
|
o: noop,
|
|
|
d(detaching) {
|
|
|
if (detaching) detach(p);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// (24:20) {#if (feed.image)}
|
|
|
function create_if_block_2$1(ctx) {
|
|
|
let img;
|
|
|
let img_src_value;
|
|
|
let img_alt_value;
|
|
|
|
|
|
return {
|
|
|
c() {
|
|
|
img = element("img");
|
|
|
if (!src_url_equal(img.src, img_src_value = /*feed*/ ctx[0].image)) attr(img, "src", img_src_value);
|
|
|
attr(img, "alt", img_alt_value = /*feed*/ ctx[0].title);
|
|
|
set_style(img, "height", "1em");
|
|
|
},
|
|
|
m(target, anchor) {
|
|
|
insert(target, img, anchor);
|
|
|
},
|
|
|
p(ctx, dirty) {
|
|
|
if (dirty & /*feed*/ 1 && !src_url_equal(img.src, img_src_value = /*feed*/ ctx[0].image)) {
|
|
|
attr(img, "src", img_src_value);
|
|
|
}
|
|
|
|
|
|
if (dirty & /*feed*/ 1 && img_alt_value !== (img_alt_value = /*feed*/ ctx[0].title)) {
|
|
|
attr(img, "alt", img_alt_value);
|
|
|
}
|
|
|
},
|
|
|
d(detaching) {
|
|
|
if (detaching) detach(img);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// (32:12) {#if !foldedState.get(feed.name)}
|
|
|
function create_if_block_1$1(ctx) {
|
|
|
let each_1_anchor;
|
|
|
let current;
|
|
|
let each_value = /*feed*/ ctx[0].items;
|
|
|
let each_blocks = [];
|
|
|
|
|
|
for (let i = 0; i < each_value.length; i += 1) {
|
|
|
each_blocks[i] = create_each_block$1(get_each_context$1(ctx, each_value, i));
|
|
|
}
|
|
|
|
|
|
const out = i => transition_out(each_blocks[i], 1, 1, () => {
|
|
|
each_blocks[i] = null;
|
|
|
});
|
|
|
|
|
|
return {
|
|
|
c() {
|
|
|
for (let i = 0; i < each_blocks.length; i += 1) {
|
|
|
each_blocks[i].c();
|
|
|
}
|
|
|
|
|
|
each_1_anchor = empty();
|
|
|
},
|
|
|
m(target, anchor) {
|
|
|
for (let i = 0; i < each_blocks.length; i += 1) {
|
|
|
each_blocks[i].m(target, anchor);
|
|
|
}
|
|
|
|
|
|
insert(target, each_1_anchor, anchor);
|
|
|
current = true;
|
|
|
},
|
|
|
p(ctx, dirty) {
|
|
|
if (dirty & /*feed, plugin*/ 3) {
|
|
|
each_value = /*feed*/ ctx[0].items;
|
|
|
let i;
|
|
|
|
|
|
for (i = 0; i < each_value.length; i += 1) {
|
|
|
const child_ctx = get_each_context$1(ctx, each_value, i);
|
|
|
|
|
|
if (each_blocks[i]) {
|
|
|
each_blocks[i].p(child_ctx, dirty);
|
|
|
transition_in(each_blocks[i], 1);
|
|
|
} else {
|
|
|
each_blocks[i] = create_each_block$1(child_ctx);
|
|
|
each_blocks[i].c();
|
|
|
transition_in(each_blocks[i], 1);
|
|
|
each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
group_outros();
|
|
|
|
|
|
for (i = each_value.length; i < each_blocks.length; i += 1) {
|
|
|
out(i);
|
|
|
}
|
|
|
|
|
|
check_outros();
|
|
|
}
|
|
|
},
|
|
|
i(local) {
|
|
|
if (current) return;
|
|
|
|
|
|
for (let i = 0; i < each_value.length; i += 1) {
|
|
|
transition_in(each_blocks[i]);
|
|
|
}
|
|
|
|
|
|
current = true;
|
|
|
},
|
|
|
o(local) {
|
|
|
each_blocks = each_blocks.filter(Boolean);
|
|
|
|
|
|
for (let i = 0; i < each_blocks.length; i += 1) {
|
|
|
transition_out(each_blocks[i]);
|
|
|
}
|
|
|
|
|
|
current = false;
|
|
|
},
|
|
|
d(detaching) {
|
|
|
destroy_each(each_blocks, detaching);
|
|
|
if (detaching) detach(each_1_anchor);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// (33:16) {#each feed.items as item}
|
|
|
function create_each_block$1(ctx) {
|
|
|
let itemview;
|
|
|
let current;
|
|
|
|
|
|
itemview = new ItemView({
|
|
|
props: {
|
|
|
item: /*item*/ ctx[5],
|
|
|
plugin: /*plugin*/ ctx[1]
|
|
|
}
|
|
|
});
|
|
|
|
|
|
return {
|
|
|
c() {
|
|
|
create_component(itemview.$$.fragment);
|
|
|
},
|
|
|
m(target, anchor) {
|
|
|
mount_component(itemview, target, anchor);
|
|
|
current = true;
|
|
|
},
|
|
|
p(ctx, dirty) {
|
|
|
const itemview_changes = {};
|
|
|
if (dirty & /*feed*/ 1) itemview_changes.item = /*item*/ ctx[5];
|
|
|
if (dirty & /*plugin*/ 2) itemview_changes.plugin = /*plugin*/ ctx[1];
|
|
|
itemview.$set(itemview_changes);
|
|
|
},
|
|
|
i(local) {
|
|
|
if (current) return;
|
|
|
transition_in(itemview.$$.fragment, local);
|
|
|
current = true;
|
|
|
},
|
|
|
o(local) {
|
|
|
transition_out(itemview.$$.fragment, local);
|
|
|
current = false;
|
|
|
},
|
|
|
d(detaching) {
|
|
|
destroy_component(itemview, detaching);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function create_fragment$1(ctx) {
|
|
|
let current_block_type_index;
|
|
|
let if_block;
|
|
|
let if_block_anchor;
|
|
|
let current;
|
|
|
const if_block_creators = [create_if_block$1, create_else_block];
|
|
|
const if_blocks = [];
|
|
|
|
|
|
function select_block_type(ctx, dirty) {
|
|
|
if (!/*feed*/ ctx[0]) return 0;
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
current_block_type_index = select_block_type(ctx);
|
|
|
if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
|
|
|
|
|
|
return {
|
|
|
c() {
|
|
|
if_block.c();
|
|
|
if_block_anchor = empty();
|
|
|
},
|
|
|
m(target, anchor) {
|
|
|
if_blocks[current_block_type_index].m(target, anchor);
|
|
|
insert(target, if_block_anchor, anchor);
|
|
|
current = true;
|
|
|
},
|
|
|
p(ctx, [dirty]) {
|
|
|
let previous_block_index = current_block_type_index;
|
|
|
current_block_type_index = select_block_type(ctx);
|
|
|
|
|
|
if (current_block_type_index === previous_block_index) {
|
|
|
if_blocks[current_block_type_index].p(ctx, dirty);
|
|
|
} else {
|
|
|
group_outros();
|
|
|
|
|
|
transition_out(if_blocks[previous_block_index], 1, 1, () => {
|
|
|
if_blocks[previous_block_index] = null;
|
|
|
});
|
|
|
|
|
|
check_outros();
|
|
|
if_block = if_blocks[current_block_type_index];
|
|
|
|
|
|
if (!if_block) {
|
|
|
if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
|
|
|
if_block.c();
|
|
|
} else {
|
|
|
if_block.p(ctx, dirty);
|
|
|
}
|
|
|
|
|
|
transition_in(if_block, 1);
|
|
|
if_block.m(if_block_anchor.parentNode, if_block_anchor);
|
|
|
}
|
|
|
},
|
|
|
i(local) {
|
|
|
if (current) return;
|
|
|
transition_in(if_block);
|
|
|
current = true;
|
|
|
},
|
|
|
o(local) {
|
|
|
transition_out(if_block);
|
|
|
current = false;
|
|
|
},
|
|
|
d(detaching) {
|
|
|
if_blocks[current_block_type_index].d(detaching);
|
|
|
if (detaching) detach(if_block_anchor);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function instance$1($$self, $$props, $$invalidate) {
|
|
|
let { feed = null } = $$props;
|
|
|
let { plugin } = $$props;
|
|
|
let foldedState = new Map();
|
|
|
|
|
|
function toggleFold(feed) {
|
|
|
foldedState.set(feed, !foldedState.get(feed));
|
|
|
$$invalidate(2, foldedState);
|
|
|
}
|
|
|
|
|
|
const click_handler = () => toggleFold(feed.name);
|
|
|
|
|
|
$$self.$$set = $$props => {
|
|
|
if ('feed' in $$props) $$invalidate(0, feed = $$props.feed);
|
|
|
if ('plugin' in $$props) $$invalidate(1, plugin = $$props.plugin);
|
|
|
};
|
|
|
|
|
|
return [feed, plugin, foldedState, toggleFold, click_handler];
|
|
|
}
|
|
|
|
|
|
class FeedView extends SvelteComponent {
|
|
|
constructor(options) {
|
|
|
super();
|
|
|
init(this, options, instance$1, create_fragment$1, safe_not_equal, { feed: 0, plugin: 1 });
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/* src/view/FolderView.svelte generated by Svelte v3.44.2 */
|
|
|
|
|
|
function get_each_context(ctx, list, i) {
|
|
|
const child_ctx = ctx.slice();
|
|
|
child_ctx[9] = list[i];
|
|
|
return child_ctx;
|
|
|
}
|
|
|
|
|
|
function get_each_context_1(ctx, list, i) {
|
|
|
const child_ctx = ctx.slice();
|
|
|
child_ctx[12] = list[i];
|
|
|
return child_ctx;
|
|
|
}
|
|
|
|
|
|
function get_each_context_2(ctx, list, i) {
|
|
|
const child_ctx = ctx.slice();
|
|
|
child_ctx[15] = list[i][0];
|
|
|
child_ctx[9] = list[i][1];
|
|
|
return child_ctx;
|
|
|
}
|
|
|
|
|
|
function get_each_context_3(ctx, list, i) {
|
|
|
const child_ctx = ctx.slice();
|
|
|
child_ctx[18] = list[i];
|
|
|
return child_ctx;
|
|
|
}
|
|
|
|
|
|
// (14:0) {#if $filteredItemsStore}
|
|
|
function create_if_block_4(ctx) {
|
|
|
let div1;
|
|
|
let div0;
|
|
|
let iconcomponent;
|
|
|
let t0;
|
|
|
let span;
|
|
|
let div0_class_value;
|
|
|
let t2;
|
|
|
let show_if = !/*foldedState*/ ctx[1].get('rss-filters');
|
|
|
let current;
|
|
|
let mounted;
|
|
|
let dispose;
|
|
|
iconcomponent = new IconComponent({ props: { iconName: "right-triangle" } });
|
|
|
let if_block = show_if && create_if_block_5(ctx);
|
|
|
|
|
|
return {
|
|
|
c() {
|
|
|
div1 = element("div");
|
|
|
div0 = element("div");
|
|
|
create_component(iconcomponent.$$.fragment);
|
|
|
t0 = space();
|
|
|
span = element("span");
|
|
|
span.textContent = "Filtered Folders";
|
|
|
t2 = space();
|
|
|
if (if_block) if_block.c();
|
|
|
|
|
|
attr(div0, "class", div0_class_value = /*foldedState*/ ctx[1].get('rss-filters')
|
|
|
? 'is-collapsed'
|
|
|
: '');
|
|
|
|
|
|
attr(div1, "class", "rss-filtered-folders");
|
|
|
},
|
|
|
m(target, anchor) {
|
|
|
insert(target, div1, anchor);
|
|
|
append(div1, div0);
|
|
|
mount_component(iconcomponent, div0, null);
|
|
|
append(div0, t0);
|
|
|
append(div0, span);
|
|
|
append(div1, t2);
|
|
|
if (if_block) if_block.m(div1, null);
|
|
|
current = true;
|
|
|
|
|
|
if (!mounted) {
|
|
|
dispose = listen(div0, "click", /*click_handler*/ ctx[5]);
|
|
|
mounted = true;
|
|
|
}
|
|
|
},
|
|
|
p(ctx, dirty) {
|
|
|
if (!current || dirty & /*foldedState*/ 2 && div0_class_value !== (div0_class_value = /*foldedState*/ ctx[1].get('rss-filters')
|
|
|
? 'is-collapsed'
|
|
|
: '')) {
|
|
|
attr(div0, "class", div0_class_value);
|
|
|
}
|
|
|
|
|
|
if (dirty & /*foldedState*/ 2) show_if = !/*foldedState*/ ctx[1].get('rss-filters');
|
|
|
|
|
|
if (show_if) {
|
|
|
if (if_block) {
|
|
|
if_block.p(ctx, dirty);
|
|
|
|
|
|
if (dirty & /*foldedState*/ 2) {
|
|
|
transition_in(if_block, 1);
|
|
|
}
|
|
|
} else {
|
|
|
if_block = create_if_block_5(ctx);
|
|
|
if_block.c();
|
|
|
transition_in(if_block, 1);
|
|
|
if_block.m(div1, null);
|
|
|
}
|
|
|
} else if (if_block) {
|
|
|
group_outros();
|
|
|
|
|
|
transition_out(if_block, 1, 1, () => {
|
|
|
if_block = null;
|
|
|
});
|
|
|
|
|
|
check_outros();
|
|
|
}
|
|
|
},
|
|
|
i(local) {
|
|
|
if (current) return;
|
|
|
transition_in(iconcomponent.$$.fragment, local);
|
|
|
transition_in(if_block);
|
|
|
current = true;
|
|
|
},
|
|
|
o(local) {
|
|
|
transition_out(iconcomponent.$$.fragment, local);
|
|
|
transition_out(if_block);
|
|
|
current = false;
|
|
|
},
|
|
|
d(detaching) {
|
|
|
if (detaching) detach(div1);
|
|
|
destroy_component(iconcomponent);
|
|
|
if (if_block) if_block.d();
|
|
|
mounted = false;
|
|
|
dispose();
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// (22:8) {#if (!foldedState.get('rss-filters'))}
|
|
|
function create_if_block_5(ctx) {
|
|
|
let each_1_anchor;
|
|
|
let current;
|
|
|
let each_value_2 = Object.entries(/*$filteredItemsStore*/ ctx[2]);
|
|
|
let each_blocks = [];
|
|
|
|
|
|
for (let i = 0; i < each_value_2.length; i += 1) {
|
|
|
each_blocks[i] = create_each_block_2(get_each_context_2(ctx, each_value_2, i));
|
|
|
}
|
|
|
|
|
|
const out = i => transition_out(each_blocks[i], 1, 1, () => {
|
|
|
each_blocks[i] = null;
|
|
|
});
|
|
|
|
|
|
return {
|
|
|
c() {
|
|
|
for (let i = 0; i < each_blocks.length; i += 1) {
|
|
|
each_blocks[i].c();
|
|
|
}
|
|
|
|
|
|
each_1_anchor = empty();
|
|
|
},
|
|
|
m(target, anchor) {
|
|
|
for (let i = 0; i < each_blocks.length; i += 1) {
|
|
|
each_blocks[i].m(target, anchor);
|
|
|
}
|
|
|
|
|
|
insert(target, each_1_anchor, anchor);
|
|
|
current = true;
|
|
|
},
|
|
|
p(ctx, dirty) {
|
|
|
if (dirty & /*Object, $filteredItemsStore, plugin, foldedState, toggleFold*/ 23) {
|
|
|
each_value_2 = Object.entries(/*$filteredItemsStore*/ ctx[2]);
|
|
|
let i;
|
|
|
|
|
|
for (i = 0; i < each_value_2.length; i += 1) {
|
|
|
const child_ctx = get_each_context_2(ctx, each_value_2, i);
|
|
|
|
|
|
if (each_blocks[i]) {
|
|
|
each_blocks[i].p(child_ctx, dirty);
|
|
|
transition_in(each_blocks[i], 1);
|
|
|
} else {
|
|
|
each_blocks[i] = create_each_block_2(child_ctx);
|
|
|
each_blocks[i].c();
|
|
|
transition_in(each_blocks[i], 1);
|
|
|
each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
group_outros();
|
|
|
|
|
|
for (i = each_value_2.length; i < each_blocks.length; i += 1) {
|
|
|
out(i);
|
|
|
}
|
|
|
|
|
|
check_outros();
|
|
|
}
|
|
|
},
|
|
|
i(local) {
|
|
|
if (current) return;
|
|
|
|
|
|
for (let i = 0; i < each_value_2.length; i += 1) {
|
|
|
transition_in(each_blocks[i]);
|
|
|
}
|
|
|
|
|
|
current = true;
|
|
|
},
|
|
|
o(local) {
|
|
|
each_blocks = each_blocks.filter(Boolean);
|
|
|
|
|
|
for (let i = 0; i < each_blocks.length; i += 1) {
|
|
|
transition_out(each_blocks[i]);
|
|
|
}
|
|
|
|
|
|
current = false;
|
|
|
},
|
|
|
d(detaching) {
|
|
|
destroy_each(each_blocks, detaching);
|
|
|
if (detaching) detach(each_1_anchor);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// (30:16) {#if (!foldedState.get('rss-filter' + folder.filter.name))}
|
|
|
function create_if_block_6(ctx) {
|
|
|
let div;
|
|
|
let t;
|
|
|
let current;
|
|
|
let each_value_3 = /*folder*/ ctx[9].items.items;
|
|
|
let each_blocks = [];
|
|
|
|
|
|
for (let i = 0; i < each_value_3.length; i += 1) {
|
|
|
each_blocks[i] = create_each_block_3(get_each_context_3(ctx, each_value_3, i));
|
|
|
}
|
|
|
|
|
|
const out = i => transition_out(each_blocks[i], 1, 1, () => {
|
|
|
each_blocks[i] = null;
|
|
|
});
|
|
|
|
|
|
return {
|
|
|
c() {
|
|
|
div = element("div");
|
|
|
|
|
|
for (let i = 0; i < each_blocks.length; i += 1) {
|
|
|
each_blocks[i].c();
|
|
|
}
|
|
|
|
|
|
t = space();
|
|
|
set_style(div, "margin-left", "20px");
|
|
|
},
|
|
|
m(target, anchor) {
|
|
|
insert(target, div, anchor);
|
|
|
|
|
|
for (let i = 0; i < each_blocks.length; i += 1) {
|
|
|
each_blocks[i].m(div, null);
|
|
|
}
|
|
|
|
|
|
append(div, t);
|
|
|
current = true;
|
|
|
},
|
|
|
p(ctx, dirty) {
|
|
|
if (dirty & /*Object, $filteredItemsStore, plugin*/ 5) {
|
|
|
each_value_3 = /*folder*/ ctx[9].items.items;
|
|
|
let i;
|
|
|
|
|
|
for (i = 0; i < each_value_3.length; i += 1) {
|
|
|
const child_ctx = get_each_context_3(ctx, each_value_3, i);
|
|
|
|
|
|
if (each_blocks[i]) {
|
|
|
each_blocks[i].p(child_ctx, dirty);
|
|
|
transition_in(each_blocks[i], 1);
|
|
|
} else {
|
|
|
each_blocks[i] = create_each_block_3(child_ctx);
|
|
|
each_blocks[i].c();
|
|
|
transition_in(each_blocks[i], 1);
|
|
|
each_blocks[i].m(div, t);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
group_outros();
|
|
|
|
|
|
for (i = each_value_3.length; i < each_blocks.length; i += 1) {
|
|
|
out(i);
|
|
|
}
|
|
|
|
|
|
check_outros();
|
|
|
}
|
|
|
},
|
|
|
i(local) {
|
|
|
if (current) return;
|
|
|
|
|
|
for (let i = 0; i < each_value_3.length; i += 1) {
|
|
|
transition_in(each_blocks[i]);
|
|
|
}
|
|
|
|
|
|
current = true;
|
|
|
},
|
|
|
o(local) {
|
|
|
each_blocks = each_blocks.filter(Boolean);
|
|
|
|
|
|
for (let i = 0; i < each_blocks.length; i += 1) {
|
|
|
transition_out(each_blocks[i]);
|
|
|
}
|
|
|
|
|
|
current = false;
|
|
|
},
|
|
|
d(detaching) {
|
|
|
if (detaching) detach(div);
|
|
|
destroy_each(each_blocks, detaching);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// (32:24) {#each folder.items.items as item}
|
|
|
function create_each_block_3(ctx) {
|
|
|
let itemview;
|
|
|
let current;
|
|
|
|
|
|
itemview = new ItemView({
|
|
|
props: {
|
|
|
item: /*item*/ ctx[18],
|
|
|
plugin: /*plugin*/ ctx[0]
|
|
|
}
|
|
|
});
|
|
|
|
|
|
return {
|
|
|
c() {
|
|
|
create_component(itemview.$$.fragment);
|
|
|
},
|
|
|
m(target, anchor) {
|
|
|
mount_component(itemview, target, anchor);
|
|
|
current = true;
|
|
|
},
|
|
|
p(ctx, dirty) {
|
|
|
const itemview_changes = {};
|
|
|
if (dirty & /*$filteredItemsStore*/ 4) itemview_changes.item = /*item*/ ctx[18];
|
|
|
if (dirty & /*plugin*/ 1) itemview_changes.plugin = /*plugin*/ ctx[0];
|
|
|
itemview.$set(itemview_changes);
|
|
|
},
|
|
|
i(local) {
|
|
|
if (current) return;
|
|
|
transition_in(itemview.$$.fragment, local);
|
|
|
current = true;
|
|
|
},
|
|
|
o(local) {
|
|
|
transition_out(itemview.$$.fragment, local);
|
|
|
current = false;
|
|
|
},
|
|
|
d(detaching) {
|
|
|
destroy_component(itemview, detaching);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// (23:12) {#each Object.entries($filteredItemsStore) as [key, folder]}
|
|
|
function create_each_block_2(ctx) {
|
|
|
let div;
|
|
|
let iconcomponent;
|
|
|
let t0;
|
|
|
let span;
|
|
|
let t1_value = /*folder*/ ctx[9].filter.name + "";
|
|
|
let t1;
|
|
|
let div_class_value;
|
|
|
let t2;
|
|
|
let show_if = !/*foldedState*/ ctx[1].get('rss-filter' + /*folder*/ ctx[9].filter.name);
|
|
|
let if_block_anchor;
|
|
|
let current;
|
|
|
let mounted;
|
|
|
let dispose;
|
|
|
iconcomponent = new IconComponent({ props: { iconName: "right-triangle" } });
|
|
|
|
|
|
function click_handler_1() {
|
|
|
return /*click_handler_1*/ ctx[6](/*folder*/ ctx[9]);
|
|
|
}
|
|
|
|
|
|
let if_block = show_if && create_if_block_6(ctx);
|
|
|
|
|
|
return {
|
|
|
c() {
|
|
|
div = element("div");
|
|
|
create_component(iconcomponent.$$.fragment);
|
|
|
t0 = space();
|
|
|
span = element("span");
|
|
|
t1 = text(t1_value);
|
|
|
t2 = space();
|
|
|
if (if_block) if_block.c();
|
|
|
if_block_anchor = empty();
|
|
|
|
|
|
attr(div, "class", div_class_value = /*foldedState*/ ctx[1].get('rss-filter' + /*folder*/ ctx[9].filter.name)
|
|
|
? 'is-collapsed'
|
|
|
: '');
|
|
|
|
|
|
set_style(div, "margin-left", "20px");
|
|
|
},
|
|
|
m(target, anchor) {
|
|
|
insert(target, div, anchor);
|
|
|
mount_component(iconcomponent, div, null);
|
|
|
append(div, t0);
|
|
|
append(div, span);
|
|
|
append(span, t1);
|
|
|
insert(target, t2, anchor);
|
|
|
if (if_block) if_block.m(target, anchor);
|
|
|
insert(target, if_block_anchor, anchor);
|
|
|
current = true;
|
|
|
|
|
|
if (!mounted) {
|
|
|
dispose = listen(div, "click", click_handler_1);
|
|
|
mounted = true;
|
|
|
}
|
|
|
},
|
|
|
p(new_ctx, dirty) {
|
|
|
ctx = new_ctx;
|
|
|
if ((!current || dirty & /*$filteredItemsStore*/ 4) && t1_value !== (t1_value = /*folder*/ ctx[9].filter.name + "")) set_data(t1, t1_value);
|
|
|
|
|
|
if (!current || dirty & /*foldedState, $filteredItemsStore*/ 6 && div_class_value !== (div_class_value = /*foldedState*/ ctx[1].get('rss-filter' + /*folder*/ ctx[9].filter.name)
|
|
|
? 'is-collapsed'
|
|
|
: '')) {
|
|
|
attr(div, "class", div_class_value);
|
|
|
}
|
|
|
|
|
|
if (dirty & /*foldedState, $filteredItemsStore*/ 6) show_if = !/*foldedState*/ ctx[1].get('rss-filter' + /*folder*/ ctx[9].filter.name);
|
|
|
|
|
|
if (show_if) {
|
|
|
if (if_block) {
|
|
|
if_block.p(ctx, dirty);
|
|
|
|
|
|
if (dirty & /*foldedState, $filteredItemsStore*/ 6) {
|
|
|
transition_in(if_block, 1);
|
|
|
}
|
|
|
} else {
|
|
|
if_block = create_if_block_6(ctx);
|
|
|
if_block.c();
|
|
|
transition_in(if_block, 1);
|
|
|
if_block.m(if_block_anchor.parentNode, if_block_anchor);
|
|
|
}
|
|
|
} else if (if_block) {
|
|
|
group_outros();
|
|
|
|
|
|
transition_out(if_block, 1, 1, () => {
|
|
|
if_block = null;
|
|
|
});
|
|
|
|
|
|
check_outros();
|
|
|
}
|
|
|
},
|
|
|
i(local) {
|
|
|
if (current) return;
|
|
|
transition_in(iconcomponent.$$.fragment, local);
|
|
|
transition_in(if_block);
|
|
|
current = true;
|
|
|
},
|
|
|
o(local) {
|
|
|
transition_out(iconcomponent.$$.fragment, local);
|
|
|
transition_out(if_block);
|
|
|
current = false;
|
|
|
},
|
|
|
d(detaching) {
|
|
|
if (detaching) detach(div);
|
|
|
destroy_component(iconcomponent);
|
|
|
if (detaching) detach(t2);
|
|
|
if (if_block) if_block.d(detaching);
|
|
|
if (detaching) detach(if_block_anchor);
|
|
|
mounted = false;
|
|
|
dispose();
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// (43:0) {#if !$sortedFeedsStore}
|
|
|
function create_if_block_3(ctx) {
|
|
|
let h1;
|
|
|
|
|
|
return {
|
|
|
c() {
|
|
|
h1 = element("h1");
|
|
|
h1.textContent = "No feeds configured";
|
|
|
},
|
|
|
m(target, anchor) {
|
|
|
insert(target, h1, anchor);
|
|
|
},
|
|
|
d(detaching) {
|
|
|
if (detaching) detach(h1);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// (47:0) {#if $sortedFeedsStore}
|
|
|
function create_if_block(ctx) {
|
|
|
let div1;
|
|
|
let div0;
|
|
|
let iconcomponent;
|
|
|
let t0;
|
|
|
let span;
|
|
|
let div0_class_value;
|
|
|
let t2;
|
|
|
let show_if = !/*foldedState*/ ctx[1].get('rss-folders');
|
|
|
let current;
|
|
|
let mounted;
|
|
|
let dispose;
|
|
|
iconcomponent = new IconComponent({ props: { iconName: "right-triangle" } });
|
|
|
let if_block = show_if && create_if_block_1(ctx);
|
|
|
|
|
|
return {
|
|
|
c() {
|
|
|
div1 = element("div");
|
|
|
div0 = element("div");
|
|
|
create_component(iconcomponent.$$.fragment);
|
|
|
t0 = space();
|
|
|
span = element("span");
|
|
|
span.textContent = "Folders";
|
|
|
t2 = space();
|
|
|
if (if_block) if_block.c();
|
|
|
|
|
|
attr(div0, "class", div0_class_value = /*foldedState*/ ctx[1].get('rss-folders')
|
|
|
? 'is-collapsed'
|
|
|
: '');
|
|
|
|
|
|
attr(div1, "class", "rss-feeds-folders");
|
|
|
},
|
|
|
m(target, anchor) {
|
|
|
insert(target, div1, anchor);
|
|
|
append(div1, div0);
|
|
|
mount_component(iconcomponent, div0, null);
|
|
|
append(div0, t0);
|
|
|
append(div0, span);
|
|
|
append(div1, t2);
|
|
|
if (if_block) if_block.m(div1, null);
|
|
|
current = true;
|
|
|
|
|
|
if (!mounted) {
|
|
|
dispose = listen(div0, "click", /*click_handler_2*/ ctx[7]);
|
|
|
mounted = true;
|
|
|
}
|
|
|
},
|
|
|
p(ctx, dirty) {
|
|
|
if (!current || dirty & /*foldedState*/ 2 && div0_class_value !== (div0_class_value = /*foldedState*/ ctx[1].get('rss-folders')
|
|
|
? 'is-collapsed'
|
|
|
: '')) {
|
|
|
attr(div0, "class", div0_class_value);
|
|
|
}
|
|
|
|
|
|
if (dirty & /*foldedState*/ 2) show_if = !/*foldedState*/ ctx[1].get('rss-folders');
|
|
|
|
|
|
if (show_if) {
|
|
|
if (if_block) {
|
|
|
if_block.p(ctx, dirty);
|
|
|
|
|
|
if (dirty & /*foldedState*/ 2) {
|
|
|
transition_in(if_block, 1);
|
|
|
}
|
|
|
} else {
|
|
|
if_block = create_if_block_1(ctx);
|
|
|
if_block.c();
|
|
|
transition_in(if_block, 1);
|
|
|
if_block.m(div1, null);
|
|
|
}
|
|
|
} else if (if_block) {
|
|
|
group_outros();
|
|
|
|
|
|
transition_out(if_block, 1, 1, () => {
|
|
|
if_block = null;
|
|
|
});
|
|
|
|
|
|
check_outros();
|
|
|
}
|
|
|
},
|
|
|
i(local) {
|
|
|
if (current) return;
|
|
|
transition_in(iconcomponent.$$.fragment, local);
|
|
|
transition_in(if_block);
|
|
|
current = true;
|
|
|
},
|
|
|
o(local) {
|
|
|
transition_out(iconcomponent.$$.fragment, local);
|
|
|
transition_out(if_block);
|
|
|
current = false;
|
|
|
},
|
|
|
d(detaching) {
|
|
|
if (detaching) detach(div1);
|
|
|
destroy_component(iconcomponent);
|
|
|
if (if_block) if_block.d();
|
|
|
mounted = false;
|
|
|
dispose();
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// (55:8) {#if (!foldedState.get('rss-folders'))}
|
|
|
function create_if_block_1(ctx) {
|
|
|
let each_1_anchor;
|
|
|
let current;
|
|
|
let each_value = Object.keys(/*$sortedFeedsStore*/ ctx[3]);
|
|
|
let each_blocks = [];
|
|
|
|
|
|
for (let i = 0; i < each_value.length; i += 1) {
|
|
|
each_blocks[i] = create_each_block(get_each_context(ctx, each_value, i));
|
|
|
}
|
|
|
|
|
|
const out = i => transition_out(each_blocks[i], 1, 1, () => {
|
|
|
each_blocks[i] = null;
|
|
|
});
|
|
|
|
|
|
return {
|
|
|
c() {
|
|
|
for (let i = 0; i < each_blocks.length; i += 1) {
|
|
|
each_blocks[i].c();
|
|
|
}
|
|
|
|
|
|
each_1_anchor = empty();
|
|
|
},
|
|
|
m(target, anchor) {
|
|
|
for (let i = 0; i < each_blocks.length; i += 1) {
|
|
|
each_blocks[i].m(target, anchor);
|
|
|
}
|
|
|
|
|
|
insert(target, each_1_anchor, anchor);
|
|
|
current = true;
|
|
|
},
|
|
|
p(ctx, dirty) {
|
|
|
if (dirty & /*$sortedFeedsStore, Object, plugin, foldedState, toggleFold*/ 27) {
|
|
|
each_value = Object.keys(/*$sortedFeedsStore*/ ctx[3]);
|
|
|
let i;
|
|
|
|
|
|
for (i = 0; i < each_value.length; i += 1) {
|
|
|
const child_ctx = get_each_context(ctx, each_value, i);
|
|
|
|
|
|
if (each_blocks[i]) {
|
|
|
each_blocks[i].p(child_ctx, dirty);
|
|
|
transition_in(each_blocks[i], 1);
|
|
|
} else {
|
|
|
each_blocks[i] = create_each_block(child_ctx);
|
|
|
each_blocks[i].c();
|
|
|
transition_in(each_blocks[i], 1);
|
|
|
each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
group_outros();
|
|
|
|
|
|
for (i = each_value.length; i < each_blocks.length; i += 1) {
|
|
|
out(i);
|
|
|
}
|
|
|
|
|
|
check_outros();
|
|
|
}
|
|
|
},
|
|
|
i(local) {
|
|
|
if (current) return;
|
|
|
|
|
|
for (let i = 0; i < each_value.length; i += 1) {
|
|
|
transition_in(each_blocks[i]);
|
|
|
}
|
|
|
|
|
|
current = true;
|
|
|
},
|
|
|
o(local) {
|
|
|
each_blocks = each_blocks.filter(Boolean);
|
|
|
|
|
|
for (let i = 0; i < each_blocks.length; i += 1) {
|
|
|
transition_out(each_blocks[i]);
|
|
|
}
|
|
|
|
|
|
current = false;
|
|
|
},
|
|
|
d(detaching) {
|
|
|
destroy_each(each_blocks, detaching);
|
|
|
if (detaching) detach(each_1_anchor);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// (65:20) {#if (!foldedState.get(folder))}
|
|
|
function create_if_block_2(ctx) {
|
|
|
let each_1_anchor;
|
|
|
let current;
|
|
|
let each_value_1 = /*$sortedFeedsStore*/ ctx[3][/*folder*/ ctx[9]];
|
|
|
let each_blocks = [];
|
|
|
|
|
|
for (let i = 0; i < each_value_1.length; i += 1) {
|
|
|
each_blocks[i] = create_each_block_1(get_each_context_1(ctx, each_value_1, i));
|
|
|
}
|
|
|
|
|
|
const out = i => transition_out(each_blocks[i], 1, 1, () => {
|
|
|
each_blocks[i] = null;
|
|
|
});
|
|
|
|
|
|
return {
|
|
|
c() {
|
|
|
for (let i = 0; i < each_blocks.length; i += 1) {
|
|
|
each_blocks[i].c();
|
|
|
}
|
|
|
|
|
|
each_1_anchor = empty();
|
|
|
},
|
|
|
m(target, anchor) {
|
|
|
for (let i = 0; i < each_blocks.length; i += 1) {
|
|
|
each_blocks[i].m(target, anchor);
|
|
|
}
|
|
|
|
|
|
insert(target, each_1_anchor, anchor);
|
|
|
current = true;
|
|
|
},
|
|
|
p(ctx, dirty) {
|
|
|
if (dirty & /*$sortedFeedsStore, Object, plugin*/ 9) {
|
|
|
each_value_1 = /*$sortedFeedsStore*/ ctx[3][/*folder*/ ctx[9]];
|
|
|
let i;
|
|
|
|
|
|
for (i = 0; i < each_value_1.length; i += 1) {
|
|
|
const child_ctx = get_each_context_1(ctx, each_value_1, i);
|
|
|
|
|
|
if (each_blocks[i]) {
|
|
|
each_blocks[i].p(child_ctx, dirty);
|
|
|
transition_in(each_blocks[i], 1);
|
|
|
} else {
|
|
|
each_blocks[i] = create_each_block_1(child_ctx);
|
|
|
each_blocks[i].c();
|
|
|
transition_in(each_blocks[i], 1);
|
|
|
each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
group_outros();
|
|
|
|
|
|
for (i = each_value_1.length; i < each_blocks.length; i += 1) {
|
|
|
out(i);
|
|
|
}
|
|
|
|
|
|
check_outros();
|
|
|
}
|
|
|
},
|
|
|
i(local) {
|
|
|
if (current) return;
|
|
|
|
|
|
for (let i = 0; i < each_value_1.length; i += 1) {
|
|
|
transition_in(each_blocks[i]);
|
|
|
}
|
|
|
|
|
|
current = true;
|
|
|
},
|
|
|
o(local) {
|
|
|
each_blocks = each_blocks.filter(Boolean);
|
|
|
|
|
|
for (let i = 0; i < each_blocks.length; i += 1) {
|
|
|
transition_out(each_blocks[i]);
|
|
|
}
|
|
|
|
|
|
current = false;
|
|
|
},
|
|
|
d(detaching) {
|
|
|
destroy_each(each_blocks, detaching);
|
|
|
if (detaching) detach(each_1_anchor);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// (66:24) {#each $sortedFeedsStore[folder] as feed}
|
|
|
function create_each_block_1(ctx) {
|
|
|
let feedview;
|
|
|
let current;
|
|
|
|
|
|
feedview = new FeedView({
|
|
|
props: {
|
|
|
feed: /*feed*/ ctx[12],
|
|
|
plugin: /*plugin*/ ctx[0]
|
|
|
}
|
|
|
});
|
|
|
|
|
|
return {
|
|
|
c() {
|
|
|
create_component(feedview.$$.fragment);
|
|
|
},
|
|
|
m(target, anchor) {
|
|
|
mount_component(feedview, target, anchor);
|
|
|
current = true;
|
|
|
},
|
|
|
p(ctx, dirty) {
|
|
|
const feedview_changes = {};
|
|
|
if (dirty & /*$sortedFeedsStore*/ 8) feedview_changes.feed = /*feed*/ ctx[12];
|
|
|
if (dirty & /*plugin*/ 1) feedview_changes.plugin = /*plugin*/ ctx[0];
|
|
|
feedview.$set(feedview_changes);
|
|
|
},
|
|
|
i(local) {
|
|
|
if (current) return;
|
|
|
transition_in(feedview.$$.fragment, local);
|
|
|
current = true;
|
|
|
},
|
|
|
o(local) {
|
|
|
transition_out(feedview.$$.fragment, local);
|
|
|
current = false;
|
|
|
},
|
|
|
d(detaching) {
|
|
|
destroy_component(feedview, detaching);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// (56:12) {#each Object.keys($sortedFeedsStore) as folder}
|
|
|
function create_each_block(ctx) {
|
|
|
let div1;
|
|
|
let div0;
|
|
|
let iconcomponent;
|
|
|
let t0;
|
|
|
let span;
|
|
|
|
|
|
let t1_value = (/*folder*/ ctx[9] !== "undefined"
|
|
|
? /*folder*/ ctx[9]
|
|
|
: 'No Folder') + "";
|
|
|
|
|
|
let t1;
|
|
|
let div0_class_value;
|
|
|
let t2;
|
|
|
let show_if = !/*foldedState*/ ctx[1].get(/*folder*/ ctx[9]);
|
|
|
let t3;
|
|
|
let current;
|
|
|
let mounted;
|
|
|
let dispose;
|
|
|
iconcomponent = new IconComponent({ props: { iconName: "right-triangle" } });
|
|
|
|
|
|
function click_handler_3() {
|
|
|
return /*click_handler_3*/ ctx[8](/*folder*/ ctx[9]);
|
|
|
}
|
|
|
|
|
|
let if_block = show_if && create_if_block_2(ctx);
|
|
|
|
|
|
return {
|
|
|
c() {
|
|
|
div1 = element("div");
|
|
|
div0 = element("div");
|
|
|
create_component(iconcomponent.$$.fragment);
|
|
|
t0 = space();
|
|
|
span = element("span");
|
|
|
t1 = text(t1_value);
|
|
|
t2 = space();
|
|
|
if (if_block) if_block.c();
|
|
|
t3 = space();
|
|
|
|
|
|
attr(div0, "class", div0_class_value = /*foldedState*/ ctx[1].get(/*folder*/ ctx[9])
|
|
|
? 'is-collapsed'
|
|
|
: '');
|
|
|
|
|
|
attr(div1, "class", "rss-folder");
|
|
|
set_style(div1, "margin-left", "20px");
|
|
|
},
|
|
|
m(target, anchor) {
|
|
|
insert(target, div1, anchor);
|
|
|
append(div1, div0);
|
|
|
mount_component(iconcomponent, div0, null);
|
|
|
append(div0, t0);
|
|
|
append(div0, span);
|
|
|
append(span, t1);
|
|
|
append(div1, t2);
|
|
|
if (if_block) if_block.m(div1, null);
|
|
|
append(div1, t3);
|
|
|
current = true;
|
|
|
|
|
|
if (!mounted) {
|
|
|
dispose = listen(div0, "click", click_handler_3);
|
|
|
mounted = true;
|
|
|
}
|
|
|
},
|
|
|
p(new_ctx, dirty) {
|
|
|
ctx = new_ctx;
|
|
|
|
|
|
if ((!current || dirty & /*$sortedFeedsStore*/ 8) && t1_value !== (t1_value = (/*folder*/ ctx[9] !== "undefined"
|
|
|
? /*folder*/ ctx[9]
|
|
|
: 'No Folder') + "")) set_data(t1, t1_value);
|
|
|
|
|
|
if (!current || dirty & /*foldedState, $sortedFeedsStore*/ 10 && div0_class_value !== (div0_class_value = /*foldedState*/ ctx[1].get(/*folder*/ ctx[9])
|
|
|
? 'is-collapsed'
|
|
|
: '')) {
|
|
|
attr(div0, "class", div0_class_value);
|
|
|
}
|
|
|
|
|
|
if (dirty & /*foldedState, $sortedFeedsStore*/ 10) show_if = !/*foldedState*/ ctx[1].get(/*folder*/ ctx[9]);
|
|
|
|
|
|
if (show_if) {
|
|
|
if (if_block) {
|
|
|
if_block.p(ctx, dirty);
|
|
|
|
|
|
if (dirty & /*foldedState, $sortedFeedsStore*/ 10) {
|
|
|
transition_in(if_block, 1);
|
|
|
}
|
|
|
} else {
|
|
|
if_block = create_if_block_2(ctx);
|
|
|
if_block.c();
|
|
|
transition_in(if_block, 1);
|
|
|
if_block.m(div1, t3);
|
|
|
}
|
|
|
} else if (if_block) {
|
|
|
group_outros();
|
|
|
|
|
|
transition_out(if_block, 1, 1, () => {
|
|
|
if_block = null;
|
|
|
});
|
|
|
|
|
|
check_outros();
|
|
|
}
|
|
|
},
|
|
|
i(local) {
|
|
|
if (current) return;
|
|
|
transition_in(iconcomponent.$$.fragment, local);
|
|
|
transition_in(if_block);
|
|
|
current = true;
|
|
|
},
|
|
|
o(local) {
|
|
|
transition_out(iconcomponent.$$.fragment, local);
|
|
|
transition_out(if_block);
|
|
|
current = false;
|
|
|
},
|
|
|
d(detaching) {
|
|
|
if (detaching) detach(div1);
|
|
|
destroy_component(iconcomponent);
|
|
|
if (if_block) if_block.d();
|
|
|
mounted = false;
|
|
|
dispose();
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function create_fragment(ctx) {
|
|
|
let t0;
|
|
|
let t1;
|
|
|
let if_block2_anchor;
|
|
|
let current;
|
|
|
let if_block0 = /*$filteredItemsStore*/ ctx[2] && create_if_block_4(ctx);
|
|
|
let if_block1 = !/*$sortedFeedsStore*/ ctx[3] && create_if_block_3();
|
|
|
let if_block2 = /*$sortedFeedsStore*/ ctx[3] && create_if_block(ctx);
|
|
|
|
|
|
return {
|
|
|
c() {
|
|
|
if (if_block0) if_block0.c();
|
|
|
t0 = space();
|
|
|
if (if_block1) if_block1.c();
|
|
|
t1 = space();
|
|
|
if (if_block2) if_block2.c();
|
|
|
if_block2_anchor = empty();
|
|
|
},
|
|
|
m(target, anchor) {
|
|
|
if (if_block0) if_block0.m(target, anchor);
|
|
|
insert(target, t0, anchor);
|
|
|
if (if_block1) if_block1.m(target, anchor);
|
|
|
insert(target, t1, anchor);
|
|
|
if (if_block2) if_block2.m(target, anchor);
|
|
|
insert(target, if_block2_anchor, anchor);
|
|
|
current = true;
|
|
|
},
|
|
|
p(ctx, [dirty]) {
|
|
|
if (/*$filteredItemsStore*/ ctx[2]) {
|
|
|
if (if_block0) {
|
|
|
if_block0.p(ctx, dirty);
|
|
|
|
|
|
if (dirty & /*$filteredItemsStore*/ 4) {
|
|
|
transition_in(if_block0, 1);
|
|
|
}
|
|
|
} else {
|
|
|
if_block0 = create_if_block_4(ctx);
|
|
|
if_block0.c();
|
|
|
transition_in(if_block0, 1);
|
|
|
if_block0.m(t0.parentNode, t0);
|
|
|
}
|
|
|
} else if (if_block0) {
|
|
|
group_outros();
|
|
|
|
|
|
transition_out(if_block0, 1, 1, () => {
|
|
|
if_block0 = null;
|
|
|
});
|
|
|
|
|
|
check_outros();
|
|
|
}
|
|
|
|
|
|
if (!/*$sortedFeedsStore*/ ctx[3]) {
|
|
|
if (if_block1) ; else {
|
|
|
if_block1 = create_if_block_3();
|
|
|
if_block1.c();
|
|
|
if_block1.m(t1.parentNode, t1);
|
|
|
}
|
|
|
} else if (if_block1) {
|
|
|
if_block1.d(1);
|
|
|
if_block1 = null;
|
|
|
}
|
|
|
|
|
|
if (/*$sortedFeedsStore*/ ctx[3]) {
|
|
|
if (if_block2) {
|
|
|
if_block2.p(ctx, dirty);
|
|
|
|
|
|
if (dirty & /*$sortedFeedsStore*/ 8) {
|
|
|
transition_in(if_block2, 1);
|
|
|
}
|
|
|
} else {
|
|
|
if_block2 = create_if_block(ctx);
|
|
|
if_block2.c();
|
|
|
transition_in(if_block2, 1);
|
|
|
if_block2.m(if_block2_anchor.parentNode, if_block2_anchor);
|
|
|
}
|
|
|
} else if (if_block2) {
|
|
|
group_outros();
|
|
|
|
|
|
transition_out(if_block2, 1, 1, () => {
|
|
|
if_block2 = null;
|
|
|
});
|
|
|
|
|
|
check_outros();
|
|
|
}
|
|
|
},
|
|
|
i(local) {
|
|
|
if (current) return;
|
|
|
transition_in(if_block0);
|
|
|
transition_in(if_block2);
|
|
|
current = true;
|
|
|
},
|
|
|
o(local) {
|
|
|
transition_out(if_block0);
|
|
|
transition_out(if_block2);
|
|
|
current = false;
|
|
|
},
|
|
|
d(detaching) {
|
|
|
if (if_block0) if_block0.d(detaching);
|
|
|
if (detaching) detach(t0);
|
|
|
if (if_block1) if_block1.d(detaching);
|
|
|
if (detaching) detach(t1);
|
|
|
if (if_block2) if_block2.d(detaching);
|
|
|
if (detaching) detach(if_block2_anchor);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function instance($$self, $$props, $$invalidate) {
|
|
|
let $filteredItemsStore;
|
|
|
let $sortedFeedsStore;
|
|
|
component_subscribe($$self, filteredItemsStore, $$value => $$invalidate(2, $filteredItemsStore = $$value));
|
|
|
component_subscribe($$self, sortedFeedsStore, $$value => $$invalidate(3, $sortedFeedsStore = $$value));
|
|
|
let { plugin } = $$props;
|
|
|
let foldedState = new Map();
|
|
|
|
|
|
function toggleFold(folder) {
|
|
|
foldedState.set(folder, !foldedState.get(folder));
|
|
|
$$invalidate(1, foldedState);
|
|
|
}
|
|
|
|
|
|
const click_handler = () => toggleFold('rss-filters');
|
|
|
const click_handler_1 = folder => toggleFold('rss-filter' + folder.filter.name);
|
|
|
const click_handler_2 = () => toggleFold('rss-folders');
|
|
|
const click_handler_3 = folder => toggleFold(folder);
|
|
|
|
|
|
$$self.$$set = $$props => {
|
|
|
if ('plugin' in $$props) $$invalidate(0, plugin = $$props.plugin);
|
|
|
};
|
|
|
|
|
|
return [
|
|
|
plugin,
|
|
|
foldedState,
|
|
|
$filteredItemsStore,
|
|
|
$sortedFeedsStore,
|
|
|
toggleFold,
|
|
|
click_handler,
|
|
|
click_handler_1,
|
|
|
click_handler_2,
|
|
|
click_handler_3
|
|
|
];
|
|
|
}
|
|
|
|
|
|
class FolderView extends SvelteComponent {
|
|
|
constructor(options) {
|
|
|
super();
|
|
|
init(this, options, instance, create_fragment, safe_not_equal, { plugin: 0 });
|
|
|
}
|
|
|
}
|
|
|
|
|
|
class ViewLoader extends obsidian.ItemView {
|
|
|
constructor(leaf, plugin) {
|
|
|
super(leaf);
|
|
|
this.plugin = plugin;
|
|
|
}
|
|
|
getDisplayText() {
|
|
|
return "RSS Feeds";
|
|
|
}
|
|
|
getViewType() {
|
|
|
return VIEW_ID;
|
|
|
}
|
|
|
getIcon() {
|
|
|
return "feather-rss";
|
|
|
}
|
|
|
onOpen() {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
this.feed = new FolderView({
|
|
|
target: this.contentEl,
|
|
|
props: {
|
|
|
plugin: this.plugin
|
|
|
},
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
onClose() {
|
|
|
if (this.feed) {
|
|
|
this.feed.$destroy();
|
|
|
}
|
|
|
return Promise.resolve();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
class RssReaderPlugin extends obsidian.Plugin {
|
|
|
onload() {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
console.log('loading plugin rss reader');
|
|
|
addFeatherIcon("rss");
|
|
|
addFeatherIcon("eye");
|
|
|
addFeatherIcon("eye-off");
|
|
|
addFeatherIcon("star");
|
|
|
addFeatherIcon("clipboard");
|
|
|
//update settings whenever store contents change.
|
|
|
this.register(settingsStore.subscribe((value) => {
|
|
|
this.settings = value;
|
|
|
}));
|
|
|
yield this.loadSettings();
|
|
|
this.addCommand({
|
|
|
id: "rss-open",
|
|
|
name: "Open",
|
|
|
checkCallback: (checking) => {
|
|
|
if (checking) {
|
|
|
return (this.app.workspace.getLeavesOfType(VIEW_ID).length === 0);
|
|
|
}
|
|
|
this.initLeaf();
|
|
|
}
|
|
|
});
|
|
|
/* parser not fully implemented
|
|
|
this.addCommand({
|
|
|
id: "rss-import",
|
|
|
name: "Import OPML",
|
|
|
callback: () => {
|
|
|
new ImportModal(this.app, this).open();
|
|
|
}
|
|
|
});*/
|
|
|
this.addCommand({
|
|
|
id: 'rss-refresh',
|
|
|
name: 'Refresh feeds',
|
|
|
callback: () => __awaiter(this, void 0, void 0, function* () {
|
|
|
yield this.updateFeeds();
|
|
|
})
|
|
|
});
|
|
|
this.registerView(VIEW_ID, (leaf) => new ViewLoader(leaf, this));
|
|
|
this.addSettingTab(new RSSReaderSettingsTab(this.app, this));
|
|
|
let interval;
|
|
|
if (this.settings.updateTime !== 0) {
|
|
|
interval = window.setInterval(() => __awaiter(this, void 0, void 0, function* () {
|
|
|
yield this.updateFeeds();
|
|
|
}), this.settings.updateTime * 60 * 1000);
|
|
|
this.registerInterval(interval);
|
|
|
}
|
|
|
//reset update timer on settings change.
|
|
|
settingsStore.subscribe((settings) => {
|
|
|
if (interval !== undefined)
|
|
|
clearInterval(interval);
|
|
|
if (settings.updateTime != 0) {
|
|
|
interval = window.setInterval(() => __awaiter(this, void 0, void 0, function* () {
|
|
|
yield this.updateFeeds();
|
|
|
}), settings.updateTime * 60 * 1000);
|
|
|
this.registerInterval(interval);
|
|
|
}
|
|
|
this.settings = settings;
|
|
|
this.saveSettings();
|
|
|
});
|
|
|
feedsStore.subscribe((feeds) => {
|
|
|
//keep sorted store sorted when the items change.
|
|
|
const sorted = lodash_groupby(feeds, "folder");
|
|
|
sortedFeedsStore.update(() => sorted);
|
|
|
let items = [];
|
|
|
for (const feed in Object.keys(feeds)) {
|
|
|
items = items.concat(feeds[feed].items);
|
|
|
}
|
|
|
this.filterItems(items);
|
|
|
});
|
|
|
this.app.workspace.onLayoutReady(() => __awaiter(this, void 0, void 0, function* () {
|
|
|
yield this.updateFeeds();
|
|
|
yield this.migrateData();
|
|
|
yield this.initLeaf();
|
|
|
}));
|
|
|
});
|
|
|
}
|
|
|
filterItems(items) {
|
|
|
const filtered = new Array();
|
|
|
for (const filter of this.settings.filtered) {
|
|
|
// @ts-ignore
|
|
|
const filterType = FilterType[filter.filterType];
|
|
|
// @ts-ignore
|
|
|
const sortOrder = SortOrder[filter.sortOrder];
|
|
|
let filteredItems;
|
|
|
if (filterType == FilterType.READ) {
|
|
|
filteredItems = items.filter((item) => {
|
|
|
return item.read && (filter.filterContent.split(",").contains(item.folder) || filter.filterContent.length == 0);
|
|
|
});
|
|
|
}
|
|
|
if (filterType == FilterType.FAVORITES) {
|
|
|
filteredItems = items.filter((item) => {
|
|
|
return item.favorite && (filter.filterContent.split(",").contains(item.folder) || filter.filterContent.length == 0);
|
|
|
});
|
|
|
}
|
|
|
if (filterType == FilterType.UNREAD) {
|
|
|
filteredItems = items.filter((item) => {
|
|
|
return !item.read && (filter.filterContent.split(",").contains(item.folder) || filter.filterContent.length == 0);
|
|
|
});
|
|
|
}
|
|
|
if (filterType == FilterType.TAGS) {
|
|
|
filteredItems = items.filter((item) => {
|
|
|
return item.tags.some((tag) => filter.filterContent.split(",").contains(tag));
|
|
|
});
|
|
|
}
|
|
|
const sortedItems = this.sortItems(filteredItems, sortOrder);
|
|
|
filtered.push({ filter: filter, items: { items: sortedItems } });
|
|
|
}
|
|
|
filteredItemsStore.update(() => filtered);
|
|
|
}
|
|
|
sortItems(items, sortOrder) {
|
|
|
if (sortOrder === SortOrder.ALPHABET_NORMAL) {
|
|
|
return items.sort((a, b) => a.title.localeCompare(b.title));
|
|
|
}
|
|
|
if (sortOrder === SortOrder.ALPHABET_INVERTED) {
|
|
|
return items.sort((a, b) => b.title.localeCompare(a.title));
|
|
|
}
|
|
|
if (sortOrder === SortOrder.DATE_NEWEST) {
|
|
|
//@ts-ignore
|
|
|
return items.sort((a, b) => window.moment(b.pubDate) - window.moment(a.pubDate));
|
|
|
}
|
|
|
if (sortOrder === SortOrder.DATE_OLDEST) {
|
|
|
//@ts-ignore
|
|
|
return items.sort((a, b) => window.moment(a.pubDate) - window.moment(b.pubDate));
|
|
|
}
|
|
|
return items;
|
|
|
}
|
|
|
updateFeeds() {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
let result = [];
|
|
|
for (const feed of this.settings.feeds) {
|
|
|
const items = yield getFeedItems(feed);
|
|
|
result.push(items);
|
|
|
}
|
|
|
result = Object.assign({}, result, this.settings.items);
|
|
|
yield this.writeFeedContent(() => result);
|
|
|
});
|
|
|
}
|
|
|
onunload() {
|
|
|
console.log('unloading plugin rss reader');
|
|
|
this.app.workspace
|
|
|
.getLeavesOfType(VIEW_ID)
|
|
|
.forEach((leaf) => leaf.detach());
|
|
|
}
|
|
|
initLeaf() {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
if (this.app.workspace.getLeavesOfType(VIEW_ID).length > 0) {
|
|
|
return;
|
|
|
}
|
|
|
yield this.app.workspace.getRightLeaf(false).setViewState({
|
|
|
type: VIEW_ID,
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
//migrate from old settings pre 0.6.0
|
|
|
migrateData() {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
const configPath = this.app.vault.configDir + "/plugins/rss-reader/data.json";
|
|
|
const config = JSON.parse(yield this.app.vault.adapter.read(configPath));
|
|
|
if (config.read === undefined)
|
|
|
return;
|
|
|
new obsidian.Notice("RSS Reader: migrating data");
|
|
|
for (const content of Object.values(config.items)) {
|
|
|
// @ts-ignore
|
|
|
for (const item of content.items) {
|
|
|
if (config.read.items.some((readItem) => {
|
|
|
return item.title == readItem.title && item.link == readItem.link && item.content == readItem.content;
|
|
|
})) {
|
|
|
item.read = true;
|
|
|
}
|
|
|
}
|
|
|
// @ts-ignore
|
|
|
for (const item of content.items) {
|
|
|
if (config.favorites.items.some((favItem) => {
|
|
|
return item.title == favItem.title && item.link == favItem.link && item.content == favItem.content;
|
|
|
})) {
|
|
|
item.favorite = true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
delete config.read;
|
|
|
delete config.favorites;
|
|
|
yield this.app.vault.adapter.write(configPath, JSON.stringify(config));
|
|
|
yield this.loadSettings();
|
|
|
new obsidian.Notice("RSS Reader: data has been migrated");
|
|
|
});
|
|
|
}
|
|
|
loadSettings() {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
this.settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData());
|
|
|
settingsStore.set(this.settings);
|
|
|
configuredFeedsStore.set(this.settings.feeds);
|
|
|
feedsStore.set(this.settings.items);
|
|
|
});
|
|
|
}
|
|
|
saveSettings() {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
yield this.saveData(this.settings);
|
|
|
});
|
|
|
}
|
|
|
writeFeeds(changeOpts) {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
yield configuredFeedsStore.update((old) => (Object.assign(Object.assign({}, old), changeOpts(old))));
|
|
|
yield this.writeSettings((old) => ({
|
|
|
feeds: changeOpts(old.feeds)
|
|
|
}));
|
|
|
yield this.updateFeeds();
|
|
|
});
|
|
|
}
|
|
|
writeFeedContent(changeOpts) {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
yield feedsStore.update((old) => (Object.assign(Object.assign({}, old), changeOpts(old))));
|
|
|
yield this.writeSettings((old) => ({
|
|
|
items: changeOpts(old.items)
|
|
|
}));
|
|
|
});
|
|
|
}
|
|
|
writeFiltered(changeOpts) {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
yield filteredStore.update((old) => (Object.assign(Object.assign({}, old), changeOpts(old))));
|
|
|
yield this.writeSettings((old) => ({
|
|
|
filtered: changeOpts(old.filtered)
|
|
|
}));
|
|
|
yield this.updateFeeds();
|
|
|
});
|
|
|
}
|
|
|
writeSettings(changeOpts) {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
yield settingsStore.update((old) => (Object.assign(Object.assign({}, old), changeOpts(old))));
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
|
|
|
module.exports = RssReaderPlugin;
|
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsInNyYy9wYXJzZXIvcnNzUGFyc2VyLnRzIiwic3JjL2NvbnN0cy50cyIsInNyYy9tb2RhbHMvQmFzZU1vZGFsLnRzIiwic3JjL21vZGFscy9GZWVkTW9kYWwudHMiLCJub2RlX21vZHVsZXMvbG9kYXNoLmdyb3VwYnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2VudW1zLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZU5hbWUuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3cuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXBwbHlTdHlsZXMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvY29udGFpbnMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNUYWJsZUVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRQYXJlbnROb2RlLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21hdGguanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3dpdGhpbi5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0RnJlc2hTaWRlT2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9tZXJnZVBhZGRpbmdPYmplY3QuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2Fycm93LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRWYXJpYXRpb24uanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvd1Njcm9sbC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvd1Njcm9sbEJhclguanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRWaWV3cG9ydFJlY3QuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXREb2N1bWVudFJlY3QuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1Njcm9sbFBhcmVudC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFNjcm9sbFBhcmVudC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9yZWN0VG9DbGllbnRSZWN0LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q2xpcHBpbmdSZWN0LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9jb21wdXRlT2Zmc2V0cy5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvZmxpcC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2hpZGUuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9vZmZzZXQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRBbHRBeGlzLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0SFRNTEVsZW1lbnRTY3JvbGwuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlU2Nyb2xsLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q29tcG9zaXRlUmVjdC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvb3JkZXJNb2RpZmllcnMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2RlYm91bmNlLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9mb3JtYXQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3ZhbGlkYXRlTW9kaWZpZXJzLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy91bmlxdWVCeS5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VCeU5hbWUuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2NyZWF0ZVBvcHBlci5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLmpzIiwic3JjL3NldHRpbmdzL3N1Z2dlc3QudHMiLCJzcmMvc2V0dGluZ3MvRm9sZGVyU3VnZ2VzdG9yLnRzIiwic3JjL21vZGFscy9GaWx0ZXJlZEZvbGRlck1vZGFsLnRzIiwic3JjL3NldHRpbmdzL3NldHRpbmdzLnRzIiwibm9kZV9tb2R1bGVzL3N2ZWx0ZS9pbnRlcm5hbC9pbmRleC5tanMiLCJub2RlX21vZHVsZXMvc3ZlbHRlL3N0b3JlL2luZGV4Lm1qcyIsInNyYy9zdG9yZXMudHMiLCJzcmMvdmlldy9JY29uQ29tcG9uZW50LnN2ZWx0ZSIsInNyYy9tb2RhbHMvVGV4dElucHV0UHJvbXB0LnRzIiwibm9kZV9tb2R1bGVzL2ZlYXRoZXItaWNvbnMvZGlzdC9mZWF0aGVyLmpzIiwibm9kZV9tb2R1bGVzL29ic2lkaWFuLWNvbW11bml0eS1saWIvZGlzdC91dGlscy5qcyIsInNyYy9mdW5jdGlvbnMudHMiLCJzcmMvbW9kYWxzL1RhZ01vZGFsLnRzIiwic3JjL2FjdGlvbnMvQWN0aW9uLnRzIiwic3JjL21vZGFscy9JdGVtTW9kYWwudHMiLCJzcmMvdmlldy9IdG1sVG9vbHRpcC5zdmVsdGUiLCJzcmMvdmlldy9JdGVtVmlldy5zdmVsdGUiLCJzcmMvdmlldy9GZWVkVmlldy5zdmVsdGUiLCJzcmMvdmlldy9Gb2xkZXJWaWV3LnN2ZWx0ZSIsInNyYy92aWV3L1ZpZXdMb2FkZXIudHMiLCJzcmMvbWFpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6bnVsbCwibmFtZXMiOlsicmVxdWVzdCIsIk1vZGFsIiwiU2V0dGluZyIsIk5vdGljZSIsImdsb2JhbCIsImVmZmVjdCIsIm1pbiIsIm1heCIsIm1hdGhNYXgiLCJtYXRoTWluIiwiaGFzaCIsImFsbFBsYWNlbWVudHMiLCJwbGFjZW1lbnRzIiwicG9wcGVyT2Zmc2V0cyIsImNvbXB1dGVTdHlsZXMiLCJhcHBseVN0eWxlcyIsIm9mZnNldCIsImZsaXAiLCJwcmV2ZW50T3ZlcmZsb3ciLCJhcnJvdyIsImhpZGUiLCJTY29wZSIsIlRGb2xkZXIiLCJQbHVnaW5TZXR0aW5nVGFiIiwiZ3JvdXBCeSIsInRoaXMiLCJmZWF0aGVyLmljb25zIiwiYWRkSWNvbiIsIm5vcm1hbGl6ZVBhdGgiLCJNYXJrZG93blZpZXciLCJodG1sVG9NYXJrZG93biIsIkJ1dHRvbkNvbXBvbmVudCIsIkl0ZW1WaWV3IiwiTGlz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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsWUFBWSxDQUFDLEdBQUcsRUFBRTtBQUMzQixFQUFFLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRO0FBQzFCLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEM7QUFDQSxFQUFFLE9BQU8sS0FBSyxHQUFHLENBQUMsR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsWUFBWSxDQUFDLEdBQUcsRUFBRTtBQUMzQixFQUFFLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLFlBQVksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFO0FBQ2xDLEVBQUUsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVE7QUFDMUIsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0QztBQUNBLEVBQUUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQ2pCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzVCLEdBQUcsTUFBTTtBQUNULElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMzQixHQUFHO0FBQ0gsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFDRDtBQUNBO0FBQ0EsU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFL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QUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLFFBQVEsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsRUFBRSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDaEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzFDO0FBQ0EsRUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDO0FBQy9CLEVBQUUsT0FBTyxFQUFFLEtBQUssR0FBRyxNQUFNLEVBQUU7QUFDM0IsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzVCLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsV0FBVyxDQUFDLEtBQUssRUFBRTtBQUM1QixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztBQUMzQyxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxXQUFXLENBQUMsS0FBSyxFQUFFO0FBQzVCLEVBQUUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBQ0Q7QUFDQTtBQUNBLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQztBQUMvRCxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsS0FBSyxDQUFDLE9BQU8sRUFBRTtBQUN4QixFQUFFLElB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUU7QUFDekMsRUFBRSxJQUFJLE1BQU0sR0FBRyxNQUFNLElBQUksSUFBSSxHQUFHLFNBQVMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xFLEVBQUUsT0FBTyxNQUFNLEtBQUssU0FBUyxHQUFHLFlBQVksR0FBRyxNQUFNLENBQUM7QUFDdEQsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUU7QUFDN0IsRUFBRSxPQUFPLE1BQU0sSUFBSSxJQUFJLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDdEIsRUFBRSxPQUFPLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hFLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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LGFBQWEsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxD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
|